エディターで共同企画を議論しよう - なぜ、どこへ行くのか - ページ 13

 
Artyom Trishkin:
すでに答えは出ている。スルーコンパイル言語が定義する。設定など、多言語化すべきものは、それぞれの言語用に記述しています。
次に#ifdefで支援します。
ちょっとわからないのですが、EAの設定の言語を、端末の言語によってプログラムで変更することは可能なのでしょうか?
 
Vladimir Pastushak:
少し混乱しているのですが、EAの設定の言語を端末の言語によってプログラムで変更することは可能なのでしょうか?

プログラムレベルでは、「いいえ」です。コンパイルレベルでは、そうです。

 
Artyom Trishkin:

プログラムレベルでは、ありません。コンパイルレベルでは、そうです。


I.e.プログラム内に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:
すでに答えは出ている。コンパイル言語defineを通して。設定など、複数の言語を持つべきものは、それぞれの言語用に書かれています。
次に#ifdefで支援します。

私は以前から設定を別の.mqhファイルに入れていました。マルチプラットフォームのコア.mq4/5があり、プラグインを除いては理想的に不変であり、そのほとんどがマルチプラットフォームのクラス定義でもあるのです。

この方法であれば、シグナルクラスを継承して、独自の開閉アルゴリズムを書くだけなので、新しいロボットを作るのがとても簡単です。あと、化粧品+砂糖も。

EA作成に関する 授業は、SBの数少ない嫌いなところなので、すべて自分のものにしました。

 
Vladimir Pastushak:

ありがとうございました。なるほど、もっとシンプルなものがあると思ったのですが...。

ロシア語版を取り出し忘れたら、抜粋版をダウンロードして、英語版をコンパイルして、同じ言語のファイルを手に入れました...。

今は少しやり方を変えて、その場しのぎの失敗をなくすようにしています......。

テンプレート・プロジェクトを作ると、次のようになります。

プロジェクトエキスパート

  • コードフォルダ
    • プログラムコード
  • インクルードフォルダ
    • ろせってい
    • 英語設定
  • ロシア語版フォルダー
    • ロシア語版プログラム
  • 英語版プログラムフォルダ
    • 英語版プログラム

開発者がプロジェクトですべてを行うようになり、すぐにプロジェクトのメインページにプログラムの説明を作るようになり、コードにある説明よりも優先されるようになったのは、どんな活動なのかちょっと怖いです......。

このため、同じプログラムの異なるバージョンを作成するには、異なるプロジェクトを作成し、多くのフォルダとファイルを掛け合わせる必要があります...。


同感です、この分野では何も書きません、余計なお世話です。