首页 文章

更改ASP.NET Core 2 Razor页面的文化

提问于
浏览
2

我用剃刀页面创建了一个ASP.NET Core 2项目,我想给访问者提供选择语言的机会 . 我遇到的第一个问题是更改Web应用程序URL,以便ti包含当前语言代码 . 我通过在ConfigureServices中添加以下代码解决了这个问题 .

public class Startup
{
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddMvc()
            .AddRazorPagesOptions(options =>
            {
                options.Conventions.AuthorizeFolder("/Account/Manage");
                options.Conventions.AuthorizePage("/Account/Logout");
                options.Conventions.AddFolderRouteModelConvention("/", model =>
                {
                    foreach (var selector in model.Selectors)
                    {
                        var attributeRouteModel = selector.AttributeRouteModel;
                        attributeRouteModel.Template = AttributeRouteModel.CombineTemplates("{language=el-GR}", attributeRouteModel.Template);
                    }
                });
            });
    }
}

现在我可以使用以下URL访问页面:

http://domain/el-GR/MyPage

我想做的最后一件事是改变每个请求的文化 . 我不喜欢的最佳解决方案是将以下代码放在我的页面中:

System.Globalization.CultureInfo.CurrentCulture = new System.Globalization.CultureInfo((string)RouteData.Values["language"]);
System.Globalization.CultureInfo.CurrentUICulture = new System.Globalization.CultureInfo((string)RouteData.Values["language"]);

这不好,因为我将不得不在我将在项目中创建的每个剃刀页面中添加这些谎言 .

是否有另一种方法为我的Web应用程序的所有请求设置文化?

1 回答

  • 1

    参考这篇文章:https://joonasw.net/view/aspnet-core-localization-deep-dive

    有几种方法,我使用RequestCultureProviders .

    NuGet:Microsoft.AspNetCore.Localization

    在我的Startup.Configure方法中 .

    IList<CultureInfo> sc = new List<CultureInfo>();
    sc.Add(new CultureInfo("en-US"));
    sc.Add(new CultureInfo("zh-TW"));
    
    var lo = new RequestLocalizationOptions
    {
        DefaultRequestCulture = new RequestCulture("en-US"),
        SupportedCultures = sc,
        SupportedUICultures = sc
    };
    var cp = lo.RequestCultureProviders.
        OfType<CookieRequestCultureProvider>().First();
        cp.CookieName = "UserCulture"; // Or whatever name that you like
    
    app.UseRequestLocalization(lo);
    

    将您的cookie“UserCulture”设置为“c = zh-TW | uic = zh-TW”一次 .

    它神奇地工作 .

相关问题