Сообщество программистов Autodesk в СНГ

ADN Club => Revit API => Тема начата: Андрей Бушман от 28-01-2017, 14:57:29

Название: Ключ '/language' переключает не ту локализацию?
Отправлено: Андрей Бушман от 28-01-2017, 14:57:29
Revit 2017.1.1

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

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

Если я программно переключаю CurrentUICulture на русскую локаль (в момент загрузки моего приложения в Revit), то проблема исчезает. Однако хотелось бы понять, почему так вообще происходит... Подробнее проблема описана здесь (http://forums.autodesk.com/t5/revit-api-forum/why-the-language-key-switches-currentculture-instead-of/td-p/6837625).

Код - 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...

Название: Re: Ключ '/language' переключает локализацию не того потока?
Отправлено: Александр Ривилис от 28-01-2017, 20:41:27
Проверка на проблемных компьютерах показала, что при использовании этого ключа происходит переключение локализации не для того потока, который по факту отвечает за пользовательский интерфейс: т.е. вместо CurrentUICulture локализация переключается у потока CurrentCulture.
А причем здесь поток? CurrentCulture и CurrentUICulture - это свойства одного и того же потока. Но почему Revit переключает CurrentCulture, но не переключает CurrentUICulture я сказать не могу.
Название: Re: Ключ '/language' переключает локализацию не того потока?
Отправлено: Андрей Бушман от 28-01-2017, 20:44:28
Согласен. Что-то меня перемкнуло - хрень написал по поводу разных потоков. Однако тем не менее проблема с локализациями имеет место быть.
Название: Re: Ключ '/language' переключает не ту локализацию?
Отправлено: Андрей Бушман от 30-01-2017, 14:58:54
Сегодня лично перепроверил версию Revit, на котором проблема не возникало (до этого версию озвучивал пользователь). Оказалось, что на том компьютере, на котором проблема не возникала, установлен Revit 2017 (версия 17.0.416.0 20160225_1515(x64)), а не Revit 2017.1.1.

Т.е. проблема специфична именно для 2017.1.1.
Название: Re: Ключ '/language' переключает не ту локализацию?
Отправлено: Андрей Бушман от 30-01-2017, 15:22:36
Здесь (https://bitbucket.org/Andrey-Bushman/research_of_revit_culture_switching_problem) исходный код проекта, созданный для демонстрации бага. При загрузке приложения открывается диалоговое окошко с локализованным текстом, а так же с перечнем сборок, которые удалось (или не удалось обнаружить). Этот перечень я хотел использовать, чтобы сравнить, в чём разница по загружаемому контенту между тем компом, где баг есть и тем - где бага нет. Однако поскольку выяснилось, что на компах оказались разные версии ревита, то сравнивать я не стал.

В проекте по умолчанию используется "en" локализация. Дополнительно присутствует "ru".
Название: Re: Ключ '/language' переключает не ту локализацию?
Отправлено: Андрей Бушман от 30-01-2017, 18:28:55
Мало ли, может кому пригодится: https://revit-addins.blogspot.ru/2017/01/revit-201711.html