Localization ASP.NET核心1.0本地化
我遵循了指南,并在我的web应用程序中成功地配置了本地化 只有两件事我不明白 让我们看一些代码: Startup.cs(配置服务)Localization ASP.NET核心1.0本地化,localization,asp.net-core,asp.net-core-mvc,asp.net-core-1.0,asp.net-core-localization,Localization,Asp.net Core,Asp.net Core Mvc,Asp.net Core 1.0,Asp.net Core Localization,我遵循了指南,并在我的web应用程序中成功地配置了本地化 只有两件事我不明白 让我们看一些代码: Startup.cs(配置服务) services.Configure(选项=> { var supportedCultures=new[] { 新文化信息(“it”), 新文化信息(“美国”), 新文化信息(“en GB”) }; options.DefaultRequestCulture=新的RequestCulture(区域性:“it”,uiCulture:“it”); }); Startu
services.Configure(选项=>
{
var supportedCultures=new[]
{
新文化信息(“it”),
新文化信息(“美国”),
新文化信息(“en GB”)
};
options.DefaultRequestCulture=新的RequestCulture(区域性:“it”,uiCulture:“it”);
});
Startup.cs(配置)
var locOptions=app.ApplicationServices.GetService();
app.UseRequestLocalization(locOptions.Value);
正如上面链接的教程中所解释的,我创建了一个_SelectLanguagePartial.cshtml(并在我的控制器中添加了建议的方法),以编程方式更改语言
\u选择LanguagePartial.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>
@使用Microsoft.AspNetCore.Builder
@使用Microsoft.AspNetCore.Localization
@使用Microsoft.AspNetCore.Mvc.Localization
@使用Microsoft.Extensions.Options
@注入IViewLocalizer定位器
@注入IOptions位置选项
@{
var requestCulture=Context.Features.Get();
var cultureItems=LocOptions.Value.SupportedUltures
.Select(c=>newselectListItem{Value=c.Name,Text=c.DisplayName})
.ToList();
}
@定位器[“语言”]:
第一个问题是,在第一次启动时,当没有语言cookie时,尽管我已将其配置为默认语言,但该站点显示为en-US区域性。尽管如此,我可以正确地更改语言,如果存在语言cookie,则网站将以正确的语言显示。
为什么本地化框架将en-US作为默认语言加载
第二个问题是,如果我改变语言,cshtml中加载的“cultureItems”的本地化不会改变,仍然是加载的广告启动。
我错过了什么
提前感谢大家:)首先,如您所见,您确实需要在options对象上设置.SupportedCulture和.SupportedCulture属性:
options.SupportedCultures=SupportedCultures代码>
options.supportedCultures=supportedCultures代码>
我发现有趣的是,这种行为是零星的,但我只是删除了默认的请求区域性设置,名称又以它们自己的母语出现了——也许这就是预期的行为
//options.DefaultRequestCulture=newrequestculture(区域性:“en-US”,ui区域性:“en-US”)代码>
希望这有帮助。首先,正如您所看到的,您确实需要在options对象上设置.SupportedCulture和.SupportedCulture属性:
options.SupportedCultures=SupportedCultures代码>
options.supportedCultures=supportedCultures代码>
我发现有趣的是,这种行为是零星的,但我只是删除了默认的请求区域性设置,名称又以它们自己的母语出现了——也许这就是预期的行为
//options.DefaultRequestCulture=newrequestculture(区域性:“en-US”,ui区域性:“en-US”)代码>
希望这能有所帮助。对于第一个问题,DefaultRequestCulture属性设置在其他受支持的区域性均不可用时要使用的默认区域性。删除en-US支持的区域性或将浏览器的区域性更改为不支持的区域性,您将看到这一操作。至于第二个问题,你看到的语言列表的价值是什么?我把它们看作是母语中的语言名称。好的,第一个问题是,当我的浏览器文化是它的时候,为什么框架会加载我们呢?(这也是一种受支持的文化)。对于第二个问题,我看到了所选区域性中的语言列表,因此,在这种情况下为en-US。对于第一个问题,DefaultRequestCulture属性设置了在其他受支持的区域性均不可用时使用的默认区域性。删除en-US支持的区域性或将浏览器的区域性更改为不支持的区域性,您将看到这一操作。至于第二个问题,你看到的语言列表的价值是什么?我把它们看作是母语中的语言名称。好的,第一个问题是,当我的浏览器文化是它的时候,为什么框架会加载我们呢?(这也是一种受支持的文化)。对于第二个问题,我看到了所选区域性中的语言列表,因此,在这种情况下,上面的代码中没有显示en-US.in,而是显示options.SupportedCultures=SupportedCultures;options.supportedCultures=supportedCultures;在options.DefaultRequestCulture=….之后显示,对此表示抱歉。但是,我尝试删除默认的请求区域性设置,但名称仍以英文显示:(在上面的代码中未显示,但options.SupportedCultures=SupportedCultures;options.SupportedCultures=SupportedCultures;显示在options.DefaultRequestCulture=…)之后,对此表示抱歉。不过,我尝试删除默认的请求区域性设置,但名称仍以英文显示:(
var locOptions = app.ApplicationServices.GetService<IOptions<RequestLocalizationOptions>>();
app.UseRequestLocalization(locOptions.Value);
@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>