diff options
author | Eric Bailey <git@esb.lol> | 2023-12-05 19:51:50 -0600 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-12-05 17:51:50 -0800 |
commit | a915a57b10e9e8a62d769d4de359a916dcf4ceab (patch) | |
tree | a78848b023dc3c0cfe0cb403d73714e71cd5cde8 /src | |
parent | fab9f839d0234d1df7e595f53eff17177f5a9c67 (diff) | |
download | voidsky-a915a57b10e9e8a62d769d4de359a916dcf4ceab.tar.zst |
Prevent invalid locale from being loaded (#2099)
Diffstat (limited to 'src')
-rw-r--r-- | src/locale/i18n.ts | 16 | ||||
-rw-r--r-- | src/locale/i18n.web.ts | 16 | ||||
-rw-r--r-- | src/view/screens/LanguageSettings.tsx | 4 |
3 files changed, 22 insertions, 14 deletions
diff --git a/src/locale/i18n.ts b/src/locale/i18n.ts index 73fa785ea..2b9be60a4 100644 --- a/src/locale/i18n.ts +++ b/src/locale/i18n.ts @@ -1,8 +1,9 @@ -import {useLanguagePrefs} from '#/state/preferences' -import {i18n} from '@lingui/core' import {useEffect} from 'react' -import {messages as messagesEn} from './locales/en/messages' -import {messages as messagesHi} from './locales/hi/messages' +import {i18n} from '@lingui/core' + +import {useLanguagePrefs} from '#/state/preferences' +import {messages as messagesEn} from '#/locale/locales/en/messages' +import {messages as messagesHi} from '#/locale/locales/hi/messages' export const locales = { en: 'English', @@ -18,15 +19,10 @@ export const defaultLocale = 'en' * @param locale any locale string */ export async function dynamicActivate(locale: string) { - if (locale === 'en') { - i18n.loadAndActivate({locale, messages: messagesEn}) - return - } else if (locale === 'hi') { + if (locale === 'hi') { i18n.loadAndActivate({locale, messages: messagesHi}) - return } else { i18n.loadAndActivate({locale, messages: messagesEn}) - return } } diff --git a/src/locale/i18n.web.ts b/src/locale/i18n.web.ts index 0ea69d1ae..18b05fb8e 100644 --- a/src/locale/i18n.web.ts +++ b/src/locale/i18n.web.ts @@ -1,6 +1,7 @@ -import {useLanguagePrefs} from '#/state/preferences' -import {i18n} from '@lingui/core' import {useEffect} from 'react' +import {i18n} from '@lingui/core' + +import {useLanguagePrefs} from '#/state/preferences' export const locales = { en: 'English', @@ -16,8 +17,15 @@ export const defaultLocale = 'en' * @param locale any locale string */ export async function dynamicActivate(locale: string) { - const {messages} = await import(`./locales/${locale}/messages`) - i18n.load(locale, messages) + let mod: any + + if (locale === 'hi') { + mod = await import(`./locales/hi/messages`) + } else { + mod = await import(`./locales/en/messages`) + } + + i18n.load(locale, mod.messages) i18n.activate(locale) } diff --git a/src/view/screens/LanguageSettings.tsx b/src/view/screens/LanguageSettings.tsx index 7a2e54dc8..eefbfb2e2 100644 --- a/src/view/screens/LanguageSettings.tsx +++ b/src/view/screens/LanguageSettings.tsx @@ -48,6 +48,7 @@ export function LanguageSettingsScreen(_props: Props) { const onChangePrimaryLanguage = React.useCallback( (value: Parameters<PickerSelectProps['onValueChange']>[0]) => { + if (!value) return if (langPrefs.primaryLanguage !== value) { setLangPrefs.setPrimaryLanguage(value) } @@ -57,6 +58,7 @@ export function LanguageSettingsScreen(_props: Props) { const onChangeAppLanguage = React.useCallback( (value: Parameters<PickerSelectProps['onValueChange']>[0]) => { + if (!value) return if (langPrefs.appLanguage !== value) { setLangPrefs.setAppLanguage(value) } @@ -100,6 +102,7 @@ export function LanguageSettingsScreen(_props: Props) { <View style={{position: 'relative'}}> <RNPickerSelect + placeholder={{}} value={langPrefs.appLanguage} onValueChange={onChangeAppLanguage} items={APP_LANGUAGES.filter(l => Boolean(l.code2)).map(l => ({ @@ -190,6 +193,7 @@ export function LanguageSettingsScreen(_props: Props) { <View style={{position: 'relative'}}> <RNPickerSelect + placeholder={{}} value={langPrefs.primaryLanguage} onValueChange={onChangePrimaryLanguage} items={LANGUAGES.filter(l => Boolean(l.code2)).map(l => ({ |