场景说明
本身是跨国公司或者有涉及跨国业务的公司,都有多语言的需求。
一、对于该公司的普通用户
1. 显示与提示
对于该公司的普通用户来说,往往需要按自己熟悉的语言来显示系统。比如中国的员工登录系统时,希望看到的菜单名称、界面上的按钮是中文的。操作过程中给到的提示语,也是中文的。
2. 录入数据
在录入客户信息、订单信息数据时,则希望能够录入中文名称,也能录入英文名称,当然英文名称可能由外语较好的其它同事来录入。
3. 单据查询与打印
打印或者查询单据时,可能需要一到两种语言同时显示。
4. 国际化
对于关键岗位的用户来说,可能还得区分各个国家使用币种、区域时间等等。
二、对于该公司的IT管理员
希望能够对系统使用的语言自行定义,以应对不同时期,使用不同语言。比如,今年只做英国的业务,只需要使用英文,但明年需要做法国的业务需要使用法语。
实现思路
如何设计一套系统支持用户的上述要求,并且对语言范围没有限制,后期客户还可以自行扩展其它语言。本文提供一套思路供大家参考。
首先在语言档案表里,建立多语言档案,在用户登录界面,添加 语言选择框,让用户在登录界面时,就选择一种默认语言。用户登录后,除了业务数据外,系统菜单、按钮、单据标题、提示语都按默认语言显示。
业务单据的查询和打印界面,默认显示两种语言,其它语言对应的业务数据通过弹窗显示。
按技术实现多语言有三个场景:元数据多语、提示语多语、业务数据多语。
一、元数据
元数据这个词大家可能不太能理解,其实就是指菜单、按钮等预置在系统里的数据。
大部分的ToB系统,界面上显示哪些字段、查询条件、按钮 这些信息都是预置在数据库里的。这里推荐建表时就按 基础表和语言表 配对创建。
拿按钮表为例,基础表 我们可以 命名为 AA_FormButtons_Base, 记录按钮的工具栏ID,按钮ID,图标ID 等等;这基础表的基础上 我们再建一张语言表 AA_FormButtons_Lang
AA_FormButtons_Base
AA_FormButtons_Lang
二、提示语
考虑到PC端、PAD端、PDA端等多个终端的场景,且PAD、PDA有可能进行离线作业,所以提示语的多语数据不能存在数据库服务器里,需要以资源文件方式做进安装包,随软件安装同步放入运行终端。
资源文件可以是json、XML、二进制等格式,大家按需使用即可。资源文件的文件命,体现对应的语言。
下面拿Json文件为例子:
1. 资源文件: W1_Barcode_ZH-CN.json 代表中文语言,内容如下
{ DocNo:"单据号", MustInput:"{0}不能为空", Title:"标题" }
2. 资源文件: W1_Barcode_EN-US.json 代表美式英文,内容如下
{ DocNo:"Doc No." MustInput:"{0} Must Is Input!" Title:"Title" }
平台 String MultiLang.GetString(string cSubID,string key, para[] params)
三、业务数据
a. 工具栏增加“国际化”按钮,点按钮弹出多语言录入框。
b. 框里两部分内容:1.语言,2.档案中启用多语言的字段。
c. 只有数据库字段为文本 且 录入方式为文本的字段 才能启用多语言
d. 业务数据存在于数据库,在原来业务组的基础上,添加一张语言表。字段取原来业务表的ID和字符串类型的字段,在此基础上添加语言类型cLangID,
(要不要单据模板上加个字段表示哪些字段启用了多语言,或者 添加一个多语言表,表示哪些档案哪些字段启用了多语言 )
录入多语言业务数据