.net core引用abp vnext实现本地化

  1. 创建一个.net core3.1 web应用程序

  2. 引用上abp的依赖注入
    public static IHostBuilder CreateHostBuilder(string[] args) =>
                Host.CreateDefaultBuilder(args)
                    .ConfigureWebHostDefaults(webBuilder =>
                    {
                        webBuilder.UseStartup<Startup>();
                    }).UseAutofac();
    

      

    public void ConfigureServices(IServiceCollection services)
            {
                services.AddApplication<AbpLocalizationDemoModule>();
                services.AddControllers();
            }
    
            // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
            public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
            {
                app.InitializeApplication();
    
                app.UseStaticFiles();
    
                app.UseRouting();
    
                app.UseAuthorization();
    
                app.UseEndpoints(endpoints =>
                {
                    endpoints.MapControllers();
                });
            }
    

      

    [DependsOn(
            typeof(AbpAutofacModule),
            typeof(AbpAspNetCoreModule),
            typeof(LocalizationModule)
        )]
        public class AbpLocalizationDemoModule : AbpModule
        {
            /// <summary>
            /// service注入
            /// </summary>
            /// <param name="context"></param>
            public override void ConfigureServices(ServiceConfigurationContext context)
            {
                Console.WriteLine("service注入完成");
            }
    
            /// <summary>
            /// 程序初始化
            /// </summary>
            /// <param name="context"></param>
            public override void OnApplicationInitialization(ApplicationInitializationContext context)
            {
                Console.WriteLine("初始化完成");
            }
        }
    

      

  3. 添加Localization文件夹及资源文件

  4.   

     

     

  5.  

     

     

  6. LocalizationModule

    public class LocalizationModule :AbpModule
        {
            /// <summary>
            /// service注入
            /// </summary>
            /// <param name="context"></param>
            public override void ConfigureServices(ServiceConfigurationContext context)
            {
                Configure<AbpVirtualFileSystemOptions>(options =>
                {
                    //资源文件添加到abp虚拟系统
                    options.FileSets.AddEmbedded<LocalizationModule>("AbpLocalizationDemo");
                });
    
                Configure<AbpLocalizationOptions>(options =>
                {
                    //为了资源文件分类写了两个Resource,类的作用是用来标识引用的资源文件来源
                    options.Resources
                        .Add<TestResource>("en")
                        .AddVirtualJson("/Localization/Resources/TestResource");
    
                    options.Resources
                        .Add<ExceptionResource>("en")
                        .AddVirtualJson("/Localization/Resources/ExceptionResource");
    
                    options.DefaultResourceType = typeof(TestResource);
                });
            }
    
            /// <summary>
            /// 程序初始化
            /// </summary>
            /// <param name="context"></param>
            public override void OnApplicationInitialization(ApplicationInitializationContext context)
            {
                var app = context.GetApplicationBuilder();
    
                // 配置国际化中间件支持
                // abp有默认en=英文 zh=中文等  ,个性化命名ch=中文 这种情况就需要加上中间件
                // 作用主要是前端根据header或路由等标识切换应用的本地化资源文件
                var supportedCultures = new[] { "en", "zh" };
                var localizationOptions = new RequestLocalizationOptions().SetDefaultCulture(supportedCultures[0])
                    .AddSupportedCultures(supportedCultures)
                    .AddSupportedUICultures(supportedCultures);
                app.UseRequestLocalization(localizationOptions);
            }
        }
    

      

  7. [Route("api/[controller]/[action]")]
        [ApiController]
        public class DefaultController : AbpController
        {
            //不同Resource获取不同资源文件里的数据
            private readonly IStringLocalizer<TestResource> _testlocalizer;
            private readonly IStringLocalizer<ExceptionResource> _exceptionLocalizer;
    
            public DefaultController(IStringLocalizer<TestResource> testlocalizer, IStringLocalizer<ExceptionResource> exceptionLocalizer)
            {
                _testlocalizer = testlocalizer;
                _exceptionLocalizer = exceptionLocalizer;
            }
    
            [HttpGet]
            public string GetLocalization()
            {
                var str = _testlocalizer["HelloWorld"];
                System.Console.WriteLine(_testlocalizer["HelloWorld"]);
                System.Console.WriteLine(_exceptionLocalizer["HelloWorld"]);
                return str;
            }
        }
    

      

  8. 使用Header  Accept-Language = en或 Accept-Language = zh切换多语言

     

     

     

posted @ 2022-02-14 20:59  哈喽哈喽1  阅读(459)  评论(0)    收藏  举报