pte*_*ira 15 javascript translation i18next reactjs
我正在开发使用反应的多语言应用程序,i18next和i18next-browser-languagedetector.
我通过以下方式初始化i18next:
i18n
.use(LanguageDetector)
.init({
lng: localStorage.getItem(I18N_LANGUAGE) || "pt",
fallbackLng: "pt",
resources: {
en: stringsEn,
pt: stringsPt
},
detection: {
order: ["localStorage", "navigator"],
lookupQuerystring: "lng",
lookupLocalStorage: I18N_LANGUAGE,
caches: ["localStorage"]
}
});
export default i18n;
Run Code Online (Sandbox Code Playgroud)
我已经实现了一个语言选择器,它只是改变localStorage了用户选择的值.
这是正确的做法吗?
我问,因为即使这有效,我觉得我通过设置"作弊" localStorage.getItem(I18N_LANGUAGE) || "pt"并且我没有按照我的意愿使用语言检测.
根据文档,您不需要自己指定语言:
import i18next from 'i18next';
import LngDetector from 'i18next-browser-languagedetector';
i18next
.use(LngDetector)
.init({
detection: options
});
Run Code Online (Sandbox Code Playgroud)
而根据这片源中i18next,它的确使用了插件的检测能力:
if (!lng && this.services.languageDetector) lng = this.services.languageDetector.detect();
这是正确的做法吗?
所以,不,不是。让插件完成它的工作。:)
希望这对将来的人有帮助。该文档并没有完全让你全面了解如何设置检测,然后我发现了一个已关闭的 Github 问题,其中有几个人提出了一个合理的问题,维护人员的回答有点粗鲁,但也碰巧提供了一个应该在文档中的链接- 但在 Github 评论之外绝对没有被引用。该示例通过对当前文档所述的操作进行一些小的调整,解决了我的问题。
然后,我能够在我的网址中进行语言检测,https:www.domain.com?lng=es以及在使用允许我更改浏览器语言的浏览器扩展时进行语言检测。
这是我的工作i18n.ts文件:
import i18n from 'i18next'
import LanguageDetector from 'i18next-browser-languagedetector'
import { initReactI18next } from 'react-i18next'
import XHR from "i18next-http-backend" // <---- add this
import commonDe from './locales/de/common.json'
import commonEn from './locales/en/common.json'
import commonEs from './locales/es/common.json'
import commonFr from './locales/fr/common.json'
const resources = {
de: { common: commonDe },
en: { common: commonEn },
es: { common: commonEs },
fr: { common: commonFr }
}
const options = {
order: ['querystring', 'navigator'],
lookupQuerystring: 'lng'
}
i18n
.use(XHR) // <---- add this
.use(LanguageDetector)
.use(initReactI18next)
.init({
// lng: 'en' // <--- turn off for detection to work
detection: options,
resources,
ns: ['common'],
defaultNS: 'common',
fallbackLng: 'en',
supportedLngs: ['de', 'en', 'es', 'fr'],
interpolation: {
escapeValue: false,
},
debug: false,
})
export default i18n
Run Code Online (Sandbox Code Playgroud)
(额外帮助 - 如果有人在这部分遇到困难)
我正在 Next.js 项目中工作,上面的文件加载到文件中,project-root/pages/_app.tsx如下所示:
import React from 'react'
import { AppProps } from 'next/app'
import '../i18n/i18n'
import '../public/styles.css'
const TacoFridayApp = ({ Component, pageProps}: AppProps): JSX.Element => {
return <Component {...pageProps} />
}
export default TacoFridayApp
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11245 次 |
| 最近记录: |