Литмир - Электронная Библиотека
A
A

Переходя к созданию переводов, первым шагом является извлечение переводимых строк. Это осуществляется программой

xgettext
:

$ <b>xgettext --keyword=_ --keyword=N_ \</b>

&gt; <b>--default-domain=echodate ch13-echodate.с</b>

Опции

--keyword
сообщает
xgettext
, что нужно искать макросы
_()
и
N_()
. Программа уже знает, как извлекать строки из
gettext()
и ее вариантов, а также из
gettext_noop()
.

Вывод

xgettext
называется переносимым объектным файлом. Имя файла по умолчанию
messages.ро
, что соответствует текстовому домену по умолчанию
&quot;messages&quot;
. Опция
--default-domain
обозначает текстовый домен для использования в имени выходного файла. В данном случае, файл назван
echodate.ро
. Вот его содержание:

# SOME DESCRIPTIVE TITLE. /* Шаблон, нужно отредактировать */

# Copyright (С) YEAR THE PACKAGE'S COPYRIGHT HOLDER

# This file is distributed under the same license as the PACKAGE package.

# FIRST AUTHOR &lt;EMAIL@ADDRESS&gt;, YEAR.

#

#, fuzzy

msgid &quot;&quot; /* Подробная информация */

msgstr &quot;&quot; /* Заполняет каждый переводчик */

&quot;Project-Id-Version: PACKAGE VERSION\n&quot;

&quot;Report-Msgid-Bugs-To: \n&quot;

&quot;POT-Creation-Date: 2003-07-14 18:46-0700\n&quot;

&quot;PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n&quot;

&quot;Last-Translator: FULL NAME &lt;EMAIL@ADDRESS&gt;\n&quot;

&quot;Language-Team: LANGUAGE &lt;[email protected]&gt;\n&quot;

&quot;MIME-Version: 1.0\n&quot;

&quot;Content-Type: text/plain; charset=CHARSET\n&quot;

&quot;Content-Transfer-Encoding: 8bit\n&quot;

#: ch13-echodate.c:19 /* Местоположение сообщения */

msgid &quot;Enter a Date/time as YYYY/MM/DD HH:MM:SS : &quot; /* Оригинальное

                                                       сообщение */

msgstr &quot;&quot; /* Здесь перевод */

#: ch13-echodate.с:32 /* To же самое для каждого сообщения */

#, с-format

msgid &quot;Got: %s&quot;

msgstr &quot;&quot;

Этот первоначальный файл используется повторно для каждого перевода. Таким образом, это шаблон для переводов, и по соглашению, для отображения этого факта он должен быть переименован с расширением

.pot
(portable object template — переносимый объектный шаблон):

$ <b>mv echodate.ро echodate.pot</b>

He владея свободно несколькими языками, мы решили перевести сообщения на свинский латинский. Следующим шагом является создание перевода. Это осуществляется копированием файла шаблона и добавлением к новой копии перевода:

$ <b>cp echodate.pot piglat.po</b>

$ <b>vi piglat.po</b> /* Добавить переводы, используя любимый редактор */

Имя по соглашению должно быть

<i>язык</i>.po
, где
<i>язык</i>
является стандартным международным сокращением из двух или трех букв для обозначения языка. Иногда используется форма
<i>язык_страна</i>.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 &lt;[email protected]&gt; 2004

#

#, fuzzy

msgid &quot;&quot;

msgstr &quot;&quot;

&quot;Project-Id-Version: echodate 1.0\n&quot;

&quot;Report-Msgid-Bugs-To: [email protected]\n&quot;

&quot;POT-Creation-Date: 2003-07-14 18:46-0700\n&quot;

&quot;PO-Revision-Date: 2003-07-14 19:00+8\n&quot;

&quot;Last-Translator: Arnold Robbins &lt;[email protected]&gt;\n&quot;

&quot;Language-Team: Pig Latin &lt;[email protected]&gt;\n&quot;

&quot;MIME-Version: 1.0\n&quot;

&quot;Content-Type: text/plain; charset=ASCII\n&quot;

&quot;Content-Transfer-Encoding: 8bit\n&quot;

#: ch13-echodate.с:19

msgid &quot;Enter a Date/time as YYYY/MM/DD HH:MM:SS : &quot;

msgstr &quot;Enteray A Ateday/imetay asay YYYY/MM/DD HH:MM:SS : &quot;

#: ch13-echodate.c:32

#, c-format

msgid &quot;Got: %s&quot;

msgstr &quot;Otgay: %s&quot;

Хотя можно было бы произвести линейный поиск в переносимом объектном файле, такой поиск был бы медленным. Например, в

gawk
имеется примерно 350 отдельных сообщений, а в GNU Coreutils — свыше 670. Линейный поиск в файле с сотнями сообщений был бы заметно медленным. Поэтому GNU
gettext
использует для быстрого поиска сообщений двоичный формат. Сравнение осуществляет
msgfmt
, выдавая объектный файл сообщений:

вернуться

147

Pig — свинья, поросенок (англ.) — Примеч. перев.

202
{"b":"576259","o":1}