我跟着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」的本地化不會更改,並且保持加載的廣告啓動狀態。 我錯過了什麼?
謝謝大家提前:)
對於第一個問題,DefaultRequestCulture屬性設置默認區域性,以便在沒有其他受支持的區域性可用時使用。要麼刪除en-US支持的文化,要麼將瀏覽器的文化改變爲不受支持的文化,您將看到這一行動。 至於第二個問題,你看到的語言列表的價值是什麼?我把它們看作是母語的語言名稱。 –
對於第一個問題,好的,但是爲什麼當我的瀏覽器文化是IT時,框架會加載en-US? (這也是一種支持的文化)。對於第二個問題,我看到選定文化中的語言列表,因此在這種情況下,en-US。 – Androidian