FluentValidation 實作多國語系紀錄

關鍵問題資訊

FluentValidation 本身已支援多國語系。在錯誤訊息會依當時語系跳出相應語系錯誤訊息,不過其中的 {PropertyName} 的語系應沒有多國的欄位名稱設定所以不會應語系變更。解法已知有二:

一、可以使用.WithName()指令指定錯誤訊息的{PropertyName}

二、改寫DisplayNameResolver,經由自訂的PropertyNameAttribute欄位屬性拿取當時語系的{PropertyName}

多國語系時的自訂錯誤訊息問題

自訂訊息就用 .WithMessage() 指令指定錯誤訊息。

實作相關技術-如何取得現在語系

CultureInfo.CurrentCulture Property    // 取得當時語系
CultureInfo.CurrentUICulture Property  // 取得當時UI語系

開發環境

平台: .NET6 IDE: Visual Studio 2022 框架: Blazor WASM App

程式碼紀錄 - DisplayNameResolver

自訂 PropertyNameAttribute

經由 PropertyNameAttribute 指定多國語系欄位名稱,範例:

實作 DisplayNameResolver 依解析多國語系欄位名稱

套入 FluentValidation 以解析出多國語系欄位名稱

程式碼紀錄 - WithName

直接在 Fluent 的 Validattor 依現在語系指定多國欄位名稱。

完整程式碼

參考文章

Removed inferring property names from [Display] attribute

Last updated