Локализация Asp.net — переопределить, какой файл resx будет использовать страница

Пытаюсь совместить темы и локализацию... что делаю:

Локализация A.aspx создает:

  • App_Localresources\a.aspx.resx
  • App_Localresources\a.aspx.resx.fr ...

Тем не менее, я хочу добавить больше возможностей. Я хочу иметь:

  • App_Localresources\a_theme1.aspx.resx
  • App_Localresources\a_theme1.aspx.resx.fr
  • App_Localresources\a_theme2.aspx.resx
  • App_Localresources\a_theme2.aspx.resx.fr

Поэтому, если я нахожусь в Theme1, я хочу использовать набор ресурсов темы 1.

Можно ли переопределить, какой файл resx A.aspx будет использовать при загрузке?

т.е. когда он пытается загрузить a.aspx.resx.fr, я хочу заменить его на a_theme1.resx.fr

Большое спасибо за любые идеи! :)


person Greg Balajewicz    schedule 04.05.2011    source источник


Ответы (1)


Посмотрите здесь:

ResourceManager.GetResourceFileName Method< /а>

Этот метод использует свойство Name объекта CultureInfo как часть имени файла для всех культур, кроме инвариантной культуры. Этот метод не просматривает манифест сборки и не обращается к диску и используется только для создания имени файла ресурса (подходящего для передачи конструктору ResourceReader) или имени большого двоичного объекта манифеста ресурса.

Производный класс может переопределить этот метод для поиска другого расширения, например «.ResX», или совершенно другой схемы именования файлов.

Я думаю, что вы хотите сделать что-то вроде этого:

public class ResxResourceManager : ResourceManager
{  
    protected override string GetResourceFileName(
         System.Globalization.CultureInfo culture)
    {
        return base.GetResourceFileName(culture);       
    }

    public string GetResxFileName(System.Globalization.CultureInfo culture)
    {
        return GetResourceFileName(culture).Replace(".resources", ".resx");
    }
}

Подробнее об этом:

Создание собственного поставщика ресурсов

Под капотом BuildManager и обработки ресурсов

person Leniel Maccaferri    schedule 04.05.2011
comment
Спасибо, Лениэль! На самом деле я решил отказаться от автоматической локализации (по нескольким причинам), чтобы просто реализовать все карты самостоятельно. базовый класс с ResourceManager, загружающим правильные файлы resx и назначающим их различным частям экрана по мере необходимости. Тем не менее, спасибо за ваше предложение, выглядит очень интересно! - person Greg Balajewicz; 06.05.2011