多语言
Midway 提供了多语言组件,让业务可以快速指定不同的语言,展示不同的文案,也可以在 HTTP 场景配合请求参数,请求头等方式来使用。
相关信息:
描述 | |
---|---|
可用于标准项目 | ✅ |
可用于 Serverless | ✅ |
可用于一体化 | ✅ |
包含独立主框架 | ❌ |
包含独立日志 | ❌ |
安装组件
$ npm i @midwayjs/i18n@3 --save
或者在 package.json
中增加如下依赖后,重新安装。
{
"dependencies": {
"@midwayjs/i18n": "^3.0.0",
// ...
},
}
使用组件
将 i18n 组件配置到代码中。
import { Configuration } from '@midwayjs/core';
import * as i18n from '@midwayjs/i18n';
@Configuration({
imports: [
// ...
i18n
]
})
export class MainConfiguration {
//...
}
使用
组件提供了 MidwayI18nService
服务,用于翻译多语言文本。
使用 translate
方法,传入不同的文本关键字和参数,返回不同语言的文本内容。
@Controller('/')
export class UserController {
@Inject()
i18nService: MidwayI18nService;
@Get('/')
async index(@Query('username') username: string) {
return this.i18nService.translate('HELLO_MESSAGE', {
args: {
username
},
});
}
}
配置多语言文案
你可以在配置文件中直接配置,但是大多数情况下,文案会很多,有时候甚至可能文案在远端服务上,这个时候直接配置就不太现实。
一般来说,我们会将文案单独放到某个文案配置目录中,比如 src/locales
。
以 src/locale
这个目录为例,我们举个例子,结构如下:
.
├── src
│ ├── locales
| │ ├── en_US.json
| │ └── zh_CN.json
│ └── controller
│ └── home.controller.ts
├── package.json
└── tsconfig.json
这里我们建了两个多语言的文件,en_US.json
和 zh_CN.json
,分别代表英文和中文。
文件内容分别如下:
// src/locales/en_US.json
{
"hello": "Hello {username}",
"email": "email id",
"login": "login account",
"createdAt": "register date"
}
// src/locales/zh_CN.json
{
"hello": "你好 {username}",
"email": "邮箱",
"login": "帐号",
"createdAt": "注册时间"
}
每行一个字符串对,是一个标准的 JSON 格式内容,也可以使用 js/ts 文件,花括号中是可替换的参数占位。
同时,需要在配置中加入这两个 JSON,其中 default
是语言的默认分组。
// src/config/config.default.ts
export default {
// ...
i18n: {
// 把你的翻译文本放到这里
localeTable: {
en_US: {
default: require('../locale/en_US'),
},
zh_CN: {
default: require('../locale/zh_CN'),
}
},
}
}