diff --git a/DynamicIsland/Localizable.xcstrings b/DynamicIsland/Localizable.xcstrings index b0f87de..d2cff21 100644 --- a/DynamicIsland/Localizable.xcstrings +++ b/DynamicIsland/Localizable.xcstrings @@ -99,7 +99,8 @@ "value" : "" } } - } + }, + "shouldTranslate" : false }, " – %lld" : { "localizations" : { @@ -2374,6 +2375,16 @@ } } }, + "Adjusts the lock screen timer widget width without affecting button sizing." : { + "localizations" : { + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ajusta a largura do widget do temporizador da tela de bloqueio sem afetar o tamanho do botão." + } + } + } + }, "ai" : { "localizations" : { "pt-BR" : { @@ -3530,6 +3541,16 @@ } } }, + "AQI" : { + "localizations" : { + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "IQA" + } + } + } + }, "Are you sure you want to delete \"%@\"?" : { "comment" : "A confirmation prompt asking the user to confirm the deletion of a custom idle animation. The placeholder text inside the quotation marks should be replaced with the name of the animation.", "localizations" : { @@ -5492,8 +5513,8 @@ "localizations" : { "pt-BR" : { "stringUnit" : { - "state" : "needs_review", - "value" : "chime" + "state" : "translated", + "value" : "toque de notificação" } } } @@ -5882,6 +5903,16 @@ } } }, + "Classic" : { + "localizations" : { + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Clássico" + } + } + } + }, "Classic mode keeps the original translucent black background." : { "comment" : "A description of the \"Classic mode\" option in the Lock Screen Integration settings.", "isCommentAutoGenerated" : true, @@ -8458,8 +8489,8 @@ "localizations" : { "pt-BR" : { "stringUnit" : { - "state" : "needs_review", - "value" : "Exibe o estado atual do Foco acima da cápsula climática sempre que a detecção de Foco está ativada." + "state" : "translated", + "value" : "Exibe o estado atual do Foco acima da cápsula de clima quando a detecção de Foco estiver ativada." } } } @@ -8948,6 +8979,9 @@ } } }, + "EAQI" : { + "shouldTranslate" : false + }, "Easily copy, store, and manage your most-used content. Upgrade now for advanced features like multi-item storage and quick access!" : { "localizations" : { "ar" : { @@ -9510,8 +9544,8 @@ }, "pt-BR" : { "stringUnit" : { - "state" : "needs_review", - "value" : "Enable haptics" + "state" : "translated", + "value" : "Ativar feedback tátil" } }, "ru" : { @@ -9812,8 +9846,8 @@ "localizations" : { "pt-BR" : { "stringUnit" : { - "state" : "needs_review", - "value" : "Ative a cápsula da bateria e configure seu layout." + "state" : "translated", + "value" : "Ative a cápsula da bateria e configura seu layout." } } } @@ -9914,8 +9948,8 @@ }, "pt-BR" : { "stringUnit" : { - "state" : "needs_review", - "value" : "Utilização do motor" + "state" : "translated", + "value" : "Utilização da GPU" } } } @@ -10576,8 +10610,8 @@ "localizations" : { "pt-BR" : { "stringUnit" : { - "state" : "needs_review", - "value" : "eyedropper" + "state" : "translated", + "value" : "conta-gotas" } } } @@ -11441,6 +11475,16 @@ } } }, + "Glass" : { + "localizations" : { + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vidro" + } + } + } + }, "Glass mode" : { "localizations" : { "pt-BR" : { @@ -12897,8 +12941,8 @@ }, "pt-BR" : { "stringUnit" : { - "state" : "needs_review", - "value" : "Inline" + "state" : "translated", + "value" : "em linha" } }, "ru" : { @@ -12931,8 +12975,8 @@ "localizations" : { "pt-BR" : { "stringUnit" : { - "state" : "needs_review", - "value" : "Inline snapshot preview" + "state" : "translated", + "value" : "Pré-visualização de snapshot em linha" } } } @@ -13056,8 +13100,8 @@ "localizations" : { "pt-BR" : { "stringUnit" : { - "state" : "needs_review", - "value" : "Os rótulos são forçados a compactar o texto ligado/desligado enquanto o modo brief toast está ativado." + "state" : "translated", + "value" : "Os rótulos usam textos compactos de ligado/desligado enquanto o modo de notificação breve estiver ativado." } } } @@ -13691,7 +13735,8 @@ "value" : "Lottie JSON 链接" } } - } + }, + "shouldTranslate" : false }, "Low" : { "comment" : "Low battery level label", @@ -14009,8 +14054,8 @@ "localizations" : { "pt-BR" : { "stringUnit" : { - "state" : "needs_review", - "value" : "marquee" + "state" : "translated", + "value" : "texto rolante" } } } @@ -14803,6 +14848,16 @@ } } }, + "Media Panel Width" : { + "localizations" : { + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Largura do Painel de Mídia" + } + } + } + }, "Media playback live activity" : { "localizations" : { "ar" : { @@ -15930,6 +15985,16 @@ } } }, + "Music" : { + "localizations" : { + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Música" + } + } + } + }, "Music panel variant" : { "localizations" : { "pt-BR" : { @@ -17923,7 +17988,8 @@ "value" : "open meteo" } } - } + }, + "shouldTranslate" : false }, "Open Model Settings" : { "localizations" : { @@ -19602,6 +19668,26 @@ } } }, + "Reset Media Width" : { + "localizations" : { + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Redefinir a largura da mídia" + } + } + } + }, + "Reset Music" : { + "localizations" : { + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Redefinir Música" + } + } + } + }, "Reset Notch Experiences" : { "comment" : "A menu item that resets all notch experiences for a particular app.", "isCommentAutoGenerated" : true, @@ -19626,6 +19712,26 @@ } } }, + "Reset Timer" : { + "localizations" : { + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Redefinir Temporizador" + } + } + } + }, + "Reset Timer Width" : { + "localizations" : { + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Redefinir Largura do Temporizador" + } + } + } + }, "Reset to Default" : { "localizations" : { "fr" : { @@ -19654,6 +19760,16 @@ } } }, + "Reset Weather" : { + "localizations" : { + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Redefinir Tempo" + } + } + } + }, "Reset Width" : { "comment" : "A button to reset the expanded notch width to its default value.", "isCommentAutoGenerated" : true, @@ -19999,8 +20115,8 @@ "localizations" : { "pt-BR" : { "stringUnit" : { - "state" : "needs_review", - "value" : "Screen Padding: %lldpx" + "state" : "translated", + "value" : "Espaçamento da tela: %lldpx" } } } @@ -21240,6 +21356,16 @@ } } }, + "Show focus widget" : { + "localizations" : { + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Redefinir Widget de Foco" + } + } + } + }, "Show full event titles" : { "comment" : "A toggle that shows or hides the full event titles in the calendar view", "isCommentAutoGenerated" : true, @@ -21616,6 +21742,16 @@ } } }, + "Show sunrise time" : { + "localizations" : { + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mostrar a hora do nascer do sol" + } + } + } + }, "Show the active Focus name inside the indicator." : { "comment" : "A description of why the \"Show Focus Label\" toggle is disabled when the \"Show Focus as brief toast\" toggle is enabled.", "isCommentAutoGenerated" : true, @@ -21674,6 +21810,16 @@ } } }, + "Shrinks the lock screen media panel while keeping the expanded view full width." : { + "localizations" : { + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Encolhe o painel de mídia da tela de bloqueio, mantendo a largura total da visualização expandida." + } + } + } + }, "Size: %lldpx" : { "localizations" : { "pt-BR" : { @@ -22060,8 +22206,8 @@ }, "pt-BR" : { "stringUnit" : { - "state" : "needs_review", - "value" : "Sneak Peek Style" + "state" : "translated", + "value" : "Estilo de prévia rápida" } }, "ru" : { @@ -23447,8 +23593,8 @@ "localizations" : { "pt-BR" : { "stringUnit" : { - "state" : "needs_review", - "value" : "Timer glass material" + "state" : "translated", + "value" : "Material do vidro do temporizador" } } } @@ -23459,8 +23605,8 @@ "localizations" : { "pt-BR" : { "stringUnit" : { - "state" : "needs_review", - "value" : "Timer liquid mode" + "state" : "translated", + "value" : "Modo fluido do temporizador" } } } @@ -23567,6 +23713,16 @@ } } }, + "Timer Widget Width" : { + "localizations" : { + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Largura do Widget do Temporizador" + } + } + } + }, "Title" : { "comment" : "A label for the title input field in the note editor.", "isCommentAutoGenerated" : true, @@ -24525,8 +24681,8 @@ }, "pt-BR" : { "stringUnit" : { - "state" : "needs_review", - "value" : "Use o espectrograma visualizador de música" + "state" : "translated", + "value" : "Usar espectrograma no visualizador de música" } }, "ru" : { @@ -24639,8 +24795,8 @@ "localizations" : { "pt-BR" : { "stringUnit" : { - "state" : "needs_review", - "value" : "Usa o tratamento de desfoque fosco enquanto o modo de vidro está ativado." + "state" : "translated", + "value" : "Aplica o efeito de desfoque fosco quando o modo vidro está ativado." } } } @@ -25489,14 +25645,7 @@ } }, "wttr" : { - "localizations" : { - "pt-BR" : { - "stringUnit" : { - "state" : "needs_review", - "value" : "wttr" - } - } - } + "shouldTranslate" : false }, "You" : { "localizations" : { diff --git a/DynamicIsland/components/Settings/SettingsView.swift b/DynamicIsland/components/Settings/SettingsView.swift index 1b47734..3288b6a 100644 --- a/DynamicIsland/components/Settings/SettingsView.swift +++ b/DynamicIsland/components/Settings/SettingsView.swift @@ -4189,9 +4189,9 @@ struct LockScreenSettings: View { var body: some View { Form { Section { - Defaults.Toggle("Enable lock screen live activity", key: .enableLockScreenLiveActivity) + Defaults.Toggle(String(localized: "Enable lock screen live activity"), key: .enableLockScreenLiveActivity) .settingsHighlight(id: highlightID("Enable lock screen live activity")) - Defaults.Toggle("Play lock/unlock sounds", key: .enableLockSounds) + Defaults.Toggle(String(localized: "Play lock/unlock sounds"), key: .enableLockSounds) .settingsHighlight(id: highlightID("Play lock/unlock sounds")) } header: { Text("Live Activity & Feedback") @@ -4246,12 +4246,12 @@ struct LockScreenSettings: View { } Section { - Defaults.Toggle("Show lock screen media panel", key: .enableLockScreenMediaWidget) + Defaults.Toggle(String(localized: "Show lock screen media panel"), key: .enableLockScreenMediaWidget) .settingsHighlight(id: highlightID("Show lock screen media panel")) - Defaults.Toggle("Show media app icon", key: .lockScreenShowAppIcon) + Defaults.Toggle(String(localized: "Show media app icon"), key: .lockScreenShowAppIcon) .disabled(!enableLockScreenMediaWidget) .settingsHighlight(id: highlightID("Show media app icon")) - Defaults.Toggle("Show panel border", key: .lockScreenPanelShowsBorder) + Defaults.Toggle(String(localized: "Show panel border"), key: .lockScreenPanelShowsBorder) .disabled(!enableLockScreenMediaWidget) .settingsHighlight(id: highlightID("Show panel border")) if lockScreenGlassCustomizationMode == .customLiquid { @@ -4287,11 +4287,11 @@ struct LockScreenSettings: View { .opacity(showStandardMediaControls ? 1 : 0.5) Section { - Defaults.Toggle("Show lock screen timer", key: .enableLockScreenTimerWidget) + Defaults.Toggle(String(localized: "Show lock screen timer"), key: .enableLockScreenTimerWidget) .settingsHighlight(id: highlightID("Show lock screen timer")) Picker("Timer surface", selection: timerSurfaceBinding) { ForEach(LockScreenTimerSurfaceMode.allCases) { mode in - Text(mode.rawValue).tag(mode) + Text(mode.localizedName).tag(mode) } } .pickerStyle(.segmented) @@ -4349,13 +4349,13 @@ struct LockScreenSettings: View { } Section { - Defaults.Toggle("Show lock screen weather", key: .enableLockScreenWeatherWidget) + Defaults.Toggle(String(localized: "Show lock screen weather"), key: .enableLockScreenWeatherWidget) .settingsHighlight(id: highlightID("Show lock screen weather")) if enableLockScreenWeatherWidget { Picker("Layout", selection: $lockScreenWeatherWidgetStyle) { ForEach(LockScreenWeatherWidgetStyle.allCases) { style in - Text(style.rawValue).tag(style) + Text(style.localizedName).tag(style) } } .pickerStyle(.segmented) @@ -4377,15 +4377,15 @@ struct LockScreenSettings: View { .pickerStyle(.segmented) .settingsHighlight(id: highlightID("Temperature unit")) - Defaults.Toggle("Show location label", key: .lockScreenWeatherShowsLocation) + Defaults.Toggle(String(localized: "Show location label"), key: .lockScreenWeatherShowsLocation) .disabled(lockScreenWeatherWidgetStyle == .circular) .settingsHighlight(id: highlightID("Show location label")) - Defaults.Toggle("Show sunrise time", key: .lockScreenWeatherShowsSunrise) + Defaults.Toggle(String(localized: "Show sunrise time"), key: .lockScreenWeatherShowsSunrise) .disabled(lockScreenWeatherWidgetStyle != .inline) .settingsHighlight(id: highlightID("Show sunrise time")) - Defaults.Toggle("Show AQI widget", key: .lockScreenWeatherShowsAQI) + Defaults.Toggle(String(localized: "Show AQI widget"), key: .lockScreenWeatherShowsAQI) .disabled(!lockScreenWeatherProviderSource.supportsAirQuality) .settingsHighlight(id: highlightID("Show AQI widget")) @@ -4405,7 +4405,7 @@ struct LockScreenSettings: View { .foregroundStyle(.secondary) } - Defaults.Toggle("Use colored gauges", key: .lockScreenWeatherUsesGaugeTint) + Defaults.Toggle(String(localized: "Use colored gauges"), key: .lockScreenWeatherUsesGaugeTint) .settingsHighlight(id: highlightID("Use colored gauges")) } } header: { @@ -4416,22 +4416,22 @@ struct LockScreenSettings: View { if BatteryActivityManager.shared.hasBattery() { Section { - Defaults.Toggle("Show battery indicator", key: .lockScreenBatteryShowsBatteryGauge) + Defaults.Toggle(String(localized: "Show battery indicator"), key: .lockScreenBatteryShowsBatteryGauge) .settingsHighlight(id: highlightID("Show battery indicator")) if lockScreenWeatherShowsBatteryGauge { - Defaults.Toggle("Use MacBook icon when on battery", key: .lockScreenBatteryUsesLaptopSymbol) + Defaults.Toggle(String(localized: "Use MacBook icon when on battery"), key: .lockScreenBatteryUsesLaptopSymbol) .settingsHighlight(id: highlightID("Use MacBook icon when on battery")) - Defaults.Toggle("Show charging status", key: .lockScreenBatteryShowsCharging) + Defaults.Toggle(String(localized: "Show charging status"), key: .lockScreenBatteryShowsCharging) .settingsHighlight(id: highlightID("Show charging status")) if lockScreenWeatherShowsCharging { - Defaults.Toggle("Show charging percentage", key: .lockScreenBatteryShowsChargingPercentage) + Defaults.Toggle(String(localized: "Show charging percentage"), key: .lockScreenBatteryShowsChargingPercentage) .settingsHighlight(id: highlightID("Show charging percentage")) } - Defaults.Toggle("Show Bluetooth battery", key: .lockScreenBatteryShowsBluetooth) + Defaults.Toggle(String(localized: "Show Bluetooth battery"), key: .lockScreenBatteryShowsBluetooth) .settingsHighlight(id: highlightID("Show Bluetooth battery")) } } header: { @@ -4442,7 +4442,7 @@ struct LockScreenSettings: View { } Section { - Defaults.Toggle("Show focus widget", key: .enableLockScreenFocusWidget) + Defaults.Toggle(String(localized: "Show focus widget"), key: .enableLockScreenFocusWidget) .settingsHighlight(id: highlightID("Show focus widget")) } header: { Text("Focus Widget") @@ -4593,9 +4593,9 @@ private struct LockScreenPositioningControls: View { HStack(alignment: .top, spacing: 24) { offsetColumn( - title: "Weather", + title: String(localized: "Weather"), value: weatherOffset, - resetTitle: "Reset Weather", + resetTitle: String(localized: "Reset Weather"), resetAction: resetWeatherOffset ) @@ -4603,9 +4603,9 @@ private struct LockScreenPositioningControls: View { .frame(height: 64) offsetColumn( - title: "Timer", + title: String(localized: "Timer"), value: timerOffset, - resetTitle: "Reset Timer", + resetTitle: String(localized: "Reset Timer"), resetAction: resetTimerOffset ) @@ -4613,9 +4613,9 @@ private struct LockScreenPositioningControls: View { .frame(height: 64) offsetColumn( - title: "Music", + title: String(localized: "Music"), value: musicOffset, - resetTitle: "Reset Music", + resetTitle: String(localized: "Reset Music"), resetAction: resetMusicOffset ) @@ -4627,21 +4627,21 @@ private struct LockScreenPositioningControls: View { VStack(alignment: .leading, spacing: 16) { widthSlider( - title: "Media Panel Width", + title: String(localized: "Media Panel Width"), value: musicWidthBinding, range: musicWidthRange, - resetTitle: "Reset Media Width", + resetTitle: String(localized: "Reset Media Width"), resetAction: resetMusicWidth, - helpText: "Shrinks the lock screen media panel while keeping the expanded view full width." + helpText: String(localized: "Shrinks the lock screen media panel while keeping the expanded view full width.") ) widthSlider( - title: "Timer Widget Width", + title: String(localized: "Timer Widget Width"), value: timerWidthBinding, range: timerWidthRange, - resetTitle: "Reset Timer Width", + resetTitle: String(localized: "Reset Timer Width"), resetAction: resetTimerWidth, - helpText: "Adjusts the lock screen timer widget width without affecting button sizing." + helpText: String(localized: "Adjusts the lock screen timer widget width without affecting button sizing.") ) } } header: { diff --git a/DynamicIsland/enums/generic.swift b/DynamicIsland/enums/generic.swift index 4f66755..0c92bcd 100644 --- a/DynamicIsland/enums/generic.swift +++ b/DynamicIsland/enums/generic.swift @@ -162,6 +162,15 @@ enum LockScreenTimerSurfaceMode: String, CaseIterable, Defaults.Serializable, Id case glass = "Glass" var id: String { rawValue } + + var localizedName: String { + switch self { + case .classic: + return String(localized: "Classic") + case .glass: + return String(localized: "Glass") + } + } } enum LockScreenWeatherWidgetStyle: String, CaseIterable, Defaults.Serializable, Identifiable { @@ -169,6 +178,15 @@ enum LockScreenWeatherWidgetStyle: String, CaseIterable, Defaults.Serializable, case circular = "Circular" var id: String { rawValue } + + var localizedName: String { + switch self { + case .inline: + return String(localized: "Inline") + case .circular: + return String(localized: "Circular") + } + } } enum LockScreenWeatherProviderSource: String, CaseIterable, Defaults.Serializable, Identifiable { @@ -223,18 +241,18 @@ enum LockScreenWeatherAirQualityScale: String, CaseIterable, Defaults.Serializab var compactLabel: String { switch self { case .us: - return "AQI" + return String(localized: "AQI") case .european: - return "EAQI" + return String(localized: "EAQI") } } var accessibilityLabel: String { switch self { case .us: - return "AQI" + return String(localized: "AQI") case .european: - return "EAQI" + return String(localized: "EAQI") } }