Hablemos de los proyectos conjuntos en el editor: por qué y hacia dónde van - página 13

 
Artyom Trishkin:
Ya ha habido una respuesta. A través del lenguaje de compilación define. Las cosas que deberían tener varios idiomas -los ajustes, por ejemplo- se escriben para cada idioma.
Entonces #ifdef para ayudar.
Estoy un poco confundido, ¿es posible cambiar el idioma de la configuración de EA programáticamente, dependiendo del idioma del terminal?
 
Vladimir Pastushak:
Estoy un poco confundido, ¿es posible cambiar el idioma de la configuración de EA programáticamente en función del idioma del terminal?

A nivel de programa, no. A nivel de compilación, sí.

 
Artyom Trishkin:

A nivel de programa, no. A nivel de compilación, sí.


Es decir, si tengo 54 ajustes en el programa y necesito hacer varias versiones del programa en diferentes idiomas, con diferentes descripciones y diferentes enlaces, ¿no necesito traducir y combinar los ajustes para cada versión?

 
Vladimir Pastushak:

Por ejemplo, si tengo 54 ajustes en el programa y necesito hacer varias versiones del programa en diferentes idiomas, con diferentes descripciones y diferentes enlaces, ¿tengo que traducir los ajustes y combinarlos para cada versión?

Sí, lo sé.

Todo lo que muestra el programa durante su funcionamiento puede vincularse al lenguaje del terminal, y los ajustes - sólo al propio código. Para ello, es necesario realizar varias versiones de los parámetros de entrada en el programa y seleccionar el idioma de configuración deseado definiéndolos durante la compilación.

 
Artyom Trishkin:

Tengo que hacerlo.

Todo lo que sale de un programa cuando se está ejecutando puede estar ligado al lenguaje de la terminal, y los ajustes sólo están ligados al propio código. Para ello, es necesario realizar varias versiones de los parámetros de entrada en el programa y seleccionar el idioma de configuración deseado definiéndolos durante la compilación.


No tengo ni idea de cómo... Parece que tengo una laguna en mis conocimientos, ¿puedo pedir un pequeño ejemplo?

 
Vladimir Pastushak:

No tengo ni idea de cómo... Parece que tengo una laguna en mis conocimientos, ¿puedo pedir un pequeño ejemplo?

Ejemplo:

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

Ejemplo:


Gracias. Ya veo, pensé que había algo más sencillo...

Si me olvidé de sacar la versión rusa, la saqué, compilé la inglesa, si me olvidé de sacarla, obtuve un archivo en el mismo idioma...

Ahora hago las cosas de forma un poco diferente, intento eliminar los errores que cometí sobre la marcha...

Hice mi plantilla-proyecto y se ve así

Experto en proyectos

  • carpeta de códigos
    • código del programa
  • incluir carpeta
    • ajustes en ruso
    • ajustes en inglés
  • carpeta de la versión rusa
    • Versión rusa del programa
  • Versión en inglés de la carpeta del programa
    • Versión en inglés del programa

Me asusta un poco con qué actividad los desarrolladores empezaron a hacer todo en los proyectos e inmediatamente hicieron la descripción del programa en la página principal del proyecto, que tiene prioridad sobre la descripción que está en el código...

Existe el riesgo de que para crear diferentes versiones de un mismo programa haya que hacer diferentes proyectos y generar un montón de carpetas y archivos...

 
Alexey Volchanskiy:

¿Por qué? Bueno, los profesionales lo han hecho históricamente, desde que los ordenadores eran débiles y utilizaban la compilación dividida. Además puede pasar al cliente en formato compilado + cabeceras en .h


Simple, es conveniente.

Y lo mejor es que sigue siendo relevante hoy en día.

 
Artyom Trishkin:
Ya ha habido una respuesta. A través del lenguaje de compilación definir. Las cosas que deberían tener más de un idioma -los ajustes, por ejemplo- se escriben para cada idioma.
Entonces #ifdef para ayudar.

Hace tiempo que pongo los ajustes en un archivo .mqh separado. Existe un núcleo multiplataforma .mq4/5 y es idealmente invariable, excepto para los plugins, la mayoría de los cuales son también definiciones de clases multiplataforma.

Con este enfoque es mucho más fácil hacer un nuevo robot, sólo tienes que heredar de la clase de señal y escribir tu propio algoritmo de apertura/cierre. Y algunos cosméticos + azúcar.

Lo hice todo yo, ya que las clases relativas a la creación de EA son una de las pocas cosas que me disgustan mucho de SB.

 
Vladimir Pastushak:

Gracias. Ya veo, pensé que había algo más sencillo...

Si me olvidaba de sacar la versión rusa, descargaba el extracto, compilaba la inglesa, si me olvidaba de sacar el extracto, obtenía un archivo en el mismo idioma...

Ahora hago las cosas de forma un poco diferente, intento eliminar los errores que cometí sobre la marcha...

Hice mi plantilla-proyecto y se ve así

Experto en proyectos

  • carpeta de códigos
    • código del programa
  • incluir carpeta
    • ajustes en ruso
    • ajustes en inglés
  • carpeta de la versión rusa
    • Versión rusa del programa
  • Versión en inglés de la carpeta del programa
    • Versión en inglés del programa

Me asusta un poco con qué actividad los desarrolladores empezaron a hacer todo en los proyectos e inmediatamente hicieron la descripción del programa en la página principal del proyecto, que tiene prioridad sobre la descripción que está en el código...

Esto amenaza que para crear diferentes versiones del mismo programa tendrás que hacer diferentes proyectos y multiplicar un montón de carpetas y archivos...


Estoy de acuerdo, no escribo nada en este campo, es superfluo.