|
|
|
|
#1 |
|
Участник
|
Если вам надо узнать именно текстовое название используемого языка, то можно воспользоваться такими функциями
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). | |
|
|
#2 |
|
Ищущий знания...
|
Цитата:
Сообщение от AndyD
Использование констант.
LOCALE_SLANGUAGE - возвращает локализованное название языка LOCALE_SENGLANGUAGE - возвращает английское название языка LOCALE_SABBREVLANGNAME - возвращает аббревиатуру языка в виде ENU, RUS и т.д. LOCALE_SISO639LANGNAME - возвращает аббревиатуру языка по стандарту ISO639 в виде en, ru и т.д. Так же, если использовать константу GetLocaleInfo.call(#LOCALE_SYSTEM_DEFAULT...) то получим язык, используемый в системе по умолчанию
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем |
|
|
|
| За это сообщение автора поблагодарили: AndyD (1). | |
|
|
#3 |
|
Участник
|
Да в тройке есть все, кроме LOCALE_SISO639LANGNAME
А вот в 2009-м этих констант нет
__________________
Axapta v.3.0 sp5 kr2 |
|
|
|
|
#4 |
|
Участник
|
А в 2009 можно и без них обойтись
, раскладку можно просто определить при помощи .Net APIX++: static void currentKeyBoardLayout(Args _args) { System.Windows.Forms.InputLanguage currentLanguage = System.Windows.Forms.InputLanguage::get_CurrentInputLanguage(); System.Globalization.CultureInfo cultInfo; ; cultInfo = currentLanguage.get_Culture(); info(cultInfo.get_TwoLetterISOLanguageName()); }
__________________
Sergey Nefedov |
|
|
|
| За это сообщение автора поблагодарили: Logger (1), rINT (1), lev (1), gl00mie (1), PavelX (1), GBH (1), player (1). | |
| Теги |
| законченный пример, программно, раскладка клавиатуры |
|
|
| Опции темы | Поиск в этой теме |
| Опции просмотра | |
|