[Abp 源码分析]十三、多语言(本地化)处理

如果你所开发的需要走向世界的话,那么肯定需要针对每一个用户进行不同的本地化处理,有可能你的客户在日本,需要使用日语作为显示文本,也有可能你的客户在美国,需要使用英语作为显示文本。如果你还是一样的写死错误信息,或者描述信息,那么就无法做到多语言适配。

Abp 框架本身提供了一套多语言机制来帮助我们实现本地化,基本思路是 Abp 本身维护一个键值对集合。只需要将展示给客户的文字信息处都使用一个语言 Key 来进行填充,当用户登录系统之后,会取得当前用户的区域文化信息进行文本渲染。

[Abp 源码分析]十三、多语言(本地化)处理

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 这样构成的。

[Abp 源码分析]十三、多语言(本地化)处理

0.1.3 注册本地化的 XML 资源

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpzfsd.html