Пользовательский локализованный рефакторинг с контекстным действием в C# с использованием ReSharper 8.2 SDK

Локализация в нашем.NET 4.0 C# проекте в основном следующая:

  1. MyCompany.Resources.dll содержит два файла RESX: A.resx а также B.resx с их локализованными аналогами (A_de.resx, B_hu.resx, так далее.). Эти файлы состоят из обычных xml-элементов RESX, таких как <data name="key" xml:space="preserve"><value>value</value></data>

  2. MyCompany.Common.dll содержит открытый (синглтон) класс MyCompanyResourceManager с двумя методами для доступа к локализованным значениям в A.resx а также B.resx по ключу, как GetA(string key) а также GetB(string key),

  3. Везде, где есть строка в коде C#, которую нужно локализовать, мы вручную открываем либо A.resx или же B.resx с помощью XML-редактора (редактор ресурсов Visual Studio что-то испортил в xml), добавьте новый <data> тег в XML-документе с новым ключом, и в коде C# мы вручную заменяем строку с вызовом MyCompanyResourceManager.Instance.GetA(...) (или же GetB(...)).

Эту работу можно ускорить с помощью фрагментов кода и живых шаблонов в ReSharper, но я чувствую необходимость лучшего решения для этого "рабочего процесса" (а не для механизма локализации, который нельзя изменить:)). Вот почему хочется написать плагин ReSharper, который делает повторяющиеся части. Чего бы я хотел достичь:

  • Когда каретка находится на строковом литерале в коде C#, предложите контекстные действия Localize in A а также Localize in B
  • Когда я выбираю любой из них, всплывающее диалоговое окно, чтобы запросить ключ для использования в RESX от пользователя
  • Поместите новый <data> отметьте в соответствующем файле RESX и замените строковый литерал вызовом соответствующего метода. Импортировать пространство имен MyCompanyResourceManager Класс, если необходимо, и ссылку на его сборку, если необходимо. (Ссылка на сборку не обязательна, потому что можно предположить, что MyCompany.Common ссылка везде)
  • откройте выбранный файл RESX, чтобы увидеть изменения

Дополнительные функции (чтобы сделать плагин более широко используемым):

  • Страница настроек для указания файлов RESX (даже более двух), соответствующих вызовов методов и класса, который содержит эти методы
  • перед запросом ключа найдите в выбранном файле RESX строковый литерал, на случай, если он уже локализован

Мои проблемы / вопросы:

  • Я в некотором роде заблудился в справочнике ReSharper SDK и в его неполной документации, поэтому подробный материал / учебник по доступным классам / интерфейсам был бы полезен (если есть)
  • Как открыть файл проекта / решения в Visual Studio с помощью ReSharper API?
  • Как манипулировать файлами XML с помощью API ReSharper? Пример действия контекста - это вещь с обратной строкой, поэтому доступ к литералу под символом вставки в порядке.
  • Должен ли я использовать контекстное действие или рефакторинг для этого сценария?
  • Как начать рефакторинг из контекстного действия?
  • С чего начать, что нужно хорошо понимать API для этой задачи?

Заранее спасибо!

0 ответов

Другие вопросы по тегам