【问题标题】:ASP.NET Core 1.0 LocalizationASP.NET Core 1.0 本地化
【发布时间】:2016-09-28 16:06:21
【问题描述】:

我已按照this 指南进行操作,并且已成功在我的 Web 应用程序中配置本地化。

只有两件事我不明白。

让我们看一些代码:

Startup.cs (ConfigureServices)

services.Configure<RequestLocalizationOptions>(options =>
        {
            var supportedCultures = new[]
            {
                new CultureInfo("it-IT"),
                new CultureInfo("en-US"),
                new CultureInfo("en-GB")
            };

            options.DefaultRequestCulture = new RequestCulture(culture: "it-IT", uiCulture: "it-IT");


        });

Startup.cs(配置)

var locOptions = app.ApplicationServices.GetService<IOptions<RequestLocalizationOptions>>();
app.UseRequestLocalization(locOptions.Value);

如上面链接的教程中所述,我创建了一个 _SelectLanguagePartial.cshtml(并在我的控制器中添加了建议的方法)以编程方式更改语言。

_SelectLanguagePartial.cshtml

@using Microsoft.AspNetCore.Builder
@using Microsoft.AspNetCore.Localization
@using Microsoft.AspNetCore.Mvc.Localization
@using Microsoft.Extensions.Options

@inject IViewLocalizer Localizer
@inject IOptions<RequestLocalizationOptions> LocOptions

@{
   var requestCulture = Context.Features.Get<IRequestCultureFeature>();
   var cultureItems = LocOptions.Value.SupportedUICultures
    .Select(c => new SelectListItem { Value = c.Name, Text = c.DisplayName })
    .ToList();
}

<div title="@Localizer["RequestCultureProvider"] @requestCulture?.Provider?.GetType().Name">
<form id="selectLanguage"
      asp-action="SetLanguage" asp-route-returnUrl="@Context.Request.Path"
      method="post" class="form-horizontal" role="form" onchange="submit()">
    @Localizer["Language"]: <select name="culture" asp-for="@requestCulture.RequestCulture.UICulture.Name" asp-items="cultureItems" class="btn btn-default"></select>
</form>

第一个问题是,在第一次启动时,当没有语言 cookie 时,虽然我已经配置了 it-IT em> 作为默认语言。尽管如此,我可以正确更改语言,并且如果存在语言 cookie,则该网站会以正确的语言显示。 为什么本地化框架加载 en-US 作为默认语言?

第二个问题是,如果我更改语言,加载在 cshtml 中的“cultureItems”的本地化不会改变,并且仍然是加载的广告启动。 我错过了什么?

提前谢谢大家:)

【问题讨论】:

  • 对于您的第一个问题,DefaultRequestCulture 属性设置在没有其他支持的文化可用时使用的默认文化。要么删除 en-US 支持的文化,要么将浏览器的文化更改为不支持的文化,你会看到这一点。至于第二个问题,您看到的语言列表的价值是什么?我将它们视为以母语表示的语言名称。
  • 第一个问题没问题,但是当我的浏览器文化是 IT 时,为什么框架会加载 en-US? (这也是一种受支持的文化)。对于第二个问题,我看到了所选文化中的语言列表,因此在这种情况下为 en-US。

标签: localization asp.net-core asp.net-core-mvc asp.net-core-1.0 asp.net-core-localization


【解决方案1】:

首先,如您所见,您确实需要在选项对象上设置 .SupportedCulture 和 .SupportedUICulture 属性:

options.SupportedCultures = supportedCultures; options.SupportedUICultures = supportedCultures;

我觉得有趣,这种行为是零星的,但我只是删除了默认的请求文化设置,并且名称再次以他们自己的母语返回 - 也许这就是预期的行为。

//options.DefaultRequestCulture = new RequestCulture(culture: "en-US", uiCulture: "en-US");

希望这会有所帮助。

【讨论】:

  • 在上面的代码中没有显示但是 options.SupportedCultures = supportedCultures; options.SupportedUICultures = 支持的文化;在 options.DefaultRequestCulture =... 之后出现,对此感到抱歉。但是我尝试删除默认的请求文化设置,但名称仍然以英文显示:(
猜你喜欢
  • 1970-01-01
  • 2017-01-06
  • 2016-10-16
  • 1970-01-01
  • 2020-11-29
  • 1970-01-01
  • 1970-01-01
  • 2016-12-14
  • 2017-02-12
相关资源
最近更新 更多