本地化资源 - 无法访问.resx文件中的多个资源

时间:2017-03-12 10:46:39

标签: c# asp.net-mvc asp.net-core resx localizable.strings

我编写了一个带有数据注释验证的ASP .Net Core Web应用程序。在描述模型属性的属性中,我定义了ErrorMessageResourceType和ErrorMessageResourceName。

资源文件放在主应用程序解决方案之外的不同项目中。 (使用支持Visual Studio 2017社区编辑器的dotnet CLI)

在我的模特中,我有:

[Required(AllowEmptyStrings = false, ErrorMessageResourceType = typeof(Resources.NewPetDataValidation),
                  ErrorMessageResourceName = "EmptyField")]
[StringLength(30, ErrorMessageResourceType = typeof(Resources.NewPetDataValidation),
                  ErrorMessageResourceName = "NameMaxLength")]
public string Name {get; set;}

在Resources项目中,我为每种语言创建了单个.resx文件,即NewPetDataValidation.en.resx,NewPetDataValidation.de.resx。

在Visual Studio资源编辑器中,我使用资源名称为每个文件添加了资源字符串。

英语: 名称:EmptyField值:空字段!

德语: 名称:EmptyField价值:Leer Feld!

等等......

在Razor视图中,我有: @ Html.ValidationMessageFor(Model => Model.Name,null,new {@style =" color:red"})

如果我不在模型中访问某个.resx文件中的多个资源字符串,那么一切正常。我肯定ErrorMessageResourceName匹配某些资源名称。

另一方面,如果我为每个翻译的短语应用程序创建分离的.resx文件正在运行。但是,我不认为创建这么多.resx文件是个好主意。

提前感谢您的支持。

1 个答案:

答案 0 :(得分:1)

我发现我的错误是重命名在Visual Studio中创建的默认资源。

工作步骤:

  1. 创建默认资源MyResource.resx(没有语言/文化后缀的语法,它将生成可以从另一个项目引用的类文件)

  2. 为所有相关语言添加新的MyResource.en.resx,MyResource.de.resx ....