Lassen Sie uns über gemeinsame Projekte im Editor sprechen - warum und wohin sie gehen - Seite 13

 
Artyom Trishkin:
Es wurde bereits eine Antwort gegeben. Durch Kompilierung wird die Sprache definiert. Dinge, die mehrsprachig sein sollten - zum Beispiel Einstellungen - werden für jede Sprache geschrieben.
Dann #ifdef als Hilfe.
Ich verstehe nicht ganz, ist es möglich, die Sprache der EA-Einstellungen programmatisch zu ändern, abhängig von der Sprache des Terminals?
 
Vladimir Pastushak:
Ich bin ein wenig verwirrt, ist es möglich, die Sprache der EA-Einstellungen programmatisch in Abhängigkeit von der Sprache des Terminals zu ändern?

Programmatisch auf der Programmebene - nein. Auf Kompilierebene, ja.

 
Artyom Trishkin:

Programmatisch auf der Ebene des Programms, nein. Auf Kompilierebene, ja.


Wenn ich z. B. 54 Einstellungen im Programm habe und mehrere Versionen des Programms in verschiedenen Sprachen mit unterschiedlichen Beschreibungen und Links erstellen muss, muss ich dann nicht die Einstellungen für jede Version übersetzen und kombinieren?

 
Vladimir Pastushak:

Wenn ich z. B. 54 Einstellungen im Programm habe und mehrere Versionen des Programms in verschiedenen Sprachen mit unterschiedlichen Beschreibungen und unterschiedlichen Links erstellen muss, muss ich dann die Einstellungen übersetzen und für jede Version kombinieren?

Ja, ich weiß.

Alles, was das Programm während seines Betriebs anzeigt, kann mit der Terminalsprache verknüpft werden, und die Einstellungen - nur mit dem Code selbst. Zu diesem Zweck müssen Sie mehrere Versionen von Eingabeparametern im Programm erstellen und die gewünschte Einstellungssprache auswählen, indem Sie sie während der Kompilierung definieren.

 
Artyom Trishkin:

Ich muss es tun.

Alles, was ein Programm ausgibt, wenn es läuft, kann mit der Terminalsprache verknüpft werden, und die Einstellungen sind nur an den Code selbst gebunden. Dazu müssen Sie mehrere Versionen von Eingabeparametern im Programm erstellen und beim Kompilieren die gewünschte Einstellungssprache per Definition auswählen.


Ich habe keine Ahnung wie... Ich scheine eine Wissenslücke zu haben, kann ich um ein kleines Beispiel bitten?

 
Vladimir Pastushak:

Ich habe keine Ahnung wie... Ich scheine eine Wissenslücke zu haben, kann ich um ein kleines Beispiel bitten?

Beispiel:

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

Beispiel:


Ich danke Ihnen! Ich verstehe, ich dachte, es gäbe etwas Einfacheres...

Wenn ich vergessen habe, die russische Version herauszunehmen, habe ich sie herausgenommen, die englische kompiliert, wenn ich vergessen habe, sie herauszunehmen, habe ich eine Datei in derselben Sprache...

Ich mache die Dinge jetzt ein bisschen anders, ich versuche, die Fehler, die ich gemacht habe, zu beseitigen...

Ich habe mein Vorlagenprojekt erstellt und es sieht wie folgt aus

Projekt-Experte

  • Code-Ordner
    • Programmcode
  • Include-Ordner
    • Einstellungen auf Russisch
    • Einstellungen auf Englisch
  • Ordner russische Version
    • Russische Version des Programms
  • Englische Version des Programmordners
    • Englische Version des Programms

Es erschreckt mich ein wenig, mit welcher Aktivität die Entwickler begonnen haben, alles in Projekten zu machen und sofort die Programmbeschreibung auf die Hauptseite des Projekts zu stellen, die Vorrang vor der Beschreibung hat, die im Code steht...

Um verschiedene Versionen eines Programms zu erstellen, besteht die Gefahr, dass Sie verschiedene Projekte erstellen und einen Haufen von Ordnern und Dateien erzeugen müssen...

 
Alexey Volchanskiy:

Warum? Nun, die Profis haben dies in der Vergangenheit getan, als die Computer noch schwach waren und eine geteilte Kompilierung verwendeten. Zusätzlich können Sie dem Kunden in kompiliertem Format + Header in .h übergeben


Ganz einfach, es ist praktisch.

Und das Gute daran ist, dass es auch heute noch aktuell ist.

 
Artyom Trishkin:
Es gab bereits eine Antwort. Durch die Kompiliersprache define. Dinge, für die es mehr als eine Sprache geben sollte - z. B. Einstellungen - werden für jede Sprache geschrieben.
Dann #ifdef als Hilfe.

Ich habe lange Zeit die Einstellungen in einer separaten .mqh-Datei gespeichert. Es gibt einen Multiplattform-Kern .mq4/5, der idealerweise invariant ist, mit Ausnahme der Plugins, von denen die meisten auch Multiplattform-Klassendefinitionen sind.

Mit diesem Ansatz ist es viel einfacher, einen neuen Roboter zu erstellen, man muss nur von der Signalklasse erben und seinen eigenen Algorithmus zum Öffnen/Schließen schreiben. Und etwas Kosmetik + Zucker.

Ich habe es ganz allein gemacht, da die Klassen zur EA-Erstellung eines der wenigen Dinge sind, die ich an SB nicht mag.

 
Vladimir Pastushak:

Ich danke Ihnen! Ich verstehe, ich dachte, es gäbe etwas Einfacheres...

Wenn ich vergessen habe, die russische Version herauszunehmen, habe ich den Auszug heruntergeladen und die englische Version kompiliert, wenn ich vergessen habe, den Auszug herauszunehmen, habe ich eine Datei in derselben Sprache erhalten...

Ich mache die Dinge jetzt ein bisschen anders, ich versuche, die Fehler, die ich gemacht habe, zu beseitigen...

Ich habe mein Vorlagenprojekt erstellt und es sieht wie folgt aus

Projekt-Experte

  • Code-Ordner
    • Programmcode
  • Include-Ordner
    • Einstellungen auf Russisch
    • Einstellungen auf Englisch
  • Ordner russische Version
    • Russische Version des Programms
  • Englische Version des Programmordners
    • Englische Version des Programms

Es erschreckt mich ein wenig, mit welcher Aktivität die Entwickler begonnen haben, alles in Projekten zu machen und sofort die Programmbeschreibung auf die Hauptseite des Projekts zu stellen, die Vorrang vor der Beschreibung hat, die im Code steht...

Dies bedeutet, dass Sie für die Erstellung verschiedener Versionen desselben Programms verschiedene Projekte erstellen und eine Vielzahl von Ordnern und Dateien vervielfältigen müssen...


Ich stimme zu, ich schreibe nichts in diesem Bereich, es ist überflüssig.