Каков наилучший способ локализации приложения WPF, без LocBAML?

Кажется, нет хорошего способа локализовать приложение WPF. MSDN, кажется, думает, что засоряет мой XAML x:Uid's, генерация CSV-файлов, а затем генерация новых сборок (используя их пример кода!) является ответом. Хуже того, этот процесс не касается того, как локализовать изображения, двоичные двоичные объекты (скажем, файлы PDF) или строки, встроенные в код.

Итак, как вы можете локализовать приложение, которое:

  1. Содержит несколько сборок
  2. Содержит изображения и другие двоичные двоичные объекты (например, документы PDF), которые необходимо локализовать
  3. Содержит строковые данные, которых нет в XAML (например: MessageBox.Show("Hello World");)

5 ответов

Решение

Здесь не эксперт, но "засорять" ваш xaml с помощью x:Uids ничуть не хуже, чем "засорять" ваш код Windows Forms всей ерундой таблицы строк, которую вы должны сделать для их локализации.

Насколько я понимаю, приложения WPF по-прежнему поддерживают "все ресурсы среды CLR, включая строковые таблицы, изображения и т. Д.". Это означает, что вы можете иметь локализованные ресурсы.

Конечно, было бы намного проще, если бы вы создали расширение разметки, которое обрабатывало большую часть этой ерунды для вас. Вы можете найти пример того, как кто-то делает это здесь. И вот еще одно, похожее решение.

Вы должны взглянуть на статью и код, доступный здесь. В нем описываются различные способы локализации приложений WPF, использования LocBaml, пользовательских расширений разметки или вложенных свойств. ИМХО, лучшее решение - использовать расширения разметки и ресурсы Resx. Код содержит каркас локализации для этого.

Попробуйте утилиты Gnu GetText и вспомогательные приложения. Он генерирует классы C# на основе ResourceManager и ResourceSets, и, конечно, вы можете повторно использовать переводы для других частей вашего приложения - например, веб-страниц, собственного кода или iphone и т. Д.

Вы можете использовать старые файлы ResX, которые поддерживают все упомянутые вами сценарии. Как это можно сделать в приложении WPF, объясняется здесь:

WPF Application Framework (WAF) => См. Пример локализации

У меня была такая же проблема с собственным приложением WPF, и я решил написать облегченную библиотеку локализации. Он позволяет переводить файлы словарей ресурсов xaml и переключаться между поддерживаемыми языками во время выполнения.

Вы можете просмотреть репозиторий Armat.Localization GitHub для получения более подробной информации и обратиться к пакету NuGet «armat.localization.wpf» в приложениях WPF. Клонирование/сборка исходного кода с помощью соответствующего демонстрационного приложения даст вам достаточное представление о том, как работает библиотека Armat.Localization .

Основная идея следующая:

  • Извлеките все локализуемое содержимое из элементов управления WPF в файлы словаря ресурсов WPF.
  • Сделайте словари ресурсов локализуемыми, изменив корневой элемент xaml на «Armat.Localization.Wpf.LocalizableResourceDictionary».
  • Используйте конструктор локализации (из того же репозитория), чтобы создать файл перевода для всех поддерживаемых языков.
  • Предоставьте селектор языка в приложении WPF для переключения между поддерживаемыми языками.

Файлы Markdown в проектах Localization.Core и Localization.Wpf проведут вас по общим шаблонам использования, а приложение Localization.Demo послужит вам примером локализуемого проекта WPF.

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