AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск Все разделы прочитаны

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 11.11.2010, 19:32   #1  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2499 (89) +++++++++
Регистрация: 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).
Старый 11.11.2010, 21:39   #2  
lev is offline
lev
Ищущий знания...
Аватар для lev
Oracle
MCBMSS
Axapta Retail User
 
1,723 / 491 (20) +++++++
Регистрация: 18.01.2005
Адрес: Москва
Цитата:
Сообщение от AndyD Посмотреть сообщение
Использование констант.
LOCALE_SLANGUAGE - возвращает локализованное название языка
LOCALE_SENGLANGUAGE - возвращает английское название языка
LOCALE_SABBREVLANGNAME - возвращает аббревиатуру языка в виде ENU, RUS и т.д.
LOCALE_SISO639LANGNAME - возвращает аббревиатуру языка по стандарту ISO639 в виде en, ru и т.д.

Так же, если использовать константу GetLocaleInfo.call(#LOCALE_SYSTEM_DEFAULT...) то получим язык, используемый в системе по умолчанию
если не ошибаюсь эти (и некоторые другие) константы есть в макросе #WinApi
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с)
С Уважением,
Елизаров Артем
За это сообщение автора поблагодарили: AndyD (1).
Старый 11.11.2010, 23:12   #3  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2499 (89) +++++++++
Регистрация: 20.08.2005
Цитата:
Сообщение от lev Посмотреть сообщение
если не ошибаюсь эти (и некоторые другие) константы есть в макросе #WinApi
Да в тройке есть все, кроме LOCALE_SISO639LANGNAME
А вот в 2009-м этих констант нет
__________________
Axapta v.3.0 sp5 kr2
Старый 12.11.2010, 06:04   #4  
SRF is offline
SRF
Участник
MCBMSS
Axapta Retail User
 
376 / 562 (19) +++++++
Регистрация: 08.08.2007
Записей в блоге: 1
А в 2009 можно и без них обойтись, раскладку можно просто определить при помощи .Net API
X++:
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).
Теги
законченный пример, программно, раскладка клавиатуры

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Отсюда вопрос - где эффективнее всего использовать данное сжатие ? OLAP системы ? OLTP системы ? Logger DAX: Администрирование 6 17.08.2009 20:44
Каков процент внедрений "стандартной" поставки системы Аксапта? coolibin DAX: Прочие вопросы 17 10.02.2009 12:45
Текущий пользователь и язык alpine DAX: Программирование 2 03.06.2003 15:42
Проблемы с производительностью системы MIkeFW DAX: Прочие вопросы 16 25.06.2002 20:29
Введение в Аксапту Роман Кошелев DAX: Прочие вопросы 0 18.12.2001 14:00
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 12:21.