Интернационализация сообщений

Интернационализация сообщений [Вперед] [Вверх] [Назад] [Содержание]
Дальше: Простой пример Вверх: Начало Назад: Сравнение символьных строк

Интернационализация сообщений

Теперь опишем процесс, позволяющий создавать программы, допускающие локализацию. Прежде всего надо убедиться, что на вашей машине установлен пакет gettext -- в него входят все необходимые прикладные программы и набор фунцкий языка C, реализующих механизмы интернационализации. Также убедитесь, что версия этого пакета -- 0.10.35 или новее. Этот пакет, как правило, входит в стандартную поставку всех наиболее распространенных версий ОС Linux. Кроме того, соответствующие фунцкии для удобства использования (чтобы не возиться с дополнительными маленькими библиотеками) входят в библиотеку языка C -- glibc.

Итак, как уже было сказано, все данные, относящиеся к локализации, вынесены из исходного кода. Следовательно, грамотно написанная программа при желании пользователя установить либо изменить locale должна проделывать приблизительно следующие действия:

  • узнать о желании пользователя изменить локализацию, предупредить пользователя о том, какие произойдут изменения;
  • получить информацию о том, где находятся данные, описывающие локализацию;
  • проверить корректность этих данных;
  • произвести собственно локализацию.

Сначала опишем представление данных, описывающих локализацию. Традиционная программа на C часто содержит довольно большое число строковых констант (например, в случае компилятора это могут быть тексты сообщений об ошибках). Следовательно, файл, содержащий данные локализации, в самом общем виде должен содержать пары типа ключ-значение, где ключ -- некий обьект, позволяющий однозначно идентифицировать строку, а значение -- ``перевод'' этой строки, т.е. ее представление на данном языке. Для содержания таких пар используется специальный формат -- так называемый PO (Portable Object (``переносимый (совместимый) обьект'' -- довольно странное все-таки название в переводе на русккий). Соответствующие файлы имеют расширение .po. После создания .po-файлов они компилируются в специальный формат для более быстрого поиска в них, называемый MO (Machine Object) (в этих файлах содержатся уже двоичные данные, поэтому при их использовании имеет значение, например, порядок байт в машинном слове, и в этом смысле они действительно являются машинно-зависимыми). Для каждой локализации создаются отдельные .po и, следовательно, .mo-файлы. После этого в исходные тексты программы включаются функции, инициирующие операции локализации, т.е. устанавливающие соответствие между программой с соответствующими .mo-файлами, а затем все строковые константы в исходном коде замещаются вызовами фунцкий, производящих в файлах локализации поиск по ключу.



 

Dmitry A. Antipov
1999-05-26