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

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

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

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

在react项目中安i18next依赖:

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
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
React-i18next是一个用于React应用程序的国际化(i18n)库,它帮助开发者轻松地在应用中实现多语言支持。它结合了Reacti18next这两个库的优点,让翻译文本变得简单且管理起来更加高效。 以下是使用React-i18next的基本步骤: 1. 安装依赖: ``` npm install react-i18next i18next axios // 如果你想从服务器获取翻译文件 ``` 2. 创建i18n配置: 在项目的`i18n.js`或类似的文件中,设置默认的语言、提供翻译资源(通常是JSON文件)、并初始化i18next: ```javascript import i18n from 'i18next'; import Backend from 'i18next-http-backend'; // 使用axios或其他HTTP backend i18n .use(Backend) // 加载HTTP backend .init({ lng: 'en', // 默认语言 fallbackLng: 'en', // 当语言不可用时的备选语言 resources: { // 翻译资源,例如:'locales': ['en', 'de'] 对应的文件路径 en: require('./locales/en.json'), de: require('./locales/de.json'), }, interpolation: { escapeValue: false, // 取消转义HTML特殊字符 }, }); ``` 3. 配置React: 在`App.js`或组件中引入`react-i18next`并使用`<Translation>`或`useTranslation` Hook: ```javascript import { AppProvider, useTranslation } from 'react-i18next'; function App() { const { t } = useTranslation(); return ( <AppProvider> {/* 你的组件代码 */} <h1>{t('greeting')}</h1> // 使用t函数访问翻译后的文本 </AppProvider> ); } ``` 4. 动态加载语言: 使用`i18next.changeLanguage`方法在用户切换语言时更新语言: ```javascript function changeLanguage(newLang) { i18n.changeLanguage(newLang).then(() => { // 异步处理成功后执行 }); } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值