[英]Localization in ASP.Net Core 2.0 Web Application
我正在尝试全球化和本地化用于西班牙语的ASP.NET Core 2.0 Web应用程序。 我正在尝试遵循这些文档 ,但实际上这些文档似乎并不适用于Core 2.0,因为它们似乎并未涵盖Razor Pages。 仅控制器和视图。 但是,无论我更改请求标头中的区域性还是使用文档中所示的查询字符串,本地化均不起作用。 对我在做什么错有任何见解吗?
http://localhost:26417/?culture=es&ui-culture=es
启动文件
public void ConfigureServices( IServiceCollection services )
{
services.AddDbContext<PartDbContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("PartDatabase"))
);
services.AddAuthentication(IISDefaults.AuthenticationScheme);
services.AddLocalization(options => options.ResourcesPath = "Localization");
services.AddMvc()
.AddRazorPagesOptions(options => {
//options.Conventions.AllowAnonymousToPage("/Index");
// I can just use [AllowAnonymous] attribute
})
.AddViewLocalization()
.AddDataAnnotationsLocalization();
}
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure( IApplicationBuilder app, IHostingEnvironment env )
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
app.UseBrowserLink();
}
var supportedCultures = new []
{
new CultureInfo("en"),
new CultureInfo("es"),
};
app.UseRequestLocalization(new RequestLocalizationOptions {
DefaultRequestCulture = new Microsoft.AspNetCore.Localization.RequestCulture("en"),
SupportedCultures = supportedCultures,
SupportedUICultures = supportedCultures
});
app.UseStaticFiles();
app.UseMvc(routes => {
routes.MapRoute(name: "default", template: "{controller}/{action=Index}/{id?}");
});
}
_ViewImports.cshtml
@using PartDatabase
@using Microsoft.Extensions.Configuration
@using Microsoft.AspNetCore.Authorization
@using Microsoft.AspNetCore.Mvc.Localization
@namespace PartDatabase.Pages
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
@inject IConfiguration Configuration
@inject IAuthorizationService AuthorizationService
@inject IViewLocalizer Localizer
_Layout.cshtml
<a class="navbar-brand" asp-page="/Index">@Localizer["Part Database"]</a>
档案结构
资源文件
笔记:
options.ResourcesPath = "Localization"
使用另一个文件夹名称来照顾我。 我从来没有让ViewLocalizer在布局页面上工作,它似乎仅用于实际视图。 要在_Layout.cshtml
使用本地化的字符串,这就是我要做的。
这是为了以后可以查找资源文件。 资源文件的路径应反映该文件的放置位置。 例如,如果将虚拟文件放在Models/_Shared.cs
,则资源文件应该在Resources/Models/_Shared.es.resx
。
namespace WebApp.Models
{
// dummy class for shared resource strings
public class _Shared
{
}
}
IHtmlLocalizer
在_ViewImports.cshtml
(或只是将其放在_Layout.cshtml
的顶部)
@inject IHtmlLocalizer<Models._Shared> SharedLocalizer
_Layout.cshtml
使用SharedLocalizer
而不是Localizer
SharedLocalizer也可以在其他视图中使用,在这些视图中,您需要使用相同的共享资源,而不是将转换复制到不同的资源文件中。
<a class="navbar-brand" asp-page="/Index">@SharedLocalizer["Part Database"]</a>
更新:验证这在Razor Pages项目中有效。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.