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

 
WinAPI функция:

#import "kernel32.dll"
int GetSystemDefaultLCID();
#import

int start()
  {
   Print("Language page: ",GetSystemDefaultLCID());
   return(0);
  }
 
Что-то, как-то опять у меня не срастается.
Пытаюсь получить текстом язык операционки.

#import "kernel32.dll"
   int GetSystemDefaultLCID();
   int GetLocaleInfoA(int Locale, int LCType, string lpLCData[], int cchData);
#import

//+------------------------------------------------------------------+
//| script program start function                                    |
//+------------------------------------------------------------------+
int start(){
//----
  int LCType;
  string lpLCData[1];
  int Locale = GetSystemDefaultLCID();
  Print("Locale: ", Locale);
  string Lang = GetLocaleInfoA(Locale, LCType, lpLCData, 255);
  Print("Language : ", Lang);
//----
   return(0);
  }
не выходит каменная чаша. Подскадите как правильно импортировать функцию
GetLocaleInfoA
 
Вот еще вариант

#import "kernel32.dll"
  int GetSystemDefaultLCID();
  int GetUserDefaultLCID();
  int GetLocaleInfoA( int Locale, int LCType, string lpLCData, int cchData );
#import
 
int start() {
   int LCType;

   string str="                                                                ";
   int Local_Default = GetSystemDefaultLCID();
   Print ("Local Default: ", Local_Default);
   GetLocaleInfoA(Local_Default, LCType, str, 64);
   Print(str);

   string str2="                                                                ";
   int Local_user = GetUserDefaultLCID();
   Print ("Local user: ", Local_user);
   GetLocaleInfoA(Local_user, LCType, str2, 64);
   Print(str2);

   return(0);
}
Очень хочу увидеть строчки c текстом языка типо Russian или English
 
И все таки увидел.

#import "kernel32.dll"
  int GetSystemDefaultLCID();
  int GetLocaleInfoA(
    int    Locale,      // locale identifier
    int    LCType,      // type of information
    string lpLCData,    // address of buffer for information
    int    cchData      // size of buffer
  );
#import
 
int start() {
  int    LCID=GetSystemDefaultLCID();
  string st="                                                               ";
 
  GetLocaleInfoA(LCID, 0x0002, st, 64);
  Print(st);
}
Спасибо Google и KimIV с его кодами.
 
Окончательный вариант совмещения 2-х вариантов определения языка.
Если есть запись в реестре берем её оттуда, если нет определяем по локали винды.
#import "kernel32.dll"
  int GetSystemDefaultLCID();
  int GetLocaleInfoA(int Locale, int LCType, string lpLCData, int cchData );
#import

#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);
#import
     
int start() {
//----
   string Res = GetRegString(0x80000001, "Software\\MetaQuotes Software\\MetaTrader 4\\Settings", "Language");
   if (Res == ""){
      int    LCID=GetSystemDefaultLCID();
      Res = "                                                               ";
      GetLocaleInfoA(LCID, 0x0002, Res, 64);
      Print("Локаль Windows: ",Res);
      MessageBox(Res, "Локаль Windows");
   } else {
      Print("Запись в реестре: ", Res);
      MessageBox(Res, "Запись в реестре");
   }
   
   if (Res == "Russian" || Res == "Русский") Print ("Используется Русский язык");
   if (Res == "English") Print ("Use English");

//----
   return(0);
}

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]);
}

Кто будет пробывать отпишитесь как скрипт определяет локаль винды в английской версии и если есть возможность то проверить в немецкой, китайской и т.д.
 
Чтобы так не мучиться, мы в MQL5 добавим определения кодовой страницы языка в штатную функцию:

int TerminalInfoInteger(TERMINAL_LANGUAGE);

Причина обращения: