以前は、このコードに問題はなく、IE9 で設定されたユーザーの言語設定が常に正しく反映されていました。
@using (Html.BeginForm("Edit", "Revision", FormMethod.Post, new { id = "RevisionMain" }))
{
@Html.Hidden("UICultureLanguage", CultureInfo.CurrentUICulture.Name)
...
}
私は最近このコードを追加しましたが、以前は私のために働いていました。しかし、これが機能しているように見えたときと機能しなくなったときの間に、私の会社が行った唯一のことは、Telerik Kendo へのアップグレードでした。これがどのように影響したかはわかりませんが、問題は、上記のコードと以下のコードが、IE9 で選択されたユーザーの言語設定を正しく反映していないことです...
ビューに CultureInfo.CurrentUICulture.Name を使用するコード ブロックがありますが、IE9 の言語設定に関係なく、常に en-US に設定されているようです。注: このコードは @section に埋め込まれています。
**@section JQueryScripts** {
<script src="@Url.Content("~/Scripts/jquery-1.7.2.min.js")" type="text/javascript"> </script>
<script src="@Url.Content("~/Scripts/jquery-ui-1.8.11.min.js")" type="text/javascript"> </script>
<script src="@Url.Content("~/Scripts/jquery.validate.1.9.js")" type="text/javascript"> </script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.js")" type="text/javascript"> </script>
<script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.min.js")" type="text/javascript"> </script>
@* Language support for numerics that use ',' instead of '.' for decimal separator *@
<script src="@Url.Content("~/Scripts/jquery.validate.globalized.number-mvc4.js")" type="text/javascript"> </script>
@* Language support for jQuery datepicker *@
@{
var currentUiCultureName = CultureInfo.CurrentUICulture.Name;
var scriptFile = @Url.Content("~/Scripts/jquery/ui/1.8.1/i18n/jquery.ui.datepicker-" + currentUiCultureName + ".js");
// var scriptFile = @Url.Content("~/Scripts/jquery/ui/1.8.1/i18n-minified/jquery.ui.datepicker-" + currentUiCultureName + ".min.js");
// Note: If we have a language other than english (en/en-US), include the appropriate .js file to
// support the jquery datepicker. Nothing needed to include for english because A) english is
// the default language supported by the jquery datepicker and B) there is no physical .js file for
// english because it is not needed (see A).
//
// Attention: If a language is not supported, let the javascript error come up, so we know that the
// language needs to be supported.
//
if (!currentUiCultureName.Equals("en", StringComparison.OrdinalIgnoreCase) &&
!currentUiCultureName.Equals("en-US", StringComparison.OrdinalIgnoreCase))
{
<script type="text/javascript" src="@scriptFile"> </script>
}
}
}
私の web.config には現在、グローバリゼーションで次の設定があります。
<globalization enableClientBasedCulture="true" uiCulture="auto" culture="auto" requestEncoding="utf-8" responseEncoding="utf-8" fileEncoding="utf-8" />
また、コントローラーで CultureInfo.CurrentCulture を CultureInfo.CurrentUICulture に設定して、モデルが日付と数値に対して正しくバインドされるようにします。
protected override void OnAuthorization(AuthorizationContext filterContext)
{
base.OnAuthorization(filterContext);
// For model binding.
Thread.CurrentThread.CurrentCulture = Thread.CurrentThread.CurrentUICulture;
}
注意すべき非常に重要: 何らかの理由で、OnAuthorization と jQueryScripts @section のコード ブロックの両方にブレーク ポイントを設定すると、OnAuthorization が 3 回ヒットします (これを引き起こしている可能性のある ajax 呼び出しがいくつかあります ($(document) .ready(...)、確認する必要がありますが、これまでに気づいたことはありません) - しかし、Thread.CurrentThread.CurrentUICulture は、LAST 呼び出しでユーザーの言語設定を適切に反映しているだけのようで、jQueryScripts @ に配置したブレークポイントCultureInfo.CurrentUICulture をクエリするセクションは、OnAuthorize への最初の呼び出しの後にヒットします。非常に困惑しています...何か考えはありますか?