Как запихнуть строки в ресурсы или мультиязычный советник - страница 4

 
Dmitry Fedoseev:
Тогда можно по первому измерению фразу, по второму язык. Еще можно в столбик записывать и нумеровать.

Фразы должны быть и близко к друг другу и удобно правится. Вот, например, четыре языка и четыре набора фраз:

один, два, три, четыре, пять, шесть, семь, восемь, девять, десять, одиннадцать, двенадцать, тринадцать, четырнадцать, пятнадцать, шестнадцать, семнадцать, восемнадцать, девятнадцать, двадцать

one, two, three, four, five, six, seven, eight, nine, ten, eleven, twelve, thirteen, fourteen, fifteen, sixteen, seventeen, eighteen, nineteen, twenty

un, deux, trois, quatre, cinq, six, sept, huit, neuf, dix, onze, douze, treize, quatorze, quinze, seize, dix-sept, dix-huit, dix-neuf, vingt

eins, zwei, drei, vier, fünf, sechs, sieben, acht, neun, zehn, elf, zwölf, dreizehn, vierzehn, fünfzehn, sechzehn, siebzehn, achtzehn, neunzehn , zwanzig

 Для каждого языка по двадцать фраз - и они уже вышли за экран. В общем я решил, что при наличии до 20 фраз лучше использовать конструкцию типа

string ar[][2]=
  {
     {"Привет","пока"},
     {"Hi","buy"},
     {"Salut","tandis que"},
     {"Hallo","Tsch?ss"}
  };
int lng=0;

но только во втором измерении будет двадцать элементов. Примерно так:

string ar[][20]=
  {
     {"один","два","три","четыре","пять","шесть","семь","восемь","девять","десять","одиннадцать","двенадцать","тринадцать","четырнадцать","пятнадцать","шестнадцать","семнадцать","восемнадцать","девятнадцать","двадцать"},
     {"one","two","three","four","five","six","seven","eight","nine","ten","eleven","twelve","thirteen","fourteen","fifteen","sixteen","seventeen","eighteen","nineteen","twenty"},
     {"un","deux","trois","quatre","cinq","six","sept","huit","neuf","dix","onze","douze","treize","quatorze","quinze","seize","dix-sept","dix-huit","dix-neuf","vingt"},
     {"eins","zwei","drei","vier","f?nf","sechs","sieben","acht","neun","zehn","elf","zw?lf","dreizehn","vierzehn","f?nfzehn","sechzehn","siebzehn","achtzehn","neunzehn ","zwanzig"}
  };
 

Для небольших проектов можно использовать следующую архитектуру

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
string ToolTip(int f_ID)
  {
   string _Hint="";
  
   switch(ex_LangID) //переменная-идентификатор языка терминала
     {
       case EN:
         default:
           {
            switch(f_ID)
              {
               //---Кнопки управления окном
              
               case 0:  _Hint="Close, "; break;
               case 1:  _Hint="Minimize, "; break;
               case 2:  _Hint="Maximize, "; break;
              
                ...

               default: _Hint=""; break;
              }
           }
         break;

      case DE:
        {
         switch(f_ID)
           {
            //---Кнопки управления окном
            case 0:  _Hint="Schließen, "; break;
            case 1:  _Hint="Minimieren, "; break;
            case 2:  _Hint="Maximieren, "; break;
           
            ...

            default: _Hint=""; break;
           }
        }
      break;

      case RU:
        {
         switch(f_ID)
           {
            //---Кнопки управления окном
            case 0:  _Hint="Закрыть, "; break;
            case 1:  _Hint="Свернуть, "; break;
            case 2:  _Hint="Развернуть, "; break;
           
            ...
            
            default: _Hint=""; break;
           }
        }
      break;
     }
   return(_Hint);
  }
 
Karputov Vladimir:

Фразы должны быть и близко к друг другу и удобно правится. Вот, например, четыре языка и четыре набора фраз:

 Для каждого языка по двадцать фраз - и они уже вышли за экран. В общем я решил, что при наличии до 20 фраз лучше использовать конструкцию типа

но только во втором измерении будет двадцать элементов. Примерно так:

Поменять местами измерения, тогда в одной строке будет одно слово на разных языках. Добавления нового слова - увеличение первого измерения на 1, и добавление массива с одним и тем же словом на разных языках. Так логичней. Еще можно сделать функцию, чтобы не указывать язык каждый раз, а только id слова. Можно и  классом сделать.
 

Вот примерно так:

if (TerminalInfoString(TERMINAL_LANGUAGE)=="Russian") 
   lng=0;      //Russian
else lng=1;    //English

Print (fraza[0][lng]);



string fraza [][2]=
   {
      {"Цена изменилась. Пробуем ещё раз..","Price changed. Trying once again.."},
      {"Новые цены.  Пробуем ещё раз..","Requote. Trying once again.."},
      {"Нет цен. Ждём..","Off quotes. Waiting.."},
      {"Истек срок ожидания совершения сделки. Ждём..","Trade timeout. Waiting.."},
      {"Подсистема торговли занята. Пробуем ещё раз..","Trade context is busy. Trying once again.."},
      {"Брокер занят. Пробуем ещё раз..","Broker is busy. Trying once again.."},
      {"Неправильные стопы!","Invalid stops!"},
      {"Общая ошибка.","Common error."},
      {"Старая версия клиентского терминала.","Old version of the client terminal."},
      {"Счет заблокирован.","Account disabled."},
      {"Торговля запрещена.","Trade is disabled."},
      {"Проверьте в настройках терминала разрешение на автоматическую торговлю!","Check if automated trading is allowed in the terminal settings!"},
      {"Автоматическая торговля запрещена на стороне торгового сервера","Automated trading is forbidden at the trade server side"},
      {"Торговля запрещена!","Trading is forbidden!"},
      {"Торговля на символе ","Trading on the symbol "},
      {" запрещена!"," is forbidden!"},
      {"Принудительное завершение работы эксперта","Forced shutdown"},
      {"Поток торговых операций занят. Ждём.","Trading is occupied. Wait."}
   };