我有以下代码:
import i18n from 'i18next'
import { initReactI18next } from 'react-i18next'
import locales from 'locales'
const resources = {
en: locales.en,
no: locales.no,
de: locales.de,
se: locales.se
}
function getDefaultLocale() {
const preferredLanguage = localStorage.getItem('preferredLanguage')
const lng = locales.languages
.map(({ code }) => code)
.find(code =>
code === preferredLanguage || // The user has set a preferred language
code === '__DEFAULT_LOCALE__' || // Default locale set at build time.
code === navigator.language
)
return lng
}
i18n
.use(initReactI18next)
.init({
resources,
lng: getDefaultLocale(),
appendNamespaceToCIMode: true
})
export default i18n
我的问题是,假设用 检测到英语时navigator.language
,它可能是en
, en-US
, en-GB
,或者对于挪威语,它可能是nb
,nb-NO
等ny-NO
。
我们希望为所有英语语言代码提供相同的翻译,并为所有挪威语言代码提供相同的翻译。
我目前的解决方案是像这样定义资源:
const resources = {
en: locales.en,
'en-US': locales.en,
'en-GB': locales.en,
no: locales.no,
'nb-NO': locales.no,
'ny-NO': locales.no,
de: locales.de,
se: locales.se
}
但是必须有更好的解决方案!有人可以帮忙吗?