Подход для многоязычного приложения WPF - PullRequest
10 голосов
/ 31 января 2011

Кажется, есть несколько подходов к тому, как реализовать несколько языков в приложении WPF. Но я хотел бы получить дополнительную информацию о том, какой метод мне следует использовать со следующими требованиями:

  • Это приложение PRISM, поэтому несколько независимых модулей (сборок) работают вместе. Мне бы хотелось, чтобы у каждой сборки были свои переводы элементов пользовательского интерфейса.
  • Мне нужен простой подход, не нужны инструменты для генерации вещей
  • Должен все еще иметь возможность использовать смесь для разработки пользовательского интерфейса
  • При желании можно переключать язык без перезапуска приложения (не нарушитель правил)

Может кто-нибудь посоветовать мне, как этого добиться?

Спасибо!

Ответы [ 2 ]

4 голосов
/ 31 января 2011

Обычный подход - привязать свойство text ваших текстовых блоков / меток и т. Д. К какому-либо свойству статически определенного ресурса локализации:

<Label Content="{Binding Source={x:Static loc:LanguageContext.Instance}, 
                         Path=Dictionary,  Mode=OneWay,
                         Converter={StaticResource languageConverter},
                         ConverterParameter=TextId}" />

т.е. LanguageContext.Instance предоставляет словарь через свойство Dictionary. Конвертер использует данный параметр ConverterParameter для поиска текста, идентифицированного с помощью TextId.

Это громоздкий подход, который не будет отвечать всем вашим требованиям.

Лучший способ - определить собственное расширение разметки для выполнения такой логики. Есть несколько решений, которые я видел в Интернете, эта статья с высоким рейтингом:

http://www.codeproject.com/KB/WPF/realtime_multilingual.aspx

И аналогичное решение, которое обеспечивает быстрое изменение языка Blend, поэтому, вероятно, является хорошим выбором для вас:

http://blogs.microsoft.co.il/blogs/tomershamam/archive/2007/10/30/wpf-localization-on-the-fly-language-selection.aspx

В приведенном выше примере вы определяете вложенное свойство, которое идентифицирует ключ переведенного элемента, и используете расширение разметки Translate для идентификации переведенных свойств.

ПРИМЕЧАНИЕ: здесь переводится не просто текст, часто вам приходится менять цвета / графику и т. Д. *

3 голосов
/ 01 февраля 2011

Тем временем я нашел проект с открытым исходным кодом, который действительно хорошо работает: http://wpflocalizeextension.codeplex.com. Это просто добавление ссылки на dll, добавление ресурсов с переводами и использование его в XAML. Сработало за 5 минут. Я могу добавить несколько ресурсов для отдельных модулей; и это прекрасно работает в визуальной студии дизайнера и смешивания. И, локаль может быть изменена на лету. Соответствует моим требованиям:)

...