i18n
Getting Started#
Pro implements globalization through the umi plugin umi-plugin-locale and is enabled by default. umi-plugin-locale convention Introduces the corresponding js in src/locales, such as en-US.js and zh-CN.js, And do the following configuration in config/config.js:
plugins:[
...,
locale: {
enable: true,
default: 'zh-CN',
baseNavigator: true,
},
....
]I am happy to use the function of globalization. See config。
umi-plugin-locale encapsulates react-intl, api is basically the same as react-intl, and is more convenient to package. All apis are as follows:
import { formatMessage, setLocale, getLocale, FormattedMessage } from 'umi/locale';Formatt Message#
If we have the following configuration in en-US.js and zh-CN.js respectively:
// zh-CN.js
export default {
'navbar.lang': '中文',
}
// en-US.js
export default {
'navbar.lang': 'English',
}We can use this in the component
import { FormattedMessage } from 'umi/locale';
export default () => {
return (
<div>
<FormattedMessage id="navbar.lang" />
</div>
);
};In some cases, you may need to return a string directly. You can use it like this:
import { formatMessage } from 'umi/locale';
export default () => {
return <div>{formatMessage({ id: 'navbar.lang' })}</div>;
};Set Locale#
umi-plugin-locale exposes apis named setLocale and getLocale, which make it easy to switch between regions. The code like this:
...
changLang = () => {
const locale = getLocale();
if (!locale || locale === 'zh-CN') {
setLocale('en-US');
} else {
setLocale('zh-CN');
}
};
render(){
<Button
size="small"
ghost={theme === 'dark'}
style={{
margin: '0 8px',
}}
onClick={() => {
this.changLang();
}}
>
<FormattedMessage id="navbar.lang" />
</Button>
}More advanced usage can be found in react-intl's api.