Ошибка локализации Silverlight? - PullRequest
4 голосов
/ 08 декабря 2010

У меня очень странная проблема, которая может быть ошибкой 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>

Есть идеи, что я делаю не так?

Ответы [ 2 ]

2 голосов
/ 08 декабря 2010

Я думаю, что ваша проблема связана с культурой по умолчанию вашей сборки Silverlight: вы перекомпилировали приложение после того, как изменили культуру Windows с en на de?

Попробуйте проверить сборку нейтральной культуры, и установить вручную:

[assembly: NeutralResourcesLanguage("en")]

в файле assemblyInfo.cs

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

У меня просто была такая же проблема.Что исправило это для меня, так это то, что я не полагался на Silverlight, угадывая правильный нейтральный язык.Мое приложение переводится как en, de, fr и все.Итак, я сделал (в каждом проекте у меня есть локализуемые строки):

GuiStrings.resx
GuiStrings.en.resx
GuiStrings.de.resx
GuiStrings.fr.resx
GuiStrings.it.resx

Это исправляет странную проблему, заключающуюся в том, что Silverlight игнорирует нейтральный язык ('en') на немецких машинах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...