Ashun's 技術駅 Ashun's 技術駅
首页
  • 前端文章

    • JavaScript
  • 学习笔记

    • 《JavaScript教程》
    • 《JavaScript高级程序设计》
    • 《ES6 教程》
    • 《Vue》
    • 《React》
    • 《TypeScript 从零实现 axios》
    • 《Git》
    • TypeScript
    • JS设计模式总结
  • HTML
  • CSS
  • Vue
  • 现代web布局
  • React
  • 技术文档
  • GitHub技巧
  • Nodejs
  • 博客搭建
  • 技术资源
  • 第一阶段

    • HTML
  • 第二阶段

    • JavaScript
  • 第三阶段

    • Vue
  • 第四阶段

    • 实战项目
  • 每周测试

    • 每周
  • 其他

    • Vue引入UI框架
    • Web前端面试
    • Vue3-resource
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 福利资源
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

Ashun

前端界的小学生
首页
  • 前端文章

    • JavaScript
  • 学习笔记

    • 《JavaScript教程》
    • 《JavaScript高级程序设计》
    • 《ES6 教程》
    • 《Vue》
    • 《React》
    • 《TypeScript 从零实现 axios》
    • 《Git》
    • TypeScript
    • JS设计模式总结
  • HTML
  • CSS
  • Vue
  • 现代web布局
  • React
  • 技术文档
  • GitHub技巧
  • Nodejs
  • 博客搭建
  • 技术资源
  • 第一阶段

    • HTML
  • 第二阶段

    • JavaScript
  • 第三阶段

    • Vue
  • 第四阶段

    • 实战项目
  • 每周测试

    • 每周
  • 其他

    • Vue引入UI框架
    • Web前端面试
    • Vue3-resource
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 福利资源
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 核心概念

  • 高级指引

  • Hook

  • 案例演示

  • 商医通项目

    • react基础笔记
    • typescript笔记
    • antd基本使用
    • react项目笔记
    • 课件-react路由-V6
    • 课件-redux-toolkit
    • 课件-国际化
      • 处理页面中自定义的文本
      • 处理antd中内置的文本
      • 结合i18n及antd一起使用
    • 课件-其他hooks
    • 课件-虚拟dom和diff算法
  • 《React》笔记
  • 商医通项目
ashun
2024-01-22
目录

课件-国际化

# 国际化

# 处理页面中自定义的文本

  1. 下载包
yarn add i18next react-i18next
1
  1. 定义语言包
// src/locales/lang/en_US.json
{
    "app":{
        "hello":"hello",
        "sz":"shenzhen",
        "click":"click",
        "name":"name",
        "age":"age",
        "address":"address",
        "tag":"tag",
        "action":"action"
    },
    "detail":{
        
    }
}
// src/locales/lang/zh_CN.json
{
    "app":{
        "hello":"你好",
        "sz":"深圳",
        "click":"点击",
        "name":"姓名",
        "age":"年龄",
        "address":"地址",
        "tag":"标签",
        "action":"行为"
    },
    "detail":{
        
    }
}
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
  1. 定义国际化配置文件
// src/locales/i18n.ts

// 引入第三方库
import i18n from 'i18next'
import {initReactI18next} from 'react-i18next'
// 导入语言包
import en_US from './lang/en_US.json'
import zh_CN from './lang/zh_CN.json'
// 语言包配置对象
const resources = {
    en:en_US,
    zh:zh_CN
}
// 初始化i18n
i18n.use(initReactI18next).init({
    resources,// 所有语言包
    lng:'en', // 默认语言,值是resource的键
    interpolation:{
        // escapeValue: 转义传入的值以避免xss注入
        // react已经处理了,这里设置为false
        escapeValue:false
    }
})

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
  1. 在入口文件中引入国际化配置文件
// 引入国际化语言包
import './locales/i18n'
1
2
  1. 在组件中使用
import React from 'react'
// 引入国际化 hook:useTranslation
import { useTranslation } from 'react-i18next'
export default function App() {
    const { t, i18n } = useTranslation(['app'])// 表示使用语言包中的app字段下面的内容
    return (
        <div>
             <p>
                <button onClick={() => {
                    i18n.changeLanguage('en')
                }}>英文</button>
                <button onClick={() => {
                    i18n.changeLanguage('zh')
                }}>中文</button>
            </p>
            {t('hello')}
        </div>
    )
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

# 处理antd中内置的文本

上面的例子中,table中的分页的文本还未实现国际化,antd中内置的文本默认使用en_US

  1. 引入ConfigProvider组件
import {Space, Table, Button, ConfigProvider} from 'antd'
1
  1. 引入antd中内置的语言包
import zhCN from 'antd/es/locale/zh_CN'
import en_US from 'antd/es/locale/en_US'
// 其他语言包可查询antd官网
1
2
3
  1. 使用ConfigProvider 包裹jsx结构,一般用来包裹整个应用结构
// 如需切换语言,只需要动态修改传入locale属性的语言包即可
<ConfigProvider locale={en_US}>
    <Table
		columns={columns}
		dataSource={dataSource}
		pagination={{
        	total:50,
            showSizeChange:true
        }}

	/>
</ConfigProvider>
1
2
3
4
5
6
7
8
9
10
11
12

# 结合i18n及antd一起使用

import { Button, Table, ConfigProvider } from 'antd'
import React,{useState} from 'react'
// 引入国际化 hook:useTranslation
import { useTranslation } from 'react-i18next'
import './App.css'
// antd 语言包
import zhCN from 'antd/es/locale/zh_CN'
import enUS from 'antd/es/locale/en_US'
import { ConfigConsumer } from 'antd/lib/config-provider'

export default function App() {
    const { t, i18n } = useTranslation(['app'])// 表示使用语言包中的app字段下面的内容
    const [locale, setLocale] = useState<string>('zh')
    return (
        <ConfigProvider locale={locale==='zh' ? zhCN : enUS}>
            <div>
                <Button type='primary' onClick={() => {
                    i18n.changeLanguage('zh')
                    setLocale('zh')
                }}>中文</Button>
                <Button type='primary' onClick={() => {
                    i18n.changeLanguage('en')
                    setLocale('en')
                }}>英文</Button>
                <div>
                    {t('hello')}

                </div>
                <Table
                    rowKey={'id'}
                    columns={[
                        {
                            title: t('index') as string,
                            render(value, row, index) {
                                return index + 1
                            }
                        },
                        {
                            title: t('name') as string,
                            dataIndex: 'name'
                        }
                    ]}
                    dataSource={[
                        {
                            id: 1,
                            name: 'yy'
                        },
                        {
                            id: 2,
                            name: 'xx'
                        }
                    ]}
                    pagination={{
                        total: 50,
                        current: 1,
                        pageSize: 10,
                        showQuickJumper: true,
                        showSizeChanger: true
                    }}
                />
            </div>
        </ConfigProvider>
    )
}
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
编辑 (opens new window)
课件-redux-toolkit
课件-其他hooks

← 课件-redux-toolkit 课件-其他hooks→

最近更新
01
课件-react路由-V6
01-22
02
课件-redux-toolkit
01-22
03
课件-其他hooks
01-22
更多文章>
Theme by Vdoing | Copyright © 2019-2024 Evan Xu | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式