13.4.4. Заключение
Возможно, вам никогда не придется иметь дело с различными наборами символов и их представлениями. С другой стороны, мир быстро становится «глобальным сообществом», и авторы программ не могут позволить себе быть ограниченными. Следовательно, стоит знать о проблемах интернационализации и наборов символов, а также способах их влияния на поведение вашей системы. По крайней мере, уже один из поставщиков дистрибутивов GNU/Linux устанавливает для систем в Соединенных Штатах локаль по умолчанию
en_US.UTF-813.5. Рекомендуемая литература
1. С, A Reference Manual, 5th edition, by Samuel P. Harbison III and Guy L. Steele, Jr., Prentice-Hall, Upper Saddle River, New Jersey, USA, 2002. ISBN: 0-13-089592-X.
Мы уже упоминали эту книгу раньше. Она дает точное и исчерпывающее описание развития и использования возможностей стандартной библиотеки С для работы с многобайтными и широкими символами. Это особенно ценно для современных систем, поддерживающих C99, поскольку библиотека была значительно усовершенствована для стандарта С 1999 г.
2. GNU gettext tools, by Ulrich Drepper, Jim Meyering, François Pinard, and Bruno Haible. Это руководство по GNU
gettextinfo gettextftp://ftp.gnu.org/gnu/gettext/13.6. Резюме
• Интернационализация и локализация программ подпадают под общее название поддержки родного языка. Широко распространенными сокращениями являются i18n, l10n и NLS. Центральным является понятие локали, которая позволяет настраивать набор символов, отображение даты, времени, денежных и числовых величин в соответствии с принятыми для данного языка и в данной стране нормами.
• Использование локали устанавливается с помощью функции
setlocale()• Сравнение строк с учетом локали осуществляется функцией
strcoll()strxfrm()strcmp()localeconv()nl_langinfo()strfmon()strftime()printf()• Обратной стороной получения относящейся к локали информации является вывод сообщений на местном языке. Модель
catgets()gettext• При использовании
gettext()gettext()textdomain()bindtextdomain()•
gettext()ngettext()printf()• На практике GNU программы используют для пометки переводимых строк в исходных файлах заголовочный файл
gettext.h_()N_()• GNU
gettext• Наконец, стоит быть в курсе проблем наборов символов и их представлений. Поставщики программного обеспечения не могут больше позволить себе предполагать, что их пользователи хотят работать лишь на одном языке.
Упражнения
1. Поддерживает ли ваша система локали? Если да, какая локаль используется по умолчанию?
2. Просмотрите справочную страницу locale(1), если она у вас есть. Сколько имеется локалей, если вы посчитаете их с помощью '
locale -a | wc -l3. Поэкспериментируйте с
ch13-strings.сch13-lconv.cch13-strfmon.сch13-quoteflag.cch13-times.c4. Возьмите одну из своих программ. Интернационализируйте ее с использованием GNU
gettextbindtextdomain()Глава 14
Расширенные интерфейсы
В данной главе описываются несколько расширенных API. Они сходны по своей природе с описанными ранее в книге или предоставляют дополнительные возможности. Некоторые из них трудно было свободно обсуждать, пока не были освещены предварительные темы.
Порядок представления здесь соответствует порядку глав в первой половине книги. В другом отношении темы не связаны друг с другом. Мы освещаем следующие вопросы: динамическое выделение выровненной памяти; блокировку файлов; ряд функций, работающих со значениями долей секунды; и более развитый набор функций для сохранения и получения произвольных значений данных. Если не указано противное, все API в данной главе включены в стандарт POSIX.
14.1. Выделение выровненной памяти:
posix_memalign()memalign()Для большинства задач отлично подходят стандартные процедуры выделения памяти —
malloc()realloc()