about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorEric Bailey <git@esb.lol>2023-12-05 19:51:50 -0600
committerGitHub <noreply@github.com>2023-12-05 17:51:50 -0800
commita915a57b10e9e8a62d769d4de359a916dcf4ceab (patch)
treea78848b023dc3c0cfe0cb403d73714e71cd5cde8 /src
parentfab9f839d0234d1df7e595f53eff17177f5a9c67 (diff)
downloadvoidsky-a915a57b10e9e8a62d769d4de359a916dcf4ceab.tar.zst
Prevent invalid locale from being loaded (#2099)
Diffstat (limited to 'src')
-rw-r--r--src/locale/i18n.ts16
-rw-r--r--src/locale/i18n.web.ts16
-rw-r--r--src/view/screens/LanguageSettings.tsx4
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 => ({