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 所提供的,他按照以下顺序来进行设置:

  1. QueryStringRequestCultureProvider(ASP .NET Core 默认提供):该默认提供器使用的是 QueryString 的 culture&ui-culture 所提供的区域文化信息来初始化该值,例如:culture=es-MX&ui-culture=es-MX。
  2. AbpUserRequestCultureProvider (Abp 提供):该提供器会读取当前用户的 IAbpSession 信息,并且从 ISettingManager 中获取用户所配置的 "Abp.Localization.DefaultLanguageName" 属性,将其作为默认的区域文化信息。
  3. **AbpLocalizationHeaderRequestCultureProvider ** (Abp 提供):使用每次请求头当中的 .AspNetCore.Culture 值作为当前的区域文化信息,例如 c=en|uic=en-US。
  4. CookieRequestCultureProvider (ASP .NET Core 提供):使用每次请求的 Cookie 当中 Key 为 .AspNetCore.Culture 值作为当前区域文化信息。
  5. AbpDefaultRequestCultureProvider (Abp 提供):如果之前这些提供器都没有为当前区域文化赋值,则从 ISettingMananger 当中取得 Abp.Localization.DefaultLanguageName 的默认值。
  6. 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静态类

 

 

posted @ 2021-11-05 08:44  奈何碧落黄泉  阅读(376)  评论(0编辑  收藏  举报