ModelState オブジェクトのカルチャを制御できるかどうかは誰にもわかりませんが、サイトにアクセスしたサブドメインに基づいて言語が設定されている多言語アプリケーションで問題に直面しています。例:
italia.domain.com - 「カルチャをイタリア語に変更します」
german.domain.com - 「カルチャをドイツ語に変更します」
問題は、フォームを送信するときの ModelState オブジェクトの言語が、現在のスレッド カルチャではなく、クライアント ブラウザによって制御されているように見えることです。
そのため、この動作を変更またはオーバーライドして、イタリア語のサブドメインの言語が常にクライアント ブラウザーの言語ではなくイタリア語になるようにするソリューションを探しています。
編集
サブドメインに基づいて言語を変更する部分をすでに作成しました。
var HttpHost = HttpContext.Request.ServerVariables["HTTP_HOST"];
var _hostname = (HttpHost.Split(':').Length > 1) ? HttpHost.Substring(0, HttpHost.IndexOf(':')) : HttpHost;
var allowedHostnames = "italiansubdomain.domain.com|it,frenchsubdomain.domain.com|fr,germansubdomain.domain.com|de,englishsubdomain.domain.com|en".Split(',');
foreach (var hostname in allowedHostnames)
{
if (hostname.StartsWith(_hostname.ToLower()))
{
var lang = hostname.Split('|').Last();
if (lang == "en") lang = "uk";
// Updates the cultures for the dynamic language
var ci = new CultureInfo(lang);
System.Threading.Thread.CurrentThread.CurrentCulture = ci;
System.Threading.Thread.CurrentThread.CurrentUICulture = ci;
}
}
したがって、私の問題は、次のように Modelstate 検証を使用する場合です。
public class Email {
[Required(ErrorMessageResourceName = "validation_required", ErrorMessageResourceType = typeof(Resources.Master)), StringLength(50, MinimumLength = 2, ErrorMessageResourceName = "validation_string_length_2_50", ErrorMessageResourceType = typeof(Resources.Master))]
public string SenderName { get; set; }
[Required(ErrorMessageResourceName = "validation_required", ErrorMessageResourceType = typeof(Resources.Master)), Email(ErrorMessageResourceName = "validation_email_invalid", ErrorMessageResourceType = typeof(Resources.Master))]
public string SenderEmail { get; set; }
[Required(ErrorMessageResourceName = "validation_required", ErrorMessageResourceType = typeof(Resources.Master)), StringLength(50, MinimumLength = 2, ErrorMessageResourceName = "validation_string_length_2_50", ErrorMessageResourceType = typeof(Resources.Master))]
public string ReceiverName { get; set; }
[Required(ErrorMessageResourceName = "validation_required", ErrorMessageResourceType = typeof(Resources.Master)), Email(ErrorMessageResourceName = "validation_email_invalid", ErrorMessageResourceType = typeof(Resources.Master))]
public string ReceiverEmail { get; set; }
public string Comment { get; set; }
}
そして、モデル状態の検証部分のチェック:
if (!ModelState.IsValid) {
var keys = ModelState.Keys.ToList();
var values = ModelState.Values.ToList();
for (var i = 0; i < keys.Count; i++)
{
var value = values[i];
if (value.Errors.Count > 0)
{
response.AddError(keys[i], value.Errors[0].ErrorMessage);
}
}
}
次に、Ajax Response の結果を介してエラーにアクセスするか、ブラウザの言語設定に基づいてエラー メッセージを受け取ってデバッグするだけで、現在アクティブな言語に変更したいところです。
編集
前もって感謝します、bsthomsen