我已经以其他形式看到了这个问题(主要与验证有关),但无法理解答案。
我有以下内容:
[Required, DisplayName("First Name")]
public virtual string GivenName { get; set; }
我想将DisplayName本地化。我通过创建一个RequiredAttribute扩展来创建一个attemt,其他人做了其中一个:
public class RequiredFieldAttribute : System.ComponentModel.DataAnnotations.RequiredAttribute
{
public RequiredFieldAttribute()
{
T = NullLocalizer.Instance;
}
public Localizer T { get; set; }
public override string FormatErrorMessage(string name) {
var field = T(name).Text;
return T("Please fill in {0}.", field).Text;
}
}
}
返回的错误消息会一直返回英文名称。但我确信有翻译,因为当我在视图中使用以下内容时,我会获得本地化名称:
@Html.LabelFor(m => register.GivenName, T("First Name"))
此外,消息本身(请填写...)已本地化。除了字段名称不是。为什么fieldname的字符串在视图中要求时是本地化的,但在扩展中使用时则不然。
在查看有关codeplex的讨论时,我看到一些变更集修复了名称空间Orchard.MVC.DataAnnotations
中的本地化数据注释问题。但我在现有模块中找不到任何关于如何使用它们的例子。
答案 0 :(得分:2)
这个问题可能已经过时,但我在Orchard CMS 1.8.1中问自己同样的事情。所以这就是我如何做到的。
假设你有一个看起来像
的模型public class Message
{
[System.ComponentModel.DataAnnotations.Required(ErrorMessage="Please select a date."]
public System.DateTime Date { get; set; }
...
}
并且您希望获得所需验证消息的德语翻译,然后在模块中创建App_Data\Localization\de-DE\orchard.module.po
文件并在其中添加以下段落
msgctxt "System.ComponentModel.DataAnnotations.RequiredAttribute"
msgid "Please select a date."
msgstr "Bitte wählen Sie ein Datum."
你甚至可以跳过msgctxt行(这是翻译的范围),因为它的工作也没有。可以在http://pology.nedohodnik.net/doc/user/en_US/ch-poformat.html找到.po文件格式的说明。
如果翻译不起作用,则以下方法是一个很好的调试入口点:
Orchard/Localization/Text.cs
public LocalizedString Get(string textHint, params object[] args) ...
Orchard/Localization/Services/DefaultLocalizedStringManager.cs
public string GetLocalizedString() ...
答案 1 :(得分:0)
我也遇到过这个问题。我想知道你是否解决了这个问题。
你提到你找不到Orchard.MVC.DataAnnotations的例子。它们位于(如果您正在使用Orchard源(截至1.6))~/Orchard.Framework/Mvc/DataAnnotations
。
这就是LocalizedRequiredAttribute.cs
的样子:
namespace Orchard.Mvc.DataAnnotations {
public class LocalizedRequiredAttribute : RequiredAttribute {
public LocalizedRequiredAttribute(RequiredAttribute attribute, Localizer t) {
AllowEmptyStrings = attribute.AllowEmptyStrings;
if ( !String.IsNullOrEmpty(attribute.ErrorMessage) )
ErrorMessage = attribute.ErrorMessage;
T = t;
}
public Localizer T { get; set; }
public override string FormatErrorMessage(string name) {
return String.IsNullOrEmpty(ErrorMessage)
? T("The {0} field is required.", name).Text
: T(ErrorMessage, name).Text;
}
}
所以你必须用对不起,我现在的理解是你继续,在这个例子中,像以前一样使用[必需],Orchard负责改变它适合你。但是,您必须手动创建[LocalizedRequiredAttribute]
装饰。.po
文件,因为TranslationManager不会选择这些文件。
我自己无法尝试本地化[Display(Name="")]
属性。我感到困惑的部分原因是System.ComponentModel
和System.ComponentModel.DataAnnotations
,因为它们都具有相似的属性(前者为DisplayNameAttribute
,后者为DisplayAttibute
。
答案 2 :(得分:0)
您可以在果园项目中使用与普通MVC项目相同的普通验证 您只需将这些设置添加到webconfig中:
<appSettings>
<add key="ClientValidationEnabled" value="true"/>
<add key="UnobtrusiveJavaScriptEnabled" value="true"/>
结束