在全球化的今天,企业级应用往往需要支持多语言,以满足不同地区用户的需求。本文将介绍如何在一个企业级应用中实现多语言支持,包括本地化文件的创建、使用以及如何在程序中切换语言。
企业级应用通常需要服务于全球用户,这就要求应用能够提供多语言支持。硬编码的字符串不利于维护和扩展,因此使用本地化(i18n)是更好的选择。
本地化文件通常以JSON格式存储,每个模块都有自己的本地化文件。例如,人力资源管理(HRM)模块的本地化文件名为hrm.json。这些文件包含模块中使用的所有文本值。
在程序中,可以通过Page对象的i18n属性来访问本地化值。例如,在staffs.html文件中,可以使用i18n.hrm.staffs.title来替换硬编码的标题。
以下是staffs.html文件的示例代码:
<page>
<page-header>
{{i18n.hrm.staffs.title}}
<page-actions class="pull-right" [actions]="model.actions"></page-actions>
</page-header>
<page-content>
<grid [options]="model.options" [fetch]="fetch"></grid>
</page-content>
</page>
在staffs.ts文件中,可以通过构造函数传入i18n对象来创建StaffsModel实例,并使用i18n对象中的本地化文本:
export class Staffs extends BasePage<StaffsModel> {
public model: StaffsModel;
constructor() {
super();
let self = this;
self.model = new StaffsModel(this.i18n);
self.model.addAction(new PageAction("", () => { self.onAddNewStaffClicked(); }).setText(self.i18n.hrm.staffs.addNewStaff));
}
private onAddNewStaffClicked(): void {
this.navigate(routes.addNewStaff.name);
}
public fetch(): Promise {
let def: Promise = PromiseFactory.create();
let service: IStaffService = window.ioc.resolve(LocalIoCNames.IStaffService);
service.getStaffs().then(function (searchResult: any) {
def.resolve(searchResult.items || []);
});
return def;
}
}
在程序中,可以通过调用i18nHelper.reload方法来切换当前工作语言。例如,在AddNewStaff页面,可以添加一个“Change Language”按钮,并在点击时调用onChangeLanguageClicked方法来切换语言:
export class AddNewStaff extends BasePage<AddNewStaffModel> {
private currentLanguage: string = "en";
public onChangeLanguageClicked() {
let newLanguage: string = this.currentLanguage == "en" ? "vn" : "en";
this.i18nHelper.reload(newLanguage);
this.currentLanguage = newLanguage;
}
// ...
}