让我们讨论一下编辑部的联合项目--为什么以及它们的发展方向 - 页 13

 
Artyom Trishkin:
已经有了答案。通过编译语言的定义。应该有多种语言的东西--例如设置--是为每种语言编写的。
然后#ifdef来帮助。
我有点疑惑,是否可以根据终端语言,以编程方式改变EA设置的语言?
 
Vladimir Pastushak:
我有点疑惑,是否可以根据终端语言以编程方式改变EA设置的语言?

在程序层面上的编程--没有。在编译层面,是的。

 
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,它在理想情况下是不变的,除了插件,大部分也是多平台的类定义。

用这种方法制作一个新的机器人要容易得多,你只需要继承信号类并编写你自己的打开/关闭算法。还有一些化妆品+糖。

这都是我自己做的,因为有关EA创造的 课程是我强烈不喜欢SB的几件事之一。

 
Vladimir Pastushak:

谢谢你!我明白了,我以为有更简单的东西......。

如果我忘了拿出俄文版,我就下载节选,编译英文版,如果我忘了拿出节选,我就得到一个相同语言的文件......。

我现在做事的方式有点不同,我在努力消除我临时犯的错误......

我做了我的模板-项目,它看起来像这样

项目专家

  • 代码文件夹
    • 程序代码
  • 包括文件夹
    • 俄语中的设置
    • 英文的设置
  • 俄文版文件夹
    • 俄语版本的程序
  • 英文版本的程序文件夹
    • 英文版本的程序

这让我有点害怕,开发人员开始在项目中做所有的事情,并立即将程序描述放在项目的主页面上,这比代码中的描述更优先。

这意味着,要创建同一程序的不同版本,你将不得不制作不同的项目,并增加大量的文件夹和文件。


我同意,我不写这个领域的东西,这是多余的。