Skip to content

国际化多语言(v8.0新增)

i18n(Internationalization 的缩写,首末字符 i 和 n 之间有 18 个字母)是软件国际化的标准缩写。它是指让软件支持多种语言和地区的功能,使得同一个软件可以面向不同语言地区的用户,显示相应的语言界面。

随着互联网的发展,越来越多的企业开始走向国际化,多语言的支持已经成为了一个必备的功能。Cool Admin 也对此做了支持。

实现

多语言是需要前后端共同支持的,前端请前往前端文档查看

与其它实现方案不同的是,Cool Admin前后端的多语言都是基于大模型翻译的(比传统机翻更加准确),无需手动配置,只要开启就能自动翻译,而且不需要改变任何原有代码。

以前该怎么写还是怎么写!!!

使用

1、开启多语言

src/config/config.default.ts中开启多语言

ts
cool: {
    // 国际化配置
    i18n: {
      // 是否开启
      enable: true,
      // 语言
      languages: ['zh-cn', 'zh-tw', 'en'],
    },
  }

开启之后,重启下后端,框架就会自动扫描并翻译成对应的语言。

当你在控制台看到这样的输出,则代表成功

console
// 翻译中
/ i18n translate...
// 翻译成功
✅ i18n translate success!!!

警告!!!

基于大模型Ai翻译的方式有时候会失效,删除src/locales文件夹重启重试即可!!!

2、实现原理

只要开启并配置了国际化,在开发环境下重启,框架就会自动扫描菜单字典异常消息(CoolCommException),并调用大模型对其进行翻译

翻译完成之后会在路径src/locales下生成对应种类的语言文件,每个种类都会有一个.lock文件,如果这个文件存在

则该种类的国际化将不会进行翻译,也就是后续你有新增相关的内容,要让其再次翻译,得对应地删除该.lock

目录结构

ts
 ├── src
 │   └── locales(自动生成)
 │   │    └── dict(字典)
 │   │    │    └── info(字典信息)
 │   │    │      └── zh-cn.json
 │   │    │      └── en.json
 │   │    │    └── type(字典类型)
 │   │    │      └── zh-cn.json
 │   │    │      └── en.json
 │   │    │    └── .lock(锁定文件,防止重复翻译)
 │   │    └── menu(菜单)
 │   │    │    └── zh-cn.json
 │   │    │    └── en.json
 │   │    │    └── .lock(锁定文件,防止重复翻译)
 │   │    └── msg(消息)
 │   │    │    └── zh-cn.json
 │   │    │    └── en.json
 │   │    │    └── .lock(锁定文件,防止重复翻译)
 │   │    └── comm(公共)
 │   │    │    └── zh-cn.json
 │   │    │    └── en.json
 │   │    │    └── .lock(锁定文件,防止重复翻译)

提示

自动翻译只有在本地开发的时候才会进行,生产环境即使开启也不会进行翻译。

3、特殊场景

有些场景是需要在代码做特殊处理的,如:现在需要针对不同国家注册的用户推送消息,则需要根据用户的国家来推送不同语言。

Service示例:

ts
@Inject()
translate: BaseTranslateService;

const value = this.translate.comm('一个很Cool的框架')['en'];
console.log('对应国家的语言', value);

注意

this.translate.comm这个是固定的写法,不能改变,框架会根据这个识别扫描信息并翻译

4、语言配置对照表

  • 简体中文(zh-cn)
  • 美国英语(en)
  • 阿塞拜疆语(az)
  • 德语(de)
  • 葡萄牙语(pt)
  • 西班牙语(es)
  • 丹麦语(da)
  • 法语(fr)
  • 挪威语(nb-NO)
  • 繁体中文(zh-tw)
  • 意大利语(it)
  • 韩语(ko)
  • 日语(ja)
  • 荷兰语(nl)
  • 越南语(vi)
  • 俄语(ru)
  • 土耳其语(tr)
  • 巴西葡萄牙语(pt-br)
  • 波斯语(fa)
  • 泰语(th)
  • 印度尼西亚语(id)
  • 保加利亚语(bg)
  • 普什图语(pa)
  • 波兰语(pl)
  • 芬兰语(fi)
  • 瑞典语(sv)
  • 希腊语(el)
  • 斯洛伐克语(sk)
  • 加泰罗尼亚语(ca)
  • 捷克语(cs)
  • 乌克兰语(uk)
  • 土库曼语(tk)
  • 泰米尔语(ta)
  • 拉脱维亚语(lv)
  • 南非荷兰语(af)
  • 爱沙尼亚语(et)
  • 斯洛文尼亚语(sl)
  • 阿拉伯语(ar)
  • 希伯来语(he)
  • 立陶宛语(lt)
  • 蒙古语(mn)
  • 哈萨克语(kk)
  • 匈牙利语(hu)
  • 罗马尼亚语(ro)
  • 库尔德语(ku)
  • 库尔德语 (ckb)
  • 维吾尔语 (ug-cn)
  • 高棉语 (km)
  • 塞尔维亚语 (sr)
  • 巴斯克语 (eu)
  • 吉尔吉斯语 (ky)
  • 亚美尼亚语 (hy-am)
  • 克罗地亚语(hr)
  • 世界语 (eo)
  • 孟加拉语 (bn)
  • 马来语 (ms)