mirror of
https://github.com/ragestudio/comty.git
synced 2025-06-10 02:54:15 +00:00
57 lines
1.6 KiB
JavaScript
57 lines
1.6 KiB
JavaScript
import { DEFAULT_LOCALE, SUPPORTED_LOCALES } from './locales'
|
|
import i18n from 'i18next'
|
|
import { initReactI18next } from 'react-i18next'
|
|
|
|
export {
|
|
DEFAULT_LOCALE,
|
|
SUPPORTED_LOCALES,
|
|
SUPPORTED_LANGUAGES,
|
|
extractLocaleFromPath,
|
|
} from './locales'
|
|
|
|
// This is a dynamic import so not all languages are bundled in frontend.
|
|
// For YAML format, install `@rollup/plugin-yaml`.
|
|
const messageImports = import.meta.glob('./translations/*.json')
|
|
|
|
function importLocale(locale) {
|
|
const [, importLocale] =
|
|
Object.entries(messageImports).find(([key]) =>
|
|
key.includes(`/${locale}.`)
|
|
) || []
|
|
|
|
return importLocale && importLocale()
|
|
}
|
|
|
|
export async function loadAsyncLanguage(i18n, locale = DEFAULT_LOCALE) {
|
|
try {
|
|
const result = await importLocale(locale)
|
|
if (result) {
|
|
i18n.addResourceBundle(locale, 'translation', result.default || result)
|
|
i18n.changeLanguage(locale)
|
|
}
|
|
} catch (error) {
|
|
console.error(error)
|
|
}
|
|
}
|
|
|
|
export async function installI18n(locale = '') {
|
|
locale = SUPPORTED_LOCALES.includes(locale) ? locale : DEFAULT_LOCALE
|
|
const messages = await importLocale(locale)
|
|
|
|
i18n
|
|
.use(initReactI18next) // passes i18n down to react-i18next
|
|
.init({
|
|
// debug: true,
|
|
resources: {
|
|
// @ts-ignore
|
|
[locale]: { translation: messages.default || messages },
|
|
},
|
|
lng: locale,
|
|
fallbackLng: DEFAULT_LOCALE,
|
|
interpolation: {
|
|
escapeValue: false, // react already safes from xss
|
|
},
|
|
})
|
|
}
|
|
|
|
export default i18n |