1

J'ai suivi le guide this et j'ai réussi à configurer la localisation dans mon application Web.ASP.NET Core 1.0 Localisation

Il y a seulement deux choses que je ne comprends pas.

Voyons voir un peu de code:

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 (Configurer)

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

Comme cela est expliqué dans le tutoriel lié ci-dessus J'ai créé un _SelectLanguagePartial.cshtml (et ajouté la méthode suggérée dans mes contrôleurs) pour changer la langue par programme.

_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> 

Le premier problème est que, lors de la première mise en service, quand il n'y a pas de cookie de langue, le site est affiché avec culture en-US bien J'ai configuré it-IT comme langue par défaut. Malgré cela, je peux changer la langue correctement et si un cookie de langue est présent, le site est affiché dans la bonne langue. Pourquoi la structure de localisation charge en-US comme langue par défaut?

Le deuxième problème est que, si je change de langue, la localisation de "cultureItems" chargé dans le cshtml ne change pas et reste le démarrage d'une annonce chargée. Qu'est-ce qui me manque?

Merci à tous à l'avance :)

+0

Pour votre première question, la propriété DefaultRequestCulture définit la culture par défaut à utiliser lorsqu'aucune des autres cultures prises en charge n'est disponible. Supprimez la culture en-US prise en charge ou modifiez la culture de votre navigateur en une culture non prise en charge et vous verrez cela en action. En ce qui concerne la deuxième question, quelle est la valeur de la liste des langues que vous voyez? Je les vois comme les noms des langues dans leur langue maternelle. –

+0

Ok pour la première question, mais pourquoi le framework charge-t-il en-US quand ma culture de navigateur l'est-elle? (C'est aussi une culture soutenue).Pour la deuxième question, je vois la liste des langues dans la culture sélectionnée, dans ce cas, en-US. – Androidian

Répondre

0

tout d'abord, et comme vous le voyez, vous avez besoin de définir les propriétés .SupportedCulture et .SupportedUICulture sur les options objet:

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

ce que je trouve intéressant, et ce comportement est sporadique, mais j'ai juste enlevé le paramètre de culture de demande par défaut, et les noms sont revenus dans leurs propres langues natives encore - c'est peut-être le comportement prévu.

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

espérons que cette aide.

+0

Dans le code ci-dessus n'est pas montré mais options.SupportedCultures = supportedCultures; options.SupportedUICultures = supportedCultures; sont présentés après les options.DefaultRequestCulture = ..., désolé pour cela. Cependant j'ai essayé d'enlever le paramètre de culture de demande par défaut mais les noms apparaissent toujours en anglais :( – Androidian