我使用剃刀页面创建了一个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);
}
});
});
}
}
现在我可以使用以下网址访问页面:
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应用程序的所有请求设置文化?
答案 0 :(得分:2)
请参阅此文: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&#34; UserCulture&#34; to&#34; c = zh-TW | uic = zh-TW&#34;一次。
它神奇地工作。