@@ -55,6 +55,13 @@ export type SupportedI18nLanguageObject = Record<SupportedI18nLanguage, i18nStri
5555
5656const app = Electron . app || require ( '@electron/remote' ) . app ;
5757
58+ const parseLocale = ( locale : string ) : SupportedI18nLanguage => {
59+ const languageKeys = Object . keys ( SUPPORTED_LANGUAGES ) as SupportedI18nLanguage [ ] ;
60+ return languageKeys . find ( languageKey => languageKey === locale ) || languageKeys [ 0 ] ;
61+ } ;
62+
63+ const getSystemLocale = ( ) : SupportedI18nLanguage => parseLocale ( app . getLocale ( ) . substring ( 0 , 2 ) ) ;
64+
5865export const LANGUAGES : SupportedI18nLanguageObject = {
5966 cs,
6067 da,
@@ -139,17 +146,24 @@ export const SUPPORTED_LANGUAGES = {
139146let current : SupportedI18nLanguage | undefined ;
140147
141148export const getCurrent = ( ) : SupportedI18nLanguage => {
149+ const systemLocale = getSystemLocale ( ) ;
150+
142151 if ( ! current ) {
143- // We care only about the language part and not the country (en_US, de_DE)
144- const defaultLocale = parseLocale ( app . getLocale ( ) . substring ( 0 , 2 ) ) ;
145- current = settings . restore ( SettingsType . LOCALE , defaultLocale ) ;
152+ const savedLocale = settings . restore < SupportedI18nLanguage | undefined > ( SettingsType . LOCALE ) ;
153+ const savedOverride = settings . restore < boolean | undefined > ( SettingsType . LOCALE_OVERRIDE ) ;
154+ const hasUserOverride =
155+ typeof savedOverride === 'boolean' ? savedOverride : Boolean ( savedLocale && savedLocale !== systemLocale ) ;
156+
157+ current = savedLocale && hasUserOverride ? parseLocale ( savedLocale ) : systemLocale ;
158+ return current ;
146159 }
147- return current ;
148- } ;
149160
150- const parseLocale = ( locale : string ) : SupportedI18nLanguage => {
151- const languageKeys = Object . keys ( SUPPORTED_LANGUAGES ) as SupportedI18nLanguage [ ] ;
152- return languageKeys . find ( languageKey => languageKey === locale ) || languageKeys [ 0 ] ;
161+ // If there’s no override and the system locale changed, update the cache
162+ const hasOverride = settings . restore < boolean | undefined > ( SettingsType . LOCALE_OVERRIDE ) === true ;
163+ if ( ! hasOverride && current !== systemLocale ) {
164+ current = systemLocale ;
165+ }
166+ return current ;
153167} ;
154168
155169const customReplacements : Record < string , string > = {
@@ -180,5 +194,15 @@ export const getText = (
180194
181195export const setLocale = ( locale : string ) : void => {
182196 current = parseLocale ( locale ) ;
183- settings . save ( SettingsType . LOCALE , current ) ;
197+
198+ const systemLocale = getSystemLocale ( ) ;
199+ const isOverride = current !== systemLocale ;
200+
201+ if ( isOverride ) {
202+ settings . save ( SettingsType . LOCALE_OVERRIDE , true ) ;
203+ settings . save ( SettingsType . LOCALE , current ) ;
204+ } else {
205+ settings . delete ( SettingsType . LOCALE_OVERRIDE ) ;
206+ settings . delete ( SettingsType . LOCALE ) ;
207+ }
184208} ;
0 commit comments