如果你所开发的需要走向世界的话,那么肯定需要针对每一个用户进行不同的本地化处理,有可能你的客户在日本,需要使用日语作为显示文本,也有可能你的客户在美国,需要使用英语作为显示文本。如果你还是一样的写死错误信息,或者描述信息,那么就无法做到多语言适配。
Abp 框架本身提供了一套多语言机制来帮助我们实现本地化,基本思路是 Abp 本身维护一个键值对集合。只需要将展示给客户的文字信息处都使用一个语言 Key 来进行填充,当用户登录系统之后,会取得当前用户的区域文化信息进行文本渲染。
0.1 如何使用我们首先来看一下如何定义一个多语言资源并使用。首先 Abp 自身支持三种类型的本地化资源来源,第一种是 XML 文件,第二种则是 JSON 文件,第三种则是内嵌资源文件,如果这三种都不能满足你的需求,你可以自行实现 ILocalizationSource 接口来返回多语言资源。
小提示:
Abp Zero 模块就提供了数据库持久化存储多语言资源的功能。
0.1.1 定义应用程序支持的语言如果你需要为你的应用程序添加不同语言的支持,就必须在你任意模块的预加载方法当中添加语言来进行配置:
Configuration.Localization.Languages.Add(new LanguageInfo("en", "English", "famfamfam-flag-england", true)); Configuration.Localization.Languages.Add(new LanguageInfo("tr", "Türkçe", "famfamfam-flag-tr"));例如以上代码,就能够让我们的程序拥有针对英语与土耳其语的多语言处理能力。
这里的 famfamfam-flag-england 与 famfamfam-flag-tr 是一个 CSS 类型,是 Abp 为前端展示所封装的小国旗图标。
0.1.2 建立多语言资源文件有了语言之后,Abp 还需要你提供标准的多语言资源文件,这里我们以 自带的 XML 资源文件为例,其文件名称为 Abp-zh-Hans.xml ,路径为 Abp\Localization\Sources\AbpXmlSource。
<?xml version="1.0" encoding="utf-8" ?> <localizationDictionary culture="zh-Hans"> <texts> <text>SMTP主机</text> <text>SMTP端口</text> <text>用户名</text> <text>密码</text> <text>域名</text> <text>使用SSL</text> <text>使用默认验证</text> <text>默认发件人邮箱地址</text> <text>默认发件人名字</text> <text>预设语言</text> <text>接收通知</text> <text>当前用户没有登录到系统!</text> <text>时区</text> <text>您没有权限进行此操作,您需要以下权限: {0}</text> <text>您没有权限进行此操作,您至少需要下列权限的其中一项: {0}</text> <text>主菜单</text> </texts> </localizationDictionary>每个文件内部,会有一个 <localizationDictionary culture="zh-Hans"> 节点用于说明当前文件是针对于哪个区域适用的,而在其 <texts> 内部则就是结合键值对的形式,name 里面的内容就是多语言文本项的键,在标签内部的就是其真正的值。
打开一个针对俄语国家的 XML 资源文件,文件名称叫做 Abp-ru.xml。
<?xml version="1.0" encoding="utf-8" ?> <localizationDictionary culture="ru"> <texts> <text>SMTP сервер</text> <text>SMTP порт</text> <text>Имя пользователя</text> <text>Пароль</text> <text>Домен</text> <text>Использовать SSL</text> <text>Использовать учетные данные по умолчанию</text> <text>Электронный адрес отправителя по умолчанию</text> <text>Имя отправителя по умолчанию</text> <text>Язык по умолчанию</text> <text>Получать уведомления</text> <text>Текущий пользователь не вошёл в приложение!</text> </texts> </localizationDictionary>可以看到 Key 值都是一样的,只是其 <text> 内部的值根据区域国家的不同值不一样而已。
其次从文件名我们就可以看到需要使用 XML 资源文件对于文件的命名格式会有一定要求,还是以 Abp 自带的资源文件为例,可以看一下他们基本上都是由 {SourceName}-{CultureInfo}.xml 这样构成的。
0.1.3 注册本地化的 XML 资源