Программирование для Windows NT (том 2)

       

Установка набора национальных параметров


Как мы только что сказали, в операционной системе Microsoft Windows NT для установки набора национальных параметров, используемых текущей задачей, эта задача должна вызвать функцию SetThreadLocale:

BOOL SetThreadLocale(

  LCID Locale); // идентификатор национального набора

Работа с функцией SetThreadLocale проста - вам достаточно передать ей нужный идентификатор в качестве параметра. При успехе функция возвратит значение TRUE, а при ошибке - FASLE. В последнем случае вы можете определить код ошибки с помощью функции GetLastError.

Как задавать идентификатор национального набора параметров?

Вы можете передать  функции SetThreadLocale либо одну из констант, либо значение, полученное от макрокоманды MAKELCID. Список констант приведен ниже.

Константа

Описание

LOCALE_SYSTEM_DEFAULT



Идентификатор, который используется операционной системой по умолчанию

LOCALE_USER_DEFAULT

Идентификатор, который используется по умолчанию для текущего пользователя, работающего в среде Microsoft Windows NT

   Макрокоманда MAKELCID позволяет составить идентификатор национального набора параметров LCID из двух значений: идентификатора национального языка и идентификатора метода сортировки. Ниже мы привели прототип этой макрокоманды и ее определение:

DWORD MAKELCID(

  WORD  wLanguageID, // идентификатор национального языка

  WORD  wSortID);    // идентификатор метода сортировки

#define MAKELCID(lgid, srtid) \

  ((DWORD)((((DWORD)((WORD)(srtid))) << 16) \

  | ((DWORD)((WORD)(lgid)))))

Что касается идентификатора сортировки, то здесь вы должны указывать значение SORT_DEFAULT. А для создания идентификатора национального языка вам придется воспользоваться еще одной макрокомандой с именем MAKELANGID:

WORD MAKELANGID(

  USHORT usPrimaryLanguage, // первичный идентификатор языка

  USHORT usSubLanguage);    // вторичный идентификатор языка

#define MAKELANGID(usPrimaryLanguage, usSubLanguage) \

  ((((WORD)( usSubLanguage)) << 10) \


  | (WORD)( usPrimaryLanguage))

Первичный идентификатор задает национальный язык, а вторичный - его диалект или разновидность.

Для первичного идентификатора вы можете указать одно из следующих значений:

  

Первичный идентификатор

Национальный язык

LANG_AFRIKAANS

Африканский

LANG_ALBANIAN

Албанский

LANG_ARABIC

Арабский

LANG_BASQUE

Баский

LANG_BULGARIAN

Болгарский

LANG_BYELORUSSIAN

Белорусский

LANG_CATALAN

Каталанский

LANG_CHINESE

Китайский

LANG_CROATIAN

Хорватский

LANG_CZECH

Чехословацкий

LANG_DANISH

Датский

LANG_DUTCH

Нидерландский

LANG_ENGLISH

Английский

LANG_ESTONIAN

Эстонский

LANG_FINNISH

Финнский

LANG_FRENCH

Французский

LANG_GERMAN

Немецкий

LANG_GREEK

Греческий

LANG_HEBREW

Еврейский

LANG_HUNGARIAN

Венгерский

LANG_ICELANDIC

Исландский

LANG_INDONESIAN

Индонезийский

LANG_ITALIAN

Итальянский

LANG_JAPANESE

Японский

LANG_KOREAN

Корейский

LANG_LATVIAN

Латвийский

LANG_LITHUANIAN

Литовский

LANG_NEUTRAL

Нейтральный

LANG_NORWEGIAN

Норвежский

LANG_POLISH

Польский

LANG_PORTUGUESE

Португальский

LANG_ROMANIAN

Румынский

LANG_RUSSIAN

Русский

LANG_SLOVAK

Словацкий

LANG_SLOVENIAN

Словенский

LANG_SORBIAN

Сербский

LANG_SPANISH

Испанский

LANG_SWEDISH

Шведский

LANG_THAI

Таиландский

LANG_TURKISH

Турецкий

LANG_UKRANIAN

Украинский

Ниже мы привели список допустимых вторичных идентификаторов:

Вторичный идентификатор

Диалект

SUBLANG_CHINESE_HONGKONG

Гонконгский диалект китайского

SUBLANG_CHINESE_SIMPLIFIED

Упрощенный диалект китайского

SUBLANG_CHINESE_SINGAPORE

Сингапурский диалект китайского

SUBLANG_CHINESE_TRADITIONAL

Традиционный китайский

SUBLANG_DEFAULT

Диалект, который используется по умолчанию

SUBLANG_DUTCH

Нидерландский

SUBLANG_DUTCH_BELGIAN

Бельгийский диалект нидерландского

SUBLANG_ENGLISH_AUS

Австрийский диалект английского

SUBLANG_ENGLISH_CAN

Канадский диалект английского

SUBLANG_ENGLISH_EIRE

Ирландский диалект английского

SUBLANG_ENGLISH_NZ

Новозеландский диалект английского

SUBLANG_ENGLISH_UK

Британский диалект английского

SUBLANG_ENGLISH_US

Американский диалект английского

SUBLANG_FRENCH

Французский

SUBLANG_FRENCH_BELGIAN

Бельгийский диалект французского

SUBLANG_FRENCH_CANADIAN

Канадский диалект французского

SUBLANG_FRENCH_SWISS

Шведский диалект французского

SUBLANG_GERMAN

Немецкий

SUBLANG_GERMAN_AUSTRIAN

Австрийский диалект немецкого

SUBLANG_GERMAN_SWISS

Швейцарский диалект немецкого

SUBLANG_ITALIAN

Итальянский

SUBLANG_ITALIAN_SWISS

Швейцарский диалект итальянского

SUBLANG_NEUTRAL

Нейтральный

SUBLANG_PORTUGUESE

Португальский

SUBLANG_PORTUGUESE_BRAZILIAN

Бразильский диалект португальского

SUBLANG_SPANISH

Испанский

SUBLANG_SPANISH_MEXICAN

Мексиканский диалект испанского

SUBLANG_SPANISH_MODERN

Современный испанский

SUBLANG_SYS_DEFAULT

Диалект, который используется операционной системой по умолчанию

<


Заметим, что хотя приложение может указывать любые из перечисленных выше идентификаторов национальных языков, функция SetThreadLocale сможет установить только те, что были выбраны при установке операционной системы Microsoft Windows NT.

И еще одно замечание.

Если в качестве первичного идентификатора языка указать константу LANG_NEUTRAL, то  комбинации с идентификаторами SUBLANG_NEUTRAL, SUBLANG_DEFAULT и SUBLANG_SYS_DEFAULT будут иметь специальное значение, как это показано ниже:

Вторичный идентификатор в комбинации с LANG_NEUTRAL

Национальный язык

SUBLANG_NEUTRAL

Нейтральный язык

SUBLANG_DEFAULT

Язык, который установлен по умолчанию для текущего пользователя, работающего с Microsoft Windows NT

SUBLANG_SYS_DEFAULT

Язык, который используется операционной системой по умолчанию

Ниже мы привели пример использования функции SetThreadLocale для установки английского и русского наборов национальных параметров:

// Установка английского набора параметров

fRc = SetThreadLocale(MAKELCID(

  MAKELANGID(LANG_ENGLISH, SUBLANG_NEUTRAL), SORT_DEFAULT));

// Установка русского набора параметров

fRc = SetThreadLocale(MAKELCID(

  MAKELANGID(LANG_RUSSIAN, SUBLANG_NEUTRAL), SORT_DEFAULT));


Содержание раздела