【问题标题】:MVC Serverside Validation not always localized, why?MVC 服务器端验证并不总是本地化,为什么?
【发布时间】:2016-01-28 16:19:20
【问题描述】:

我的视图模型中有以下属性:

public decimal Credit { get; set; }

[EmailAddress]
public string TestEmail { get; set; }

我在服务器端验证中收到了这两条错误消息,使用@Html.ValidationSummary()

  • 值“97,50 €”对 Credit 无效。
  • Das Feld TestEmail enthält keine gültige E-Mail-Adresse.

第二个是使用[EmailAddress] 属性完美翻译的。但是第一个,仍然是英文的。为什么?

我用谷歌搜索了一下,但每个解决方案都在谈论自定义验证消息。我想要的是默认的验证消息,但要翻译成我的文化,比如[EmailAddress] 属性。

我的 web.config 中有这个:

<system.web>
    <globalization culture="de-DE" uiCulture="de-DE"/>

那么我怎样才能使消息“97,50 €”的值对 Credit 无效。翻译成另一种语言?

我没有包含客户端验证脚本。

【问题讨论】:

  • 也许是一个愚蠢的问题,但值得检查一下,你把它放在正确的 web.config 中了吗? (有两个)。
  • 我已将其放入根级web.config。所有更深层次的配置都没有这个值。 @OrelEraki

标签: c# asp.net-mvc validation localization


【解决方案1】:

在文件夹App_GlobalResources 中创建一个Messages.resx。 添加以下行:

属性值无效 | Der Wert "{0}" ist für das Feld "{1}" nicht erlaubt.

然后指向你的Messages.resxApplication_Start()

ClientDataTypeModelValidatorProvider.ResourceClassKey = "Messages";
DefaultModelBinder.ResourceClassKey = "Messages";

其他一些可能有帮助的:

字段必须是日期 | Das Feld "{0}" ist kein gültiges Datum。

FieldMustBeNumeric | Das Feld "{0}" ist keine gültige Zahl。

属性值必填 | Das Feld "{0}" ist erforderlich。

【讨论】:

  • 但为什么[EmailAdress] 有效? .NET 真的只是部分本地化了吗?
  • @ChristianGollhardt 这只是 MVC 默认本地化中的一个错误。你只找到一个,但那里有are others
  • 奇怪。没想到在这样一个经过实战考验的框架中,基本的东西都有bug。 @teovankot
  • 我还没有尝试过,但我认为我们需要定义DefaultModelBinder.ResourceClassKey。如果是这样,我认为这应该添加到未来读者的解决方案中。
猜你喜欢
  • 2015-07-22
  • 1970-01-01
  • 2013-01-28
  • 2014-09-30
  • 1970-01-01
  • 1970-01-01
  • 2013-07-02
  • 2012-02-06
  • 1970-01-01
相关资源
最近更新 更多