Недоработки механизма локализации (???)

Автор Тема: Недоработки механизма локализации (???)  (Прочитано 28523 раз)

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

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

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Будет интересно посмотреть и покритиковать!  :)

Мне видится две возможные реализации (с прицелом на повторное использование):

1. В виде шаблона MS Visual Studio, в составе которого находится непосредственно исходный код, выполняющий перечисленные мною выше операции.

2. В виде отдельно скомпилированной DLL, подключаемой к плагину. Реализуя в своём плагине метод IExtenionApplication.Initialize, программист должен будет всего лишь вызвать в нём некий статический метод, определённый в составе обозначенной выше DLL,  например public static void PluginServices.InitializeLocalizedInfo(Assembly asm).

На текущий момент я реализовал идею в виде первого варианта, но всё же я больше склоняюсь ко 2-му, поскольку предпочитаю строить решение на основе множества маленьких блоков, вместо того, чтобы формировать один большой. Маленькие кусочки легче отлаживать, с ними проще работать и поддерживать их. Если потребуется внести изменения в исходный код, то при использовании 2-го варианта придётся сделать это лишь в одном месте, после чего просто заменить старую DLL на новую. Но если использовать первый - то такие правки придётся вносить во все плагины.

Жду Ваших комментариев по обозначенным вариантам :)

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Второй вариант конечно имеет свои преимущества, но при переходя на другую версию .NET (как я понимаю) потребуется перекомпиляция подключаемой DLL...
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Второй вариант конечно имеет свои преимущества, но при переходя на другую версию .NET (как я понимаю) потребуется перекомпиляция подключаемой DLL...
Но Вас же не пугает то, что каждый третий год Вам приходится выполнять перекомпиляцию ваших ARX программ? Почему же Вас пугает то, что при переходе на очередную версию .NET (или при внесении изменений в функционал API, используемый в Вашем плагине) придётся перекомпилировать управляемый плагин? :)

Перекомпиляция занимает не так много времени ;) .... Да и Microsoft не каждый год выпускает очередную версию .NET Framework. :)

Оффлайн Дима_

  • ADN Club
  • ****
  • Сообщений: 473
  • Карма: 66
Хоть мне и не надо - но по моему правильней второй. Но ИХМО указывать сборку это "вторая" перегрузка, по умолчанию - та откуда вызван метод.

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

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Хоть мне и не надо - но по моему правильней второй. Но ИХМО указывать сборку это "вторая" перегрузка, по умолчанию - та откуда вызван метод.
Я буду Вам весьма признателен, если Вы постараетесь более развёрнуто излагать свои мысли. Нередко мне достаточно сложно понять то, что Вы пытаетесь написать: либо вообще не понимаю, либо возникает неоднозначность, либо понимаю неправильно.

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

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

P.S. Тестировал в AutoCAD 2009 SP3 x64 Enu и в AutoCAD 2014 SP1 x64 Enu. Проверить в локализованных версиях AutoCAD не имею возможности.
« Последнее редактирование: 29-12-2013, 20:44:05 от Андрей Бушман »

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

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

1. Следует управление локализацией интерфейса плагина отделить от управления локализацией справочной системы. Например, я предпочитаю работать с английским интерфейсом, но если в доступе есть справка на русском, то предпочитаю её английской. В текущей реализации получается, что если в настройках установлена локализация Ru-ru, то и опции, выводимые в консоли и справка будут на русском. Соответственно мне придётся постоянно переключаться на клавиатуре между русской\английской раскладкой. А учитывая вот такой баг AutoCAD, этот процесс будет весьма сильно раздражать....

2. Помимо текущего набора переменных, которые можно использовать в XML файле настроек, пожалуй стоит добавить переменную %Platform%, значение которой автоматически будет подставляться либо x86 либо x64 (зависит от разрядности AutoCAD). Переменная может быть задействована при формировании каталогов и имён файлов, содержащих в своём составе информацию о зависимости к конкретной платформе.
« Последнее редактирование: 29-12-2013, 20:46:19 от Андрей Бушман »

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

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Обратите внимание на скрины консоли: AutoCAD 2014 SP1 "сливает" всё форматирование (пустые строки, посредством которых я группирую информацию). А в AutoCAD 2009 SP3 всё отображается корректно (форматирование присутствует).

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Обратите внимание на скрины консоли: AutoCAD 2014 SP1 "сливает" всё форматирование (пустые строки, посредством которых я группирую информацию).
Для проверки написал такое:
Код - C# [Выбрать]
  1. [CommandMethod("TestPrint", CommandFlags.Modal)]
  2. static public void TestPrint()
  3. {
  4.   Document doc = Application.DocumentManager.MdiActiveDocument;
  5.   Editor ed = doc.Editor;
  6.   ed.WriteMessage("\nLine 1");
  7.   ed.WriteMessage("\n\tLine 2");
  8.   ed.WriteMessage("\n\n\t\tLine 3");
  9. }

В консоли действительно пустые строки AutoCAD 2014 убирает - с учетом того что консоль достаточно ограниченна по размеру может это и правильно:



Зато в текстовом окне пустые строки все на месте и форматирование присутствует:


Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Если я правильно понял твой код, то на время действия своих команд ты переключаешь системную локализацию. Я бы был с этим крайне осторожен, так как она влияет и на вывод разделителя целой и дробной части действительных чисел. Больше ничего сказать не могу, так как не вижу исходника Bushman.CAD.PluginServices.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Больше ничего сказать не могу, так как не вижу исходника Bushman.CAD.PluginServices.
Значит вы не до конца прочитали, т. к. все исходники там присутствуют - в самом конце заметки выложен архив с проектом.
Цитата: Александр Ривилис link=topic=417.msg1162#msg1162 date=1388356141
Если я правильно понял твой код, то на время действия своих команд ты переключаешь системную локализацию. Я бы был с этим крайне осторожен, так как она влияет и на вывод разделителя целой и дробной части действительных чисел.
Культура культуре рознь... Вы мне пишете об этой. А я временно переключаю совсем другую - вот эту. Но если бы вы открыли исходники, которые я выложил в той же заметке в виде архива, то смогли бы и сами это увидеть. ;)

Более того, в примерах я показываю переключение на время выполнения команды. Однако делать это каждый раз вовсе необязательно: можно один раз переключить культуру пользовательского интерфейса на нужную и оставить её текущей, не переключая обратно. Тогда сразу все .NET плагины подхватят это изменение, которое будет действовать до конца сеанса работы acad.exe.

Например можно сделать так: в диалоговом окне Options добавить дополнительную вкладку, на которой разместить элементы, позволяющие управлять дополнительными общими настройками плагинов. В частности - два ComboBox, при помощи которых пользователь мог бы указать предпочитаемую им локализацию пользовательского интерфейса плагинов, а так же предпочитаемую им локализацию справочной системы. Делается это достаточно просто: настройки того же CAD Recovery я именно так и оформил (см. вложенный файл).
« Последнее редактирование: 30-12-2013, 11:31:36 от Андрей Бушман »

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

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

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

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Цитата: Александр Ривилис
Я намекал, но ты не понял, что исходники не полные (в архиве нет проекта NetExtensions целиком), т.к. архивировал ты только одну папку.
А вон оно что... Я и не заметил. :) Исправлюсь. Внёс изменения, упомянутые мною выше (отделил управление локализацией интерфейса от локализации справочной системы). Перезаписал запись блога, перезалил исходники. Можно смотреть.
« Последнее редактирование: 30-12-2013, 16:07:31 от Андрей Бушман »

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

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Ежели у кого есть возможность проверить обозначенный код в русском AutoCAD - буду признателен. :)

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Новый год на носу. Какие проверки? :)
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение