我有以下内容:
public void ConfigureServices(IServiceCollection services)
{
...
services.AddLocalization(o => { o.ResourcesPath = "Resources"; });
services.AddMvc(options =>{})
.AddViewLocalization(LanguageViewLocationExpanderFormat.Suffix)
.AddDataAnnotationsLocalization();
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
IList<CultureInfo> supportedCultures = new List<CultureInfo>
{
new CultureInfo("en"),
new CultureInfo("ko"),
};
app.UseRequestLocalization(new RequestLocalizationOptions
{
DefaultRequestCulture = new RequestCulture("en"),
SupportedCultures = supportedCultures,
SupportedUICultures = supportedCultures
});
......
}
我有一个Index.cshtml
,其中包含以下内容(位于/Views/Home/
内)。
@using Microsoft.AspNetCore.Mvc.Localization
@inject IViewLocalizer Localizer
......
<h2>@Localizer["QuickLinksTitle"].Value</h2>
我在.resx
Index.en.resx
个文件,Index.ko.resx
和/Resources/Views/Home
但视图始终会显示QuickLinksTitle
而不是.resx
文件中的值。
两个.resx
都有密钥QuickLinksTitle
和相应的文本值,但它似乎从来没有从任何资源文件中读取任何内容。
我已经确认我的浏览器确实发送了正确的语言Accept-Language: ko,en-US;q=0.9,en;q=0.8
我的假设是,如果我给@Localizer['Key']
它应该是读取该键的值而不是实际的键。
我知道MS希望我们执行@Localizer["Some text in default lang"]
然后它具有非默认语言的密钥,但我更喜欢默认语言(英语).resx
和其他语言。但是现在我甚至还没有读到.resx
文件。
答案 0 :(得分:1)
我知道MS希望我们执行
@Localizer["Some text in default lang"]
然后它具有非默认语言的密钥,但我更喜欢默认语言(英语).resx
和其他语言
那是可行的。但是,您需要遵循约定在.resx
文件中使用默认语言。
您已将 默认 语言设置为en
:
app.UseRequestLocalization(new RequestLocalizationOptions
{
DefaultRequestCulture = new RequestCulture("en"),
SupportedCultures = supportedCultures,
SupportedUICultures = supportedCultures
});
但您已为.resx
设置 本地化 en
文件:
/Resources/Views/Home/Index.en.resx
/Resources/Views/Home/Index.ko.resx
对于默认语言.resx
,它应该是 默认 en
文件:
/Resources/Views/Home/Index.resx
/Resources/Views/Home/Index.ko.resx