Language on initial start now works. Also selected the best suited locale when not initially started
This commit is contained in:
parent
31da188999
commit
e14a52b0ab
|
@ -28,11 +28,7 @@ export default () => {
|
|||
{...eva}
|
||||
theme={{ ...eva.light, ...customization }}
|
||||
>
|
||||
<LanguageProvider
|
||||
cache={true}
|
||||
data={translations}
|
||||
initalHasCheckedLanguage={false}
|
||||
>
|
||||
<LanguageProvider cache={true} data={translations}>
|
||||
<AppNavigator />
|
||||
</LanguageProvider>
|
||||
{FullBlurView}
|
||||
|
|
|
@ -37,7 +37,8 @@ export const SetLanguage = () => {
|
|||
}
|
||||
|
||||
const goBack = () => {
|
||||
navigation.navigate('Login', { locale: LanguageService.getLanguageCode() })
|
||||
// Need to reset the view so it updates the language
|
||||
navigation.navigate('Login', { rand: Math.random() })
|
||||
}
|
||||
|
||||
return (
|
||||
|
|
|
@ -3,6 +3,7 @@ import * as RNLocalize from 'react-native-localize'
|
|||
|
||||
import { LanguageService } from '../../services/languageService'
|
||||
import { LanguageStorage } from '../../services/languageStorage'
|
||||
import { translations } from '../../utils/translation'
|
||||
|
||||
export const LanguageContext = React.createContext({ Strings: {} })
|
||||
|
||||
|
@ -30,19 +31,19 @@ export const LanguageProvider: React.FC<Props> = ({
|
|||
return data[initialLanguageCode]
|
||||
}
|
||||
|
||||
let languageCode
|
||||
let bestStrings
|
||||
const localizes = RNLocalize.getLocales()
|
||||
for (let i = 0; i < localizes.length; i++) {
|
||||
const element = localizes[i]
|
||||
if (data[element.languageCode]) {
|
||||
bestStrings = data[element.languageCode]
|
||||
languageCode = element.languageCode
|
||||
break
|
||||
}
|
||||
}
|
||||
const fallBack = { languageTag: 'sv' }
|
||||
|
||||
const { languageTag } =
|
||||
RNLocalize.findBestAvailableLanguage(Object.keys(translations)) ||
|
||||
fallBack
|
||||
const bestStrings = data[languageTag]
|
||||
|
||||
console.log('LANGUAGE TAG', languageTag)
|
||||
console.log('LANGUAGE BEST', bestStrings)
|
||||
|
||||
LanguageService.setLanguageCode({ langCode: languageTag })
|
||||
LanguageService.seti18nConfig({ langCode: languageTag })
|
||||
|
||||
LanguageService.setLanguageCode({ langCode: languageCode })
|
||||
return bestStrings
|
||||
})
|
||||
useEffect(() => {
|
||||
|
@ -59,16 +60,14 @@ export const LanguageProvider: React.FC<Props> = ({
|
|||
)
|
||||
|
||||
const checkLanguageLocal = async () => {
|
||||
//setHasCheckedLanguage(false)
|
||||
if (cache) {
|
||||
const languageCode = await LanguageStorage.get()
|
||||
if (languageCode) {
|
||||
LanguageService.setLanguageCode({ langCode: languageCode })
|
||||
LanguageService.seti18nConfig({ langCode: languageCode })
|
||||
} else {
|
||||
LanguageService.setLanguageCode({ langCode: initialLanguageCode })
|
||||
LanguageService.seti18nConfig({ langCode: initialLanguageCode })
|
||||
}
|
||||
LanguageService.setLanguageCode({
|
||||
langCode: languageCode || initialLanguageCode,
|
||||
})
|
||||
LanguageService.seti18nConfig({
|
||||
langCode: languageCode || initialLanguageCode,
|
||||
})
|
||||
}
|
||||
}
|
||||
checkLanguageLocal()
|
||||
|
|
|
@ -7,6 +7,7 @@ export const useLanguage = () => {
|
|||
|
||||
const setLanguageCode = ({ languageCode }: { languageCode: string }) => {
|
||||
LanguageService.setLanguageCode({ langCode: languageCode })
|
||||
LanguageService.seti18nConfig({ langCode: languageCode })
|
||||
}
|
||||
|
||||
return { Strings, setLanguageCode }
|
||||
|
|
|
@ -21,11 +21,13 @@ export const LanguageService = {
|
|||
setAllData: ({ data }: { data: Record<string, any> }) => {
|
||||
allString = data
|
||||
},
|
||||
seti18nConfig: ({ langCode }: { langCode: string }) => {
|
||||
i18n.translations = { [langCode]: Strings }
|
||||
i18n.locale = langCode
|
||||
I18nManager.forceRTL(false)
|
||||
seti18nConfig: ({ langCode }: { langCode?: string }) => {
|
||||
if (langCode) {
|
||||
i18n.translations = { [langCode]: Strings }
|
||||
i18n.locale = langCode
|
||||
}
|
||||
|
||||
I18nManager.forceRTL(false)
|
||||
moment.locale(langCode)
|
||||
},
|
||||
setLanguageCode: ({ langCode }: { langCode?: string }) => {
|
||||
|
@ -40,16 +42,12 @@ export const LanguageService = {
|
|||
Object.keys(changeListeners).forEach((k) => {
|
||||
changeListeners[k](langCode)
|
||||
})
|
||||
if (langCode) {
|
||||
i18n.translations = { [langCode]: Strings }
|
||||
i18n.locale = langCode
|
||||
}
|
||||
return Strings
|
||||
},
|
||||
|
||||
// @ts-expect-error Fix later
|
||||
// @ts-expect-error Fix later, Typecast callback
|
||||
onChange: ({ key }: { key: string }, cb) => {
|
||||
// @ts-expect-error Fix later
|
||||
// @ts-expect-error Fix later, Typecast callback
|
||||
changeListeners[`${key}`] = (langCode) => cb(langCode)
|
||||
},
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue