zoukankan      html  css  js  c++  java
  • .Net Core全球化多语言

    参照:ASP.NET Core 全球化和本地化

    步骤如下:

    • 后台中的本地化。

      Startup.cs中注册服务并制定Resource文件的位置。注意:这里的位置不仅仅应用到Web层,如Infrastruce、DAL、Service层都有自己相应的不同语言的话,在已用泛型时,都会使用泛型所在层的该位置文件。

    services.AddLocalization(options =>
                {
                    options.ResourcesPath = "Resources";
                });
                // Configure supported cultures and localization options
                services.Configure<RequestLocalizationOptions>(options =>
                {
                    var supportedCultures = new[]
                    {
                        new CultureInfo("en-US"),
                        new CultureInfo("zh-CN")
                    };
                    options.DefaultRequestCulture = new RequestCulture(culture: "en-US", uiCulture: "en-US");
                    //options.DefaultRequestCulture = new RequestCulture(culture: "zh-CN", uiCulture: "zh-CN");
                    options.SupportedCultures = supportedCultures;
                    options.SupportedUICultures = supportedCultures;
                });

      

    使用:

    public class AboutController : Controller
        {
            private readonly IStringLocalizer<AboutController> _localizer;
    
            public AboutController(IStringLocalizer<AboutController> localizer)
            {
                _localizer = localizer;
            }
    
            [HttpGet]
            public string Get()
            {
                return _localizer["About Title"];
            }
        }
    • DataAnnotations 本地化。

      在程序中添加一个冗余的SharedResource.cs类,该类用于公共资源文件,不再使用各自的资源文件。

      

    //仅用于SharedResource文件的地址映射
    namespace BasicFramework.Infrastructure.Localizations
    {
        public class SharedResource
        {
        }
    }

        在同一层中在Resources文件夹下增加Localizations.SharedResource.zh-CN.resx文件,注意该文件名为SharedResource.cs类移除其默认命名空间后的地址。

        至Startup.cs中添加AddDataAnnotationsLocalization,并指定使用统一的资源文件。

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddMvc()
            .AddDataAnnotationsLocalization(options => {
                options.DataAnnotationLocalizerProvider = (type, factory) =>
                    factory.Create(typeof(SharedResource));
            });
    }

      使用

    public class RegisterViewModel
    {
        [Required(ErrorMessage = "The Email field is required.")]
        [EmailAddress(ErrorMessage = "The Email field is not a valid email address.")]
        [Display(Name = "Email")]
        public string Email { get; set; }
    
        [Required(ErrorMessage = "The Password field is required.")]
        [StringLength(8, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 6)]
        [DataType(DataType.Password)]
        [Display(Name = "Password")]
        public string Password { get; set; }
    
        [DataType(DataType.Password)]
        [Display(Name = "Confirm password")]
        [Compare("Password", ErrorMessage = "The password and confirmation password do not match.")]
        public string ConfirmPassword { get; set; }
    }
    • 视图中本地化

      在_ViewImports.cshtml中引入。注:最后一句为Tag,与本地化无关。

    @using Microsoft.AspNetCore.Mvc.Localization
    @inject IViewLocalizer L
    @addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers

      使用:

    @L["Add Info"]
    • 我的使用

      SharedResource.cs文件及Localizations.SharedResource.zh-CN.resx文件都放在了Infrastructure层,其他层调用:

            private readonly IStringLocalizer _localizer;
            protected ILogger _logger;
            protected BaseService()
            {
                _localizer = IocManager.GetService<IStringLocalizer<SharedResource>> ();
                _logger = IocManager.GetService<ILogger<BaseService>>();
            }

       视图中也直接注入共享文件:

    @using BasicFramework.Infrastructure.Localizations
    @using Microsoft.AspNetCore.Mvc.Localization
    
    @inject IHtmlLocalizer<SharedResource> L
  • 相关阅读:
    传统神经网络所存在的问题
    Xcode 全局搜索中文的正则表达式
    ES2020可选链"?."
    ng : 无法将“ng”项识别为 cmdlet、函数、脚本文件或可运行程序的名称
    阿里云盾反爬虫(Anti-Bot)产品方案浅析
    使用spring连接mysql数据库出错
    Win10 cmd的ssh命令连接linux虚拟机
    python不换行输出
    计算机网络-CSMA/CD
    计算机网络-奈氏准则
  • 原文地址:https://www.cnblogs.com/ceci/p/9172729.html
Copyright © 2011-2022 走看看