react项目国际化

本文详细介绍了如何利用react-intl库在React项目中实现国际化,包括原理、步骤、子组件和非组件的国际化处理,以及与后端同步语言状态的方法,如通过cookie实现。还提供了示例代码链接和报错处理策略。
摘要由CSDN通过智能技术生成

一:国际化的实现原理

准备自己翻译好的语言包例如zh.json、en.json(结构为{ ‘hello’: ‘你好,世界’}),用一个变量存储当前选择的语言locale,根据locale选择应用哪个json, 再根据id ‘hello’,替换为对应的message ‘你好,世界’

二:用react-intl实现国际化

✨步骤概要

  1. 安装 react-intl
  2. 载入react-intl的语言包
  3. 用< IntlProvider >组件包裹业务根组件
  4. 准备自己翻译的语言包(zh.json / en.json)
  5. 全局配置当前的语言,和相对应的语言包
  6. 子组件的国际化
  7. 非组件的国际化
  8. antd组件国际化
  9. 添加切换语言按钮
  10. 报错catch
  11. node遍历messages.tsx文件生成zh.json工具

✨步骤分解

( 以下示例代码详情见项目
common-base:http://gitlab.sftcwl.com/tblh-fe/common-base
apodidae: http://gitlab.sftcwl.com/oms-tms/apodidae )

  1. 安装 react-intl
 npm install react-intl --save 
  1. 载入react-intl的语言包
// common-base/utils/i18n.tsx
// React Intl 依赖这些数据来支持单复数和相对时间格式化的功能
import {
    addLocaleData } from 'react-intl';
import * as enLocaleData from 'react-intl/locale-data/en';
import * as zhLocaleData from 'react-intl/locale-data/zh';
addLocaleData(enLocaleData);
addLocaleData(zhLocaleData);
  1. 用< IntlProvider >组件包裹业务根组件
// 用<IntlProvider>包裹根组件,这个组件树之后就会在配置的i18n上下文中了
// common-base/containers/LanguageProvider、apodidae/src/index-dev.tsx
import {
    IntlProvider } from 'react-intl';
<IntlProvider
  locale = {
    locale }
  key = {
    locale }
  messages = {
    msg } 
  defaultLocale = {
    'en' } 
>
  <Main /> // 业务根组件
</IntlProvider>

抛错注意:若locale=en,找不到对应的英文翻译包en.json时,当defalutLocale与locale相同,并且编写了defaultMessage, 则使用defaultMessage的翻译;当defalutLocale与locale不同,即使编写了defaultMessage,也会抛错。

  1. 准备自己翻译的语言包(zh.json / en.json)
// src/translations/zh.json
{
   
  "project.homePage": "首页",
  "project.system": "系统管理",
}
  1. 全局配置当前的语言,和自己翻译的语言包
// 引入语言包
// common-base/utils/i18n.tsx
const zhTranslationMessages = require('../../src/translations/zh.json');
const enTranslationMessages = require('../../src/translations/en.json');
export const translationMessages: MessagesMap = 
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值