У меня очень странная проблема, которая может быть ошибкой Silverlight. Я воспроизвел это в простом приложении, созданном из VS2010, шаблон проекта проекта приложения Silverlight.
В приложении у меня есть два файла .resx: «Strings.resx» и «Strings.de.resx». Каждый из них имеет один ключ «SomeString», например:
Strings.resx - SomeString - «некоторая тестовая строка»
Strings.de.resx - SomeString - «некоторая тестовая строка DE»
В одном приложении MainPage.xaml я только что ударил TextBlock, который я использую в коде, например, в конструкторе класса MainPage:
Thread.CurrentThread.CurrentCulture = Thread.CurrentThread.CurrentUICulture = new CultureInfo("de-DE");
txt.Text = Strings.SomeString;
Thread.CurrentThread.CurrentCulture = Thread.CurrentThread.CurrentUICulture = new CultureInfo("en-US");
txt.Text = Strings.SomeString;
Пройдя через это с помощью отладчика, txt.Text сначала будет «некоторой тестовой строкой DE», а затем «некоторой тестовой строкой». Так что все работает как надо.
ОДНАКО, я установил пакет немецкого языка на мою машину. Теперь, если я изменю в региональных настройках машины язык системы на «Deutsch» и выйду из системы / войду в систему, чтобы изменения вступили в силу, тот же код работает по-другому: ЖЕ строка «некоторая строка теста DE» извлекается из ресурсов ДВАЖДЫ. По сути, второй параметр текущей культуры / уиккультуры "en-US" ничего не делает, и немецкая строка все еще возвращается.
Таким образом, если я хочу иметь приложение, в котором пользователь может изменять язык отображения независимо от языка системы, я не могу этого сделать, поскольку извлекаются неверные ресурсы.
Опять же, в случае, если для языка ОС Windows установлено значение «Английский», все работает правильно, я могу изменить культуру, и она работает, загружаются правильные строковые ресурсы. Когда для языка ОС Windows установлено значение «Deutsch» (не проверял другие), я не могу загрузить ресурсы английской строки.
Проблема проявляется как на компьютерах с Vista, так и на Windows 7, не тестировалась на других.
ps: файл csproj изменен на <SupportedCultures>en,en-US,de,de-DE</SupportedCultures>
Есть идеи, что я делаю не так?