Или acrxProductLCID(); или AcDbHostApplicationServices::getRegistryProductLCID();Указанные мною выше варианты вроде тоже должны работать... Проверить не могу, т.к. для моих кадов установлена только одна локаль (en-US).
Указанные мною выше варианты вроде тоже должны работать...Сейчас попробую, но думаю что не работают.
но думаю что не работаютНа чём основано предположение? Ведь в конечном счёте мы все играем по правилам, установленным WinAPI и ежели я в C# манипулировал этим свойством через Thread.CurrentThread.CurrentUICulture, то логично предположить, что и в C++ должно получиться через GetThreadUILanguage и SetThreadUILanguage...
Command: GETLCIDAutoCAD 2015 Russian:
acrxProductLCID()=1033
AcDbHostApplicationServices::getRegistryProductLCID()=1033
GetThreadUILanguage()=1049
Команда: GETLCIDТак что GetThreadUILanguage() в AutoCAD возвращает LCID не AutoCAD, а Windows
acrxProductLCID()=1049
AcDbHostApplicationServices::getRegistryProductLCID()=1049
GetThreadUILanguage()=1049
воспользовался acrxProductLCID(). помогло. уж думал придется в реестр лезть и анализировать переменную LastLaunchedLanguage для текущей версии автокада ))). всем спасибо, вопрос решенГлавное, что этот метод работает начиная как минимум с AutoCAD 2006 и не требует переделок...
Главное, что этот метод работает начиная как минимум с AutoCAD 2006 и не требует переделок...это замечательно ))).
чтоб при загрузке приложения человек сразу попадал в русский или английский интерфейс команды, в зависимости от языка автокада.У нас официально утверждена к использованию именно английская локализация. Юзеры привыкли использовать в консоли английские варианты команд и их псевдонимов (aliases from acad.pgp file).
так что, сугубо моё мнение, для одной команды нет смысла заморачиваться с переключением языка во время её работы.Для одной не стоит. Я и не говорил, что использую это для одной команды. Это общие настройки, которые считываются всеми моими плагинами. Обозначенный подход не является руководством к действию, но был обозначен лишь для того, чтобы упомянуть о том, что порой локализация акада и предпочитаемая пользователем локализация интерфейса могут не совпадать.
Я вижу три варианта:так оно и есть. а теперь с точки зрения денежки.
1) Приложение одноязычное и не зависит от языка AutoCAD.
2) Приложение многоязычное и подстраивается под язык AutoCAD (не обязательно под все).
3) Приложение многоязычное и его язык настраивается независимо от языка AutoCAD.
В App Exchange есть приложения как минимум первого и второго типов.
первый тип - теряется часть потенциальных клиентов.Вообще-то понятие первого более широкое. Т.е., например, одно приложение выкладывается в магазине приложений и на русском, и на английском, и на французском с соответствующей локализацией. Возможно даже отличается функционал. И даже стоимость. Autodesk ведь не стесняется ставить разные цены в разных регионах :)
да хоть с ненормативной лексикой )))ну, это явно не мои клиенты... Такая аудитория мне не интересна.
а для маленьких проектов вариант 2 можно превратить в вариант 3 просто поменяв имена у файлов локализации, если на английском автокаде хочется видеть русский текст в моей команде.Переименовывать имена файлов из ru в en для того, чтобы получить эффект варианта 3 считаю грязным способом аля "на это не смотри, здесь нужно читать справа налево, а вот в это я вообще рыбу заворачивал...". Тем более, что для реализации варианта 3 не требуется никаких особых усилий.
одно приложение выкладывается в магазине приложений и на русском, и на английском, и на французском с соответствующей локализацией. Возможно даже отличается функционал. И даже стоимость. Autodesk ведь не стесняется ставить разные цены в разных регионах :)Формирование отдельных локализованных версий с последующей их продажей по разным ценам несомненно имеет целесообразность с точки зрения зарабатывания денег. Всё зависит от приоритетов: либо деньги, либо универсальность конечного ПО, поставляемого клиенту.
Есть правда acrxProductLocale, но он хитрый тип возвращает.Этот хитрый тип (AcLocale) автоматически преобразуется в long, если принудительно не установлен AC_ALLOW_CROSSPLATFORM_ONLY.
"C:\Program Files\Autodesk\AutoCAD 2015\acad.exe" /product ACAD /language "ru-RU" - это запускает 2015 автокад с русским языковым пакетом.Я решил тоже поиграться с локализацией. На свой англоязычный ACAD-2016 поставил русскоязычный пакет:
"C:\Program Files\Autodesk\AutoCAD 2015\acad.exe" /product ACAD /language "en-US" - запускает 2015 автокад с английским пакетом.
Объясните, чтобы сменить язык интерфейса - надо всё время переустанавливать языковой пакет?нет.
"en-EN"не "en-EN", но "en-US". Внимательней будь.
нет.+1 к карме за всеобемлющую лаконичность в объяснении сути.
в дополнение к теме. начиная с 2014 автокада и по сей день, есть системная переменная "UILOCALE".Я всё-таки придерживаюсь решения обведённого в зелёную рамочку - оно универсально и в духе ObjectARX, за что очередное спасибо Александру Ривилису.
И в заключение (чтобы не создавать тему в соседнем разделе), интересно на сколько универсален .NET метод (Autodesk.AutoCAD.Runtime.SystemObjects.DynamicLinker.ProductLcid)? Ответ интересует в диапазоне ACAD2007-2017.Документация говорит, что во всей этой линейке этот метод есть, но работоспособность во всей линейке не проверял.