我试图弄清楚如何使用 React-Intl 更改语言。这是我的第一个 React 应用程序,它是使用 create-react-app 制作的,我没有使用 Redux 或 Flux。
在我的 index.js 中,我有以下代码:
import React from 'react';
import ReactDOM from 'react-dom';
import TodoApp from './components/TodoApp';
import registerServiceWorker from './registerServiceWorker';
import './index.css';
// Bootstrap CSS libraries
import 'bootstrap/dist/css/bootstrap.css';
import 'bootstrap/dist/css/bootstrap-theme.css';
import { IntlProvider, addLocaleData } from 'react-intl';
import intlEN from 'react-intl/locale-data/en';
import intlES from 'react-intl/locale-data/es';
import intlMessagesES from './i18n/locales/es.json';
import intlMessagesEN from './i18n/locales/en.json';
addLocaleData([...intlEN, ...intlES]);
/* Define your translations */
let i18nConfig = {
locale: 'es',
messages: intlMessagesES
};
let changeLanguage = (lang) => {
i18nConfig = { locale: lang, messages: intlMessagesEN };
return i18nConfig;
}
ReactDOM.render(
<IntlProvider locale={ i18nConfig.locale } key={ i18nConfig.locale } messages={ i18nConfig.messages }>
<TodoApp onChangeLanguage={changeLanguage} />
</IntlProvider>,
document.getElementById('root'));
registerServiceWorker();
TodoApp 正在通过道具发送一个关于“lang”参数的字符串(即:“es”或“en”),当我更改i18nConfig时,IntlProvider似乎没有任何变化。我的想法是更改我的i18nConfig变量,然后我的所有应用程序也会更改语言。
我在 TodoApp 中有 FormattedMessages,我的两条 JSON 消息是这样填充的:
// i18n/locales/en.json
{
"footer.add.placeholder": "Enter a name ...",
"footer.add.priority0.text": "No priority",
"footer.add.priority1.text": "Priority 1",
...
}
你知道我的代码缺少什么吗?也许我对 React-Intl 有一些不明白的地方。任何建议都会有所帮助,谢谢。