@@ -454,55 +454,35 @@ type Languages = {
454454 [ lang : string ] : string ;
455455} ;
456456
457- export function setLanguage ( preferredLangs : string | string [ ] ) : Promise < void > {
458- if ( ! Array . isArray ( preferredLangs ) ) {
459- preferredLangs = [ preferredLangs ] ;
457+ export async function setLanguage ( ...preferredLangs : string [ ] ) : Promise < void > {
458+ PlatformPeg . get ( ) ?. setLanguage ( preferredLangs ) ;
459+
460+ const availableLanguages = await getLangsJson ( ) ;
461+ let chosenLanguage = preferredLangs . find ( ( lang ) => availableLanguages . hasOwnProperty ( lang ) ) ;
462+ if ( ! chosenLanguage ) {
463+ // Fallback to en_EN if none is found
464+ chosenLanguage = "en" ;
465+ logger . error ( "Unable to find an appropriate language, preferred: " , preferredLangs ) ;
460466 }
461467
462- const plaf = PlatformPeg . get ( ) ;
463- if ( plaf ) {
464- plaf . setLanguage ( preferredLangs ) ;
465- }
468+ const languageData = await getLanguageRetry ( i18nFolder + availableLanguages [ chosenLanguage ] ) ;
466469
467- let langToUse : string ;
468- let availLangs : Languages ;
469- return getLangsJson ( )
470- . then ( ( result ) => {
471- availLangs = result ;
470+ counterpart . registerTranslations ( chosenLanguage , languageData ) ;
471+ counterpart . setLocale ( chosenLanguage ) ;
472472
473- for ( let i = 0 ; i < preferredLangs . length ; ++ i ) {
474- if ( availLangs . hasOwnProperty ( preferredLangs [ i ] ) ) {
475- langToUse = preferredLangs [ i ] ;
476- break ;
477- }
478- }
479- if ( ! langToUse ) {
480- // Fallback to en_EN if none is found
481- langToUse = "en" ;
482- logger . error ( "Unable to find an appropriate language" ) ;
483- }
473+ await SettingsStore . setValue ( "language" , null , SettingLevel . DEVICE , chosenLanguage ) ;
474+ // Adds a lot of noise to test runs, so disable logging there.
475+ if ( process . env . NODE_ENV !== "test" ) {
476+ logger . log ( "set language to " + chosenLanguage ) ;
477+ }
484478
485- return getLanguageRetry ( i18nFolder + availLangs [ langToUse ] ) ;
486- } )
487- . then ( async ( langData ) : Promise < ICounterpartTranslation | undefined > => {
488- counterpart . registerTranslations ( langToUse , langData ) ;
489- await registerCustomTranslations ( ) ;
490- counterpart . setLocale ( langToUse ) ;
491- await SettingsStore . setValue ( "language" , null , SettingLevel . DEVICE , langToUse ) ;
492- // Adds a lot of noise to test runs, so disable logging there.
493- if ( process . env . NODE_ENV !== "test" ) {
494- logger . log ( "set language to " + langToUse ) ;
495- }
479+ // Set 'en' as fallback language:
480+ if ( chosenLanguage !== "en" ) {
481+ const fallbackLanguageData = await getLanguageRetry ( i18nFolder + availableLanguages [ "en" ] ) ;
482+ counterpart . registerTranslations ( "en" , fallbackLanguageData ) ;
483+ }
496484
497- // Set 'en' as fallback language:
498- if ( langToUse !== "en" ) {
499- return getLanguageRetry ( i18nFolder + availLangs [ "en" ] ) ;
500- }
501- } )
502- . then ( async ( langData ) : Promise < void > => {
503- if ( langData ) counterpart . registerTranslations ( "en" , langData ) ;
504- await registerCustomTranslations ( ) ;
505- } ) ;
485+ await registerCustomTranslations ( ) ;
506486}
507487
508488type Language = {
0 commit comments