получить информацию о культуре от пользователей браузеров для многоязычного сайта - PullRequest
0 голосов
/ 23 сентября 2018

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

Получить CultureInfo от текущего посетителя и настроить ресурсы на его основе?

как вы видите, у него есть этот код для этого

// 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

, номой вопрос заключается в том, что я не знаю, что именно является долгом CultureInfo.InvariantCulture, и он не работает вообще в моем проекте.это всегда ноль.

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

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

Ваш код выглядит нормально, если пользователь передал недопустимый идентификатор культуры, он будет использовать культуру "en-US"!

Свойство CultureInfo.InvariantCulture используется, если вы форматируете или анализируете строку, которая должна быть проанализированапрограммным обеспечением, не зависящим от локальных настроек пользователя.

Значением по умолчанию является CultureInfo.InstalledUICulture, поэтому значение по умолчанию CultureInfo зависит от настроек операционной системы.

Код ниже должен работатьа также установить культуру:

    private static bool DoesCultureExist(string cultureName)
    {
        return CultureInfo.GetCultures(CultureTypes.AllCultures).Any(culture => string.Equals(culture.Name, cultureName, StringComparison.CurrentCultureIgnoreCase));
    }
    public ActionResult Index()
    {
        CultureInfo ci;
        var userLanguages = Request.UserLanguages;

        if (DoesCultureExist(userLanguages?[0]))
        {
            ci = new CultureInfo(userLanguages[0]);
        }
        else
        {
            ci = new CultureInfo("en-US");
        }

        return RedirectToAction(ci.TwoLetterISOLanguageName, "Home");
    }
...