Категории
Самые читаемые
onlinekniga.com » Компьютеры и Интернет » Интернет » Linux программирование в примерах - Роббинс Арнольд

Linux программирование в примерах - Роббинс Арнольд

Читать онлайн Linux программирование в примерах - Роббинс Арнольд

Шрифт:

-
+

Интервал:

-
+

Закладка:

Сделать
1 ... 198 199 200 201 202 203 204 205 206 ... 253
Перейти на страницу:

Переходя к созданию переводов, первым шагом является извлечение переводимых строк. Это осуществляется программой 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 protected]&gt;, YEAR.

#

#, fuzzy

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

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

&quot;Project-Id-Version: PACKAGE VERSIONn&quot;

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

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

&quot;PO-Revision-Date: YEAR-MO-DA HO:MI+ZONEn&quot;

&quot;Last-Translator: FULL NAME &lt;[email protected]&gt;n&quot;

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

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

&quot;Content-Type: text/plain; charset=CHARSETn&quot;

&quot;Content-Transfer-Encoding: 8bitn&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.0n&quot;

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

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

&quot;PO-Revision-Date: 2003-07-14 19:00+8n&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.0n&quot;

&quot;Content-Type: text/plain; charset=ASCIIn&quot;

&quot;Content-Transfer-Encoding: 8bitn&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, выдавая объектный файл сообщений:

1 ... 198 199 200 201 202 203 204 205 206 ... 253
Перейти на страницу:
На этой странице вы можете бесплатно читать книгу Linux программирование в примерах - Роббинс Арнольд.
Комментарии