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

       

Определение отдельных национальных параметров


Теперь, когда мы научились устанавливать и определять идентификатор национальных параметров, пора перейти к самим национальным параметрам.

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

int GetLocaleInfo(

  LCID   Locale,   // идентификатор набора параметров

  LCTYPE LCType,   // тип информации

  LPTSTR lpLCData, // адрес буфера для информации

  int    cchData); // размер буфера для информации

Параметр Locale этой функции задает идентификатор национальных параметров, для которого нужно определить один из конкретных параметров.

Нужный национальный параметр задается параметром LCType функции GetLocaleInfo. Немного позже мы приведем сокращенный список допустимых значений для этого параметра.

Полученная информация будет записана в буфер, адрес которого задается параметром lpLCData, а размер - параметром cchData. Информация будет записана в буфер в виде текстовой строки.

Обычно буфер заказывается динамически, причем для определения требуемого размера буфера достаточно указать значение параметра lpLCData, равное NULL, - в этом случае функция GetLocaleInfo вернет нужный размер буфера в байтах.

В случае успешного выполнения функция GetLocaleInfo возвращает размер текстовой строки с информацией, записанной в буфер lpLCData. При ошибке возвращается нулевое значение.

Для типа информации LCType можно задавать очень много значений. Все допустимые значения описаны в документации SDK. Из-за ограниченного объема книги мы не имеем возможности все их перечислить, поэтому ограничимся только самыми интересными:

  • LOCALE_ILANGUAGE
  • Идентификатор национального языка (длиной не более 5 символов)

    • LOCALE_SLANGUAGE
    • Полное название национального языка

      • LOCALE_SENGLANGUAGE
      • Полное английское название языка

        • LOCALE_SABBREVLANGNAME
        • Сокращенное трехсимвольное название языка

          • LOCALE_SNATIVELANGNAME
          • Естественное названия языка

            • LOCALE_ICOUNTRY
            • Код страны (длиной не более 6 символов)

              • LOCALE_SCOUNTRY
              • Полное локализованное название страны

                • LOCALE_SENGCOUNTRY


                • Полное английское название страны

                  • LOCALE_SABBREVCTRYNAME


                  • Сокращенное название страны

                    • LOCALE_SNATIVECTRYNAME


                    • Естественное название страны

                      • LOCALE_IDEFAULTLANGUAGE


                      • Идентификатор основного языка, который используется в данной стране

                        • LOCALE_IDEFAULTCOUNTRY


                        • Основной код страны

                          • LOCALE_IDEFAULTCODEPAGE


                          • Номер кодовой страницы OEM

                            • LOCALE_IDEFAULTANSICODEPAGE


                            • Номер кодовой страницы ANSI

                              • LOCALE_SLIST


                              • Символ, который используется для разделения элементов списка

                                • LOCALE_IMEASURE


                                • Система измерений (0 - метрическая, 1 - американская)

                                  • LOCALE_SDECIMAL


                                  • Символ, который используется в качестве десятичного разделителя в числах

                                    • LOCALE_STHOUSAND


                                    • Символ, который используется в качестве разделителя групп цифр в многозначных числах

                                      • LOCALE_SDATE


                                      • Символ-разделитель в строке даты

                                        • LOCALE_STIME


                                        • Символ-разделитель в строке времени

                                          • LOCALE_IDATE


                                          • Порядок, в котором располагаются компоненты даты:

                                            0: Месяц-День-Год,

                                            1: День-Месяц-Год,

                                            2: Год-Месяц-День

                                            • LOCALE_SDAYNAME1


                                            • Естественное длинное название для понедельника

                                              • LOCALE_SDAYNAME2 - LOCALE_SDAYNAME7


                                              • Естественное длинное название для дней недели от вторника до воскресения

                                                • LOCALE_SABBREVDAYNAME1


                                                • Естественное сокращенное название для понедельника

                                                  • LOCALE_SABBREVDAYNAME2 - LOCALE_SABBREVDAYNAME7


                                                  • Естественное сокращенное название для дней недели от вторника до воскресения

                                                    • LOCALE_SMONTHNAME1


                                                    • Естественное длинное название для января

                                                      • LOCALE_SMONTHNAME2 - LOCALE_SMONTHNAME12


                                                      • Естественное длинное название для месяцев от февраля до декабря

                                                        Помимо перечисленных, предусмотрены многочисленные константы для определения формата отображения даты, времени и денежных единиц, положительных и отрицательных чисел и так далее.

                                                        В качестве примера использования функции GetLocaleInfo приведем следующий фрагмент кода, в котором мы определяем полное название национального языка для текущей задачи:

                                                        GetLocaleInfo(

                                                          GetThreadLocale(), LOCALE_SLANGUAGE, szBuf, 512);

                                                        Здесь полученное название языка будет записано в виде текстовой строки в буфер szBuf.


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