react 国际化
新人入坑,不定时分享一些工作中遇到的一些问题,或者觉得好的点

react 国际化

    使用插件: i18next

     安装插件: npm install react-i18next i18next --sav

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    //App.js
    import React, { Component } from 'react'
    import './App.css'
    import i18n from 'i18next'
    import { useTranslation, initReactI18next } from 'react-i18next'
    import SiderDemo from './Navi/Navi'
    import { Radio } from 'antd'
    import cen from './locale/en' //这里的cen 就是 中文配置包,暴露出来的是一个对象 key:value 的形式
    import czh from './locale/zh'//这里的czn 就是 英文配置包,暴露出来是一个对象 key:value 的形式
    let lng = 'zh'
     
    i18n
      .use(initReactI18next) // passes i18n down to react-i18next
      .init({
        resources: {
          en: {
            translation: { ...cen }
          },
          zh: {
            translation: { ...czh }
          }
        },
        lng: lng,
        fallbackLng: lng,
     
        interpolation: {
          escapeValue: false
        }
      })
    function onChange(e) {
      if (e.target.value === 'english') {
        lng = 'en'
        i18n
          .use(initReactI18next) // passes i18n down to react-i18next
          .init({
            resources: {
              en: {
                translation: { ...cen }
              },
              zh: {
                translation: { ...czh }
              }
            },
            lng: lng,
            fallbackLng: lng,
     
            interpolation: {
              escapeValue: false
            }
          })
      } else {
        lng = 'zh'
        i18n
          .use(initReactI18next) // passes i18n down to react-i18next
          .init({
            resources: {
              en: {
                translation: { ...cen }
    }, zh: { translation: { ...czh }
    } }, lng: lng, fallbackLng: lng, interpolation: { escapeValue: false } }) } }
     function App() {
     const { t } = useTranslation()
     window.$t = t  //将 t 挂载在 window 上,以至于在其他组建调用时不需要再次引入
    return (
    <div>
    <SiderDemo>
    <div className="lng">
    <Radio.Group onChange={onChange} defaultValue="chinese"//当Radio 组件状态改变时,lng也得改变对应的 值
     <Radio.Button value="chinese">中文</Radio.Button>
     <Radio.Button value="english">English</Radio.Button>
     </Radio.Group> </div> </SiderDemo> </div> )
    }
    export default App
     
     
    //需要使用国际化的组件
    //仅为示范例,并无逻辑
     <Header style={{ background: '#000', padding: 0 }}>
                    <span
                      style={{
                        color: '#fff',
                        paddingLeft: '2%',
                        fontSize: '1.4em'
                      }}
                    ></span>
                    <span
                      style={{
                        color: '#fff',
                        paddingLeft: '2%',
                        fontSize: '1.4em'
                      }}
                    >
                      {window.$t('cgg')} //这里就是调用国际化cgg 是配置文件里面的 key,展示的便是 key对应的value
                    </span>
                    <span
                      style={{ color: '#fff', float: 'right', paddingRight: '1%' }}
                    >
                      <img src={logo} className="App-logo" alt="logo" />
                    </span>
                  </Header>

      

    posted @   鲜沐溪琳  阅读(77)  评论(0编辑  收藏  举报
    相关博文:
    阅读排行:
    · Manus爆火,是硬核还是营销?
    · 终于写完轮子一部分:tcp代理 了,记录一下
    · 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
    · 单元测试从入门到精通
    · 震惊!C++程序真的从main开始吗?99%的程序员都答错了
    点击右上角即可分享
    微信分享提示