Discutons des projets communs dans l'éditeur - pourquoi et où ils vont - page 13

 
Artyom Trishkin:
Il y a déjà eu une réponse. Par le biais de la compilation, le langage définit. Les éléments qui devraient avoir plusieurs langues - les paramètres par exemple - sont écrits pour chaque langue.
Puis #ifdef pour aider.
Je ne comprends pas très bien, est-il possible de changer la langue des paramètres de l'EA par programme, en fonction de la langue du terminal ?
 
Vladimir Pastushak:
Je suis un peu confus, est-il possible de changer la langue des paramètres de l'EA de façon programmatique en fonction de la langue du terminal ?

Au niveau du programme - non. Au niveau de la compilation, oui.

 
Artyom Trishkin:

Au niveau du programme, non. Au niveau de la compilation, oui.


Par exemple, si j'ai 54 paramètres dans le programme et que je dois créer plusieurs versions du programme dans différentes langues, avec différentes descriptions et différents liens, je n'ai pas besoin de traduire et de combiner les paramètres pour chaque version ?

 
Vladimir Pastushak:

Par exemple, si j'ai 54 paramètres dans le programme et que je dois créer plusieurs versions du programme dans différentes langues, avec différentes descriptions et différents liens, dois-je traduire les paramètres et les combiner pour chaque version ?

Oui, je le fais.

Tout ce qui est affiché par le programme pendant son fonctionnement peut être lié à la langue du terminal, et les paramètres - uniquement au code lui-même. Pour ce faire, vous devez réaliser plusieurs versions des paramètres d'entrée dans le programme et sélectionner la langue des paramètres souhaités en les définissant lors de la compilation.

 
Artyom Trishkin:

Je dois le faire.

Tout ce qui est émis par un programme lors de son exécution peut être lié au langage du terminal, et les paramètres ne sont liés qu'au code lui-même. Pour ce faire, vous devez réaliser plusieurs versions des paramètres d'entrée dans le programme et sélectionner la langue des paramètres souhaités en les définissant lors de la compilation.


Je ne sais pas comment faire... Il semble que j'aie une lacune dans mes connaissances, puis-je demander un petit exemple ?

 
Vladimir Pastushak:

Je ne sais pas comment faire... Il semble que j'aie une lacune dans mes connaissances, puis-je demander un petit exemple ?

Exemple :

//+------------------------------------------------------------------+
//| 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:

Exemple :


Merci ! Je vois, je pensais qu'il y avait quelque chose de plus simple...

Si j'ai oublié de retirer la version russe, je l'ai retirée, j'ai compilé la version anglaise, si j'ai oublié de la retirer, j'ai obtenu un fichier dans la même langue...

Je fais les choses un peu différemment maintenant, j'essaie d'éliminer les erreurs que j'ai faites à la volée...

J'ai créé mon projet de modèle et il ressemble à ceci

Expert de projet

  • dossier de code
    • code du programme
  • inclure le dossier
    • paramètres en russe
    • paramètres en anglais
  • dossier version russe
    • Version russe du programme
  • Version anglaise du dossier du programme
    • Version anglaise du programme

Cela me fait un peu peur avec quelle activité les développeurs ont commencé à tout faire dans les projets et ont immédiatement fait la description du programme sur la page principale du projet, ce qui a la priorité sur la description qui est dans le code....

Il y a un risque que pour créer différentes versions d'un programme, vous deviez faire différents projets et générer un tas de dossiers et de fichiers...

 
Alexey Volchanskiy:

Pourquoi ? Eh bien, les plus l'ont fait historiquement, depuis que les ordinateurs étaient faibles et utilisaient la compilation fractionnée. En outre, vous pouvez transmettre au client un format compilé + des en-têtes en .h.


C'est simple, c'est pratique.

Et le bon côté des choses, c'est qu'il est toujours d'actualité.

 
Artyom Trishkin:
Il y a déjà eu une réponse. Par le biais du langage de compilation définir. Les éléments qui devraient avoir plus d'une langue - les paramètres par exemple - sont écrits pour chaque langue.
Puis #ifdef pour aider.

Je place depuis longtemps les paramètres dans un fichier .mqh distinct. Il existe un noyau multiplateforme .mq4/5 et il est idéalement invariable, à l'exception des plugins, dont la plupart sont également des définitions de classes multiplateformes.

Avec cette approche, il est beaucoup plus facile de créer un nouveau robot, il suffit d'hériter de la classe signal et d'écrire son propre algorithme d'ouverture/fermeture. Et quelques cosmétiques + du sucre.

J'en ai fait mon affaire, car les cours concernant la création d'EA sont l'une des rares choses que je n'aime pas du tout dans SB.

 
Vladimir Pastushak:

Merci ! Je vois, je pensais qu'il y avait quelque chose de plus simple...

Si j'ai oublié de retirer la version russe, j'ai téléchargé l'extrait, j'ai compilé la version anglaise, si j'ai oublié de retirer l'extrait, j'ai obtenu un fichier dans la même langue...

Je fais les choses un peu différemment maintenant, j'essaie d'éliminer les erreurs que j'ai faites à la volée...

J'ai créé mon projet de modèle et il ressemble à ceci

Expert de projet

  • dossier de code
    • code du programme
  • inclure le dossier
    • paramètres en russe
    • paramètres en anglais
  • dossier version russe
    • Version russe du programme
  • Version anglaise du dossier du programme
    • Version anglaise du programme

Cela m'effraie un peu de savoir avec quelle activité les développeurs ont commencé à tout faire dans les projets et ont immédiatement fait la description du programme sur la page principale du projet, ce qui est prioritaire par rapport à la description qui est dans le code...

Cela signifie que pour créer différentes versions d'un même programme, vous devrez faire différents projets et multiplier beaucoup de dossiers et de fichiers...


Je suis d'accord, je n'écris rien dans ce domaine, c'est superflu.