多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
--- order: 13 title: 国际化 type: 进阶 --- ### 开始使用 pro 通过 umi 插件 [umi-plugin-locale](https://github.com/umijs/umi-plugin-locale) 来实现全球化的功能,并且默认开启。 `umi-plugin-locale` 约定 在 src/locales 中引入 相应的 js,例如 en-US.ts 和 zh-CN.ts,并且在 `config/config.ts` 中做如下配置: ```js plugins:[ ..., locale: { enable: true, default: 'zh-CN', baseNavigator: true, }, .... ] ``` 就可以在代码中使用全球化的功能了。详细配置参见[config](https://github.com/umijs/umi-plugin-locale#usage)。 `umi-plugin-locale` 封装了[react-intl](https://github.com/yahoo/react-intl), api 与 `react-intl` 基本相同,并做了封装使用起来更加方便。全部 api 如下: ```js import { formatMessage, setLocale, getLocale, FormattedMessage } from 'umi/locale'; ``` ### 格式化字符串 如果我们在 `en-US.ts` 和 `zh-CN.ts` 中分别作了如下配置: ```js // en-US.ts export default { 'navbar.lang': '中文', } // zh-CN.ts export default { 'navbar.lang': 'English', } ``` 我们就可以在组件中这样使用 ```js import { FormattedMessage } from 'umi/locale'; export default () => { return ( <div> <FormattedMessage id="navbar.lang" /> </div> ); }; ``` 在某些情况下,你可能需要直接返回 string。你可以这样使用: ```js import { formatMessage } from 'umi/locale'; export default () => { return <div>{formatMessage({ id: 'navbar.lang' })}</div>; }; ``` ### 设置区域 `umi-plugin-locale` 暴露了名为 `setLocale` 和 `getLocale` 的 api,通过这两个 api 可以方便的切换区域。代码看起来像这样的: ```js ... 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> } ``` 更多高级的用法可以参照 [react-intl 的 api](https://github.com/yahoo/react-intl/wiki#getting-started)。 ### 删除全球化 如果你想删除 pro 自带的全球化,可以通过 `npm run i18n-remove`,`i18n-remove`还比较基础只是测试了 pro 自带的代码,如果你使用了高级的特性,你可能需要自己人工去进行修改。例如 `formatMessage({id:somevar})` 这种动态的代码我们可能无法帮您分析并删除。 如果你有好办法可以实现 欢迎 [pr](https://github.com/ant-design/ant-design-pro-cli)。