Интернационализация. Концепция локального контекста

   
На этом шаге мы рассмотрим концепцию локального контекста.

   
Распространенный подход к интернационализации основан на использовании специальных сред, называемых локальными контекстами (locale) и
инкапсулирующих национальные или культурные стандарты. Именно этот подход используется в языке С. Таким образом, в отношении интернационализации
локальный контекст представляет собой набор параметров и функций, обеспечивающих поддержку национальных или культурных стандартов. В соответствии с
конвенциями Х/Open (POSIX и Х/Open - стандартные спецификации интерфейсов операционных систем) локальный контекст используется
переменной окружения с именем LANG. В зависимости от локального контекста выбираются разные форматы вещественных чисел, дат, денежных сумм и т. д.

   
Обычно локальный контекст определяется строкой в формате

язык[_зона[.код]]

   
Здесь язык - обозначение языка (например, английский или немецкий), а зона - страна, географический регион или культура, в которой
используется этот язык. В частности, этот квалификатор позволяет поддерживать национальные стандарты даже в том случае, если на одном языке говорят в разных
странах. Квалификатор код определяет кодировку символов. Он важен, прежде всего, для азиатских стран, где один набор символов может существовать
в нескольких кодировках.

   
В таблице 1 приведена подборка типичных определений локальных контекстов. Однако следует помнить, что эти строки еще не стандартизированы (так, первый символ
языка может записываться в верхнем регистре). Некоторые реализации отходят от представленного формата; например, английский локальный контекст в них обозначается
строкой english. В конечном счете поддержка тех или иных локальных контекстов системой зависит от реализации.

Таблица 1. Примеры имен локальных контекстов

ИмяОписание
СИспользуется по умолчанию: соглашения стандарта ANSI-C (английский, 7-разрядная кодировка)
de_DEНемецкий язык (Германия)
de_DE.88591 Немецкий язык (Германия) с кодировкой ISO Latin-1
de_ATНемецкий язык (Австрия)
de_CHНемецкий язык (Швейцария)
en_USАнглийский язык (США)
en_GBАнглийский язык (Великобритания)
en_AUАнглийский язык (Австралия)
en_CAАнглийский язык (Канада)
fr_FRФранцузский язык (Франция)
fr_CHФранцузский язык (Швейцария)
fr_CAФранцузский язык (Канада)
ja_JP.jisЯпонский язык (Япония) с кодировкой JIS (Japanese Industrial Standard)
ja_JP.sjisЯпонский ЯЗЫК (Япония) с кодировкой Shift IIS
ja_JP.ujisЯпонский язык (Япония) с кодировкой UNIXized JIS
ja_JP.EUCЯпонский язык (Япония) с кодировкой EUC (Extended Unix Code)
ko_krКорейский язык (Корея)
zh_CNКитайский язык (Китай)
zh_TWКитайский язык (Тайвань)
lt_LN.bit7ISO Latin (7-разрядная кодировка)
lt_LN.bit8ISO Latin (8-разрядная кодировка)
POSIXСоглашения стандарта POSIX: английский, 7-разрядная кодировка

   
Несмотря на обилие имен локальных контекстов, у программ обычно не возникает особых проблем с нестандартными именами! Дело в том, что информация локального
контекста в той или иной форме предоставляется пользователем. Как правило, программа просто читает информацию из переменных окружения или базы данных и
определяет, с какими локальными контекстами она должна работать. Таким образом, хлопоты с определением правильных имен контекстов возлагаются на пользователя.
Только если программа всегда использует конкретный локальный контекст, имя этого контекста жестко кодируется в программе. Обычно в таких случаях достаточно
локального контекста С, который заведомо поддерживается всеми реализациями под именем С.

   
В следующих шагах мы покажем, как работать с разными локальными контекстами в программе на C++. Кроме того, опишем фацеты локальных контекстов,
позволяющие задействовать конкретные варианты форматирования.

   
В языке С предусмотрен также механизм применения кодировок, содержащих более 256 символов. Этот механизм основан на использовании символов
wchar_t - синонима для одного из целочисленных типов с языковой поддержкой констант и строковых литералов в расширенной кодировке. В остальном же
поддерживаются только функции преобразования между расширенной и обычной кодировками. Этот подход также был реализован в C++ с типом символов
wchar_t, который является вполне самостоятельным типом (в отличие от языка С). По уровню библиотечной поддержки C++ превосходит
С - практически все возможности типа char доступны для wchar_t (и любого другого типа, который может использоваться в качестве типа символов).

   
На следующем шаге мы рассмотрим использование локальных контекстов.



Вы можете оставить комментарий, или Трекбэк с вашего сайта.

Оставить комментарий