ABP框架-本地化
本篇主要讲述后端(主要是拦截器和控制器程序)中本地化的要点。
原理
参考文档:https://www.cnblogs.com/myzony/p/9496490.html
1、建立多语言资源库
2、根据当前区域信息选择对应语言资源
3、根据传入的key值找到对应的Value
关键点1:
注册多语言资源
1、建立资源文件,属性改为“嵌入式资源”,资源名称要求符合命名规则(如en.json)
2、建立资源类(如ShareResource)
3、在对应的Module文件中配置资源,具体参考Abp文档:https://docs.abp.io/zh-Hans/abp/latest/Localization。
关键点2:
获取当前区域信息
当前区域信息是由 Abp 注入的一系列 RequestCultureProviders 所提供的,他按照以下顺序来进行设置:
- QueryStringRequestCultureProvider(ASP .NET Core 默认提供):该默认提供器使用的是 QueryString 的 culture&ui-culture 所提供的区域文化信息来初始化该值,例如:culture=es-MX&ui-culture=es-MX。
- AbpUserRequestCultureProvider (Abp 提供):该提供器会读取当前用户的 IAbpSession 信息,并且从 ISettingManager 中获取用户所配置的 "Abp.Localization.DefaultLanguageName" 属性,将其作为默认的区域文化信息。
- **AbpLocalizationHeaderRequestCultureProvider ** (Abp 提供):使用每次请求头当中的 .AspNetCore.Culture 值作为当前的区域文化信息,例如 c=en|uic=en-US。
- CookieRequestCultureProvider (ASP .NET Core 提供):使用每次请求的 Cookie 当中 Key 为 .AspNetCore.Culture 值作为当前区域文化信息。
- AbpDefaultRequestCultureProvider (Abp 提供):如果之前这些提供器都没有为当前区域文化赋值,则从 ISettingMananger 当中取得 Abp.Localization.DefaultLanguageName 的默认值。
- AcceptLanguageHeaderRequestCultureProvider (ASP .NET Core 默认提供):该提供器最终会使用用户每次请求时传递的 Accept-Language 头部作为当前区域文化信息。
如果以上皆无法获得,则当前区域信息默认为当前线程的操作系统所属语言。
如果需要修改为所需的其他语言,编码如下:
var culture = new System.Globalization.CultureInfo(eventData.Language,true);
System.Globalization.CultureInfo.CurrentUICulture = culture;
关键点3:
使用本地化
Controller/Service层
该层由Abp框架自动注入了IStringLocalizer L属性,直接使用L[name]即可。
其他(可以依赖注入)
手动依赖注入IStringLocalizer<ResourceName> L
其他(不可以依赖注入)
使用LocalizationHelper静态类