Менеджер ресурсов Asp.Net всегда возвращает ресурсы нейтральной культуры

Я использую встроенный .resx для локализации приложения asp.net. Кажется, что независимо от текущей культуры, ресурс нейтральной культуры всегда возвращается. Код, который я использую для получения значения, выглядит следующим образом:

protected string GetResource(string name)
    {
        return Localization.ResCore.ResourceManager.GetString(name, System.Threading.Thread.CurrentThread.CurrentCulture);
    }

На одной странице я указал, что это культура «es-PE» (Перу). Когда я прерываю функцию GetResource, я могу проверить, что CurrentCulture - это «es-PE» и что ResourceManager содержит ResourceSet, соответствующий этой культуре. Однако возвращаемая строка всегда относится к нейтральному набору региональных параметров.

Встраиваемые файлы называются следующим образом:

  • ResCore.resx
  • ResCore.es.resx
  • ResCore.es-PE.resx

Любая помощь приветствуется.


person Community    schedule 27.06.2009    source источник


Ответы (3)


Если вы хотите использовать ресурсы, вы можете изменить свой второй параметр с

System.Threading.Thread.CurrentThread.CurrentCulture

to

System.Threading.Thread.CurrentThread.CurrentUICulture
person intangible02    schedule 14.08.2009

Почему вы не используете GetLocalResourceObject или GetLocalResourceObject?

person arbiter    schedule 27.06.2009
comment
У меня создалось впечатление, что для использования GetGlobalResourceObject файл ресурсов должен находиться в папке App_GlobalResources в корне веб-приложения. Я хотел бы, чтобы файл ресурсов оставался встроенным в сборку. - person ; 29.06.2009
comment
Маршрут App_GlobalResources недоступен для тестов, выполняющих ваш код. Встраивание ваших ресурсов в dll делает ваш код тестируемым. - person Adam Kahtava; 14.05.2010

Просто интересно, зачем его вставлять? Разве вы не можете просто добавить в App-LocalResources и App-GlobalResources и использовать их оттуда?

Кроме того, вы обнаружите, что если вы не вызовете base.InitializeCulture (), язык будет работать хаотично. Вы должны создать базовую страницу и унаследовать от нее. Нравится:

protected class BasePage : System.Web.UI.Page
{
     protected override void InitializeCulture(object sender, EventArgs e)
     {
          this.Culture = Resources.Culture = Thread.CurrentThread.CurrentUICulture;

          base.InitializeCulture();
     }
}

Надеюсь, это поможет.

person Dominic Zukiewicz    schedule 05.08.2009