zoukankan      html  css  js  c++  java
  • 「react」让后台走向国际化 i18next

    国际化

    背景

    我使用的是react,采用的是i18next技术。

    支持

    包含react,vue,angular等语言,具体的,可以查看文档

    安装

    npm install react-i18next i18next --save
    //或者
    yarn add react-i18next i18next
    

    使用

    • 在index.js相同的路径下,创建一个文件,名为i18n.js,这个文件是react i18的配置文件,这里面的内容为:
    import i18n from 'i18next';
    import { initReactI18next } from 'react-i18next'; 
    
    import {en} from './locals/en-US'
    import {cn} from './locals/cn-US'
    
    const resources = {
        en: {
          translation: en
        },
        cn: {
          translation: cn
        }
      };
    
    i18n.use(initReactI18next) 
        .init({
            resources,
            lng: localStorage.language||'cn',
            fallbackLng:'cn',
            interpolation: {
                escapeValue: false, 
            }
        });
    
    
    export default i18n;
    

    我这里已经将英文与汉语的文字写成独立的文件,如果不写,直接写成一个对象即可。

    en-US.js

    export const en={
        common:{
            welcome: "Welcome to the product configuration of FOREO",
            language:'language',
            chinese:'chinese',
            english:'english'
        },
        menu:{
            product:'product'
        },
        product:{
            title:'product configuration',
        }
    }
    
    • 在index.js中引入
    import './i18n'
    
    ReactDOM.render(
      <App />,
      document.getElementById('root')
    );
    
    • 在对应的component中使用如下(在hook中应用)
    import {useTranslation} from 'react-i18next'
    
    function App(){
        const { t, i18n } = useTranslation();
        
        function changeLanguage(e){//更改语言
            i18n.changeLanguage(e)
        }
        return (
            <Select onChange={changeLanguage} style={{120}} defaultValue={localStorage.language}>
              <Option value="cn">{t('common.chinese')}</Option>
              <Option value="en">{t('common.english')}</Option>
            </Select>
        )
    }
    

    问题

    在实际使用时,我的左菜单是单独一个js文件,所以我遇到的问题是:在js中使用语言切换。

    menu.js

    import i18n from 'i18n'
    
    const menus = [
      {
        key: 1,
        text: i18n.t('menu.product')
      }
    ]
    
    i18n.on('languageChanged', (e) => {
      window.location.reload()
    });
    

    其中i18n.on函数是重点,如果不加,切换语言时,左侧菜单并不会切换,需要做一个reload。

    效果图如下:

    还有一个小提示,最好将系统中的选择的语言放在缓存里,我是放在localstorage里,每次reload时,都不会出现语言不对的情况。

    由于我的这段代码在项目中运用到,就不单独开一个仓库存放啦,若有需求,请在评论区评论,若人数多,我就开个仓库,感谢观看,谢谢~

    (本文完)

  • 相关阅读:
    解决Linux下gets函数警告
    freopen文件操作后控制台输入输出
    Linux C编程下没有 itoa()函数的问题
    codeforces 631A Interview
    codeforces 617BChocolate
    codeforces 630KIndivisibility(容斥原理)
    codeforces 633B A Trivial Problem
    codeforces 624B Making a String
    codeforce 621A(水题)
    codeforces 624A Save Luke(水题)
  • 原文地址:https://www.cnblogs.com/zdping/p/13970099.html
Copyright © 2011-2022 走看看