# 多语言多时区应用

# 概述

本功能用于支持应用的多语言和多时区需求,满足全球化业务场景。多语言适用于全球各分支机构共用同一应用的情况;多时区适用于单据需要跨时区查看,时间自动转换为当地时间的场景。

# 一、示例演示:多语言多时区应用

# 演示路径

  • 访问地址:应用中心
  • 模块名称:多语言多时区 / 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 - 模块标题使用语言包

# 三、配置步骤

# 表单多语言配置

  1. 进入集团流程库 → 表单设计
  2. 打开目标表单
  3. 进入高级设置 → 表单多语言页签
  4. 为每个词条填写对应语言的翻译
  5. 保存表单

# 应用界面多语言配置

  1. 打开前台脚本文件(如BillofLading.js
  2. 将列标题的固定文字改为RS.$('语言包名称.词条Key')
  3. 打开对应的语言包文件(如YiezApp.zh.resx
  4. 添加词条Key和对应的翻译文字
  5. 在其他语言包中添加对应的翻译

# 模块菜单多语言配置

  1. 在控制器中注入语言包服务:private readonly IStringLocalizer<YiezApp> rsYiezApp
  2. 在模块配置中使用rsYiezApp["词条Key"].Value
  3. 在语言包中添加对应的词条

# 关键要点

  • 多时区:系统自动处理,无需配置
  • 表单多语言:在表单设计器中直接配置翻译
  • 界面多语言:使用RS.$()引用语言包
  • 菜单多语言:使用注入的IStringLocalizer服务

# 四、常见应用场景

场景 多语言需求 多时区需求
跨国订单系统 各国家员工看到本地语言 订单时间显示本地时区
全球物流追踪 多语言界面 到港时间自动转换
国际会议系统 多语言界面 会议时间本地化
跨国HR系统 多语言表单 入职时间本地化

# 五、注意事项

  1. 语言包命名:使用语言包名称.语言代码.resx格式(如YiezApp.en.resx
  2. 自定义语言包:不要修改系统内置语言包,应从模版复制出自己的语言包,避免升级时被覆盖
  3. 词条Key规范:建议使用有意义的命名,如模块名_字段名格式
  4. 时间字段:系统自动处理时区转换,无需特殊处理
  5. 选项字典:下拉选项的多语言需要在表单多语言中配置
  6. 后台引用:使用.Value获取语言包中的文字

# 六、总结

Yiez开发平台极大简化了多语言多时区的实现:

功能 实现方式 工作量
多时区 系统自动处理 无需工作
表单多语言 表单设计器中填写翻译 少量翻译工作
界面多语言 列标题改用RS.$()引用 替换文字 + 添加词条
菜单多语言 后台使用IStringLocalizer 替换文字 + 添加词条
  • 多时区自动转换:时间显示自动转换为当地时区
  • 表单多语言:可视化配置,自动提取表单文字
  • 界面多语言:通过语言包统一管理
  • 国际化支持:满足全球化业务需求

只需很少的工作,就可以构建出满足全球化业务需求的应用。