Интернационализация (общие сведения)

   
На этом шаге мы рассмотрим общие вопросы, связанные с интернационализацией.

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

   
Стандартная библиотека C++ предоставляет общие средства поддержки национальных стандартов без привязки к конкретным системам и
правилам. Например, строки не ограничиваются конкретным типом символов, чтобы обеспечить поддержку 16-разрядных азиатских кодировок символов.
При интернационализации программ должны учитываться следующие обстоятельства.

  • Разные кодировки символов обладают разными свойствами. Для работы с ними необходимы гибкие решения практических вопросов, например,
    что считать буквой или, еще хуже, какой тип должен использоваться для представления символов. Тип char не подходит для кодировок,
    содержащих более 256 символов.
  • Пользователь рассчитывает, что применяемая им программа соответствует национальным и культурным стандартам (например, при
    форматировании денежных величин, чисел и логических значений).

   
В обоих случаях стандартная библиотека C++ предоставляет соответствующие средства.

   
Основной механизм интернационализации основан на использовании объекта локальною контекста. Локальный контекст (locale)
отражает расширяемый набор правил, адаптируемых для конкретных национальных стандартов. Локальные контексты уже применялись в языке С.
В стандарте C++ этот механизм был обобщен и стал более гибким. Механизм локальных контекстов C++ может использоваться для
выполнения любых настроек в зависимости от рабочей среды или предпочтений пользователя. Например, его можно расширить так, чтобы он
учитывал единицы измерения, часовые пояса, стандартный размер бумаги и т. д.

   
Многие механизмы интернационализации практически не требуют дополнительной работы со стороны программиста. Например, в потоковом
механизме ввода-вывода C++ числовые данные форматируются по правилам локального контекста. Программисту остается лишь
позаботиться о том, чтобы классы потоков данных для ввода-вывода учитывали предпочтения пользователя.

   
Наряду с автоматическим использованием программист может напрямую обращаться к объектам локального контекста для форматирования,
классификации символов и т. д. Некоторые средства интернационализации, поддерживаемые стандартной библиотекой C++, не требуются
самой библиотеке - программисты должны вызывать эти функции в своих программах. Например, в стандартной библиотеке C++ не
определены потоковые функции для форматирования времени, даты или денежных величин. Чтобы выполнить такое форматирование, необходимо
вызвать соответствующую функцию (например, из пользовательского потокового оператора для вывода объектов денежных величин).

   
Интернационализация строк и потоков данных основана на концепции трактовок символов. Трактовки определяют базовые свойства
и операции, зависящие от кодировки (такие, как признак "конца файла" или функции сравнения, присваивания и копирования строк).

   
Классы интернационализации были включены в стандарт относительно поздно. Хотя общий механизм чрезвычайно гибок, он нуждается в некоторой
доработке. Например, функции контекстного сравнения строк (то есть сравнения строк с учетом правил локального контекста) используют только
итераторы типа const charT*, где charT* - некоторый тип символов. Хотя с очень большой вероятностью в классе
basic_string<charT> задействуется именно этот тип итератора, это вовсе не гарантировано. Следовательно, не гарантировано и то, что
строковые итераторы могут передаваться в аргументах функций контекстного сравнения строк. С другой стороны, результат вызова функции data()
класса basic_string может передаваться функциям контекстного сравнения.

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



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

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