Forráskód Böngészése

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 1 hónapja
szülő
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" = "谷歌日曆";