方便维护管理,通用词汇能够公用
2. 多语言访问在设计上一般把数据保存到表里面,Resource Key采用int型,通过分段,分配给各个模块使用。同时保留一块作为公共段,存储通用多语言数据,如”确定”,“取消”之类的词汇。 表结构如下:
RESOURCE_STATIC |
|
|
|
|
PK |
栏位 |
类型 |
允许NULL |
描述 |
PK |
ID |
INT |
N |
多语言Key |
PK |
CULTURE_CODE |
VARCHAR(10) |
N |
区域代码 |
|
RESOURCE_VALUE |
NVARCHAR(1024) |
N |
多语言值 |
|
MODULE_NAME |
VARCHAR2(50 CHAR) |
N |
模块名称 |
|
REFER_BY |
VARCHAR2(50 CHAR) |
Y |
使用者标记 |
|
CREATED_ON |
DATETIME |
N |
创建时间 |
|
CREATED_BY |
NVARCHAR(50) |
N |
创建人 |
|
CHANGED_ON |
DATETIME |
Y |
变更时间 |
|
CHANGED_BY |
NVARCHAR(50) |
Y |
变更人 |
定义ID分段
1 ~ 1,000,000 |
公用词汇段 |
1,000,001 ~ 2,000,000 |
Module1 使用段 |
2,000,001 ~ 3,000,000 |
Module2 使用段 |
… … |
|
定义好区段后,应该开发小工具来管理多语言。提供增删改查,检测重复,自动翻译,汇出期间数据脚本的功能。
2. 多语言访问
设计一个API Res类,启动的时候装入所有多语言数据。提供多语言数据访问。主要代码如下:
为了在使用多语言的时候,得到一定的可读性。我们采用扩展方法,为String对象增加Localize方法。
比如 Id 1000, 对应多语言值是 “确定”。那么后台C#的代码可以这样写:
string confirm = “确定”.Localize(1000);
View中的文字的按照下面的写法,这种做法保证了View页面的可读性。
<label class="control-label">@("物料名称".Localize(60000009))</label>
如果是Java Script包,需要在包初始化时候传递进去,或者发请求获取所需多语言资料:
<script type="text/javascript"> $(function () { myPackage.init({ locale: { confirm: '@("确定".Localize(1000))', cancle: '@("取消".Localize(1001))' } }); }); </script>
对于枚举,处理特殊一些,我们使用Attribute来标记它所使用的多语言Key。然后通过反射得到一个多语言列表,为前台提供绑定选项
[DataContract] public enum MessagePriority { /// <summary> /// 普通 /// </summary> [EnumLocalize(1005, "普通")] [EnumMember] Normal = 1, /// <summary> /// 重要 /// </summary> [EnumLocalize(1006, "重要")] [EnumMember] Important = 2 }
3. 其它
多语言隶属于国际化范畴,有一些通用规范,比如区域代码的定义,i18N等。不要自己再搞一套了。