Как показать мою домашнюю страницу на предпочитаемом языке браузера с помощью ASP.NET MVC - PullRequest
0 голосов
/ 21 сентября 2018

Я хочу создать многоязычный веб-сайт.Я обнаружил, что один из способов сделать это - отобразить веб-страницу на своем родном языке в зависимости от предпочтительного языка браузера пользователя.Я попробовал код ниже, и кажется, что он работает нормально.

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

Ценю любую помощь.

с помощью Алекса, мой код прямо сейчас, работает хорошо, но я беспокоюсь о возможных расширениях

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 голосов
/ 21 сентября 2018

Попробуй это.

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 для перенаправления.

...