Обычный подход - привязать свойство 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 для идентификации переведенных свойств.
ПРИМЕЧАНИЕ: здесь переводится не просто текст, часто вам приходится менять цвета / графику и т. Д. *