无法使用 asp.net mvc 中的资源文件进行本地化
Cannot localize using resource file in asp.net mvc
我正在开发 ASP.NET MVC 应用程序。在我的应用程序中,我想添加一个下拉选项供用户使用 select 语言。我找到了使用 ASP.NET MVC 的本地化文章。
http://www.c-sharpcorner.com/UploadFile/b8e86c/localization-of-a-site-in-mvc5-using-resource-file/
http://www.mikesdotnetting.com/article/183/globalization-and-localization-with-razor-web-pages
它都使用资源文件进行本地化,并根据文化检索资源属性。例如,如果我们使用英语和法语,我们必须制作两个资源文件,名称为 LangRes.resx 和 LangRes.fr-FR.resx 。所以我测试了如何使用如下资源文件。但它不起作用。
我创建了两个资源文件,分别命名为LangRes.resx和LangRes.fr-FR.resx
我将两个文件的修饰符都设置为 public。
然后我将值添加到资源文件
然后我在Web.config
中添加了这个
<globalization enableClientBasedCulture="true" culture="auto" uiCulture="auto"></globalization>
然后在视图文件中我打印了这条消息
@{
Culture = UICulture = "fr-FR";
}
<h2>@LangRes.Title</h2>
实际上,它应该显示法国。正确的?因为我设置的culture为"fr-FR",映射到后缀为LangRes.fr-FR.resx的资源文件。但是一直显示"English"。我该如何解决?此外,在 ASP.NET MVC 中进行本地化的最佳方法是什么?
您需要通过添加此功能在 Global.asax 中设置默认语言:
protected void Application_BeginRequest(object sender, EventArgs e)
{
System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("fr-FR");
System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("fr-FR");
}
如果您想为用户使用更改语言选项并创建更改语言按钮(例如 EN 和 FR 按钮)。您必须在控制器中设置文化值。例如:
查看:
@Html.ActionLink("English", "SelectLanguage", "Home", new { SelectedLanguage = "en-US" }, null)
@Html.ActionLink("Français", "SelectLanguage", "Home", new { SelectedLanguage = "fr-FR" }, null)
控制器:
public ActionResult SelectLanguage(string SelectedLanguage)
{
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(SelectedLanguage);
Thread.CurrentThread.CurrentUICulture = new CultureInfo(SelectedLanguage.ToLower());
HttpCookie LangCookie = new HttpCookie("LangCookie");
LangCookie.Value = SelectedLanguage;
Response.Cookies.Add(LangCookie);
return RedirectToAction("Index", "Home");
}
此外,如果您想检查语言 cookie,您可以在 Global.asax 中控制它,如下所示:
protected void Application_BeginRequest(object sender, EventArgs e)
{
HttpCookie LangCookie = Request.Cookies["LangCookie"];
if (LangCookie != null && LangCookie.Value != null)
{
System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo(LangCookie.Value);
System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo(LangCookie.Value);
}
else
{
System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("fr-FR");
System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("fr-FR");
}
}
我正在开发 ASP.NET MVC 应用程序。在我的应用程序中,我想添加一个下拉选项供用户使用 select 语言。我找到了使用 ASP.NET MVC 的本地化文章。
http://www.c-sharpcorner.com/UploadFile/b8e86c/localization-of-a-site-in-mvc5-using-resource-file/
http://www.mikesdotnetting.com/article/183/globalization-and-localization-with-razor-web-pages
它都使用资源文件进行本地化,并根据文化检索资源属性。例如,如果我们使用英语和法语,我们必须制作两个资源文件,名称为 LangRes.resx 和 LangRes.fr-FR.resx 。所以我测试了如何使用如下资源文件。但它不起作用。
我创建了两个资源文件,分别命名为LangRes.resx和LangRes.fr-FR.resx
我将两个文件的修饰符都设置为 public。
然后我将值添加到资源文件
然后我在Web.config
中添加了这个<globalization enableClientBasedCulture="true" culture="auto" uiCulture="auto"></globalization>
然后在视图文件中我打印了这条消息
@{ Culture = UICulture = "fr-FR"; } <h2>@LangRes.Title</h2>
实际上,它应该显示法国。正确的?因为我设置的culture为"fr-FR",映射到后缀为LangRes.fr-FR.resx的资源文件。但是一直显示"English"。我该如何解决?此外,在 ASP.NET MVC 中进行本地化的最佳方法是什么?
您需要通过添加此功能在 Global.asax 中设置默认语言:
protected void Application_BeginRequest(object sender, EventArgs e)
{
System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("fr-FR");
System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("fr-FR");
}
如果您想为用户使用更改语言选项并创建更改语言按钮(例如 EN 和 FR 按钮)。您必须在控制器中设置文化值。例如:
查看:
@Html.ActionLink("English", "SelectLanguage", "Home", new { SelectedLanguage = "en-US" }, null)
@Html.ActionLink("Français", "SelectLanguage", "Home", new { SelectedLanguage = "fr-FR" }, null)
控制器:
public ActionResult SelectLanguage(string SelectedLanguage)
{
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(SelectedLanguage);
Thread.CurrentThread.CurrentUICulture = new CultureInfo(SelectedLanguage.ToLower());
HttpCookie LangCookie = new HttpCookie("LangCookie");
LangCookie.Value = SelectedLanguage;
Response.Cookies.Add(LangCookie);
return RedirectToAction("Index", "Home");
}
此外,如果您想检查语言 cookie,您可以在 Global.asax 中控制它,如下所示:
protected void Application_BeginRequest(object sender, EventArgs e)
{
HttpCookie LangCookie = Request.Cookies["LangCookie"];
if (LangCookie != null && LangCookie.Value != null)
{
System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo(LangCookie.Value);
System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo(LangCookie.Value);
}
else
{
System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("fr-FR");
System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("fr-FR");
}
}