根据文档
运行时不查找非验证属性的本地化字符串。在上面的代码中,“Email”(从Display(Name = "Email"))不会被本地化。
我正在寻找一种在DisplayAttribute中本地化文本的方法。有什么建议来正确地做这件事吗?
发布于 2016-06-17 16:20:11
您可以在ResourceType上设置DisplayAttribute,这可以用于本地化文本。
将资源.resx文件添加到项目中,例如MyResources.resx,并为您的字段添加资源:

然后在您的MyResources中引用字段的名称和DisplayAttribute类型
[Display(Name = "RememberMe", ResourceType = typeof(MyResources))]
public bool RememberMe { get; set; }本地化资源将自动完成(请参阅文本框)

发布于 2017-09-11 16:11:33
拥有一个用于所有本地化的中心位置,无论是在视图中还是在数据注释中,都是我能想到的最好的方法,这就是我如何工作的方法。在Startup.cs文件中,在安装nuget包以进行本地化后,添加以下代码
services.AddMvc().AddViewLocalization().AddDataAnnotationsLocalization(options =>
options.DataAnnotationLocalizerProvider = (type, factory) => new StringLocalizer<Resources>(factory));
services.Configure<RequestLocalizationOptions>(options => {
var cultures = new[]
{
new CultureInfo("en"),
new CultureInfo("ar")
};
options.DefaultRequestCulture = new RequestCulture("en", "en");
options.SupportedCultures = cultures;
options.SupportedUICultures = cultures;
});这样,DataAnnotationLocalizerProvider将来自Resources.{culture}.rex (资源文件必须具有No code gen的访问修饰符),假设默认语言不需要任何资源,并且能够访问资源文件,因为没有生成代码,必须创建同名的空类。
在_ViewImports.cshtml文件中注入以下内容
@inject IHtmlLocalizer<Resources> Localizer通过这样做,您现在有了一个全局变量定位器,可以在任何视图中用于本地化目的。

您可以找到关于ASP.NET核心的全球化与本土化的更多信息。
发布于 2018-05-24 11:25:22
对于那些在错误中挣扎的人(卢修斯,弗拉季斯拉夫):
无法检索属性“名称”,因为本地化失败。类型'Xxxx.EmployeeResx‘不是公共的,或者不包含名称为'FirstName’的公共静态字符串属性。
这是由.resx文件上的访问修饰符引起的,默认情况下,它被设置为内部(在我的例子中,它不是代码生成)。在资源文件工具栏中的Access修饰符下拉列表中将其更改为公共。

在此之后,您应该能够看到资源类型中的属性:

另外,考虑不要在字段名中使用特殊的符号,因为它们是自动生成的C#属性名称的基础。字段名被转换为C#友好名称,这就是为什么资源文件字段的名称和自动生成的属性名称之间的不一致。最好避免任何连字符,-或点,.下划线,_很好。始终可以在相关资源文件下的resource_file_name.Designer.cs类中查找自动生成的属性的外观。

非常感谢Bala Murugan在代码摘要上写了一篇关于这个话题的好文章。
https://stackoverflow.com/questions/37833661
复制相似问题