gpt4 book ai didi

asp.net-core - ASP .NET Core 1.0 RTM 本地化不起作用

转载 作者:行者123 更新时间:2023-12-04 11:49:08 24 4
gpt4 key购买 nike

我一直在尝试为我的 asp .NET Core 1.0 RTM Web 应用程序实现本地化,关注 microsofts documentation我就是无法让它工作。我遇到的问题是,无论我如何尝试设置文化,它总是显示来自英语资源文件的字符串。

如果有人有 5 分钟的时间,我将非常感谢您的投入。

这是我关于本地化的 Startup.cs 内容:

public void ConfigureServices(IServiceCollection services)
{
...
services.AddMvc()
.AddViewLocalization(LanguageViewLocationExpanderFormat.SubFolder)
.AddDataAnnotationsLocalization();
services.AddScoped<LocalizationFilter>();
services.AddLocalization(options => options.ResourcesPath = "Resources");

var supportedCultures = new List<CultureInfo>{
new CultureInfo("en-US"),
new CultureInfo("sl-SI"),
new CultureInfo("de-DE"),
new CultureInfo("hr-HR")
};
services.Configure<RequestLocalizationOptions>(options =>
{
options.SupportedCultures = supportedCultures;
options.SupportedUICultures = supportedCultures;
options.DefaultRequestCulture = new RequestCulture(new CultureInfo("en-US"),
new CultureInfo("en-US"));
});
}

public void Configure(IApplicationBuilder app, IHostingEnvironment env,
ILoggerFactory loggerFactory)
{
...
var supportedCultures = new List<CultureInfo>{
new CultureInfo("en-US"),
new CultureInfo("sl-SI"),
new CultureInfo("de-DE"),
new CultureInfo("hr-HR")
};
var requestLocalizationOptions = new RequestLocalizationOptions
{
SupportedCultures = supportedCultures,
SupportedUICultures = supportedCultures,
DefaultRequestCulture = new RequestCulture(new CultureInfo("en-US"),
new CultureInfo("en-US"))
};
app.UseRequestLocalization(requestLocalizationOptions);
}

这就是我如何在我的 ActionFilter 中改变 OnActionExecuting 内部的文化
actionContext.HttpContext.Response.Cookies.Append(
CookieRequestCultureProvider.DefaultCookieName,
CookieRequestCultureProvider.MakeCookieValue(new RequestCulture(culture)),
new CookieOptions { Expires = DateTimeOffset.UtcNow.AddYears(1) });
CultureInfo.CurrentCulture = culture;
CultureInfo.CurrentUICulture = culture;

我也试过在我的 Controller 上这样做,但没有运气。

然后在我的观点中我使用 @inject IViewLocalizer Localizer@Localizer["Name"] 显示本地化的字符串.

我的资源位于文件夹 Resources/Views/ControllerName 中,如下所示:
  • 资源/ View / Controller 名称/ View 名称.en.resx
  • 资源/ View / Controller 名称/ View 名称.sl.resx
  • ...

  • 无论我如何尝试改变文化,显示的字符串始终来自 .en 资源文件。
    有什么我想念的吗?还有什么我应该做的吗?我遇到的问题似乎是设置语言。根据文档,您应该使用 Response.Cookies.Append 设置 cookie。 ,但我也试过 CultureInfo.CurrentCultureThread.CurrentThread.CurentCulture不再可用。

    我真的不知道我错过了什么。有什么想法吗?

    最佳答案

    您可能会遇到以下情况:
    https://github.com/aspnet/Mvc/issues/4692

    主要看评论:https://github.com/aspnet/Mvc/issues/4692#issuecomment-223671462

    总结:您可以创建一个 Resource在 MVC 中过滤以解决此问题:

    public class CultureSettingResourceFilter : IResourceFilter, IOrderedFilter
    {
    public int Order
    {
    get
    {
    return int.MinValue;
    }
    }

    public void OnResourceExecuted(ResourceExecutedContext context)
    {
    // By this time the response would already have been started, so do not try to modify the response
    }

    public void OnResourceExecuting(ResourceExecutingContext context)
    {
    var culture = httpContext.GetRouteValue("your-culture-key-name")?.ToString();
    // set your culture here
    CultureInfo.CurrentCulture = culture;
    CultureInfo.CurrentUICulture = culture;
    }
    }

    services.AddMvc(o =>
    {
    o.Filters.Add(new CultureSettingResourceFilter());
    });

    关于asp.net-core - ASP .NET Core 1.0 RTM 本地化不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38840183/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com