2017-05-11 27 views
1

私は共用resxファイルを使用してすべての翻訳可能な文字列を指定したいと思っています(翻訳者の便宜のため、さらに重要なのは、DRY原理と、 。コントローラとビュー用のIStringLocalizerを使っていますが、モデルのデータ注釈の実装方法を理解できません。.Net Core Data注釈 - 共有リソースを使用したローカライゼーション

Models.AccountViewModels.LoginViewModel.en.resxのような別々のファイルを使用して動作しますが、特定のものの代わりにデータ注釈に共有リソースファイルを使用するにはどうすればよいですか?誰でも実装の例を共有できますか?

ありがとうございます!

P.S.環境は.Net Core 1.1なので、バリデーションと表示アノテーションの両方をローカライゼーションに利用できるバージョンにする必要があります。

答えて

8

ステップ1:ValidationMessages.csという名前の単純なクラスを作成し、空のままにします。あなたのクラスが/ Validationフォルダにあると仮定します。

ステップ2:このようなことにあなたStartup.csファイル内のデータ注釈ローカライザのプロバイダを変更します。

mvcBuilder.AddDataAnnotationsLocalization(options => 
{ 
    options.DataAnnotationLocalizerProvider = (type, factory) => 
    { 
     return factory.Create(typeof(ValidationMessages)); 
    }; 
}); 

ステップ3:中/ Resourcesフォルダ/検証を作成します(私はあなたがすべてのリソースを維持していることを前提としていそのフォルダにあるValidationMessages.fr-FR.resxファイルを追加してください。

手順4:好きなキーでリソースファイルにエントリを追加します。あなたがRequiredError、MaxLengthErrorなどのキーを持つことを前提とします。

ステップ5:モデルクラスのプロパティを[Required(ErrorMessage = "RequiredError")]でデコレートします。

次回プロパティの検証に失敗すると、検証メッセージはValidationMessages。{culture} .resxファイルから取得されます。

DisplayAttributeを使用すると、検証メッセージだけでなくプロパティ名も検索されることに注意してください。

+0

このソリューションは非常に役に立ちます! –

+0

この質問をご覧ください。 https://stackoverflow.com/questions/48014436/how-to-localize-dataannotations-from-both-sharedsource-resx-and-viewmodel-resx –

関連する問題