javascript - 如何在反应应用程序中使用 i18next 和反应路由器 dom 修补链接?
问题描述
我希望在更改语言时创建地址中的语言缩写,例如 localhost:3000/firstpage/en
他希望有人帮助我使用哪些库以及如何使用它,因为我什至不知道如何开始。
这是一个简单的项目结构
/src/i18n.js - i18n 设置
import Backend from 'i18next-http-backend';
import LanguageDetector from 'i18next-browser-languagedetector'
import {initReactI18next} from 'react-i18next';
i18n.use(Backend)
.use(LanguageDetector)
.use(initReactI18next)
.init({
fallbackLng: 'pl',
debug: false,
detection: {
order: ['queryString', 'cookie'],
cache: ['cookie']
},
interpolation: {
escapeValue: false,
},
returnObjects: true
});
export default i18n;
/src/index.js
import React, { Suspense } from "react";
import ReactDOM from 'react-dom';
import App from './App';
import './i18n';
ReactDOM.render(
<Suspense fallback={<>Loading.. </>}>
<App />
</Suspense>,
document.getElementById('root')
);
/src/App.js
import React from "react";
import {BrowserRouter, Switch, Route} from 'react-router-dom';
import Header from './components/Header'
import HomePage from './components/Page/HomePage'
import FirstPage from './components/Page/FirstPage'
import SecondPage from './components/Page/SecondPage'
import './App.css'
export default function App() {
return (
<>
<BrowserRouter>
<Header/>
<Switch>
<Route exact path="/" component={HomePage} />
<Route path="/FirstPage" component={FirstPage} />
<Route path="/SecondPage" component={SecondPage} />
</Switch>
</BrowserRouter>
</>
)
}
/src/components/Header.js
import React from 'react'
import {Link} from "react-router-dom";
import { useTranslation } from 'react-i18next'
export default function Header() {
const {i18n} = useTranslation()
const changeLanguage = (language) => {
i18n.changeLanguage(language)
}
return (
<div>
Header:
<ul>
<li> <Link to="/"> HOME PAGE </Link></li>
<li> <Link to="/FirstPage"> First Page </Link></li>
<li> <Link to="/SecondPage"> Secon dPage </Link></li>
</ul>
<div>
Lang Selector
<ul>
<li>
<button onClick={() => changeLanguage("en") } >EN</button>
</li>
<li>
<button onClick={() => changeLanguage("pl") } >PL </button>
</li>
</ul>
</div>
</div>
)
}
/src/components/Page/FirstPage.js -- 示例子页面
import React from 'react'
import { useTranslation } from 'react-i18next'
export default function FirstPage() {
const {t} = useTranslation()
return (
<div>
-- [FirstPage] --
<div>
- {t("FirstPage.Comment1")} <br/> <br/>
- {t("FirstPage.Comment2")}
</div>
</div>
)
}
/public/locales/en/translation.json - 示例翻译
{
"Home": {
"Hi": "Hello"
},
"FirstPage":{
"Comment1": "How are u?",
"Comment2": "Fine, and u?"
}
}
解决方案
推荐阅读
- php - PDO SQL 使用 " 和 ' 输入文本字段
- css - MacbookPro Safari 12.0 rgba 不透明度问题
- ios - 如何删除字符串中也存在于字符串数组中的那些字符?
- android - 收到推送通知时更新视图
- asp.net-mvc - 如何使用 SignalR 在 MVC 中实时通知?
- c# - 如何重置单选按钮列表中的项目?
- python - 使用 python3 生成 xml
- visual-studio-2017 - NuGet 尝试从包文件夹中删除旧包时路径中的非法字符
- python - Flask Alchemy 如何创建格式化的电子邮件列或用于保存传记段落的列
- c++ - c:\...\source\repos\HelloWorld\Debug\HelloWorld.exe(进程 3764)以代码 0 退出