diff --git a/app/locale.ts b/app/locale.ts index 8c3d74de56..145e55a72a 100644 --- a/app/locale.ts +++ b/app/locale.ts @@ -78,34 +78,6 @@ function getLocaleDirection( return 'ltr'; } -function finalize( - availableLocales: Array, - messages: LocaleMessagesType, - backupMessages: LocaleMessagesType, - localeName: string, - hourCyclePreference: HourCyclePreference, - localeDisplayNames: LocaleDisplayNames, - logger: LoggerType -): LocaleType { - // We start with english, then overwrite that with anything present in locale - const finalMessages = merge(backupMessages, messages); - - const i18n = setupI18n(localeName, finalMessages); - - const direction = getLocaleDirection(localeName, logger); - logger.info(`locale: Text info direction for ${localeName}: ${direction}`); - - return { - availableLocales, - i18n, - name: localeName, - direction, - messages: finalMessages, - hourCyclePreference, - localeDisplayNames, - }; -} - export function _getAvailableLocales(): Array { return JSON.parse( readFileSync( @@ -118,11 +90,13 @@ export function _getAvailableLocales(): Array { export function load({ preferredSystemLocales, localeOverride, + localeDirectionTestingOverride, hourCyclePreference, logger, }: { preferredSystemLocales: Array; localeOverride: string | null; + localeDirectionTestingOverride: LocaleDirection | null; hourCyclePreference: HourCyclePreference; logger: LoggerType; }): LocaleType { @@ -151,15 +125,22 @@ export function load({ const matchedLocaleMessages = getLocaleMessages(matchedLocale); const englishMessages = getLocaleMessages('en'); - const languageDisplayNames = getLocaleDisplayNames(); + const localeDisplayNames = getLocaleDisplayNames(); - return finalize( + // We start with english, then overwrite that with anything present in locale + const finalMessages = merge(englishMessages, matchedLocaleMessages); + const i18n = setupI18n(matchedLocale, finalMessages); + const direction = + localeDirectionTestingOverride ?? getLocaleDirection(matchedLocale, logger); + logger.info(`locale: Text info direction for ${matchedLocale}: ${direction}`); + + return { availableLocales, - matchedLocaleMessages, - englishMessages, - matchedLocale, + i18n, + name: matchedLocale, + direction, + messages: finalMessages, hourCyclePreference, - languageDisplayNames, - logger - ); + localeDisplayNames, + }; } diff --git a/app/main.ts b/app/main.ts index 9eb746e606..6e54cd5c1d 100644 --- a/app/main.ts +++ b/app/main.ts @@ -109,7 +109,7 @@ import { SettingsChannel } from '../ts/main/settingsChannel'; import { maybeParseUrl, setUrlSearchParams } from '../ts/util/url'; import { getHeicConverter } from '../ts/workers/heicConverterMain'; -import type { LocaleType } from './locale'; +import type { LocaleDirection, LocaleType } from './locale'; import { load as loadLocale } from './locale'; import type { LoggerType } from '../ts/types/Logging'; @@ -144,6 +144,7 @@ const consoleLogger = createBufferedConsoleLogger(); let logger: LoggerType | undefined; let preferredSystemLocales: Array | undefined; let localeOverride: string | null | undefined; + let resolvedTranslationsLocale: LocaleType | undefined; let settingsChannel: SettingsChannel | undefined; @@ -159,6 +160,11 @@ const development = const ciMode = config.get<'full' | 'benchmark' | false>('ciMode'); const forcePreloadBundle = config.get('forcePreloadBundle'); +const localeDirectionTestingOverride = config.has( + 'localeDirectionTestingOverride' +) + ? config.get('localeDirectionTestingOverride') + : null; const preventDisplaySleepService = new PreventDisplaySleepService( powerSaveBlocker @@ -1858,6 +1864,7 @@ app.on('ready', async () => { resolvedTranslationsLocale = loadLocale({ preferredSystemLocales, localeOverride, + localeDirectionTestingOverride, hourCyclePreference, logger: getLogger(), }); diff --git a/ts/test-node/app/locale_test.ts b/ts/test-node/app/locale_test.ts index 77ddf33677..f4b17b112c 100644 --- a/ts/test-node/app/locale_test.ts +++ b/ts/test-node/app/locale_test.ts @@ -27,6 +27,7 @@ describe('locale', async () => { const actualLocale = await load({ preferredSystemLocales, localeOverride: null, + localeDirectionTestingOverride: null, hourCyclePreference: HourCyclePreference.UnknownPreference, logger, }); diff --git a/ts/test-node/app/menu_test.ts b/ts/test-node/app/menu_test.ts index c215f7bd12..0d50b186ef 100644 --- a/ts/test-node/app/menu_test.ts +++ b/ts/test-node/app/menu_test.ts @@ -200,6 +200,7 @@ describe('createTemplate', () => { const { i18n } = loadLocale({ preferredSystemLocales: ['en'], localeOverride: null, + localeDirectionTestingOverride: null, hourCyclePreference: HourCyclePreference.UnknownPreference, logger: { fatal: stub().throwsArg(0),