![]() |
#12 |
Участник
|
Если вам надо узнать именно текстовое название используемого языка, то можно воспользоваться такими функциями
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...) то получим язык, используемый в системе по умолчанию
__________________
Axapta v.3.0 sp5 kr2 |
|
|
За это сообщение автора поблагодарили: Logger (1), zZ_TOP_Zz (1), GBH (1), samolalex (1). |
Теги |
законченный пример, программно, раскладка клавиатуры |
|
|