我想创建一个多语言网站。我发现一种方法是根据用户浏览器的首选语言以自己的语言显示网页。我尝试了下面的代码,似乎工作正常。
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");
}
}
我认为这很简单,所以我四处搜寻并发现了this link
我有点困惑-我应该添加此代码,它的作用是什么?当我调试代码时,每次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");
}
答案 0 :(得分:2)
尝试一下。
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
语句进行重定向。