asp.net core razor 的SharedResource 多语言支持。。始终搞不定

boyyao 2020-06-12 06:04:38
目前大概如下:
在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

纠结好几天了。。。找了挺多资料。也跟着资料来做。就是无效。。。
...全文
280 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
masanaka 2020-06-14
  • 打赏
  • 举报
回复
不要把SharedResource.cs和resx放在同一个文件夹下,会被默认成单独的资源了。
移出来就可以了。
boyyao 2020-06-13
  • 打赏
  • 举报
回复
发现一个神奇的事情。。 只要把 services.AddLocalization(options => options.ResourcesPath = "Resources"); 去掉就可以使用共享资源。但是为每个页面创建单独的资源就无法使用了。。。这是什么情况??
boyyao 2020-06-13
  • 打赏
  • 举报
回复
链接: https://pan.baidu.com/s/1Fc9RWkdUSPvPyR9TsRGplA 提取码: ursi 测试的上传了一下。您看看。那里有错误麽?奇了怪了。。。
boyyao 2020-06-13
  • 打赏
  • 举报
回复
引用 1 楼 masanaka 的回复:
你做的没有问题的啊,一试就出来了。 除非resx文件里记录的Name不对,Name是区分大小写的。
奇怪了。。难道是core版本问题?我用的是3.1。。。请问您是什么版本的/
masanaka 2020-06-13
  • 打赏
  • 举报
回复
你做的没有问题的啊,一试就出来了。
除非resx文件里记录的Name不对,Name是区分大小写的。

62,041

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧