1

我跟着this指南,我已經成功地在我的web應用程序中配置了本地化。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> 

的第一個問題是,在第一次啓動時,如果沒有語言的cookie,網站顯示有的en-US文化雖然我已將it-IT配置爲默認語言。儘管如此,我仍然可以正確地更改語言,並且如果存在語言Cookie,則該網站會以正確的語言顯示。 爲什麼本地化框架加載en-US作爲默認語言?

第二個問題是,如果我更改語言,加載到cshtml中的「cultureItems」的本地化不會更改,並且保持加載的廣告啓動狀態。 我錯過了什麼?

謝謝大家提前:)

+0

對於第一個問題,DefaultRequestCulture屬性設置默認區域性,以便在沒有其他受支持的區域性可用時使用。要麼刪除en-US支持的文化,要麼將瀏覽器的文化改變爲不受支持的文化,您將看到這一行動。 至於第二個問題,你看到的語言列表的價值是什麼?我把它們看作是母語的語言名稱。 –

+0

對於第一個問題,好的,但是爲什麼當我的瀏覽器文化是IT時,框架會加載en-US? (這也是一種支持的文化)。對於第二個問題,我看到選定文化中的語言列表,因此在這種情況下,en-US。 – Androidian

回答

0

首先,正如你看到的,你需要設置的選項.SupportedCulture和.SupportedUICulture屬性對象:

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

我覺得有趣,而且這種行爲是零星的,但我只是刪除了默認的請求文化設置,並且名稱又以他們自己的本地語言再次出現 - 也許這就是預期的行爲。

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

希望這會有所幫助。

+0

在上面的代碼中沒有顯示,但options.SupportedCultures = supportedCultures; options.SupportedUICultures = supportedCultures;在options.DefaultRequestCulture = ...之後呈現,對不起。不過,我試圖刪除默認的請求文化設置,但名稱仍然以英文顯示:( – Androidian