ASP .NET Core默认语言始终为英语

时间:2017-06-11 05:44:38

标签: asp.net-core localization

我按照Microsoft的博客中所述设置了本地化,但默认语言始终为英语。这就是我的Startup.cs在本地化方面的样子。

CultureInfo[] supportedCultures = new[]
            {
                new CultureInfo("ar"),
                new CultureInfo("en") 
            };

在ConfigureServices方法中:

    services.Configure<RequestLocalizationOptions>(options =>
        {
            options.DefaultRequestCulture = new RequestCulture("ar", "ar");
            options.SupportedCultures = supportedCultures;
            options.SupportedUICultures = supportedCultures;
        });
        services.AddLocalization(options =>
        {
            options.ResourcesPath = "Resources";
        });


        services.AddMvc()
        .AddViewLocalization()
        .AddDataAnnotationsLocalization();

在配置方法中:

        app.UseRequestLocalization(new RequestLocalizationOptions()
        {
            DefaultRequestCulture = new RequestCulture("ar"),
            SupportedCultures = supportedCultures,
            SupportedUICultures = supportedCultures
        });

谢谢:)

2 个答案:

答案 0 :(得分:20)

你正在设置&#34;阿拉伯语&#34;如果没有内置提供程序可以确定请求文化,则使用DefaultRequestCultureDefaultRequestCulture。默认提供者是:

  1. QueryStringRequestCultureProvider
  2. CookieRequestCultureProvider
  3. AcceptLanguageHeaderRequestCultureProvider
  4. 最有可能的是,文化是根据浏览器发送的Accept-Language HTTP标头确定的。

    您必须删除AcceptLanguageHeaderRequestCultureProvider才能回退到DefaultRequestCulture。为此,我们可以覆盖RequestCultureProviders的{​​{1}}列表,并仅使用其他两个提供商。在RequestLocalizationOptions

    Startup.cs

    并且在public void ConfigureServices(IServiceCollection services) { CultureInfo[] supportedCultures = new[] { new CultureInfo("ar"), new CultureInfo("en") }; services.Configure<RequestLocalizationOptions>(options => { options.DefaultRequestCulture = new RequestCulture("ar"); options.SupportedCultures = supportedCultures; options.SupportedUICultures = supportedCultures; options.RequestCultureProviders = new List<IRequestCultureProvider> { new QueryStringRequestCultureProvider(), new CookieRequestCultureProvider() }; }); } 方法中只需在Configure

    之前使用app.UseRequestLocalization();

答案 1 :(得分:2)

如果您正在使用Ajax调用来设置区域性,并使用Json结果将响应返回给客户端。

您必须在浏览器级别设置与ASP.Net对应的cookie值,如下所示。否则,本地化程序将无法找到具有Cookie值的正确区域性。

                var date = new Date();
                date.setTime(date.getTime() + (30*24*60*60*1000));
                expires = "; expires=" + date.toUTCString();
                document.cookie = '.AspNetCore.Culture' + "=c=" + (data.message || "ko-KR") + "|uic=" +(data.message || "ko-KR")  + expires + "; path=/";
                window.location.reload();

谢谢