首页 > 其他 > 详细

Localization本地化

时间:2019-07-12 12:17:40      阅读:324      评论:0      收藏:0      [点我收藏+]

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>,IStringLocalizer 是一个实现了 IEnumerable 的简单接口并且拥有索引器来来返回本地化的字符串。

重点关注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);
        }

  

 

Localization本地化

原文:https://www.cnblogs.com/cloudsu/p/11171998.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!