# 多语言多时区应用
# 概述
本功能用于支持应用的多语言和多时区需求,满足全球化业务场景。多语言适用于全球各分支机构共用同一应用的情况;多时区适用于单据需要跨时区查看,时间自动转换为当地时间的场景。
# 一、示例演示:多语言多时区应用
# 演示路径
- 访问地址:应用中心
- 模块名称:多语言多时区 / Localization
# 业务处理效果
中文环境:
- 模块名称:多语言多时区
- 按钮、搜索、分页、列表标题均为中文
- 表单字段、选项均为中文
- 时间显示:中国时间(如 2025-01-15 09:28)
英文环境:
- 模块名称:Localization
- 按钮、搜索、分页、列表标题均为英文
- 表单字段、选项均为英文(Pallets、Cartons等)
- 时间显示:自动转换为当地时区时间
多时区效果(以日本时区 GMT+9 为例):
- 中国时间 09:28 → 日本时间 10:28
- 列表和表单中的时间自动转换
# 二、实现方法
# 多时区实现
无需任何代码和配置,系统自动处理时间的显示、传输和存储,保证多时区支持。
# 表单多语言配置
文件路径:集团流程库 → 表单设计 → 海运单 → 高级设置 → 表单多语言
表单上的文字已自动提取到多语言字典中,只需填写对应语言的翻译:
| 中文 | 英文 |
|---|---|
| 收货人 | Consignee |
| 货物 | Goods |
| 离港时间 | ETD |
| 到港时间 | ATD |
| 托盘 | Pallets |
| 箱 | Cartons |
| 包裹 | Packages |
| 件/台 | Units |
# 应用界面多语言配置
文件路径:wwwroot\Apps\samples\BillofLading.js
列标题使用语言包中的文字:
// 第23-29行:列标题多语言配置
{ text: RS.$('YiezApp.BillofLading_No'), dataIndex: 'Id', width: 30, hidden: true },
{ text: RS.$('YiezApp.BillofLading_Consignee'), dataIndex: 'Consignee', flex: 3, align: 'left', sortable: true },
{ text: RS.$('YiezApp.BillofLading_Goods'), dataIndex: 'Goods', flex: 2, align: 'left' },
{ text: RS.$('YiezApp.BillofLading_Qty'), dataIndex: 'Qty', width: 80, align: 'end', sortable: true },
{ text: RS.$('YiezApp.BillofLading_Unit'), dataIndex: 'Unit', width: 80, align: 'left', sortable: true, renderer:me.renderUnits },
{ text: RS.$('YiezApp.BillofLading_Marks'), dataIndex: 'Marks', width: 120, align: 'left', sortable: true },
{ text: RS.$('YiezApp.BillofLading_ETD'), dataIndex: 'ETD', width: 220, align: 'left', formatter: 'date("Y-m-d H:i")' }
代码说明:
RS.$('YiezApp.BillofLading_Consignee'):使用YiezApp语言包中的指定词条- 原来固定的文字如
text: '收货人'替换为语言包引用
# 语言包配置
文件路径:Resources\YiezApp.*.resx
| 文件 | 说明 |
|---|---|
| YiezApp.en.resx | 英文语言包 |
| YiezApp.zh.resx | 中文语言包 |
| YiezApp.zh-Hant.resx | 繁体中文语言包 |
语言包内容:3列表格(名称、值、备注),添加词条后即可在前台使用。
# 模块菜单多语言配置
文件路径:Web项目\Apps\Navigator\Samples\ConceptController.cs
// 第19行:注入语言包服务
private readonly IStringLocalizer<YiezApp> rsYiezApp;
// 第169-170行:模块菜单多语言配置
new {
id = "Sample.多语言多时区",
text = rsYiezApp["BillofLading_Module_MenuName"].Value, // 模块名称多语言
title = rsYiezApp["BillofLading_Module_Title"].Value, // 模块标题多语言
glyph = 0xea96,
xclass = "Apps.samples.BillofLading"
}
代码说明:
- 第19行:
private readonly IStringLocalizer<YiezApp> rsYiezApp- 注入YiezApp语言包服务 - 第169行:
text = rsYiezApp["BillofLading_Module_MenuName"].Value- 模块名称使用语言包 - 第170行:
title = rsYiezApp["BillofLading_Module_Title"].Value- 模块标题使用语言包
# 三、配置步骤
# 表单多语言配置
- 进入集团流程库 → 表单设计
- 打开目标表单
- 进入高级设置 → 表单多语言页签
- 为每个词条填写对应语言的翻译
- 保存表单
# 应用界面多语言配置
- 打开前台脚本文件(如
BillofLading.js) - 将列标题的固定文字改为
RS.$('语言包名称.词条Key') - 打开对应的语言包文件(如
YiezApp.zh.resx) - 添加词条Key和对应的翻译文字
- 在其他语言包中添加对应的翻译
# 模块菜单多语言配置
- 在控制器中注入语言包服务:
private readonly IStringLocalizer<YiezApp> rsYiezApp - 在模块配置中使用
rsYiezApp["词条Key"].Value - 在语言包中添加对应的词条
# 关键要点
- 多时区:系统自动处理,无需配置
- 表单多语言:在表单设计器中直接配置翻译
- 界面多语言:使用
RS.$()引用语言包 - 菜单多语言:使用注入的
IStringLocalizer服务
# 四、常见应用场景
| 场景 | 多语言需求 | 多时区需求 |
|---|---|---|
| 跨国订单系统 | 各国家员工看到本地语言 | 订单时间显示本地时区 |
| 全球物流追踪 | 多语言界面 | 到港时间自动转换 |
| 国际会议系统 | 多语言界面 | 会议时间本地化 |
| 跨国HR系统 | 多语言表单 | 入职时间本地化 |
# 五、注意事项
- 语言包命名:使用
语言包名称.语言代码.resx格式(如YiezApp.en.resx) - 自定义语言包:不要修改系统内置语言包,应从模版复制出自己的语言包,避免升级时被覆盖
- 词条Key规范:建议使用有意义的命名,如
模块名_字段名格式 - 时间字段:系统自动处理时区转换,无需特殊处理
- 选项字典:下拉选项的多语言需要在表单多语言中配置
- 后台引用:使用
.Value获取语言包中的文字
# 六、总结
Yiez开发平台极大简化了多语言多时区的实现:
| 功能 | 实现方式 | 工作量 |
|---|---|---|
| 多时区 | 系统自动处理 | 无需工作 |
| 表单多语言 | 表单设计器中填写翻译 | 少量翻译工作 |
| 界面多语言 | 列标题改用RS.$()引用 | 替换文字 + 添加词条 |
| 菜单多语言 | 后台使用IStringLocalizer | 替换文字 + 添加词条 |
- ✅ 多时区自动转换:时间显示自动转换为当地时区
- ✅ 表单多语言:可视化配置,自动提取表单文字
- ✅ 界面多语言:通过语言包统一管理
- ✅ 国际化支持:满足全球化业务需求
只需很少的工作,就可以构建出满足全球化业务需求的应用。
← 不同状态的单子进入不同的标签页 特殊列显示 →