asp.net core razor 的SharedResource 多语言支持。。始终搞不定
目前大概如下:
在startup.cs:
public void ConfigureServices(IServiceCollection services) 下添加
services.Configure<RequestLocalizationOptions>(options =>
{
var supportedCultures = new List<CultureInfo>
{
new CultureInfo("en"),
new CultureInfo("zh"),
};
options.DefaultRequestCulture = new RequestCulture("zh");
options.SupportedCultures = supportedCultures;
options.SupportedUICultures = supportedCultures;
});
services.AddLocalization(options => options.ResourcesPath = "Resources");
services.AddRazorPages()
.AddViewLocalization(LanguageViewLocationExpanderFormat.Suffix)
.AddDataAnnotationsLocalization(options =>
{
options.DataAnnotationLocalizerProvider = (type, factory) =>
factory.Create(typeof(SharedResource));
});
然后在public void Configure(IApplicationBuilder app, IWebHostEnvironment env) 如下:
var localizationOptions = app.ApplicationServices.GetService<IOptions<RequestLocalizationOptions>>().Value;
app.UseRequestLocalization(localizationOptions);
放在app.UseEndpoints 前面的
项目中增加Resources目录。并且在目录中增加一个SharedResource.cs文件。内容一个空类如下:
namespace test
{
public class SharedResource
{
}
}
并且在增加了两个资源文件。分别是SharedResource.en.resx 和SharedResource.zh.resx 各添加一条记录。比如Hello
最后在index.cshtml中用如下方法
@inject IStringLocalizer<SharedResource> sharedLocalizer2
@inject IHtmlLocalizer<SharedResource> SharedLocalizer
@SharedLocalizer["Hello"]
@sharedLocalizer2["Hello"]
都没有从资源文件中读取Hello对应的多语言。。
但是测试的为每个类建立的单独的资源文件的方法可以读取到
比如:
@inject IStringLocalizer<IndexModel> localizer
@inject IHtmlLocalizer<IndexModel> htmlLocalizer
纠结好几天了。。。找了挺多资料。也跟着资料来做。就是无效。。。