Если вам надо узнать именно текстовое название используемого языка, то можно воспользоваться такими функциями
X++:
{
DLL dll = new DLL("user32");
DLL kernel = new DLL("KERNEL32");
DLLFunction GetKeyboardLayout = new dllFunction(dll, "GetKeyboardLayout");
DLLFunction GetLocaleInfoSize0 = new dllFunction(kernel, "GetLocaleInfoA");
DLLFunction GetLocaleInfo = new dllFunction(kernel, "GetLocaleInfoA");
int locale;
Binary buf;
int size;
#define.LOCALE_SYSTEM_DEFAULT(0x400)
#define.LOCALE_SLANGUAGE (0x00000002)
#define.LOCALE_SENGLANGUAGE (0x00001001)
#define.LOCALE_SABBREVLANGNAME (0x00000003)
#define.LOCALE_SISO639LANGNAME (0x00000059)
;
GetKeyboardLayout.arg(ExtTypes::DWORD);
GetKeyboardLayout.returns(ExtTypes::DWORD);
locale = GetKeyboardLayout.call(0);
GetLocaleInfoSize0.arg(ExtTypes::DWord, ExtTypes::DWord, ExtTypes::DWord, ExtTypes::DWord);
GetLocaleInfoSize0.returns(ExtTypes::DWord);
GetLocaleInfo.arg(ExtTypes::DWord, ExtTypes::DWord, ExtTypes::Pointer, ExtTypes::DWord);
GetLocaleInfo.returns(ExtTypes::DWord);
size = GetLocaleInfoSize0.call(locale & 0xffff, #LOCALE_SISO639LANGNAME, 0, 0);
if (size)
{
buf = new Binary(size);
GetLocaleInfo.call(locale & 0xffff, #LOCALE_SISO639LANGNAME, buf, size);
info(buf.string(0));
}
else
info(WinApi::formatMessage(WinApi::getLastError()));
}
Использование констант.
LOCALE_SLANGUAGE - возвращает локализованное название языка
LOCALE_SENGLANGUAGE - возвращает английское название языка
LOCALE_SABBREVLANGNAME - возвращает аббревиатуру языка в виде ENU, RUS и т.д.
LOCALE_SISO639LANGNAME - возвращает аббревиатуру языка по стандарту ISO639 в виде en, ru и т.д.
Так же, если использовать константу GetLocaleInfo.call(#LOCALE_SYSTEM_DEFAULT...) то получим язык, используемый в системе по умолчанию