随着全球化的发展,越来越多的应用需要支持多语言,而在前端开发中实现多语言是一个重要的需求。为了方便开发者在 umi.js 中实现多语言,社区中推出了很多的插件,例如 umi-plugin-locale。
本文将基于 umi-plugin-locale,介绍如何快速、高效的实现前端应用的多语言。内容详细,适合有一定前端开发经验的开发者学习。
安装
在使用前,请确保你已经安装了 umi.js。可以使用 npm 或者 yarn 安装此插件:
# npm npm install umi-plugin-locale --save-dev # yarn yarn add umi-plugin-locale --dev
安装完成后,在 umi 配置文件中配置该插件即可使用。
配置
在 umi 配置文件 config/config.ts
中进行如下配置:
-- -------------------- ---- ------- ------ ------- - -------- - --------------------- - -------------- ----- -- ------- ----- ----- -- -- ---- ------ -------- -------- -- ---- -------------- ---- -- ----- ----------- ----- -- ----- ------- - ----------- ---------- -- ------ ----------- ------- -- ------ -------------- ---------------- -- ----- ----- -- --------------- ---- -- ------- ------ -- ----------- -- ---- -------- ------ ---------- -- - ---- -------- ------ ------- --- -- ------- --- -- --
baseNavigator
为布尔值类型,表示是否启用浏览器语言,默认为true
;antd
为布尔值类型,表示是否支持antd
的多语言,默认为true
;default
为字符串类型,表示默认语言,默认为en-US
;baseSeparator
为字符串类型,表示语言分隔符,默认为-
;baseZIndex
为数字类型,表示语言弹窗的z-index
值,默认为1000
;baseEnName
为字符串类型,表示英语语言名称,默认为English
;baseCnName
为字符串类型,表示中文语言名称,默认为简体中文
;baseClassName
为字符串类型,表示切换语言的class
名称,默认为lang-selector
;baseCookieName
为字符串类型,表示存储语言设置的 cookie 名称,默认为L
;localeList
为数组类型,表示支持的语言列表。
之后在入口文件 app.tsx
中注入应用:
-- -------------------- ---- ------- ------ ----- ---- -------- ------ - -------------- - ---- ------- ------ - ------------ - ---- -------------------- ------ ---- ---- ------------------------ ------ ---- ---- ------------------------ ----- ---------- - - -------- - ----- ------- ----- ----- ------- ----------------------------------------------- -- -------- - ----- ---------- ----- ----- ------- ---------- -- -- -------- ----------- - ----- ----- ------ - ------------------- ----- --------- - ------------------- -- -------------------------- - ------ -------- - ------ -------- - ----- --------- - - -------- ----------------------------------------------- -------- ---------- -- ------ ----- ---------- - ------------------------ ------ ------- --------------- ---- - ----- - -------- - - ------ ----- ------ - ------------ ----- - ----- ------- ------------ - - ------------------- ------ - --------------- -------------- ------------- --------------- --------------------- ---------------------- -- ------------------ - ---------- --------------- ----------------- -- -
在以上代码中,首先需要根据当前浏览器语言确定初始语言,然后根据该语言加载对应的 antd 和 locale。最后在应用中引入 umi-plugin-locale 中的 <IntlProvider>
组件,将该组件包裹在 react-intl
的 <IntlProvider>
组件内,并将对应的 locale、antd 以及 messages 传递给该组件即可。
语言文件
在上述代码中,我们通过 require('umi-plugin-locale/lib/zh-CN').default
来加载 Chinese (Simplified) 的语言文件。那么这个语言文件如何生成呢?
在 umi.js 项目中,我们可以使用 umi 的国际化插件 umi-plugin-locale-polyfill
自动生成语言文件。
假设我们有一个 pages/index.tsx
页面,其中的多语言内容为:
import React from 'react'; import { formatMessage } from 'umi-plugin-locale'; export default () => ( <div> {formatMessage({ id: 'hello' })} </div> );
因为我们没有手动添加国际化 id
,因此需要使用 archive
命令自动生成对应的 locale
文件。
在 package.json
中添加如下命令:
{ "scripts": { "archive": "umi locale archive" } }
在命令行中执行以下命令:
# npm npm run archive # yarn yarn archive
执行后,项目根目录下会生成一个名为 locales
的文件夹,其中包含了所有国际化 id
对应的语言表。
现在我们就可以在 IntlProvider
中引入自动生成的语言文件了:
-- -------------------- ---- ------- ------ ---- ---- ---------------- ------ ---- ---- ---------------- ----- --------- - - -------- ----- -------- ----- -- --- ------------- --------------- --------------------- ---------------------- -- ------------------ - ---
除了自动生成语言文件,我们也可以手动添加语言文件:
-- -------------------- ---- ------- -- ---------------- ------ ------- - ------ ------- -- -- ---------------- ------ ------- - ------ ------- -------- --
之后就可以在项目中使用 formatMessage
来引入新添加的多语言内容了。
语言切换
通过以上配置和代码,我们已经成功实现了前端应用的多语言功能。接下来,我们可以再手动添加语言切换的功能。这里给出一个简单的代码实例:
-- -------------------- ---- ------- ------ ----- ---- -------- ------ - -------------- --------- - ---- -------------------- --------- ------------------ - ------- ------- - ----- ------------- ---------------------------- - -- ------ -- -- - ---- -------------------------- ----- ----------- -- - ------------------- -- ----------------- --- ------- - ---------- - ---------- - ------- ------- ----- ----------- -- - ------------------- -- ----------------- --- ------- - ---------- - ---------- - ---- ------- ------ -- ------ ------- -------------
setLocale
是 umi-plugin-locale 提供的一个方法,可以根据传递的参数设置当前应用的语言类型;而 formatMessage
利用格式化 ${id}
来实现多语言内容的替换。
好了,以上就是 umi-plugin-locale 的使用教程,希望本文对您有所帮助!
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/5eedad9cb5cbfe1ea0610caf