{intl.get('SIMPLE')}
);
}
}
调用
HTML Message (HTML 消息)
locale data:
{ "TIP": "This is HTML" }
js code:
intl.getHTML('TIP');
Default Message (设置默认消息)
js code:
intl.get('not-exist-key').defaultMessage('default message')
也可以用简写设置默认值
intl.get('not-exist-key').d('default message')
getHTML 也支持默认值
intl.getHTML('not-exist-key').d(hello
)
Message With Variables (消息添加变量)
locale data:
{ "HELLO": "Hello, {name}. Welcome to {where}!" }
js code:
intl.get('HELLO', {name:'Tony', where:'Alibaba'})
在umi-react项目中加入国际化
在根目录新建locales文件夹, 添加locale描述文件
en_US.js 文件
export default {
user: {
login: {
loginBtn: 'login',
placeholderName: 'Please input user name',
placeholderPws: 'Please input password',
forgetPwd: 'Forget password',
remember: 'Remember me',
},
logout: 'logout'
}
}
zh_CN.JS 文件
export default {
user: {
login: {
loginBtn: '登录',
placeholderName: '请输入用户名',
placeholderPws: '请输入密码',
forgetPwd: '忘记密码',
remember: '记住我',
},
logout: '退出登录'
}
}
在global modle中添加初始化state和Effect(changeLocale)和reducers(setLocale)
import intl from 'react-intl-universal';
import locales from '../locales';
import storage from 'utils/localStorage';
const defaultState = {
currLocale: storage.get('locale') || 'zh_CN',
localeLoad: false,
}
export default {
namespace: 'global',
state: defaultState,
effects: {
*changeLocale({ payload }, { call, put }) {
const params = {
currentLocale: payload,
locales
};
// 初始化国际化
yield intl.init(params);
yield put({
type: 'setLocale',
payload: {
currLocale: payload,
localeLoad: true,
}
});
// 把当前国际化持久化到 localstorage 中
storage.add('locale', payload);
},
},
reducers: {
setLocale(state, { payload }) {
return {
...state,
...payload,
};
},
},
};
在layouts index.js 中掉用changeLocale初始化国际化和antd组件国际化
import React, { Component } from 'react'
import BaseLayout from './baseLayout';
import { LocaleProvider } from 'antd';
import { connect } from 'dva';
import zh_CN from 'antd/lib/locale-provider/zh_CN';
import en_US from 'antd/lib/locale-provider/en_US';
import { init } from './init';
@connect(({global}) => {
return {
currLocale: global.currLocale,
localeLoad: global.localeLoad,
}
})
class Index extends Component {
constructor() {
super();
init();
this.state = {
initDone: false,
}
}
componentDidMount() {
const {dispatch, currLocale} = this.props;
// 更改国际化
dispatch({
type: 'global/changeLocale',
payload: currLocale,
});
}
/**
* 初始intl国际化和antd组件国际化
*/
renderBody = () => {
const {location: {pathname}, children, currLocale, localeLoad } = this.props;
if (pathname === '/login') {
return localeLoad &&
{ loginErr && }
);
}
}
export default Login;
结束语
国际化已经完成, 代码已放到github上,大家可以自行查看umi-react。如果觉得不错,请 start 一下
我建了一个QQ群,大家加进来,可以一起交流。群号 787846148https://www.cnblogs.com/qiaojie/p/9673609.html
