Показать сообщение отдельно
Старый 11.11.2010, 19:32   #12  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2480 (88) +++++++++
Регистрация: 20.08.2005
Если вам надо узнать именно текстовое название используемого языка, то можно воспользоваться такими функциями
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).