作者:Eliza | 来源:互联网 | 2023-01-30 17:20
React06::I18N-前言i18n(其来源是英文单词internationalization的首末字符i和n,18为中间的字符数)是“国际化”的简称。在React中,可以
前言
i18n
(其来源是英文单词 internationalization
的首末字符i
和n
,18为中间的字符数)是“国际化”的简称。
在React
中,可以使用i18next
来支持i18n
,本篇文章为大家来讲解如何在React-Typescript
项目中如何使用i18next
。
老规矩,先来share
一下本篇文档的repo
:
gitlab.com/yafeya/reac…
1. 安装依赖
这篇文档还的Demo
还是基于本系列之前的文档构建的。想要在现有项目中支持i18next
首先需要安装依赖,执行以下代码,安装依赖。
npm install i18next i18next-browser-languagedetector react-i18next
2. 使用资源
首先添加i18n.tsx
, zh.json
, 与en.json
。其中zh.json
中存放所有中文资源,en.json
中存放所有英文资源。
i18n.tsx
用来使用这两个字源文件,并进行一些基础的设置。
import i18n from "i18next";
import LanguageDetector from 'i18next-browser-languagedetector';
import enResources from "./en.json";
import zhResources from "./zh.json";
import { initReactI18next } from 'react-i18next';
const DETECTION_OPTIOnS= {
order: ['path', 'querystring']
}
i18n.use(LanguageDetector)
.use(initReactI18next)
.init({
detection: DETECTION_OPTIONS,
resources: {
en: {
translation: enResources,
},
zh: {
translation: zhResources,
},
},
fallbackLng: "zh",
debug: false,
interpolation: {
escapeValue: false,
},
})
export default i18n;
3. App
中引入i18n
import '../i18n/i18n';
export class App extends Component {
}
4. 使用translation
新建translation component
用来引入可翻译的资源。
一般可使用三种方式进行翻译:
t('testing')
testing
{t => }
let { t, i18n } = useTranslation();
<div className='translationWrapper'>
<div className='translationGroup'>
<label>{t('firstWay')}label>
<label>{t('testing')}label>
div>
<div className='translationGroup'>
<label>
<Trans>secondWayTrans>
label>
<label>
<Trans>testingTrans>
label>
div>
<div className='translationGroup'>
<label>
<Translation>{t => <div>{t('thirdWay')}div>}Translation>
label>
<label>
<Translation>{t => <div>{t('testing')}div>}Translation>
label>
div>
div>
5. 切换语言
可以通过调用i18n.changeLanguage(language)
来修改当前语言。
function onclick() {
let targetLanauge = i18n.language === 'en' ? 'zh' : 'en';
i18n.changeLanguage(targetLanauge);
}
6. SEO Friendly
使用i18n的时候,还需要注意另一点,就是确保你的app对于SEO是Friendly的,也就是说,你需要给你的客户一个能访问到正确语言的URL。
比如对于中文用户,你给的URL应该是 http://some-domain/zh
, 而对于英文用户,你给的URL应该是http://some-domain/en
。
i18next
对于SEO-Friendly
的支持做的还不错。通过设置init-options
,可以设置语言监测的顺序。
const DETECTION_OPTIOnS= {
order: ['path', 'querystring']
}
i18n.use(LanguageDetector)
.use(initReactI18next)
.init({
detection: DETECTION_OPTIONS,
})
当设置完语言信息后,可以在DevTools -> Application -> localStorage
中看到设置的结果。