@@ -47,10 +47,10 @@ struct SpotifyLyricsInMenubarApp: App {
4747 viewmodel. fetchBackgroundColor ( )
4848 if viewmodel. translate {
4949 if #available( macOS 15 , * ) {
50- if translationConfigObject. translationConfig == TranslationSession . Configuration ( target: Locale . Language . systemLanguages . first! ) {
50+ if translationConfigObject. translationConfig == TranslationSession . Configuration ( target: viewmodel . userLocaleLanguage . language ) {
5151 translationConfigObject. translationConfig? . invalidate ( )
5252 } else {
53- translationConfigObject. translationConfig = TranslationSession . Configuration ( target: Locale . Language . systemLanguages . first! )
53+ translationConfigObject. translationConfig = TranslationSession . Configuration ( target: viewmodel . userLocaleLanguage . language )
5454 }
5555 }
5656 }
@@ -87,7 +87,8 @@ struct SpotifyLyricsInMenubarApp: App {
8787 }
8888 }
8989 }
90- Toggle ( " Translate To \( Locale . current. localizedString ( forLanguageCode: Bundle . main. preferredLocalizations [ 0 ] ) !) " , isOn: $viewmodel. translate)
90+
91+ Toggle ( " Translate To \( viewmodel. userLocaleLanguageString) " , isOn: $viewmodel. translate)
9192 . disabled ( !hasOnboarded)
9293 }
9394 else {
@@ -310,7 +311,7 @@ struct SpotifyLyricsInMenubarApp: App {
310311
311312 } catch {
312313 if let source = viewmodel. findRealLanguage ( ) {
313- translationConfigObject. translationConfig = TranslationSession . Configuration ( source: source, target: Locale . Language . systemLanguages . first! )
314+ translationConfigObject. translationConfig = TranslationSession . Configuration ( source: source, target: viewmodel . userLocaleLanguage . language )
314315 }
315316 print ( error)
316317 }
@@ -323,7 +324,7 @@ struct SpotifyLyricsInMenubarApp: App {
323324 // required for most hindi songs: lyrics are written in english script and apple translation is very stupid
324325// translationConfigObject.translationConfig = TranslationSession.Configuration(source: Locale.Language.init(identifier: "hi_IN"), target: Locale.Language.systemLanguages.first!)
325326 // good backup for now, doesn't replace english songs with french
326- translationConfigObject. translationConfig = TranslationSession . Configuration ( target: Locale . Language . systemLanguages . first! )
327+ translationConfigObject. translationConfig = TranslationSession . Configuration ( target: viewmodel . userLocaleLanguage . language )
327328 // TODO: update translationConfig on song change, pickup song language from spotify and feed it as source locale
328329 return
329330 }
@@ -452,10 +453,10 @@ struct SpotifyLyricsInMenubarApp: App {
452453 viewmodel. fetchBackgroundColor ( )
453454 if viewmodel. translate {
454455 if #available( macOS 15 , * ) {
455- if translationConfigObject. translationConfig == TranslationSession . Configuration ( target: Locale . Language . systemLanguages . first! ) {
456+ if translationConfigObject. translationConfig == TranslationSession . Configuration ( target: viewmodel . userLocaleLanguage . language ) {
456457 translationConfigObject. translationConfig? . invalidate ( )
457458 } else {
458- translationConfigObject. translationConfig = TranslationSession . Configuration ( target: Locale . Language . systemLanguages . first! )
459+ translationConfigObject. translationConfig = TranslationSession . Configuration ( target: viewmodel . userLocaleLanguage . language )
459460 }
460461 }
461462 }
@@ -561,3 +562,18 @@ extension View {
561562 closure ( self )
562563 }
563564}
565+ // https://stackoverflow.com/questions/48136456/locale-current-reporting-wrong-language-on-device
566+ extension Locale {
567+ static func preferredLocaleString( ) -> String ? {
568+ guard let preferredIdentifier = Locale . preferredLanguages. first else {
569+ return Locale . current. localizedString ( for: Calendar . autoupdatingCurrent. identifier)
570+ }
571+ return Locale . current. localizedString ( forIdentifier: preferredIdentifier)
572+ }
573+ static func preferredLocale( ) -> Locale {
574+ guard let preferredIdentifier = Locale . preferredLanguages. first else {
575+ return Locale . current
576+ }
577+ return Locale . init ( identifier: preferredIdentifier)
578+ }
579+ }
0 commit comments