Explorar el Código

Localize hardcoded UI strings, separators, and accessibility labels.

Wire up remaining .localized calls for splash progress, browser reload, paywall formatting, and VoiceOver strings across all 22 locales.

Co-authored-by: Cursor <cursoragent@cursor.com>
AhtashamShahzad1 hace 1 mes
padre
commit
c18ca722f7

+ 4 - 4
meetings_app/LaunchSplashView.swift

@@ -21,7 +21,7 @@ final class LaunchSplashView: NSView {
     private let loadingTrackView = NSView()
     private let loadingFillView = NSView()
     private let statusLabel = NSTextField(labelWithString: "CONNECTING SERVICES".localized)
-    private let percentLabel = NSTextField(labelWithString: "0%")
+    private let percentLabel = NSTextField(labelWithString: "%d%%".localized(with: 0))
     private let taglineLabel = NSTextField(labelWithString: "Plan smart, achieve more".localized)
     private var loadingFillWidthConstraint: NSLayoutConstraint?
     private var textAnimationTimer: Timer?
@@ -49,7 +49,7 @@ final class LaunchSplashView: NSView {
     func completeLoading(duration: TimeInterval = 0.22, completion: (() -> Void)? = nil) {
         stopAnimations()
         progressValue = 100
-        percentLabel.stringValue = "100%"
+        percentLabel.stringValue = "%d%%".localized(with: 100)
         statusLabel.stringValue = "READY".localized
         updateLoadingFill(for: 100)
         layoutSubtreeIfNeeded()
@@ -170,7 +170,7 @@ final class LaunchSplashView: NSView {
         textAnimationFrame = 0
         progressValue = 0
         updateLoadingFill(for: progressValue)
-        percentLabel.stringValue = "0%"
+        percentLabel.stringValue = "%d%%".localized(with: 0)
 
         textAnimationTimer = Timer.scheduledTimer(withTimeInterval: 0.42, repeats: true) { [weak self] _ in
             self?.updateAnimatedText()
@@ -202,7 +202,7 @@ final class LaunchSplashView: NSView {
         let next = min(progressValue + 0.8, 100)
         progressValue = next
         updateLoadingFill(for: next)
-        percentLabel.stringValue = "\(Int(next.rounded()))%"
+        percentLabel.stringValue = "%d%%".localized(with: Int(next.rounded()))
     }
 
     private func updateLoadingFill(for percent: Double) {

+ 8 - 8
meetings_app/ViewController.swift

@@ -2501,7 +2501,7 @@ private extension ViewController {
             }
             let recurringText = "\(localizedDisplayPrice(product.displayPrice))/\(subscriptionUnitText(period.unit))"
             if let trialText = freeTrialPackageText(for: product) {
-                label.stringValue = "\(recurringText)  •  \(trialText)"
+                label.stringValue = "%@  •  %@".localized(with: recurringText, trialText)
             } else {
                 label.stringValue = recurringText
             }
@@ -5496,7 +5496,7 @@ private extension ViewController {
         refreshButton.layer?.borderWidth = 1
         refreshButton.setButtonType(.momentaryChange)
         refreshButton.contentTintColor = palette.textSecondary
-        refreshButton.image = NSImage(systemSymbolName: "arrow.clockwise", accessibilityDescription: "Sync calendar")
+        refreshButton.image = NSImage(systemSymbolName: "arrow.clockwise", accessibilityDescription: "Sync calendar".localized)
         refreshButton.symbolConfiguration = NSImage.SymbolConfiguration(pointSize: 14, weight: .semibold)
         refreshButton.imagePosition = .imageOnly
         refreshButton.imageScaling = .scaleProportionallyDown
@@ -7031,7 +7031,7 @@ private extension ViewController {
 
     private func makeScheduleRefreshButton(
         action: Selector = #selector(scheduleReloadButtonPressed(_:)),
-        accessibilityDescription: String = "Refresh meetings"
+        accessibilityDescription: String = "Refresh meetings".localized
     ) -> NSButton {
         let diameter: CGFloat = 30
         let button = HoverButton(title: "", target: self, action: action)
@@ -7291,7 +7291,7 @@ private extension ViewController {
         button.layer?.backgroundColor = palette.inputBackground.cgColor
         button.layer?.borderColor = palette.inputBorder.cgColor
         button.layer?.borderWidth = 1
-        button.image = NSImage(systemSymbolName: systemSymbol, accessibilityDescription: "Scroll meetings")
+        button.image = NSImage(systemSymbolName: systemSymbol, accessibilityDescription: "Scroll meetings".localized)
         button.symbolConfiguration = NSImage.SymbolConfiguration(pointSize: 13, weight: .semibold)
         button.imagePosition = .imageOnly
         button.imageScaling = .scaleProportionallyDown
@@ -9971,7 +9971,7 @@ private extension ViewController {
             return WidgetMeetingSnapshot(
                 id: meeting.id,
                 title: meeting.title,
-                timeText: "\(formatter.string(from: meeting.startDate)) - \(endText)",
+                timeText: "%@ - %@".localized(with: formatter.string(from: meeting.startDate), endText),
                 joinLink: meeting.meetURL.absoluteString
             )
         }
@@ -10126,7 +10126,7 @@ private extension ViewController {
             scheduleGoogleAuthButtonWidthConstraint?.constant = scheduleGoogleSignedInAvatarSize
             button.layer?.cornerRadius = scheduleGoogleSignedInAvatarSize / 2
 
-            let symbol = NSImage(systemSymbolName: "person.crop.circle.fill", accessibilityDescription: "Profile")
+            let symbol = NSImage(systemSymbolName: "person.crop.circle.fill", accessibilityDescription: "Profile".localized)
             if let symbol {
                 let sized = resizedImage(symbol, to: NSSize(width: scheduleGoogleSignedInAvatarSize, height: scheduleGoogleSignedInAvatarSize))
                 button.image = sized
@@ -10684,12 +10684,12 @@ private final class InAppBrowserContainerViewController: NSViewController, WKNav
                 reloadStopButton.title = "Stop".localized
             }
         } else {
-            if #available(macOS 11.0, *), let img = NSImage(systemSymbolName: "arrow.clockwise", accessibilityDescription: "Reload") {
+            if #available(macOS 11.0, *), let img = NSImage(systemSymbolName: "arrow.clockwise", accessibilityDescription: "Reload".localized) {
                 reloadStopButton.image = img
                 reloadStopButton.imagePosition = .imageOnly
                 reloadStopButton.title = ""
             } else {
-                reloadStopButton.title = "Reload"
+                reloadStopButton.title = "Reload".localized
             }
         }
         syncProgressFromWebView()

+ 5 - 0
meetings_app/ar.lproj/Localizable.strings

@@ -46,6 +46,7 @@
 "CONNECTING SERVICES" = "جاري توصيل الخدمات";
 "READY" = "جاهز";
 "Plan smart, achieve more" = "خطط بذكاء، حقق المزيد";
+"%d%%" = "%d%%";
 
 /* MARK: - الودجات */
 "Add Widget to Desktop" = "إضافة ودجة إلى سطح المكتب";
@@ -416,6 +417,10 @@
 "Back" = "رجوع";
 "Forward" = "تقدم";
 "Reload" = "إعادة تحميل";
+"Profile" = "الملف الشخصي";
+"Scroll meetings" = "تمرير الاجتماعات";
+"Refresh meetings" = "تحديث الاجتماعات";
+"Sync calendar" = "مزامنة التقويم";
 
 /* MARK: - تسميات التقويم والجدولة */
 "Google Calendar" = "تقويم جوجل";

+ 5 - 0
meetings_app/de.lproj/Localizable.strings

@@ -46,6 +46,7 @@
 "CONNECTING SERVICES" = "DIENSTE WERDEN VERBUNDEN";
 "READY" = "BEREIT";
 "Plan smart, achieve more" = "Intelligent planen, mehr erreichen";
+"%d%%" = "%d %%";
 
 /* MARK: - Widgets */
 "Add Widget to Desktop" = "Widget zum Desktop hinzufügen";
@@ -416,6 +417,10 @@
 "Back" = "Zurück";
 "Forward" = "Vor";
 "Reload" = "Neu laden";
+"Profile" = "Profil";
+"Scroll meetings" = "Besprechungen scrollen";
+"Refresh meetings" = "Besprechungen aktualisieren";
+"Sync calendar" = "Kalender synchronisieren";
 
 /* MARK: - Planungs- und Kalenderbezeichnungen */
 "Google Calendar" = "Google Kalender";

+ 5 - 0
meetings_app/el.lproj/Localizable.strings

@@ -46,6 +46,7 @@
 "CONNECTING SERVICES" = "ΣΥΝΔΕΣΗ ΥΠΗΡΕΣΙΩΝ";
 "READY" = "ΕΤΟΙΜΟ";
 "Plan smart, achieve more" = "Έξυπνος σχεδιασμός, περισσότερα επιτεύγματα";
+"%d%%" = "%d%%";
 
 /* MARK: - Widgets */
 "Add Widget to Desktop" = "Προσθήκη widget στην επιφάνεια εργασίας";
@@ -416,6 +417,10 @@
 "Back" = "Πίσω";
 "Forward" = "Μπροστά";
 "Reload" = "Ανανέωση";
+"Profile" = "Προφίλ";
+"Scroll meetings" = "Κύλιση συσκέψεων";
+"Refresh meetings" = "Ανανέωση συσκέψεων";
+"Sync calendar" = "Συγχρονισμός ημερολογίου";
 
 /* MARK: - Ετικέτες προγραμματισμού και ημερολογίου */
 "Google Calendar" = "Ημερολόγιο Γκουγκλ";

+ 5 - 0
meetings_app/en.lproj/Localizable.strings

@@ -46,6 +46,7 @@
 "CONNECTING SERVICES" = "CONNECTING SERVICES";
 "READY" = "READY";
 "Plan smart, achieve more" = "Plan smart, achieve more";
+"%d%%" = "%d%%";
 
 /* MARK: - Widgets */
 "Add Widget to Desktop" = "Add Widget to Desktop";
@@ -415,6 +416,10 @@
 "Back" = "Back";
 "Forward" = "Forward";
 "Reload" = "Reload";
+"Sync calendar" = "Sync calendar";
+"Refresh meetings" = "Refresh meetings";
+"Scroll meetings" = "Scroll meetings";
+"Profile" = "Profile";
 
 /* MARK: - Schedule & calendar labels */
 "Google Calendar" = "Google Calendar";

+ 5 - 0
meetings_app/es-ES.lproj/Localizable.strings

@@ -46,6 +46,7 @@
 "CONNECTING SERVICES" = "CONECTANDO SERVICIOS";
 "READY" = "LISTO";
 "Plan smart, achieve more" = "Planifica con inteligencia, consigue más";
+"%d%%" = "%d %%";
 
 /* MARK: - Widgets */
 "Add Widget to Desktop" = "Añadir widget al escritorio";
@@ -416,6 +417,10 @@
 "Back" = "Atrás";
 "Forward" = "Adelante";
 "Reload" = "Recargar";
+"Profile" = "Perfil";
+"Scroll meetings" = "Desplazar reuniones";
+"Refresh meetings" = "Actualizar reuniones";
+"Sync calendar" = "Sincronizar calendario";
 
 /* MARK: - Etiquetas de calendario y programación */
 "Google Calendar" = "Calendario de Google";

+ 5 - 0
meetings_app/es-MX.lproj/Localizable.strings

@@ -46,6 +46,7 @@
 "CONNECTING SERVICES" = "CONECTANDO SERVICIOS";
 "READY" = "LISTO";
 "Plan smart, achieve more" = "Planifica inteligentemente, logra más";
+"%d%%" = "%d %%";
 
 /* MARK: - Widgets */
 "Add Widget to Desktop" = "Agregar widget al escritorio";
@@ -416,6 +417,10 @@
 "Back" = "Atrás";
 "Forward" = "Adelante";
 "Reload" = "Recargar";
+"Profile" = "Perfil";
+"Scroll meetings" = "Desplazar reuniones";
+"Refresh meetings" = "Actualizar reuniones";
+"Sync calendar" = "Sincronizar calendario";
 
 /* MARK: - Etiquetas de calendario y agendamiento */
 "Google Calendar" = "Calendario de Google";

+ 5 - 0
meetings_app/fi.lproj/Localizable.strings

@@ -46,6 +46,7 @@
 "CONNECTING SERVICES" = "YHDISTETÄÄN PALVELUITA";
 "READY" = "VALMIS";
 "Plan smart, achieve more" = "Suunnittele fiksusti, saavuta enemmän";
+"%d%%" = "%d %%";
 
 /* MARK: - Widgetit */
 "Add Widget to Desktop" = "Lisää widget työpöydälle";
@@ -416,6 +417,10 @@
 "Back" = "Takaisin";
 "Forward" = "Eteenpäin";
 "Reload" = "Päivitä";
+"Profile" = "Profiili";
+"Scroll meetings" = "Vieritä kokouksia";
+"Refresh meetings" = "Päivitä kokoukset";
+"Sync calendar" = "Synkronoi kalenteri";
 
 /* MARK: - Kalenteri- ja aikataulutusmerkinnät */
 "Google Calendar" = "Google Kalenteri";

+ 5 - 0
meetings_app/fr-CA.lproj/Localizable.strings

@@ -46,6 +46,7 @@
 "CONNECTING SERVICES" = "CONNEXION DES SERVICES";
 "READY" = "PRÊT";
 "Plan smart, achieve more" = "Planifiez intelligemment, accomplissez plus";
+"%d%%" = "%d %%";
 
 /* MARK: - Widgets */
 "Add Widget to Desktop" = "Ajouter un widget au bureau";
@@ -416,6 +417,10 @@
 "Back" = "Précédent";
 "Forward" = "Suivant";
 "Reload" = "Recharger";
+"Profile" = "Profil";
+"Scroll meetings" = "Faire défiler les réunions";
+"Refresh meetings" = "Actualiser les réunions";
+"Sync calendar" = "Synchroniser l'agenda";
 
 /* MARK: - Libellés du calendrier et de la planification */
 "Google Calendar" = "Agenda Google";

+ 5 - 0
meetings_app/fr.lproj/Localizable.strings

@@ -46,6 +46,7 @@
 "CONNECTING SERVICES" = "CONNEXION DES SERVICES";
 "READY" = "PRÊT";
 "Plan smart, achieve more" = "Planifiez intelligemment, accomplissez plus";
+"%d%%" = "%d %%";
 
 /* MARK: - Widgets */
 "Add Widget to Desktop" = "Ajouter un widget au bureau";
@@ -416,6 +417,10 @@
 "Back" = "Précédent";
 "Forward" = "Suivant";
 "Reload" = "Recharger";
+"Profile" = "Profil";
+"Scroll meetings" = "Faire défiler les réunions";
+"Refresh meetings" = "Actualiser les réunions";
+"Sync calendar" = "Synchroniser l'agenda";
 
 /* MARK: - Libellés du calendrier et de la programmation */
 "Google Calendar" = "Agenda Google";

+ 5 - 0
meetings_app/he.lproj/Localizable.strings

@@ -46,6 +46,7 @@
 "CONNECTING SERVICES" = "מתחבר לשירותים";
 "READY" = "מוכן";
 "Plan smart, achieve more" = "תכנן בחוכמה, השג יותר";
+"%d%%" = "%d%%";
 
 /* MARK: - ווידג'טים */
 "Add Widget to Desktop" = "הוסף ווידג'ט לשולחן העבודה";
@@ -416,6 +417,10 @@
 "Back" = "אחורה";
 "Forward" = "קדימה";
 "Reload" = "רענן";
+"Profile" = "פרופיל";
+"Scroll meetings" = "גלול פגישות";
+"Refresh meetings" = "רענן פגישות";
+"Sync calendar" = "סנכרן יומן";
 
 /* MARK: - תוויות יומן ותזמון */
 "Google Calendar" = "יומן גוגל";

+ 5 - 0
meetings_app/it.lproj/Localizable.strings

@@ -46,6 +46,7 @@
 "CONNECTING SERVICES" = "COLLEGAMENTO SERVIZI";
 "READY" = "PRONTO";
 "Plan smart, achieve more" = "Pianifica in modo intelligente, ottieni di più";
+"%d%%" = "%d%%";
 
 /* MARK: - Widget */
 "Add Widget to Desktop" = "Aggiungi widget al desktop";
@@ -416,6 +417,10 @@
 "Back" = "Indietro";
 "Forward" = "Avanti";
 "Reload" = "Ricarica";
+"Profile" = "Profilo";
+"Scroll meetings" = "Scorri riunioni";
+"Refresh meetings" = "Aggiorna riunioni";
+"Sync calendar" = "Sincronizza calendario";
 
 /* MARK: - Etichette calendario e pianificazione */
 "Google Calendar" = "Calendario di Google";

+ 5 - 0
meetings_app/ko.lproj/Localizable.strings

@@ -46,6 +46,7 @@
 "CONNECTING SERVICES" = "서비스 연결 중";
 "READY" = "준비됨";
 "Plan smart, achieve more" = "스마트하게 계획하고 더 많이 달성하세요";
+"%d%%" = "%d%%";
 
 /* MARK: - 위젯 */
 "Add Widget to Desktop" = "데스크탑에 위젯 추가";
@@ -416,6 +417,10 @@
 "Back" = "뒤로";
 "Forward" = "앞으로";
 "Reload" = "새로고침";
+"Profile" = "프로필";
+"Scroll meetings" = "회의 스크롤";
+"Refresh meetings" = "회의 새로고침";
+"Sync calendar" = "캘린더 동기화";
 
 /* MARK: - 일정 및 달력 레이블 */
 "Google Calendar" = "구글 달력";

+ 5 - 0
meetings_app/nb.lproj/Localizable.strings

@@ -46,6 +46,7 @@
 "CONNECTING SERVICES" = "KOBLER TIL TJENESTER";
 "READY" = "KLAR";
 "Plan smart, achieve more" = "Planlegg smart, oppnå mer";
+"%d%%" = "%d %%";
 
 /* MARK: - Widgeter */
 "Add Widget to Desktop" = "Legg til widget på skrivebordet";
@@ -416,6 +417,10 @@
 "Back" = "Tilbake";
 "Forward" = "Frem";
 "Reload" = "Last inn på nytt";
+"Profile" = "Profil";
+"Scroll meetings" = "Bla i møter";
+"Refresh meetings" = "Oppdater møter";
+"Sync calendar" = "Synkroniser kalender";
 
 /* MARK: - Kalender- og planleggingsetiketter */
 "Google Calendar" = "Googles kalender";

+ 5 - 0
meetings_app/nl.lproj/Localizable.strings

@@ -46,6 +46,7 @@
 "CONNECTING SERVICES" = "DIENSTEN VERBINDEN";
 "READY" = "GEREED";
 "Plan smart, achieve more" = "Slim plannen, meer bereiken";
+"%d%%" = "%d%%";
 
 /* MARK: - Widgets */
 "Add Widget to Desktop" = "Widget aan bureaublad toevoegen";
@@ -416,6 +417,10 @@
 "Back" = "Terug";
 "Forward" = "Vooruit";
 "Reload" = "Vernieuwen";
+"Profile" = "Profiel";
+"Scroll meetings" = "Vergaderingen scrollen";
+"Refresh meetings" = "Vergaderingen vernieuwen";
+"Sync calendar" = "Agenda synchroniseren";
 
 /* MARK: - Agenda- en planningslabels */
 "Google Calendar" = "Google Agenda";

+ 5 - 0
meetings_app/pl.lproj/Localizable.strings

@@ -46,6 +46,7 @@
 "CONNECTING SERVICES" = "ŁĄCZENIE USŁUG";
 "READY" = "GOTOWE";
 "Plan smart, achieve more" = "Planuj mądrze, osiągaj więcej";
+"%d%%" = "%d%%";
 
 /* MARK: - Widżety */
 "Add Widget to Desktop" = "Dodaj widżet na pulpit";
@@ -416,6 +417,10 @@
 "Back" = "Wstecz";
 "Forward" = "Do przodu";
 "Reload" = "Odśwież";
+"Profile" = "Profil";
+"Scroll meetings" = "Przewiń spotkania";
+"Refresh meetings" = "Odśwież spotkania";
+"Sync calendar" = "Synchronizuj kalendarz";
 
 /* MARK: - Etykiety kalendarza i harmonogramu */
 "Google Calendar" = "Kalendarz Googla";

+ 5 - 0
meetings_app/pt-BR.lproj/Localizable.strings

@@ -46,6 +46,7 @@
 "CONNECTING SERVICES" = "CONECTANDO SERVIÇOS";
 "READY" = "PRONTO";
 "Plan smart, achieve more" = "Planeje de forma inteligente, alcance mais";
+"%d%%" = "%d%%";
 
 /* MARK: - Widgets */
 "Add Widget to Desktop" = "Adicionar widget à área de trabalho";
@@ -416,6 +417,10 @@
 "Back" = "Voltar";
 "Forward" = "Avançar";
 "Reload" = "Recarregar";
+"Profile" = "Perfil";
+"Scroll meetings" = "Rolar reuniões";
+"Refresh meetings" = "Atualizar reuniões";
+"Sync calendar" = "Sincronizar calendário";
 
 /* MARK: - Schedule & calendar labels */
 "Google Calendar" = "Calendário do Google";

+ 5 - 0
meetings_app/ru.lproj/Localizable.strings

@@ -46,6 +46,7 @@
 "CONNECTING SERVICES" = "ПОДКЛЮЧЕНИЕ СЕРВИСОВ";
 "READY" = "ГОТОВО";
 "Plan smart, achieve more" = "Планируйте с умом, достигайте большего";
+"%d%%" = "%d %%";
 
 /* MARK: - Виджеты */
 "Add Widget to Desktop" = "Добавить виджет на рабочий стол";
@@ -416,6 +417,10 @@
 "Back" = "Назад";
 "Forward" = "Вперед";
 "Reload" = "Перезагрузить";
+"Profile" = "Профиль";
+"Scroll meetings" = "Прокрутить встречи";
+"Refresh meetings" = "Обновить встречи";
+"Sync calendar" = "Синхронизировать календарь";
 
 /* MARK: - Метки расписания и календаря */
 "Google Calendar" = "Календарь Гугл";

+ 5 - 0
meetings_app/sv.lproj/Localizable.strings

@@ -46,6 +46,7 @@
 "CONNECTING SERVICES" = "ANSLUTER TJÄNSTER";
 "READY" = "REDO";
 "Plan smart, achieve more" = "Planera smart, uppnå mer";
+"%d%%" = "%d %%";
 
 /* MARK: - Widgetar */
 "Add Widget to Desktop" = "Lägg till widget på skrivbordet";
@@ -416,6 +417,10 @@
 "Back" = "Tillbaka";
 "Forward" = "Framåt";
 "Reload" = "Ladda om";
+"Profile" = "Profil";
+"Scroll meetings" = "Scrolla möten";
+"Refresh meetings" = "Uppdatera möten";
+"Sync calendar" = "Synkronisera kalender";
 
 /* MARK: - Etiketter för schemaläggning och kalender */
 "Google Calendar" = "Google-kalender";

+ 5 - 0
meetings_app/uk.lproj/Localizable.strings

@@ -46,6 +46,7 @@
 "CONNECTING SERVICES" = "ПІДКЛЮЧЕННЯ СЕРВІСІВ";
 "READY" = "ГОТОВО";
 "Plan smart, achieve more" = "Плануй розумно, досягай більшого";
+"%d%%" = "%d %%";
 
 /* MARK: - Віджети */
 "Add Widget to Desktop" = "Додати віджет на робочий стіл";
@@ -416,6 +417,10 @@
 "Back" = "Назад";
 "Forward" = "Вперед";
 "Reload" = "Перезавантажити";
+"Profile" = "Профіль";
+"Scroll meetings" = "Прокрутити зустрічі";
+"Refresh meetings" = "Оновити зустрічі";
+"Sync calendar" = "Синхронізувати календар";
 
 /* MARK: - Мітки календаря та планування */
 "Google Calendar" = "Календар Гугл";

+ 6 - 1
meetings_app/vi.lproj/Localizable.strings

@@ -46,6 +46,7 @@
 "CONNECTING SERVICES" = "ĐANG KẾT NỐI DỊCH VỤ";
 "READY" = "SẴN SÀNG";
 "Plan smart, achieve more" = "Lên kế hoạch thông minh, đạt được nhiều hơn";
+"%d%%" = "%d%%";
 
 /* MARK: - Widget */
 "Add Widget to Desktop" = "Thêm widget vào màn hình nền";
@@ -416,9 +417,13 @@
 "Back" = "Quay lại";
 "Forward" = "Tiến";
 "Reload" = "Tải lại";
+"Profile" = "Hồ sơ";
+"Scroll meetings" = "Cuộn danh sách cuộc họp";
+"Refresh meetings" = "Làm mới cuộc họp";
+"Sync calendar" = "Đồng bộ lịch";
 
 /* MARK: - Nhãn lịch và lên lịch */
-"Google Calendar" = "Google Calendar";
+"Google Calendar" = "Lịch Google";
 "Untitled meeting" = "Cuộc họp không tiêu đề";
 "Created event missing start/end." = "Sự kiện đã tạo thiếu thời gian bắt đầu/kết thúc.";
 "Created event missing Meet/HTML link." = "Sự kiện đã tạo thiếu liên kết Google Meet/HTML.";

+ 5 - 0
meetings_app/zh-Hans.lproj/Localizable.strings

@@ -46,6 +46,7 @@
 "CONNECTING SERVICES" = "正在连接服务";
 "READY" = "就绪";
 "Plan smart, achieve more" = "智能规划,成就更多";
+"%d%%" = "%d%%";
 
 /* MARK: - 小组件 */
 "Add Widget to Desktop" = "添加小组件到桌面";
@@ -416,6 +417,10 @@
 "Back" = "返回";
 "Forward" = "前进";
 "Reload" = "重新加载";
+"Profile" = "个人资料";
+"Scroll meetings" = "滚动会议列表";
+"Refresh meetings" = "刷新会议";
+"Sync calendar" = "同步日历";
 
 /* MARK: - 日程安排与日历标签 */
 "Google Calendar" = "谷歌日历";

+ 5 - 0
meetings_app/zh-Hant.lproj/Localizable.strings

@@ -46,6 +46,7 @@
 "CONNECTING SERVICES" = "正在連接服務";
 "READY" = "就緒";
 "Plan smart, achieve more" = "智慧規劃,成就更多";
+"%d%%" = "%d%%";
 
 /* MARK: - 小工具 */
 "Add Widget to Desktop" = "加入小工具到桌面";
@@ -416,6 +417,10 @@
 "Back" = "返回";
 "Forward" = "前進";
 "Reload" = "重新整理";
+"Profile" = "個人檔案";
+"Scroll meetings" = "捲動會議列表";
+"Refresh meetings" = "重新整理會議";
+"Sync calendar" = "同步日曆";
 
 /* MARK: - 日程安排與日曆標籤 */
 "Google Calendar" = "谷歌日曆";