Локализация Asp.net - переопределить, какой файл resx будет использовать страница - PullRequest
4 голосов
/ 05 мая 2011

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

Локализация 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.фр, я хочу заменить его на a_theme1.resx.fr

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

1 Ответ

1 голос
/ 05 мая 2011

Взгляните здесь:

Метод ResourceManager.GetResourceFileName

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

AПроизводный класс может переопределить этот метод для поиска другого расширения, такого как «.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 и Обработка ресурсов

...