#: ch13-echodate.c:19 /* Местоположение сообщения */
msgid "Enter a Date/time as YYYY/MM/DD HH:MM:SS : " /* Оригинальное
сообщение */
msgstr "" /* Здесь перевод */
#: ch13-echodate.с:32 /* To же самое для каждого сообщения */
#, с-format
msgid "Got: %s"
msgstr ""
Этот первоначальный файл используется повторно для каждого перевода. Таким образом, это .pot
(
$ mv echodate.ро echodate.pot
He владея свободно несколькими языками, мы решили перевести сообщения на свинский латинский. Следующим шагом является создание перевода. Это осуществляется копированием файла шаблона и добавлением к новой копии перевода:
$ cp echodate.pot piglat.po
$ vi piglat.po /* Добавить переводы, используя любимый редактор */
Имя по соглашению должно быть
, где
является стандартным международным сокращением из двух или трех букв для обозначения языка. Иногда используется форма pt_BR.po
для португальского в Бразилии. Поскольку свинский латинский не является настоящим языком, мы назвали файл piglat.ро
.[147] Вот содержание после добавления перевода:
# echodate translations into pig Latin
# Copyright (C) 2004 Prentice-Hall
# This file is distributed under the same license as the echodate package.
# Arnold Robbins
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: echodate 1.0\n"
"Report-Msgid-Bugs-To: arnold@example.com\n"
"POT-Creation-Date: 2003-07-14 18:46-0700\n"
"PO-Revision-Date: 2003-07-14 19:00+8\n"
"Last-Translator: Arnold Robbins
"Language-Team: Pig Latin
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=ASCII\n"
"Content-Transfer-Encoding: 8bit\n"
#: ch13-echodate.с:19
msgid "Enter a Date/time as YYYY/MM/DD HH:MM:SS : "
msgstr "Enteray A Ateday/imetay asay YYYY/MM/DD HH:MM:SS : "
#: ch13-echodate.c:32
#, c-format
msgid "Got: %s"
msgstr "Otgay: %s"
Хотя можно было бы произвести линейный поиск в переносимом объектном файле, такой поиск был бы медленным. Например, в gawk
имеется примерно 350 отдельных сообщений, а в GNU Coreutils — свыше 670. Линейный поиск в файле с сотнями сообщений был бы заметно медленным. Поэтому GNU gettext
использует для быстрого поиска сообщений двоичный формат. Сравнение осуществляет msgfmt
, выдавая объектный файл сообщений:
$ msgfmt piglat.po -о piglat.mo
При сопровождении программы изменяются строки, используемые программой: добавляются новые, другие удаляются или изменяются. По крайней мере, может измениться положение строки в исходном файле. Таким образом, файлы переводов .ро
, вероятно, устареют. Программа msgmerge
объединяет старые файлы переводов с новым файлом .pot
. Затем результат может быть обновлен. Этот пример выполняет объединение и повторное компилирование:
$ msgmerge piglat.po echodate.pot -o piglat.new.po /* Объединить файлы */
$ mv piglat.new.po piglat.po /* Переименовать результат */
$ vi piglat.po /* Модернизировать перевод */
$ msgfmt piglat.po -o piglat.mo /* Восстановить файл .mo */