方案描述:由于采用单页面,所以按钮切换时会刷新页面
1、安装 react-intl babel-plugin-react-intl json-loader
npm i react-intl babel-plugin-react-intl json-loader --save-dev
2、修改webpack.config.js 与 webpack.production.config.js
entry: { en_US: path.resolve(__dirname, './en-US.js'), zh_Hans_CN: path.resolve(__dirname, './zh-CN.js'), index: path.resolve(__dirname, 'react/inxex.js') }, output: { path: __dirname + '/build', publicPath: '/build', filename: '[name].js', chunkFilename: "[id].[name].js" },
3、新建 index-en.html/ index-zh.html
index-en.html 引入
<script src="/build/en-US.js"></script> <script src="/build/index.js"></script>
index-zh.html同理
4、新建文件夹locals 创建 en.json/zh.json
en.json
{ "Home.Title": "username", "Home.BUtton": "login" }
zh.json { "Home.Title": "用户名", "Home.BUtton": "登录" }
5、在入口文件目录下新建 en-US.js、zh-CN.js
import antdEn from 'antd/lib/locale-provider/en_US'; import appLocaleData from 'react-intl/locale-data/en'; import MSGS from './locals/en.json'; import MSGS1 from './M/en.json' window.appLocale = { messages: { ...MSGS, ...MSGS1 }, antd: antdEn, locale: 'en-US', data: appLocaleData, };
6、入口文件index.js
import ReactDOM from 'react-dom'; import React from 'react'; import App from '../component/App'; import { LocaleProvider } from 'antd'; import { addLocaleData, IntlProvider } from 'react-intl'; const appLocale = window.appLocale; addLocaleData(appLocale.data); ReactDOM.render( <LocaleProvider locale={appLocale.antd}> <IntlProvider locale={appLocale.locale} messages={appLocale.messages}> <App /> </IntlProvider> </LocaleProvider>, document.getElementById('react-content') );
7、app中使用
import React from 'react'; import { DatePicker, Pagination, Table, Icon } from 'antd'; import { FormattedMessage, defineMessages } from 'react-intl'; import InjectExample from './InjectExample'; const messages = defineMessages({ datePicker: { id: 'App.datePicker.title', defaultMessage: '日期选择', }, name: { id: 'App.talbe.name', defaultMessage: '姓名', } }); class App extends React.Component { componentDidMount() { console.log('componentDidMount') } render() {return (<div style={{ margin: 20 }}> <div style={{ margin: 10 }}> <p><a href="index.html">中文</a></p> <p><a href="index-en.html">english</a></p> </div> <div style={{ margin: 10 }}> <FormattedMessage {...messages.datePicker} />: <DatePicker /> </div> </div>); } } export default App;