用i18next使你的应用国际化-React

用i18next使你的应用国际化-React本文介绍了如何在 React 项目中使用 i18next 进行国际化 包括语言检测 复数和插值处理 格式化 上下文 翻译与代码分离以及多个命名空间的管理

大家好,欢迎来到IT知识分享网。

ref: https://www.i18next.com/

i18next是一个用JavaScript编写的国际化框架。

i18next为您提供了一个完整的解决方案,本地化您的产品从web端到移动端和桌面端。

在react项目中安i18next依赖:

  • i18next
  • react-i18next
  • i18next-browser-languagedetector,用于检测用户语言
npm install i18next react-i18next i18next-browser-languagedetector 

创建i18n.js文件:

import i18n from 'i18next'; import { initReactI18next } from 'react-i18next'; import LanguageDetector from 'i18next-browser-languagedetector'; i18n .use(LanguageDetector) // 检测用户语言 .use(initReactI18next) // 将i18n实例传递给react-i18next .init({ // 初始化 i18next debug: true, fallbackLng: 'en', interpolation: { escapeValue: false, // React已经转义了 }, resources: { en: { translation: { // 此处放置翻译内容 description: { part1: 'Edit <1>src/App.js</1> and save to reload.', part2: 'Learn React' } } }, de: { translation: { description: { part1: 'Ändere <1>src/App.js</1> und speichere um neu zu laden.', part2: 'Lerne React' } } } } }); export default i18n; 

index.js中导入i18n.js

React>=18.0.0的版本:

import React from 'react'; import { createRoot } from 'react-dom/client'; import './index.css'; import App from './App'; // 导入 i18n (需要绑定) import './i18n'; const root = createRoot(document.getElementById('root')) root.render( <React.StrictMode> <App /> </React.StrictMode> ); 

更早的版本:

import React from 'react'; import ReactDOM from 'react-dom'; import './index.css'; import App from './App'; // 导入 i18n (需要绑定) import './i18n'; ReactDOM.render( <React.StrictMode> <App /> </React.StrictMode>, document.getElementById('root') ); 

使用:在第一个文本中使用了Trans组件,在第二个文本中使用了useTranslation (hook):

// App.js import logo from './logo.svg'; import './App.css'; import { useTranslation, Trans } from 'react-i18next'; function App() { const { t } = useTranslation(); return ( <div className="App"> <header className="App-header"> <img src={logo} className="App-logo" alt="logo" /> <p> <Trans i18nKey="description.part1"> Edit <code>src/App.js</code> and save to reload. </Trans> </p> <a className="App-link" href="https://reactjs.org" target="_blank" rel="noopener noreferrer" > {t('description.part2')} </a> </header> </div> ); } export default App; 

语言切换器

// App.jsx ... const lngs = { en: { nativeName: 'English' }, de: { nativeName: 'Deutsch' } }; function App() { ... <img src={logo} className="App-logo" alt="logo" /> <div> {Object.keys(lngs).map((lng) => ( <button key={lng} style={ 
  { fontWeight: i18n.resolvedLanguage === lng ? 'bold' : 'normal' }} type="submit" onClick={() => i18n.changeLanguage(lng)}> {lngs[lng].nativeName} </button> ))} </div> <p> <Trans i18nKey="description.part1"> Edit <code>src/App.js</code> and save to reload. </Trans> </p> ... } 

react language switcher

自i18next v21以来,i18next. resolvedlanguage被设置为当前解析的语言,并且可以用作主要使用的语言,上例中有使用。

i18next.language vs. i18next.languages
i18next.language; // 设置为当前检测或设置的语言 i18next.languages; // 设置为将用于查找翻译值的语言代码数组 // 设置语言后,将使用新的语言代码填充此数组 // 除非被覆盖,否则将使用该代码的不太特定的版本填充此数组,以用于回退目的,然后是回退语言列表 // 初始化回退语言 i18next.init({ 
    fallbackLng: ["es", "fr", "en-US", "dev"] }); // 改变语言 i18next.changeLanguage

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/117736.html

(0)
上一篇 2025-11-18 17:45
下一篇 2025-11-18 18:10

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信