From afa40f437fd6d17f5d9b4d8feecefafd20d97bd9 Mon Sep 17 00:00:00 2001 From: SpikeHD Date: Mon, 25 Jul 2022 18:13:37 -0700 Subject: [PATCH] english fallback when using other languages --- src/utils/language.ts | 77 +++++++++++++++++++++++++++++-------------- 1 file changed, 53 insertions(+), 24 deletions(-) diff --git a/src/utils/language.ts b/src/utils/language.ts index e7f02b1..76dcde8 100644 --- a/src/utils/language.ts +++ b/src/utils/language.ts @@ -21,38 +21,53 @@ export default class Tr extends React.Component { } } - componentDidMount() { + async componentDidMount() { const { text } = this.props - getConfigOption('language').then((language: string) => { - // Get translation file - if (!language) language = 'en' + let language = await getConfigOption('language') - invoke('get_lang', { lang: language }).then((response) => { - const translation_obj = JSON.parse((response as string) || '{}') + // Get translation file + if (!language) language = 'en' - // Traversal - if (text.includes('.')) { - const keys = text.split('.') - let translation: string | Record = translation_obj + const response = await invoke('get_lang', { lang: language }) + const default_resp = await invoke('get_lang', { lang: 'en' }) - for (let i = 0; i < keys.length; i++) { - if (!translation) { - translation = '' - } else { - translation = typeof translation !== 'string' ? translation[keys[i]] : (translation as string) - } - } + const translation_obj = JSON.parse((response as string) || '{}') + const default_obj = JSON.parse((default_resp as string) || '{}') - this.setState({ - translated_text: translation as string, - }) + // Traversal + if (text.includes('.')) { + const keys = text.split('.') + let translation: string | Record = translation_obj + + for (let i = 0; i < keys.length; i++) { + if (!translation) { + translation = '' } else { - this.setState({ - translated_text: translation_obj[text] || '', - }) + translation = typeof translation !== 'string' ? translation[keys[i]] : (translation as string) } + } + + // If we could not find a translation, use the default one + if (!translation) { + translation = default_obj + + for (let i = 0; i < keys.length; i++) { + if (!translation) { + translation = '' + } else { + translation = typeof translation !== 'string' ? translation[keys[i]] : (translation as string) + } + } + } + + this.setState({ + translated_text: translation as string, }) - }) + } else { + this.setState({ + translated_text: translation_obj[text] || '', + }) + } } render() { @@ -82,6 +97,7 @@ export async function getLanguages() { export async function translate(text: string) { const language = (await getConfigOption('language')) || 'en' const translation_json = JSON.parse((await invoke('get_lang', { lang: language })) || '{}') + const default_json = JSON.parse(await invoke('get_lang', { lang: 'en' })) // Traversal if (text.includes('.')) { @@ -96,6 +112,19 @@ export async function translate(text: string) { } } + // If we could not find a translation, use the default one + if (!translation) { + translation = default_json + + for (let i = 0; i < keys.length; i++) { + if (!translation) { + translation = '' + } else { + translation = typeof translation !== 'string' ? translation[keys[i]] : (translation as string) + } + } + } + return translation } else { return translation_json[text] || ''