我有一个小项目,用户在进入应用程序时选择他们想要使用的语言(EN或FR),并且两种语言都有本地化的资源文件。选择后,视图将选择任一资源文件而不会出现问题。所有文本都以各自的语言正确显示。
问题在于验证消息。如果用户提交并随后触发其中一条消息,则它们将始终以英语显示(默认资源)。代码设置: -
模型
[Required(ErrorMessageResourceType = typeof(Resources.Global), ErrorMessageResourceName = "FirstNameValidation")]
public string FirstName { get; set; }
查看
<div>
<h4>@Resources.Global.FirstName</h4>
@Html.TextBoxFor(model => model.FirstName, new { @class = "form-control" })
@Html.ValidationMessageFor(model => model.FirstName, "", new { @class = "text-danger" })
</div>
控制器
private static void SetCurrentCultureLanguage(string languageType)
{
CultureInfo ci = new CultureInfo(languageType);
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(languageType);
Thread.CurrentThread.CurrentUICulture = ci;
}
我尝试了另一种使用动作过滤器+路径数据设置语言的方法。当用户设置他们选择的语言时,将其添加到这样的路由值...
RouteData.Values["language"] = language;
然后将其应用于动作过滤器: -
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
var language = (string) filterContext.RouteData.Values["language"];
var ci = new CultureInfo(language);
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(language);
Thread.CurrentThread.CurrentUICulture = ci;
}
@ Html.ValidationMessageFor在哪里拉动它的资源选择?调试上述两次尝试都表明CurrentCulture和CurrentUiCulture设置为&#34; fr&#34;在整个过程中,但它并不想要认识到资源的存在。