如何使用 ASP.NET MVC 以浏览器的首选语言显示我的主页



我想创建一个多语言网站。我发现一种方法是根据用户浏览器的首选语言以自己的语言显示网页。我尝试了下面的代码,似乎它工作正常。

public ActionResult Index()
{
var userLanguages = Request.UserLanguages;
string preferredLanguage = "";
preferredLanguage = userLanguages[0];
if (preferredLanguage == "fr-FR") 
{
return RedirectToAction("fr", "Home");
}
else 
{
return RedirectToAction("en", "Home");
}
}

我认为这很简单,所以我四处搜索并找到了这个链接

我有点困惑 - 我应该添加此代码吗,它到底有什么作用?当我调试代码时,每次我发现ci为空。我应该如何使用它?

// Get Browser languages.
var userLanguages = Request.UserLanguages;
CultureInfo ci;
if (userLanguages.Count() > 0)
{
try
{
ci = new CultureInfo(userLanguages[0]);
}
catch(CultureNotFoundException)
{
ci = CultureInfo.InvariantCulture;
}
}
else
{
ci = CultureInfo.InvariantCulture;
}
// Here CultureInfo should already be set to either 
user's preferable language
// or to InvariantCulture if user transmitted invalid 
culture ID

感谢任何帮助。

在 Alex 的帮助下,它现在是我的代码,它运行良好,但我担心可能的扩展

public ActionResult Index()
{
CultureInfo ci;
var userLanguages = Request.UserLanguages;

if (userLanguages == null)
{
ci = new CultureInfo("en-US");
}
else if (userLanguages.Count() > 0)
{
try
{
ci = new CultureInfo(userLanguages[0]);
}
catch (CultureNotFoundException)
{
ci = new CultureInfo("en-US");
}
}
else
{
ci = new CultureInfo("en-US");
}
return RedirectToAction(ci.TwoLetterISOLanguageName, "Home");
}

试试这个。

public ActionResult Index()
{
CultureInfo ci;
var userLanguages = Request.UserLanguages;
if (userLanguages.Count() > 0)
{
try
{
ci = new CultureInfo(userLanguages[0]);
}
catch (CultureNotFoundException)
{
ci = CultureInfo.InvariantCulture;
}
}
else
{
ci = CultureInfo.InvariantCulture;
}
return RedirectToAction(ci.TwoLetterISOLanguageName, "Home");
}

TwoLetterISOLanguageName获取两个字母的语言代码(例如fr-FR=fr(。这样可以避免重定向的if...else语句。

最新更新