Localization本地化

匿名 (未验证) 提交于 2019-12-02 23:47:01

1、模块的定义,使用AbpStringLocalizerFactory替换了IStringLocalizerFactory,增加单例ResourceManagerStringLocalizerFactory,虚拟文件定义,本地化配置文件

[DependsOn(         typeof(AbpVirtualFileSystemModule),         typeof(AbpSettingsModule),         typeof(AbpLocalizationAbstractionsModule)         )]     public class AbpLocalizationModule : AbpModule     {         public override void ConfigureServices(ServiceConfigurationContext context)         {             AbpStringLocalizerFactory.Replace(context.Services);              Configure<VirtualFileSystemOptions>(options =>             {                 options.FileSets.AddEmbedded<AbpLocalizationModule>("Volo.Abp", "Volo/Abp");             });              Configure<AbpLocalizationOptions>(options =>             {                 options                     .Resources                     .Add<DefaultResource>("en");                  options                     .Resources                     .Add<AbpValidationResource>("en")                     .AddVirtualJson("/Localization/Resources/AbpValidation");             });         }     } 

 配置有三个集合,本地化资源LocalizationResource,资源贡献者ILocalizationResourceContributor,语言种类LanguageInfo

 public class AbpLocalizationOptions     {         public LocalizationResourceDictionary Resources { get; }          public ITypeList<ILocalizationResourceContributor> GlobalContributors { get; }          public List<LanguageInfo> Languages { get; }          public AbpLocalizationOptions()         {             Resources = new LocalizationResourceDictionary();             GlobalContributors = new TypeList<ILocalizationResourceContributor>();             Languages = new List<LanguageInfo>();         }     } 

   

AbpCultureHelper.Use,设置当前的语言,同设置租户功能差不多

public static IDisposable Use([NotNull] CultureInfo culture, CultureInfo uiCulture = null)         {             Check.NotNull(culture, nameof(culture));              var currentCulture = CultureInfo.CurrentCulture;             var currentUiCulture = CultureInfo.CurrentUICulture;              CultureInfo.CurrentCulture = culture;             CultureInfo.CurrentUICulture = uiCulture ?? culture;              return new DisposeAction(() =>             {                 CultureInfo.CurrentCulture = currentCulture;                 CultureInfo.CurrentUICulture = currentUiCulture;             });         } 

 2、本地化字符串访问器IStringLocalizer<T>,IStringLocalizerIEnumerable

重点关注AbpDictionaryBasedStringLocalizer。

_localizer["About Title"] 没有发现 “About Title” 的本地化值,则索引的键值被返回

        public static IApplicationBuilder UseAbpRequestLocalization(this IApplicationBuilder app)         {             IReadOnlyList<LanguageInfo> languages;             string defaultLanguage;              using (var scope = app.ApplicationServices.CreateScope())             {                 var languageProvider = scope.ServiceProvider.GetRequiredService<ILanguageProvider>();                 languages = languageProvider.GetLanguages();                  var settingProvider = scope.ServiceProvider.GetRequiredService<ISettingProvider>();                 defaultLanguage = settingProvider.GetOrNull(LocalizationSettingNames.DefaultLanguage);             }              if (!languages.Any())             {                 return app.UseRequestLocalization();             }              var options = new RequestLocalizationOptions             {                 DefaultRequestCulture = DefaultGetRequestCulture(defaultLanguage, languages),                  SupportedCultures = languages                     .Select(l => l.CultureName)                     .Distinct()                     .Select(c => new CultureInfo(c))                     .ToArray(),                  SupportedUICultures = languages                     .Select(l => l.UiCultureName)                     .Distinct()                     .Select(c => new CultureInfo(c))                     .ToArray()             };                          return app.UseRequestLocalization(options);         } 

  

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!