Ключ '/language' переключает не ту локализацию?

Автор Тема: Ключ '/language' переключает не ту локализацию?  (Прочитано 3173 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Андрей БушманАвтор темы

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Revit 2017.1.1

Столкнулся с такой проблемой: на некоторых компьютерах (на двух из трёх, если быть точным) использование ключа /language RUS не приводит к использованию русскоязычных ресурсов моей надстройки для Revit.

Проверка на проблемных компьютерах показала, что при использовании этого ключа происходит переключение локализации не для того потока, который по факту отвечает за пользовательский интерфейс: т.е. вместо CurrentUICulture локализация переключается у потока CurrentCulture. Можно было бы предположить, что это "косячит" какой-то "левый" Add-In, если бы проблема не возникала на "чистом" Revit, для которого не устанавливались дополнительные приложения...

Если я программно переключаю CurrentUICulture на русскую локаль (в момент загрузки моего приложения в Revit), то проблема исчезает. Однако хотелось бы понять, почему так вообще происходит... Подробнее проблема описана здесь.

Код - C# [Выбрать]
  1. Result IExternalApplication.OnStartup(UIControlledApplication application) {
  2.         ...
  3.         // I use the `/language RUS` key for revit.exe
  4.         // But I see that my add-in user the 'default' localization
  5.         // instead of 'ru'. Hm...
  6.         // Ok,I will check the CurrentCulture and CurrentUICulture
  7.         // values...
  8.         //
  9.         // Oops... Localization was changed by the `/language RUS`
  10.         // key, but not for that thread which shall to have this
  11.         // change! Why???
  12.         CultureInfo n = Thread.CurrentThread.CurrentCulture; // ru-RU
  13.         CultureInfo m = Thread.CurrentThread.CurrentUICulture; // en
  14.  
  15.         // I can fix this problem myself:
  16.         // The CurrentUICulture switching fixes the problem, but
  17.         // why such problem occurs in Revit?
  18.         CultureInfo k = new CultureInfo("ru");
  19.         Thread.CurrentThread.CurrentUICulture = k;
  20.        
  21.         // Now my add-in uses right localization.
  22.         ...
  23. }

Кто-нибудь сталкивался с подобным? Похоже на баг Revit...

« Последнее редактирование: 28-01-2017, 20:55:06 от Андрей Бушман »

Онлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Проверка на проблемных компьютерах показала, что при использовании этого ключа происходит переключение локализации не для того потока, который по факту отвечает за пользовательский интерфейс: т.е. вместо CurrentUICulture локализация переключается у потока CurrentCulture.
А причем здесь поток? CurrentCulture и CurrentUICulture - это свойства одного и того же потока. Но почему Revit переключает CurrentCulture, но не переключает CurrentUICulture я сказать не могу.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Андрей БушманАвтор темы

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Согласен. Что-то меня перемкнуло - хрень написал по поводу разных потоков. Однако тем не менее проблема с локализациями имеет место быть.

Оффлайн Андрей БушманАвтор темы

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Сегодня лично перепроверил версию Revit, на котором проблема не возникало (до этого версию озвучивал пользователь). Оказалось, что на том компьютере, на котором проблема не возникала, установлен Revit 2017 (версия 17.0.416.0 20160225_1515(x64)), а не Revit 2017.1.1.

Т.е. проблема специфична именно для 2017.1.1.

Оффлайн Андрей БушманАвтор темы

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Здесь исходный код проекта, созданный для демонстрации бага. При загрузке приложения открывается диалоговое окошко с локализованным текстом, а так же с перечнем сборок, которые удалось (или не удалось обнаружить). Этот перечень я хотел использовать, чтобы сравнить, в чём разница по загружаемому контенту между тем компом, где баг есть и тем - где бага нет. Однако поскольку выяснилось, что на компах оказались разные версии ревита, то сравнивать я не стал.

В проекте по умолчанию используется "en" локализация. Дополнительно присутствует "ru".

Оффлайн Андрей БушманАвтор темы

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Мало ли, может кому пригодится: https://revit-addins.blogspot.ru/2017/01/revit-201711.html