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

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

   
Распространенный подход к интернационализации основан на использовании специальных сред, называемых локальными контекстами (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.bit7 ISO Latin (7-разрядная кодировка)
lt_LN.bit8 ISO Latin (8-разрядная кодировка)
POSIX Соглашения стандарта POSIX: английский, 7-разрядная кодировка

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

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

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

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



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

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