Установка набора национальных параметров
Как мы только что сказали, в операционной системе 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 |
Язык, который используется операционной системой по умолчанию |
// Установка английского набора параметров
fRc = SetThreadLocale(MAKELCID(
MAKELANGID(LANG_ENGLISH, SUBLANG_NEUTRAL), SORT_DEFAULT));
// Установка русского набора параметров
fRc = SetThreadLocale(MAKELCID(
MAKELANGID(LANG_RUSSIAN, SUBLANG_NEUTRAL), SORT_DEFAULT));