【发布时间】:2021-01-24 17:18:17
【问题描述】:
我尝试在我的 asp.net-core 项目中添加多语言功能,但是 RequestLocalization 中的 .net 3.1 和 5.0 之间有一些变化,我无法得到我想要的。我为每种语言添加了资源文件,并在我的剃须刀页面中使用了资源,它可以工作,但是有一个不需要的默认路由错误,我希望我的路由对默认文化友好。
这就是我想要的,
对于默认文化(土耳其语):
site.com/foo
site.com/foo/bar
site.com/foo/bar/5
对于非默认文化(英语):
site.com/en/foo
site.com/en/foo/bar
site.com/en/foo/bar/5
我的另一个问题是;我的项目将 site.com/foo/foo/bar 这个 url 呈现为 site.com/tr/foo/bar 这不行,我猜它应该重定向到 404 页面。
下面是我的启动示例代码:
public void ConfigureServices(IServiceCollection services)
{
services.AddResponseCompression();
services.AddLocalization(opts => opts.ResourcesPath = "Resources");
services.Configure<RequestLocalizationOptions>(options =>
{
var supportedCultures = new[]
{
new CultureInfo("tr-TR"),
new CultureInfo("en")
};
options.DefaultRequestCulture = new RequestCulture("tr");
options.SupportedCultures = supportedCultures;
options.SupportedUICultures = supportedCultures;
options.RequestCultureProviders.Insert(0, new RouteDataRequestCultureProvider());
});
services.AddControllersWithViews();
services.AddRazorPages();
services.AddRouting(options => options.LowercaseUrls = true);
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
app.UseResponseCompression();
if (env.IsDevelopment())
app.UseDeveloperExceptionPage();
else
{
app.UseExceptionHandler("/Home/Error");
// The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
var supportedCultures = new string[] { "tr-TR", "en" };
app.UseRequestLocalization(options =>
options
.AddSupportedCultures(supportedCultures)
.AddSupportedUICultures(supportedCultures)
.SetDefaultCulture("tr-TR")
.RequestCultureProviders.Insert(0, new CustomRequestCultureProvider(context => Task.FromResult(new ProviderCultureResult("tr-TR"))))
);
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(name: "culture-route", pattern: "{culture}/{controller=Home}/{action=Index}/{id?}");
endpoints.MapControllerRoute(name: "default", "{culture=tr}/{controller=Home}/{action=Index}/{id?}");
});
}
Razor 资源使用和文化变化导航
资源文件
我该如何解决这个问题或我做错了什么?
编辑
我发现this 方法。它使用 CookieRequestCultureProvider 并且 url 中没有文化信息,但至少没有损坏的 url。我不知道这是否适合 SEO。
【问题讨论】:
标签: c# asp.net-core .net-core asp.net-core-localization asp.net-core-5.0