Есть ли лучший способ управления локализованными строками?

Я работаю над продуктом, где нам нужно немного беспокоиться о локализации. В настоящее время это рабочий процесс, когда я должен использовать (или добавить) локализованную строку:

  • Найти файл resources.resx(который содержит сотни элементов)
  • Если найдено, скопируйте имя. В противном случае добавьте новую строку и скопируйте имя
  • Затем используйте ResourceFactory.ResourceMgr.GetString("MY_MAGIC_STRING") (где ResourceMgr - это просто статическое поле в ResourceManager)

Этот трехэтапный процесс для любых строк - настоящая боль. Существуют ли какие-либо шаблоны или способы облегчения этого процесса?

Ответ 1

Автогенерируемые файлы с доступом к каждой отдельной строке намного проще в использовании - установите "Пользовательский инструмент" для файла RESX на PublicResXFileCodeGenerator.

Код будет выглядеть так:

using MyProject.Resources;
...
localizedText = Resources.SomeReasonableName;

Боковые заметки:

  • с несколькими файлами RESX вместе с автогенерированными идентификаторами имеет дополнительное преимущество intellisense, предоставляя вам разумное количество вариантов.
  • в зависимости от того, как обрабатывается перевод, вам лучше не беспокоиться о дублированном тексте в файле RESX (кроме, может быть, ОК/отменить строки). Может быть проще иметь дело с дублированными строками во время перевода.

Ответ 2

Существует такое Java-решение, которое может дать вам несколько идей: http://rodionmoiseev.github.com/c10n/

Идея состоит в том, чтобы хранить переводы в самом исходном коде, используя аннотации по методам интерфейса. Затем, используя специальную утилиту, вы можете динамически создавать прокси (классы, динамически реализующие интерфейс), которые возвращают локализованное строковое значение при вызове метода интерфейса.

Таким образом, "MY_MAGIC_STRING" заменяется вызовом метода MyMagicString(), который дает вам некоторое правописание/тип безопасности и делает его более удобным для рефакторинга.