方案描述:因爲採用單頁面,因此按鈕切換時會刷新頁面 html
一、安裝 react-intl babel-plugin-react-intl json-loaderreact
npm i react-intl babel-plugin-react-intl json-loader --save-dev
二、修改webpack.config.js 與 webpack.production.config.jswebpack
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" },
<script src="/build/en-US.js"></script> <script src="/build/index.js"></script>
index-zh.html同理git
en.json
{ "Home.Title": "username", "Home.BUtton": "login" }
zh.json { "Home.Title": "用戶名", "Home.BUtton": "登陸" }
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, };
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') );
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;
參考demo: https://github.com/yangstar/intl-examplegithub