Обсудим совместные проекты в редакторе - зачем они и куда движутся - страница 13

 
Artyom Trishkin:
Уже ведь был ответ. Через дефайн языка компиляции. То, что должно иметь несколько языков - настройки например - пишется для каждого языка.
Далее #ifdef в помощь.
Я немного не понимаю, есть ли возможность программно менять язык настроек советника в зависимости от языка терминала ???
 
Vladimir Pastushak:
Я немного не понимаю, есть ли возможность программно менять язык настроек советника в зависимости от языка терминала ???

Программно на уровне программы - нет. На уровне компиляции - да.

 
Artyom Trishkin:

Программно на уровне программы - нет. На уровне компиляции - да.


То-есть если у меня в программе 54 настройки и мне нужно сделать несколько версий программы на разных языках , с разным описанием дескрипшен и разными ссылками, не нужно для каждой версии делать перевод настроек и комбинировать ??

 
Vladimir Pastushak:

То-есть если у меня в программе 54 настройки и мне нужно сделать несколько версий программы на разных языках , с разным описанием дескрипшен и разными ссылками, не нужно для каждой версии делать перевод настроек и комбинировать ??

Нужно.

Всё, что выводится программой во время её работы, можно привязать к языку терминала, а настройки - лишь к самому коду. Для этого нужно в программе сделать несколько версий входных параметров и при компиляции дефайнами выбирать нужный язык настроек.

 
Artyom Trishkin:

Нужно.

Всё, что выводится программой во время её работы, можно привязать к языку терминала, а настройки - лишь к самому коду. Для этого нужно в программе сделать несколько версий входных параметров и при компиляции дефайнами выбирать нужный язык настроек.


Даже не представляю как...  Походу у меня пробел в знаниях, можно попросить небольшой пример ?

 
Vladimir Pastushak:

Даже не представляю как...  Походу у меня пробел в знаниях, можно попросить небольшой пример ?

Пример:

//+------------------------------------------------------------------+
//| defines                                                          |
//+------------------------------------------------------------------+
#define __MQL_COMPILE_LANG__ // закомментировать для компиляции в eng
//+------------------------------------------------------------------+
//| Русский язык компиляции                                          |
//+------------------------------------------------------------------+
#ifdef __MQL_COMPILE_LANG__
   enum  ENUM_INPUT_YES_NO
     {
      INPUT_YES                        =  1,                // Да
      INPUT_NO                         =  0                 // Нет
     };
   enum ENUM_INPUT_ON_OFF
     {
      INPUT_ON                         =  1,                // Вкл
      INPUT_OFF                        =  0                 // Выкл
     };
   enum ENUM_INPUT_START_DAY_OF_WEEK
     {
      INPUT_WEEK_START_ON_SUNDAY,                           // Воскресение
      INPUT_WEEK_START_ON_MONDAY,                           // Понедельник
     };
   enum ENUM_USE_SYMBOL_LIST_FROM
     {
      INPUT_SYMBOLS_CURRENT,                                // Текущий
      INPUT_SYMBOLS_FROM_DEFINES_LIST,                      // Из заданного списка
      INPUT_SYMBOLS_FROM_MARKET_WATCH                       // Из обзора рынка
     };
   enum ENUM_USE_MAGIC_LIST_FROM
     {
      INPUT_MAGIC_ONE,                                      // Один заданный
      INPUT_MAGIC_FROM_DEFINES_LIST                         // Из заданного списка
     };
   enum ENUM_MONTH_NAME
     {
      MONTH_JANUARY,                                        // Январь
      MONTH_FEBRUARY,                                       // Февраль
      MONTH_MARCH,                                          // Март
      MONTH_APRIL,                                          // Апель
      MONTH_MAY,                                            // Май
      MONTH_JUNE,                                           // Июнь
      MONTH_JULY,                                           // Июль
      MONTH_AUGUST,                                         // Август
      MONTH_SEPTEMBER,                                      // Сентябрь
      MONTH_OCTOBER,                                        // Октябрь
      MONTH_NOVEMBER,                                       // Ноябрь
      MONTH_DECEMBER                                        // Декабрь
     };
//+------------------------------------------------------------------+
//| Английский язык компиляции                                       |
//+------------------------------------------------------------------+
#else 
   enum  ENUM_INPUT_YES_NO
     {
      INPUT_YES                        =  1,                // Yes
      INPUT_NO                         =  0                 // No
     };
   enum ENUM_INPUT_ON_OFF
     {
      INPUT_ON                         =  1,                // On
      INPUT_OFF                        =  0                 // Off
     };
   enum ENUM_INPUT_START_DAY_OF_WEEK
     {
      INPUT_WEEK_START_ON_SUNDAY,                           // Sunday
      INPUT_WEEK_START_ON_MONDAY,                           // Monday
     };
   enum ENUM_USE_SYMBOL_LIST_FROM
     {
      INPUT_SYMBOL_CURRENT,                                 // Current
      INPUT_SYMBOLS_FROM_DEFINES_LIST,                      // From the specified list
      INPUT_SYMBOLS_FROM_MARKET_WATCH                       // From the market watch
     };
   enum ENUM_USE_MAGIC_LIST_FROM
     {
      INPUT_MAGIC_ONE,                                      // One specified
      INPUT_MAGIC_FROM_DEFINES_LIST                         // From the specified list
     };
   enum ENUM_MONTH_NAME
     {
      MONTH_JANUARY,                                        // January
      MONTH_FEBRUARY,                                       // February
      MONTH_MARCH,                                          // March
      MONTH_APRIL,                                          // April
      MONTH_MAY,                                            // May
      MONTH_JUNE,                                           // June
      MONTH_JULY,                                           // July
      MONTH_AUGUST,                                         // August
      MONTH_SEPTEMBER,                                      // September
      MONTH_OCTOBER,                                        // October
      MONTH_NOVEMBER,                                       // November
      MONTH_DECEMBER                                        // December
     };
#endif 
 
Artyom Trishkin:

Пример:


Спасибо! Понял, я думал есть что то проще..

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

Я сейчас делаю чуть по другому, я стараюсь исключить ошибки сделанные мною на автомате..

Я сделал свой шаблон-проект и выглядит он так

Проект Эксперт

  • папка кода
    • код программы
  • папка включений
    • настройки на русском
    • настройки на английском
  • папка русская версия программы
    • Русская версия программы
  • папка английская версия  программы
    • Английская версия программы

Меня немного пугает то с какой активностью разработчики стали делать все в проекты и сразу же сделали описание программы на главной странице проекта, которое стоит в приоритете перед тем описанием которое в коде...

Это грозит тем что для создания разных версий одной программы прийдется делать разные проекты и плодить кучу папок и файлов...

 
Alexey Volchanskiy:

А зачем? Ну, в плюсах так сделано исторически, поскольку компы были слабые и использовали раздельную компиляцию. Вдобавок можно передавать заказчику в скомпилированном формате + заголовки в .h


Просто, это удобно.

А в плюсах это актуально и сейчас.

 
Artyom Trishkin:
Уже ведь был ответ. Через дефайн языка компиляции. То, что должно иметь несколько языков - настройки например - пишется для каждого языка.
Далее #ifdef в помощь.

Я давно настройки выношу в отдельный .mqh файл. Есть мультиплатформенное ядро .mq4/5, оно в идеале неизменно, за исключением подключаемых инклудов, большинство из которых определения классов, тоже мультиплатформенных. 

При таком подходе сделать новый робот гораздо проще, надо только унаследоваться от класса сигналов и написать свой алгоритм открытия/закрытия. Ну и какая-то косметика + сахарок.

Сделал все свое, т.к. классы, касающиеся создания советника, это одна из немногих вещей, которые мне в СБ категорически не нравятся. 

 
Vladimir Pastushak:

Спасибо! Понял, я думал есть что то проще..

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

Я сейчас делаю чуть по другому, я стараюсь исключить ошибки сделанные мною на автомате..

Я сделал свой шаблон-проект и выглядит он так

Проект Эксперт

  • папка кода
    • код программы
  • папка включений
    • настройки на русском
    • настройки на английском
  • папка русская версия программы
    • Русская версия программы
  • папка английская версия  программы
    • Английская версия программы

Меня немного пугает то с какой активностью разработчики стали делать все в проекты и сразу же сделали описание программы на главной странице проекта, которое стоит в приоритете перед тем описанием которое в коде...

Это грозит тем что для создания разных версий одной программы прийдется делать разные проекты и плодить кучу папок и файлов...


согласен, я в этом поле ничего и не пищу, оно лишнее