国际化
Steedos是支持多语言的低代码平台,我们可以在软件包中通过编写国际化资源文件来覆盖系统默认的相关翻译内容从而实现国际化。
我们鼓励大家在Steedos GitHub 开源代码中直接修改国际化资源文件并提交PR。
如果是要在Steedos项目中实现国际化,我们推荐大家把所有国际化的相关内容专门做成一个软件包,这样方便后续按模块进行维护、升级和部署,比如可以创建一个名为 locale
的软件包,以下国际化相关教程都在该软件包中开发。
资源文件
以下是Steedos源码中国际化资源文件对应的位置,其中文件或文件名中zh-CN
表示中文资源文件,en
表示英文资源文件。
对象
对象、对象字段、列表视图、操作按钮等对象元数据的国际化资源文件在以下源码中:
- Git仓库源码:standard-objects/objectTranslations
- 本地NPM包源码:
node_modules/@steedos/standard-objects/objectTranslations
最新版本的Steedos已经把上述内置 standard-objects
软件包中部分对象拆分到下面的软件包中了。
standard-cms
- Git仓库源码:standard-cms/objectTranslations
- 本地NPM包源码:
node_modules/@steedos/standard-cms/main/default/objectTranslations
standard-collaboration
- Git仓库源码:standard-collaboration/objectTranslations
- 本地NPM包源码:
node_modules/@steedos/standard-collaboration/main/default/objectTranslations
standard-object-database
- Git仓库源码:standard-object-database/objectTranslations
- 本地NPM包源码:
node_modules/@steedos/standard-object-database/main/default/objectTranslations
standard-permission
- Git仓库源码:standard-permission/objectTranslations
- 本地NPM包源码:
node_modules/@steedos/standard-permission/main/default/objectTranslations
standard-process-approval
- Git仓库源码:standard-process-approval/objectTranslations
- 本地NPM包源码:
node_modules/@steedos/standard-process-approval/main/default/objectTranslations
standard-ui
- Git仓库源码:standard-ui/objectTranslations
- 本地NPM包源码:
node_modules/@steedos/standard-ui/main/default/objectTranslations
设置应用菜单
后台设置应用是有左侧菜单的,这个菜单项的国际化资源文件在以下源码中:
- Git仓库源码:standard-objects/translations
- 本地NPM包源码:
node_modules/@steedos/standard-objects/translations
其他
其他国际化变量在以下源码中:
- Git仓库源码:i18n/translations
- 本地NPM包源码:
node_modules/@steedos/i18n/translations
元数据
Steedos是通过对各种类型的元数据添加翻译资源文件来实现国际化的,以下是各种元数据类型实现国际化的细节。
对象
对象和对象字段的元数据中是可以定义相关显示名称的,比如Steedos有一个名为 company
的对象,通过定义其 label
属性可以配置该对象的显示名称,这个对象在中文环境下显示的是“分部”,英文显示的是“Company”,以下操作过程可以把该对象对应的翻译改为 “分公司”和”Sub Corporation“,同时把该对象上名为”分部代码“的字段改为”分公司代码“。
同步为代码
如果是为可视化界面上新建的对象添加国际化翻译内容,推荐先把该对象的元数据同步为代码以实现源代码版本管理,详情请参阅教程 同步元数据,不过这并不是必须的,因为未同步为代码的对象也支持按以下操作步骤实现对象国际化。
添加翻译文件
在软件包的default文件夹下新建一个objectTranslations文件夹,其下新建 company.en
和 company.zh-CN
两个同级文件夹对应的中英两种语言的翻译内容,最后各自新建中英文翻译的yml配置文件。
其目录结构如下:
locale
├── main / default
└───├── objectTranslations
└───├── company.en
| └── company.en.objectTranslation.yml
└── company.zh-CN
└── company.zh-CN.objectTranslation.yml
请注意添加国际化文件时,请按需添加,需要中文就加中文翻译文件,需要英文就加英文翻译文件,不可以加了文件后文件内容却是空的,这样会造成服务端程序抛出异常错误消息。
修改翻译内容
在刚新建的yml文件中添加翻译内容,以下两个文件内容实现了重写 company
对象及其字段的中文和英文显示名称
// locale/main/default/objectTranslations/company.zh-CN/company.zh-CN.objectTranslation.yml
name: company
label: 分公司
fields:
code:
label: '分公司代码'
// locale/main/default/objectTranslations/company.en/company.en.objectTranslation.yml
name: company
label: Sub Corporation
fields:
code:
label: 'Sub Corporation Code'
Base对象翻译
Steedos内置了Base对象,该对象用于配置所有对象的通用属性,其中包括所有对象的通用国际化,它表示可以给所有对象上的通用字段,标准操作按钮等设置默认的国际化内容,而不用每个对象上都去设置一次。
内置的Base对象国际化内容请参考源码:
- Git仓库源码:base.zh-CN.objectTranslation.yml
- 本地NPM包源码:
node_modules/@steedos/standard-objects/objectTranslations/base.zh-CN/base.zh-CN.objectTranslation.yml
与给某个具体对象实现国际化操作方式一样,需要先为Base对象添加国际化翻译文件。
locale
├── main / default
└───├── objectTranslations
└───├── base.en
| └── base.en.objectTranslation.yml
└── base.zh-CN
└── base.zh-CN.objectTranslation.yml
然后再设置对应的翻译内容来实现对Base对象的国际化,我们只要把上面提到的Base对象国际化源码中的同名国际化变量添加进去,并定义其翻译内容即可修改默认的国际化内容。
以下翻译内容把中文环境下”分部“字段的显示名称改为了”单位“,并且修改了”新建“和”编辑“这两个标准操作按钮的显示名称,加上它们后,所有对象默认的相关国际化配置都会发生对应的变化,重启服务后就能看到效果。
// locale/main/default/objectTranslations/base.zh-CN/base.zh-CN.objectTranslation.yml
name: base
label: base
fields:
company_id:
label: '单位'
company_ids:
label: '所属单位'
actions:
standard_new:
label: 创建
standard_edit:
label: 修改
内置对象翻译
部分内置对象国际化翻译文件源码:
- Git仓库源码:standard-objects/objectTranslations
- 本地NPM包源码:
node_modules/@steedos/standard-objects/objectTranslations
要修改这些内置对象的国际化内容,按上面提到的操作步骤,先添加翻译文件,再修改翻译内容,只要为对象上同名国际化变量配置不同的翻译内容值,重启服务后即可看到修改后的效果。
字段
字段作为对象的一部分,其国际化翻译与对象是在一起的,请参考上述“对象国际化”的步骤来实现字段国际化,先添加翻译文件再修改翻译内容。
字段分组
不过字段上可以配置“分组”,我们如果需要对分组进行国际化翻译,也是修改对象翻译文件,以下 翻译内容描述了如何修改Steedos内置对象“公司”下名为“华炎云”的字段分组的中文显示名称。
// locale/main/default/objectTranslations/spaces.zh-CN/spaces.zh-CN.objectTranslation.yml
name: spaces
label: 总公司
fields:
api_key:
label: '密钥'
groups:
Developer: Steedos
该翻译内容把“公司”对象的中文显示名称改为了“总公司”,把字段api_key
的中文显示名称改为了“密钥”,并且该字段所属的分组显示名称从“华炎云”改为了“Steedos”。
可视化界面上新建的字段国际化方式与上面讲的内置对象是一样的,只要在对象翻译文件上加上相关字段或字段分组并设置其翻译文本即可。
下拉选项
选择框类型的下拉选项也是可以定制国际化翻译内容的,以下国际化翻译内容实现了给名为“项目任务”的对象下的“优先级”字段配置中文环境下的下拉选项显示名称。
// locale/main/default/objectTranslations/project_tasks__c.zh-CN/project_tasks__c.zh-CN.objectTranslation.yml
name: project_tasks__c
label: 项目任务
fields:
priority__c:
label: 优先级
options:
- label: 高
value: high
- label: 中
value: normal
- label: 低
value: low
其他
字段上的其他属性比如“提示文本”和“描述”也是可以配置国际化内容的,以下示例描述了如何在国际化文件中配置它们。
// locale/main/default/objectTranslations/project_tasks__c.zh-CN/project_tasks__c.zh-CN.objectTranslation.yml
name: project_tasks__c
label: 项目任务
fields:
priority__c:
label: 优先级
options: ...
help: 本周任务请选择“高”,下周任务请选择“中”,否则请选择“低”
description: 描述项目任务的紧急程度。