ASP.NET Core IViewLocalizer不拉我的字典查找值

问题描述 投票:3回答:2

对这一个非常沮丧,因为我可以让它在“Hello World”应用程序上工作但不是我真正的应用程序。这是我配置的方式:

ConfigureServices:

services.AddLocalization(options => options.ResourcesPath = "Resources");

services.AddMvc(config =>
{
    var policy = new AuthorizationPolicyBuilder()
        .RequireAuthenticatedUser()
        .Build();
    config.Filters.Add(new AuthorizeFilter(policy)); 
}).AddViewLocalization(Microsoft.AspNetCore.Mvc.Razor.LanguageViewLocationExpanderFormat.Suffix)
    .AddDataAnnotationsLocalization();

配置:

IList<CultureInfo> supportedCultures = new List<CultureInfo>
{
    new CultureInfo("en-US"),
    new CultureInfo("es-ES"),
};

app.UseDefaultFiles();

app.UseRequestLocalization(new RequestLocalizationOptions
{
    DefaultRequestCulture = new RequestCulture("en-US"),
    SupportedCultures = supportedCultures,
    SupportedUICultures = supportedCultures
});

app.UseStaticFiles();

app.UseSession();

app.UseAuthentication();

app.UseMvc(routes =>
{
    routes.MapRoute(
        name: "default",
        template: "{controller=Dashboard}/{action=Index}/{id?}");
});

_ViewImports.cshtml(添加taghelpers nuget pkg)

@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers.Localization

/views/account/login.产生HTML

@inject IViewLocalizer Localizer
@{
    ViewData["Title"] = "Log in";
}

<h1>@Localizer["test"]</h1>

/resources/views/account/login.恩-US.热塑性

“测试” - >“结果”映射

但是当我运行我的网站时,Localizer只显示Key“test”而不是“result”

我错过了某处的配置吗?

asp.net-core asp.net-core-localization
2个回答
1
投票

如果您的程序集名称!=默认名称空间,这似乎是一个问题。让他们匹配,事情按预期工作。

来自doc

如果目标类的命名空间与程序集名称不同,则需要完整的类型名称。


0
投票

只是在手机上看到这个,但在this localization docs page上,我看到:

必须在可能检查请求文化的任何中间件之前配置本地化中间件(例如,app.UseMvcWithDefaultRoute())。

看起来在上面的示例中,您在使用Mvc之前使用请求本地化,这意味着在中间件管道中,文化可能尚未设置。

如果这有帮助,请告诉我。对是否是这种情况感兴趣。

© www.soinside.com 2019 - 2024. All rights reserved.