0

この質問を他の形式 (主に検証に関連するもの) で見たことがありますが、答えを理解できませんでした。

私は次のものを持っています:

    [Required, DisplayName("First Name")]
    public virtual string GivenName { get; set; }

DisplayName をローカライズしたいと思います。他の人が行ったように、RequiredAttribute 拡張機能を作成して試みました。

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"))

メッセージ自体 (記入してください...) もローカライズされています。ただし、フィールド名はそうではありません。フィールド名の文字列は、ビューで要求するときにローカライズされますが、拡張機能で使用するときはローカライズされません。

codeplex に関する議論を見ていると、一部のチェンジセットで namespace のローカライズされたデータ注釈に関する問題が修正されていることがわかりましたOrchard.MVC.DataAnnotations。しかし、既存のモジュールには、それらの使用方法に関する例が見つかりません。

4

3 に答える 3

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 行 (翻訳の範囲) をスキップすることもできます。これは、それがなくても機能するためです。.po ファイル形式の説明は、http://pology.nedhodnik.net/doc/user/en_US/ch-poformat.htmlにあります。

変換が機能しない場合は、次の方法が適切なデバッグ エントリ ポイントです。

Orchard/Localization/Text.cs
public LocalizedString Get(string textHint, params object[] args) ...

Orchard/Localization/Services/DefaultLocalizedStringManager.cs
public string GetLocalizedString() ...
于 2015-02-25T08:34:10.477 に答える
0

私もこの問題に遭遇しています。あなたはそれがうまくいったのだろうか。

Orchard.MVC.DataAnnotationsの例が見つからないとおっしゃっています。それらは(オーチャードソースを使用している場合(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;
    }
}

だからあなたはで飾る必要があります[LocalizedRequiredAttribute]申し訳ありませんが、この例では、以前と同じように[必須]を引き続き使用し、Orchardが自動的に変更することを理解しています。.poただし、 TranslationManagerはファイルを取得しないため、手動でファイルを作成する必要があります。

私自身、[Display(Name="")]属性をローカライズしようとして問題が発生しています。私の混乱の一部は、System.ComponentModel両方System.ComponentModel.DataAnnotationsが同様の属性を持っているためです(DisplayNameAttribute前者とDisplayAttibute後者)。

于 2012-11-30T15:17:35.947 に答える