首页 > 解决方案 > 如何使用 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");
    }

标签: asp.net-mvcmultilingual

解决方案


尝试这个。

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-FRfr。这避免了if...else重定向语句。


推荐阅读