Возможно ли автоматически определить языковый файл используемый в терминале?

 
Вопрос в теме, должна же настройка языка терминала где-то хранится, покапал файл terminal.ini, но не нашел нужной строчки.
Разработчики и пользователи MT4, подскажите если кто-то знает как определить используемый язык в терминале.
 
HKCU/Software/MetaQuotes Software/MetaTrader4/Settings/Language.
Один для всех терминалов.
 
Как вариант просто читать заголовок терминала и смотреть каким языком написано "Демо счет", "Реальный счет" или "Конкурсный счет" ... точно не знаю как там пишется...
тип счета видно только если есть подключение к счету...
 
TheXpert >>:
HKCU/Software/MetaQuotes Software/MetaTrader4/Settings/Language.
Один для всех терминалов.

Спасибо.

Как прочитать данную строку?

Судя по всему WinAPI, помню ветка была, но поиск опять приказал долго жить.

Ктньте ссылку где разбирали как писать и читать инфу из реестра.

 
HIDDEN >>:

Спасибо.

Не за что.

Как прочитать данную строку?

Судя по всему WinAPI, помню ветка была, но поиск опять приказал долго жить.

Ктньте ссылку где разбирали как писать и читать инфу из реестра.

Увы, не видел такой.

А вообще можно начать отсюда

____

Насколько я окинул мимолетным взглядом, писать дллку не надо, можно обойтись одной системной и кодом на MQL.

 
HIDDEN >>:

...Судя по всему WinAPI, помню ветка была, но поиск опять приказал долго жить.

Пользуемся пока гуглом. WinAPI

 
Для истории.

#import "advapi32.dll"
    int RegOpenKeyA(int hkey, string lpSubKey, int phkResult[]);
    int RegCloseKey(int hkey);
    int RegQueryValueExA(int hkey, string lpValueName, int lpReserved, int lpType[], string lpData, int lpcbData[]);
    int RegSetValueExA(int hkey, string lpValueName, int Reserved, int dwType, string lpData, int cbData);
 
int start()
{
  string Res = GetRegString(0x80000001, "Software\\MetaQuotes Software\\MetaTrader 4\\Settings", "Language");
    
  Print(Res); MessageBox(Res);
}
 
string GetRegString(int HomeKey, string KeyName, string ValueName) 
{
  int hkey[1];       //Handle раздела реестра
  string sData;      //переменная для хранения значения
  int lres;          //Результат работы API функций
  int lDataType[1];  //Тип возвращаемого значения
  int lDlen[1];      //переменная для хранения длины строки
  int p;             //переменная для подрезки последних пустых строк 
  lres = RegOpenKeyA(HomeKey, KeyName, hkey); // Открываем Раздел
  
  Print("RegOpenKeyA ret code="+lres); 

  if (lres!=0) return(""); //Если вернулся не ноль - ошибка, выходим
  sData = "                                                                                                                       ";
  lDlen[0] = StringLen(sData);
  lres = RegQueryValueExA(hkey[0], ValueName, 0, lDataType, sData, lDlen); //Читаем значение
  
  Print("RegQueryValueExA ret code="+lres+"  Value="+sData); 
  
  if (lres!=0) return(""); //Если вернулся не ноль - ошибка, выходим
 
  if (lDataType[0]==1 || lDataType[0]==2) return(StringSubstr(sData,0,lDlen[0]-1)); //  REG_SZ, REG_EXPAND_SZ - Unicode nul terminated string
  else if (lDataType[0]==7) // REG_MULTI_SZ - Multiple Unicode Strings
  {    
    for(p=lDlen[0];0<p;p--) if(StringGetChar(sData,p)!=0) break; 
    sData = StringSubstr(sData,0,p);
    for(p=StringLen(sData);0<p;p--) if(StringGetChar(sData,p)==0) StringSetChar(sData,p,10); //заменим нули на символы переноса строки            
    return(sData);
  }
  else return(""); //остальные типы данных не преобразуются в строку :(
  lres = RegCloseKey(hkey[0]);
}

Код взят от сюда и немного подредакторован. Всем спасибо.
 
Выяснилось следующее:
1. Если терминал проинсталлирован на чистую винду, то в разделе [HKEY_CURRENT_USER\Software\MetaQuotes Software\MetaTrader 4\Settings] параметра с языком нет.
2. если принудительно поставить язык терминала (напимер English) то параметр появляется в реестре. Если загрузить терминал, то он будет на языке в соответствии записи в реестре, но если запись удалить и перезагрузить терминал, то язык будет определен по локали операционки.

Применение кода выложенного выше будет рботать 50/50 (либо работает либо нет)

Есть идеи как обойти данный ньюанс без ручного вмешательства в настройки терминала?

Еще бы хотелось услышать от разработчиков каким способом определяется язык, если параметра в реестре нет.
 
Определяется по локали операционки
 
Где хранится локаль операционки?
 

можно так :

var lng = navigator.userLanguage;
:)
Причина обращения: