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

时间:2018-09-21 10:45:51

标签: asp.net-mvc multilingual

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

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");
    }

1 个答案:

答案 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语句进行重定向。