• react 国际化 react-i18next


    重点:

    动态切换语言,不刷新页面的情况下切换,无需redux(从官网文档找到):

    选择插件 react-i18next,

    先安装npm install i18next react-i18next --save 

    然后引入依赖代码如下,

    import React from 'react';
    import ReactDOM from 'react-dom';
    import i18n from 'i18next';
    import { useTranslation, initReactI18next } from 'react-i18next';
    import langCN from './langCN.js'
    import langEN from './langEN.js'
    i18n
      .use(initReactI18next) // passes i18n down to react-i18next
      .init({
        // the translations
        // (tip move them in a JSON file and import them)
        resources: {
          en: {
            translation: langEN
          },
          zh: {
            translation: langCN
          }
        },
        lng: 'en',
        fallbackLng: 'en',
    
        interpolation: {
          escapeValue: false
        }
      });
    function App() {
      const { t } = useTranslation();
      React.translate = t;
      return (
        <Provider store={store}>
            <HashRouter>
              <LocaleProvider locale={zhCN}>
                <Main />
              </LocaleProvider>
            </HashRouter>
        </Provider >
      );
    }
    ReactDOM.render(
      <App />
      ,
      document.getElementById('app')
    );
    

      

     注意:useTranslation()必须是函数组件中使用否则会报,hooks错误。

     React.translate = t; 将该方法放到全局函数中。
     

     

     <div className={styles.savingText}>{React.translate('year')}</div>

    使用全局定义的方法即可进行转换。

    目前为止,还没有用到 i18next-xhr-backend , 这个插件可以使你的 json 文件放到 public 目录下使用(下例 Locales JSON)。 

    而 i18next-browser-languagedetector , 可以帮助你自动识别浏览器语言

    cnpm install i18next-xhr-backend i18next-browser-languagedetector --save

    方式二:请求后台数据

     Basic sample with XHR JSON:

    cnpm install i18next-xhr-backend i18next-browser-languagedetector i18next-multiload-backend-adapter --save
    i18n
      .use(BackendAdapter)
      // detect user language
      .use(LanguageDetector)
      // pass the i18n instance to react-i18next.
      .use(initReactI18next)
      // init i18next
      // for all options read: https://www.i18next.com/overview/configuration-options
      .init({
        lng: navigator.language,
        fallbackLng: 'en',
        debug: true,
        preload: navigator.languages,
        interpolation: {
          escapeValue: false // not needed for react as it escapes by default
        },
        backend: {
          backend: XHR,
          allowMultiLoading: true,
          backendOption: {
            loadPath: function(lngs, namespaces) {
              console.log(lngs, namespaces);
              return 'https://my-json-server.typicode.com/TserHub/Json/qinwm?lng={{lng}}&ns={{ns}}';
            },
            addPath:
              'https://my-json-server.typicode.com/TserHub/Json/qinwm?lng={{lng}}&ns={{ns}}'
          }
        }
      });
    

     


    转载自:https://www.cnblogs.com/jserhub/p/12651376.html

  • 相关阅读:
    【UOJ 53】线段树区间修改
    【洛谷 1057】传球游戏
    【洛谷 2430】严酷的训练
    【UOJ 51】最接近神的人
    【洛谷 1908】逆序对
    【UOJ 50】树状数组2
    Kafka单机安装
    Linux查看磁盘使用情况命令
    CentOS7查看和关闭防火墙
    Kafka学习(三)——Java工具类、Springboot集成批量消费、SparkStreaming集成
  • 原文地址:https://www.cnblogs.com/xiaoyaoweb/p/13025011.html
Copyright © 2020-2023  润新知