在ASP.net MVC应用程序中设置Culture/UI Culture的最佳位置是什么
目前我有一个CultureController类,如下所示:
public class CultureController : Controller
{
public ActionResult SetSpanishCulture()
{
HttpContext.Session["culture"] = "es-ES";
return RedirectToAction("Index", "Home");
}
public ActionResult SetFrenchCulture()
{
HttpContext.Session["culture"] = "fr-FR";
return RedirectToAction("Index", "Home");
}
}
Run Code Online (Sandbox Code Playgroud)
以及主页上每种语言的超链接,其链接如下:
<li><%= Html.ActionLink("French", "SetFrenchCulture", "Culture")%></li>
<li><%= Html.ActionLink("Spanish", "SetSpanishCulture", "Culture")%></li>
Run Code Online (Sandbox Code Playgroud)
哪个工作正常,但我认为有一个更合适的方法来做到这一点.
我正在使用以下ActionFilter http://www.iansuttle.com/blog/post/ASPNET-MVC-Action-Filter-for-Localized-Sites.aspx阅读文化 .我有点像MVC菜鸟,所以我不相信我会把它设置在正确的位置.我不想在web.config级别这样做,它必须基于用户的选择.我也不想检查他们的http-header以从他们的浏览器设置中获取文化.
编辑:
只是要明确 - 我不是要决定是否使用会话.我对此感到高兴.我想要解决的是,如果最好在文化控制器中执行此操作,该控制器具有要设置的每个文化的操作方法,或者在MVC管道中是否有更好的位置来执行此操作?
是否有内置的JavaScript函数将字符串转换为特定的语言环境(在我的情况下是欧元)?
例如50.00应该转换为50,00 €.
通过使用以下代码
string[] languages = HttpContext.Current.Request.UserLanguages;
string chosenLanguage = languages[0];
Run Code Online (Sandbox Code Playgroud)
如果我安装了3种语言(例如"da(danish)","sv(swedish)"和"en(english)"),那么语言数组如下所示:
[0]: "en-US"
[1]: "en;q=0.8"
[2]: "da;q=0.6"
[3]: "sv;q=0.4"
Run Code Online (Sandbox Code Playgroud)
即使我将显示语言更改为"丹麦语"而不是"英语",该数组也不会更改任何值.至于我可以从其他人写的关于这个主题的文章中读到,它的[0]价值应该是浏览器的选择语言,但它仍然是"en-US".
有没有其他方式来注册浏览器的语言或我做错了什么?
javascript ×2
localization ×2
asp.net ×1
asp.net-mvc ×1
c# ×1
culture ×1
currency ×1
numbers ×1