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

Localized resources - cannot access more than one resource in a .resx file

我写了一个 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 值:Leer Feld!

等...

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

一切正常,前提是我在模型中访问的某个 .resx 文件中的资源字符串不超过一个。我肯定 ErrorMessageResourceName 与某些资源名称匹配。

另一方面,如果我为每个翻译后的短语应用程序创建单独的 .resx 文件,应用程序就可以正常工作。但是我不认为创建这么多 .resx 文件是个好主意。

在此先感谢您的支持。

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

工作步骤:

  1. 创建默认资源MyResource.resx(语法没有language/culture后缀,会生成class文件,可以被其他项目引用)

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