Dorado 5 : 7.国际化 (T1B)

国际化(即:"i18n",因为在"internationalization"这个单词中,字母i和字母n之间一共有18个字母),目的是使得您的应用程序能够支持多种语言。
当你发布一个花费很多时间开发出来的系统之后,系统运行一切正常,用户评价也不错,但这时公司合并了一家香港公司,于是香港公司的员工也需要登陆该系统作业务操作。然而他们习惯的是繁体字,看简体字并不习惯。显然,如果您的JSP 页面中有硬编码的文本,或者您的Java代码返回硬编码的错误消息,那么您要花费很多时间开发此Web应用程序的繁体版本。然而,在Web应用程序中,为了支持多种语言,文本不是惟一必须"具体化"的部分。因为许多图像中嵌有文字,所以图形和图像也应该是可配置的。在极端的情况下,图像(或者颜色)在不同的文化背景中可能有完全不同的意思。类似地,任何格式化数字和日期的Java代码也必须本地化。因此创建一个国际化的Web应用程序面临的不仅仅是应用程序方面的挑战。您必须从第一天起就记住设计具有国际化的解决方案。
当然也有很多系统并不具备国际化使用的基础,但是我们也可以用国际化实现.properties功能。例如我们将系统中的所有标题和系统提示信息全部配置到国际化资源文件中。这样一但用户对提示信息或标题提出修改建议我们就可以在一个集中的地方统一修改,而不必修改系统中的代码。
Dorado支持国际化开发,在Dorado中国际化都是通过ResourceManager负责管理的。ResourceManager位于com.bstek.dorado.i18n包中。国际化信息由com.bstek.dorado.i18n.ResourceManager通过判断session中用户的Locale信息决定获取相关的国际化资源,如果未设定则系统通过setting.xml文件中的两个属性配置决定用户的默认Locale:

<property name="common.locale.language" value="cn"/> 
<property name="common.locale.country" value="ZH"/>

下面我们通过员工信息维护(SqlDataset方式实现)的国际化过程说明dorado中国际化的使用。

步骤一:创建I18N资源文件

在studio的I18N节点下新增节点:

图表 7 1
命名为"hr_cn_ZH":

图表 7 2
其中输入如下的内容:

employee_id=工号 
employee_name=姓名 
dept_id=部门编号 
dept_name=部门名称 
sex=性别 
birthday=生日 
married=婚否 
degree=学历 
salary=薪水 
email=邮件 
web=网址 
cmnt=备注 
 
buttonSave=保存 
buttonQuery=查询 
buttonRaiseSalary=加薪 
 
employeeIdErrorMsg=工号重复错误,请重新输入!

以上为新增hr国际化文件中的内容。

步骤二:设定系统默认的国际化配置

找到项目dorado资源文件夹home中的setting.xml:

图表 7 3
确定其中的common.locale.language与common.local.country的属性设定。如下:

<property name="common.locale.language" value="cn"/> 
<property name="common.locale.country" value="ZH"/>

这样系统默认会访问I18N中资源文件后缀为"_cn_ZH"的文件。

步骤三:修改代码中的硬编码文本

打开Employee视图模型,修改datasetCondition中字段的label属性,如下:

字段

Label属性

employee_id

${Resource.hr.employee_id}

dept_id

${Resource.hr.dept_id}

employee_name

${Resource.hr.employee_name}

修改datasetEmployee中字段的label属性如下:

字段

Label属性

employee_id

${Resource.hr.employee_id}

dept_id

${Resource.hr.dept_id}

employee_name

${Resource.hr.employee_name}

sex

${Resource.hr.sex}

birthday

${Resource.hr.birthday}

married

${Resource.hr.married}

degree

${Resource.hr.degree}

salary

${Resource.hr.salary}

email

${Resource.hr.email}

web

${Resource.hr.web}

cmnt

${Resource.hr.cmnt}

dept_name

${Resource.hr.dept_name}

并打开datasetDept的beforeChange事件:

图表 7 4
将其中的代码:

return new DoradoException("工号重复错误,请重新输入!");

修改为:

return new DoradoException("${Resource.hr.employeeIdErrorMsg}");

修改所有按钮的value属性,如下:

按钮ID

value

buttonSave

${Resource.hr.buttonSave}

buttonQuery

${Resource.hr.buttonQuery}

buttonRaiseSalary

${Resource.hr.buttonRaiseSalary}

保存所有的修改后重新启动服务,并浏览employee.jsp。

图表 7 5
可以看到设置已经生效。用同样的方式你也可以修改Employee1视图模型,由于在I18N中已经设置好相关的资源信息了,因此Employee1视图模型的国际化就比较简单,重复上述的步骤三即可。