更简单的ASP.NET Core多语言(国际化和本地化, 欢迎转载)

1 篇文章 0 订阅
1 篇文章 0 订阅

 

其实在.NET Core有更好的多语言实现方式

#新建项目(.NET Core MVC)

#在项目根目录新建Resources, 在Resources目录里面添加Program.en-US.resx || Program.zh-Hans.resx || Program.xx-XX.resx等等你要使用的资源文件(中缀要符合 RFC 4646, 你也可以自己起中缀, 但是效果不出来不要怪我)

#这是我的Startup.cs(部分)

__________________________>>
         


            services.AddLocalization(options => options.ResourcesPath = "Resources");
            services.AddMvc()
                .AddJsonOptions(options => { options.SerializerSettings.ContractResolver = new DefaultContractResolver(); })
                .AddDataAnnotationsLocalization(options =>
                {
                    options.DataAnnotationLocalizerProvider = (type, factory) =>
                        factory.Create(typeof(Program));
                })
                .AddViewLocalization(LanguageViewLocationExpanderFormat.Suffix)
                .AddSessionStateTempDataProvider()
                .SetCompatibilityVersion(CompatibilityVersion.Version_2_2);


            services.Configure<RequestLocalizationOptions>(opts =>{
               var supportedCultures = new List<CultureInfo>
               {
                        new CultureInfo("en-US"),
                        new CultureInfo("zh-Hans")
               };
               opts.SupportedCultures = supportedCultures;
               opts.SupportedUICultures = supportedCultures;
               opts.RequestCultureProviders = new List<IRequestCultureProvider>{
                       new X_DOVERequestCultureProvider()
                };
           });

>>

//注意位置

 app.UseRequestLocalization(); //   app.ApplicationServices.GetService<IOptions<RequestLocalizationOptions>>().Value);

            app.UseMvc(routes =>
            {
                routes.MapRoute(
                    name: "default",
                    template: "{controller=Home}/{action=Index}/{id?}");
            });

__________________________

#Model >>

  public class XAdCustomer    //  ViewModel
    {
        public Guid Id { get; set; } = Guid.NewGuid();

        //    Program.xx-XX.resx里面添加Display的Name值, 下同
        [Display(Name = "Store name")]   
        [StringLength(maximumLength:20,MinimumLength =2)]
        public string Name { get; set; }

        [NotMapped]
        [Display(Name="Registrant")]
        public string UserName{get;set;}


        [Display(Name="Date of registering")]
        public DateTimeOffset DORegistering { get; set; } = DateTimeOffset.Now;

        [Display(Name = "Business address")]
        public string Address { get; set; }

        [Display(Name= "Introduction")]
        [StringLength(maximumLength:128)]
        public string Intro { get; set; }
        
        // . . .
    }

#Controlers>>

 private readonly IStringLocalizer<Program>  _localizer;
 public HomeController(IStringLocalizer<Program> localizer)
 {
        _localizer = localizer;
 }
 public IActionResult Index()
 {
        ViewData["Hello"] = _localizer["Hello"];
        return View();
 }

#Views>>

这是我的_ViewImports.cshtml


@using Microsoft.Extensions.Localization;
@using xxxxx.Program;

@inject IStringLocalizer<Program> Localizer;

@*如果在Area里面使用也是同样using和inject这三个*@

好了, 在你喜欢的Views中@Localizer["xxxx"]就可以了, 

#贴一下X_DOVERequestCultureProvider.cs

 public class X_DOVERequestCultureProvider : RequestCultureProvider
    {
        public override Task<ProviderCultureResult> DetermineProviderCultureResult(HttpContext httpContext)
        {
            var CULTURE_String="CULTURE";
            var CultureCookie = httpContext.Request.Cookies[CULTURE_String]?.ToString() ?? ""; 
            if (string.IsNullOrWhiteSpace(CultureCookie))
            {
                CultureCookie = "zh-Hans";
                httpContext.Response.Cookies.Append(key:CULTURE_String, value:CultureCookie, options: new CookieOptions() { Expires = DateTime.Now.AddYears(1) });
            }
            return Task.FromResult(new ProviderCultureResult(CultureCookie));
        }
    }

(看得懂吗? js修改Cookies的"CULTURE"的值然后location.reload()就可以换语言)

现在你不用创建那么多目录, 也不用创建那么多mvc resx了

如果还有哪里不懂的地方还可以私信我2034643712@qq.com

转载还请附上链接

要大四了, 一分钱没有,  过完今天都不知道明天怎么过, 有上顿没下顿

要大四了, 一分钱没有,  过完今天都不知道明天怎么过, 有上顿没下顿

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
ASP.NET Core Web 项目中初始化 Vue CLI,您可以按照以下步骤进行操作: 1. 打开命令行界面:打开您的命令行界面,如 PowerShell(Windows)或终端(macOS/Linux)。 2. 导航到项目目录:使用命令行界面中的 `cd` 命令导航到您的 ASP.NET Core Web 项目的根目录。 3. 初始化 Vue CLI:运行以下命令来初始化 Vue CLI: ``` vue create clientApp ``` 这将在项目根目录下创建一个名为 `clientApp` 的文件夹,并初始化 Vue CLI 项目。 4. 配置 Vue CLI:运行上述命令后,Vue CLI 会引导您进行一些配置选项的选择。您可以根据需求选择不同的配置,例如选择需要的特性和插件。 5. 等待安装依赖:初始化完成后,Vue CLI 会自动下载和安装所需的依赖项。这可能需要一些时间,具体取决于您的网络速度和项目规模。 6. 完成初始化:当安装完成后,您将看到一个成功的提示消息。此时,您的 ASP.NET Core Web 项目就已经成功初始化了 Vue CLI。 现在,您可以在 `clientApp` 文件夹中开始开发您的 Vue.js 应用程序。您可以使用命令行界面中的 `cd clientApp` 命令切换到该文件夹,并使用 Vue CLI 提供的命令来运行、构建和测试您的 Vue.js 应用程序。 通过上述步骤,您可以在 ASP.NET Core Web 项目中成功初始化 Vue CLI,并开始使用 Vue.js 开发前端应用程序。这样做可以让您方便地使用 Vue CLI 提供的工具和功能来管理和构建 Vue.js 项目。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值