Parliamo dei progetti comuni nell'editore - perché e dove stanno andando - pagina 13

 
Artyom Trishkin:
C'è già stata una risposta. Attraverso il linguaggio di compilazione definisce. Le cose che dovrebbero avere più lingue - le impostazioni per esempio - sono scritte per ogni lingua.
Poi #ifdef per aiutare.
Non capisco un po', è possibile cambiare la lingua delle impostazioni EA programmaticamente, a seconda della lingua del terminale?
 
Vladimir Pastushak:
Sono un po' confuso, è possibile cambiare la lingua delle impostazioni EA programmaticamente a seconda della lingua del terminale?

Programmaticamente a livello di programma - no. A livello di compilazione, sì.

 
Artyom Trishkin:

A livello programmatico, no. A livello di compilazione, sì.


Cioè se ho 54 impostazioni nel programma e ho bisogno di fare diverse versioni del programma in diverse lingue, con diverse descrizioni e diversi link, non ho bisogno di tradurre e combinare le impostazioni per ogni versione?

 
Vladimir Pastushak:

Cioè, se ho 54 impostazioni nel programma e ho bisogno di fare diverse versioni del programma in diverse lingue, con diverse descrizioni e diversi link, devo tradurre le impostazioni e combinarle per ogni versione?

Sì, lo so.

Tutto ciò che viene visualizzato dal programma durante il suo funzionamento può essere legato al linguaggio del terminale, e le impostazioni - solo al codice stesso. Per fare questo, è necessario fare diverse versioni di parametri d'ingresso nel programma e selezionare la lingua delle impostazioni desiderate definendole durante la compilazione.

 
Artyom Trishkin:

Devo farlo.

Tutto ciò che viene emesso da un programma quando è in esecuzione può essere legato al linguaggio del terminale, e le impostazioni sono legate solo al codice stesso. Per fare questo, è necessario fare diverse versioni di parametri d'ingresso nel programma e selezionare la lingua delle impostazioni desiderate per definire quando si compila.


Non ho idea di come... Mi sembra di avere una lacuna nella mia conoscenza, posso chiedere un piccolo esempio?

 
Vladimir Pastushak:

Non ho idea di come... Mi sembra di avere una lacuna nella mia conoscenza, posso chiedere un piccolo esempio?

Esempio:

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

Esempio:


Grazie! Capisco, pensavo ci fosse qualcosa di più semplice...

Se ho dimenticato di togliere la versione russa, l'ho tolta, ho compilato quella inglese, se ho dimenticato di toglierla, ho ottenuto un file nella stessa lingua...

Sto facendo le cose un po' diversamente ora, sto cercando di eliminare gli errori che ho fatto al volo...

Ho fatto il mio progetto-modello e appare così

Esperto del progetto

  • cartella codice
    • codice del programma
  • includere la cartella
    • impostazioni in russo
    • impostazioni in inglese
  • cartella versione russa
    • Versione russa del programma
  • Versione inglese della cartella del programma
    • Versione inglese del programma

Mi spaventa un po' l'attività con cui gli sviluppatori hanno iniziato a fare tutto nei progetti e hanno fatto subito la descrizione del programma nella pagina principale del progetto, che ha la priorità sulla descrizione che è nel codice...

C'è il rischio che per creare diverse versioni di un programma si debbano fare diversi progetti e generare un mucchio di cartelle e file...

 
Alexey Volchanskiy:

Perché? Beh, i professionisti lo hanno fatto storicamente, da quando i computer erano deboli e usavano la compilazione split. Inoltre è possibile passare al cliente in formato compilato + intestazioni in .h


Semplice, è conveniente.

E il lato positivo è che è ancora attuale.

 
Artyom Trishkin:
C'è già stata una risposta. Attraverso il linguaggio di compilazione definire. Le cose che dovrebbero avere più di una lingua - le impostazioni per esempio - sono scritte per ogni lingua.
Poi #ifdef per aiutare.

Ho messo a lungo le impostazioni in un file .mqh separato. C'è un nucleo multipiattaforma .mq4/5 ed è idealmente invariabile, tranne che per i plugin, la maggior parte dei quali sono anche definizioni di classi multipiattaforma.

Con questo approccio è molto più facile fare un nuovo robot, basta ereditare dalla classe del segnale e scrivere il proprio algoritmo di apertura/chiusura. E alcuni cosmetici + zucchero.

L'ho fatto tutto da solo, dato che le classi riguardanti la creazione di EA sono una delle poche cose che non mi piacciono molto di SB.

 
Vladimir Pastushak:

Grazie! Capisco, pensavo ci fosse qualcosa di più semplice...

Se ho dimenticato di togliere la versione russa, ho scaricato l'estratto, compilato quella inglese, se ho dimenticato di togliere l'estratto, ho ottenuto un file nella stessa lingua...

Sto facendo le cose un po' diversamente ora, sto cercando di eliminare gli errori che ho fatto al volo...

Ho fatto il mio progetto-modello e appare così

Esperto del progetto

  • cartella codice
    • codice del programma
  • includere la cartella
    • impostazioni in russo
    • impostazioni in inglese
  • cartella versione russa
    • Versione russa del programma
  • Versione inglese della cartella del programma
    • Versione inglese del programma

Mi spaventa un po' l'attività con cui gli sviluppatori hanno iniziato a fare tutto nei progetti e hanno fatto subito la descrizione del programma nella pagina principale del progetto, che ha la priorità sulla descrizione che è nel codice...

Questo minaccia che per creare diverse versioni dello stesso programma dovrete fare diversi progetti e moltiplicare un sacco di cartelle e file...


Sono d'accordo, non scrivo nulla in questo campo, è superfluo.

Motivazione: