如何使用 ASP.NET MVC 以浏览器的首选语言显示我的主页
How to show my home page in the browser's preferred language using 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");
}
}
我认为这很简单,所以我四处搜索并找到 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");
}
试试这个。
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
语句。
我想创建一个多语言网站。我发现一种方法是根据用户浏览器的首选语言以他们自己的语言显示网页。我尝试了下面的代码,它似乎工作正常。
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");
}
试试这个。
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
语句。