我试图编码一个端点在express和这里是我的文件结构:
.
├── API/
│ └── login.js
└── i18n/
└── index.js
(我尝试使用i18n.t()和i18n.getResource()
import React, { Component, useEffect, useState } from "react"
import { Redirect, useHistory } from "react-router-dom"
import MetaTags from "react-meta-tags"
import { useTranslation } from 'react-i18next'
export default function Login(props) {
const dispatch = useDispatch()
const history = useHistory()
const { t, i18n } = useTranslation("ActivateActivate")
const changeLanguageHandler = (lang) => {
i18n.changeLanguage(lang)
console.log(i18n.language, i18n.t("Login Now"), "i18n.t")
console.log(i18n.language, i18n.getResource(i18n.language, "ActivateActivate", "Login Now"), "i18n.getResource")
}
useEffect(() => {
changeLanguageHandler("zh-hk")
changeLanguageHandler("en")
changeLanguageHandler("zh-hk")
}, [])
return (
<div>
...
</div>
)
}
i18n / index.js
import i18n from "i18next";
import LanguageDetector from "i18next-browser-languagedetector";
import { initReactI18next } from "react-i18next";
import Backend from 'i18next-http-backend';
let resources = {
"en": {
"ActivateActivate": {
"Login Now": "Login Now現在登入"
},
},
"zh-hk": {
"ActivateActivate": {
"Login Now": "現在登入"
},
},
}
i18n
.use(Backend)
.use(LanguageDetector)
.use(initReactI18next)
.init({
resources,
preload: ['en', 'zh-hk', 'zh-cn'],
fallbackLng: "en",
debug: true,
// have a common namespace used around the full app
ns: ["ActivateActivate"],
// defaultNS: "ActivateActivate",
keySeparator: false, // we use content as keys
interpolation: {
escapeValue: false
}
});
export default i18n;
结果如下:
i18next: languageChanged zh-hk
i18next.js:31 i18next::translator: missingKey zh-hk translation Login Now Login Now
Login.js:125 zh-hk Login Now i18n.t
Login.js:126 zh-hk 現在登入 i18n.getResource
i18next.js:31 i18next: languageChanged en
i18next.js:31 i18next::translator: missingKey en translation Login Now Login Now
Login.js:125 en Login Now i18n.t
Login.js:126 en Login Now現在登入 i18n.getResource
i18next.js:31 i18next: languageChanged zh-hk
i18next.js:31 i18next::translator: missingKey zh-hk translation Login Now Login Now
Login.js:125 zh-hk Login Now i18n.t
Login.js:126 zh-hk 現在登入 i18n.getResource
对于结果,i18n.getResource()选择正确的语言,但i18n.t()映射错误的值,我的问题是:
我怎么修复?感谢所有!
======================================
我发现.
├── API/
│ └── login.js
└── i18n/
└── index.js
是不工作在我的代码原因:
.
├── API/
│ └── login.js
└── i18n/
└── index.js
使用默认命名空间“translator”,这不是我选择的命名空间.
├── API/
│ └── login.js
└── i18n/
└── index.js
在使用i18next: languageChanged zh-hk
i18next.js:31 i18next::translator: missingKey zh-hk translation Login Now Login Now
Login.js:125 zh-hk Login Now i18n.t
Login.js:126 zh-hk 現在登入 i18n.getResource
i18next.js:31 i18next: languageChanged en
i18next.js:31 i18next::translator: missingKey en translation Login Now Login Now
Login.js:125 en Login Now i18n.t
Login.js:126 en Login Now現在登入 i18n.getResource
i18next.js:31 i18next: languageChanged zh-hk
i18next.js:31 i18next::translator: missingKey zh-hk translation Login Now Login Now
Login.js:125 zh-hk Login Now i18n.t
Login.js:126 zh-hk 現在登入 i18n.getResource
这对解决问题有帮助吗?