2016-09-20 2 views
0

У меня есть приложение, написанное на C#, которое я перевел на несколько разных языков. До сих пор он правильно определял язык из пользовательской культуры операционной системы и отображал все меню (и т. Д.) На этом языке.Язык приложения .NET не установлен/обнаружен правильно

В последнее время я перекомпилировал приложение (после каких-либо заметных изменений в области языков/культуры), и он всегда кажется дефолтным по-английски, несмотря на то, что CurrentUICulture явно является чем-то другим (например, fr). Я затрудняюсь понять, что вызывает проблему. Если я явно установить культуру, как так (в конструкторе главной формы), все работает:

// Explicitly set UICulture, even though it's already fr-FR 
Thread.CurrentThread.CurrentUICulture = new CultureInfo("fr-FR"); 

Кто-нибудь есть какие-либо идеи, что происходит? Я думал, что это, возможно, проблема с Visual Studio, однако я попытался перекомпилировать как на VS2013 & 2015, так и на ту же проблему.

Спасибо.

EDIT: Дополнительная информация: Это настольное приложение WinForms, которое в настоящее время предназначено для платформы .NET v3.5. Поведение наблюдалось в Windows 10 (возможно, недавнее обновление Win10 вызвало это, возможно?)

+0

Вы уверены, что вызываете его в потоке gui? –

+0

Является ли это веб-приложение или настольное приложение или консольное приложение? –

+0

Hi Jeroen, если я покажу MessageBox чуть выше явного набора кода CurrentUICulture, показанного выше, отчеты CultureInfo «fr-FR». Уве - это настольное приложение. –

ответ

0

Я сделаю снимок в темноте на этом.

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

+0

Спасибо за предложение, Марк, но нет - никаких дополнительных потоков не было создано. Если я покажу MessageBox чуть выше явного набора кода CurrentUICulture, показанного выше, отчет CultureInfo сообщает «fr-FR». –

+0

Можете ли вы уточнить, что не переводится? Является ли он основанным на ресурсах файлом? –

+0

Привет, Марк - да, это ресурсный файл (resx). Здесь мы используем WinForms для Talkign, в котором я устанавливаю поле «Язык» в редакторе VS UI, а затем приступаю к редактированию различных меток в форме на выбранном языке. –

1

Я, наконец, нашел проблему и исправлю. Я создавал сборку из MSBUILD, и, похоже, эта проблема возникла из-за того, что явно не предназначалась для конкретной версии фреймворка (v3.5 в моем случае). Это означает, что приложение встраивалось в v3.5, и сборки спутников генерировались в версии 4.0 (не знаю, почему разница). Это заставляло их не загружаться правильно. (Кстати, приложение отлично работало, когда оно было встроено в VS IDE с тем же файлом решения.)

Решение заключается в явной таргетинге на фреймворк (с коммутатором msbuild /tv:3.5) и убедитесь, что весь результирующий язык сборки находятся в одной и той же версии. Невыполнение этого означает, что язык просто не загружается, и вместо этого будет использоваться язык по умолчанию.

Смежные вопросы