1

Я следил за руководством this, и я успешно настроил локализацию в своем веб-приложении.ASP.NET Core 1.0 Локализация

Есть только две вещи, которые я не понимаю.

Давайте посмотрим код:

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> 

Первая проблема заключается в том, что при первом запуске, когда нет языка печенья, сайт показано ан-США культуры, хот Я настроил it-IT как язык по умолчанию. Несмотря на это, я могу правильно изменить язык и, если присутствует языковой файл cookie, сайт отображается на правильном языке. Зачем нужна локализация фреймов ru-US как язык по умолчанию?

Вторая проблема заключается в том, что если я смену язык, локализация «cultureItems», загружаемая в cshtml, не изменяется и остается загруженным началом загрузки рекламы. Что мне не хватает?

Спасибо всем заранее :)

+0

Для вашего первого вопроса свойство DefaultRequestCulture устанавливает культуру по умолчанию для использования, когда ни одна из других поддерживаемых культур недоступна. Удалите культуру, поддерживаемую en-US, или измените культуру вашего браузера на не поддерживаемую культуру, и вы увидите это в действии. Что касается второго вопроса, какова ценность списка языков, которые вы видите? Я рассматриваю их как имена языков на их родном языке. –

+0

Хорошо для первого вопроса, но почему инфраструктура загружает en-US, когда моя культура браузера - IT? (Это тоже поддерживается культура).Во втором вопросе я вижу список языков в выбранной культуре, поэтому в этом случае en-US. – Androidian

ответ

0

во-первых, и, как вы видите, вы должны установить свойства .SupportedCulture и .SupportedUICulture на параметрах объекта:

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

что я нахожу интересным, и это поведение носит спорадический характер, но я просто удалил настройку культуры запросов по умолчанию, и имена снова вернулись на свои родные языки - возможно, это предполагаемое поведение.

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

надеюсь, что это помогает.

+0

В приведенном выше коде не показаны, а опции. ПоддерживаемыеКультуры = supportedCultures; options.SupportedUICultures = supportedCultures; присутствуют после options.DefaultRequestCulture = ..., извините за это. Однако я попытался удалить настройку культуры запросов по умолчанию, но имена все еще появляются на английском языке :( – Androidian