Локализация строк в коде WPF с использованием XAML ResourceDictionary - PullRequest
0 голосов
/ 29 марта 2012

Я локализую приложение WPF с помощью метода LocBaml.Все отлично работает для пользовательского интерфейса, определенного в файлах .xaml.Однако у меня есть несколько строк, которые генерируются в codebehind, которые также должны быть локализованы.Поэтому я попытался использовать подход, рекомендованный Microsoft в этой статье.У меня есть файл словаря ресурсов xaml:

<ResourceDictionary x:Uid="ResourceDictionary_1" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
 xmlns:system="clr-namespace:System;assembly=mscorlib">

     <!-- String resource that can be localized -->
     <system:String x:Uid="system:String_1" x:Key="localizedMessage">en-US Message</system:String>
</ResourceDictionary>

Затем я использую сторонний инструмент для создания локализованных ресурсов .dll, содержащих испанскую версию словаря ресурсов., когда я вызываю

string localizedMessage = (string)Application.Current.Resources["localizedMessage"];

localizedMessage всегда возвращает значение, определенное в версии dll для en-US.Должно быть, я что-то неправильно понимаю.Что мне нужно сделать, чтобы вернуть локализованную версию строки?

1 Ответ

0 голосов
/ 30 марта 2012

После обсуждения с OP проблема заключается в слишком поздней настройке языка (в App s OnStartup).

Действительно, локализованные словари ресурсов загружаются один раз, используя текущий язык потока. Если язык потока изменяется слишком поздно, ресурсы уже загружены и перезагрузка не запускается.

Решением в этом конкретном случае было бы изменить локаль потока пользовательского интерфейса как можно раньше, то есть в конструкторе App.

...