Пользовательский локализованный рефакторинг с контекстным действием в C# с использованием ReSharper 8.2 SDK
Локализация в нашем.NET 4.0 C# проекте в основном следующая:
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>
MyCompany.Common.dll
содержит открытый (синглтон) классMyCompanyResourceManager
с двумя методами для доступа к локализованным значениям вA.resx
а такжеB.resx
по ключу, какGetA(string key)
а такжеGetB(string key)
,Везде, где есть строка в коде 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 для этой задачи?
Заранее спасибо!