Чтение онлайн

на главную - закладки

Жанры

Linux программирование в примерах
Шрифт:

#include <locale.h>

#define ENABLE_NLS 1

#include "gettext.h"

#define _(msgid) gettext(msgid)

#define N_(msgid) msgid

int main (void) {

 struct tm tm;

 time_t then;

 setlocale(LC_ALL, "");

 bindtextdomain("echodate", ".");

 textdomain("echodate");

 printf("%s", _("Enter a Date/time as YYYY/MM/DD HH:MM:SS : "));

 scanf("%d/%d/%d %d:%d:%d",

&tm.tm_year, &tm.tm_mon, &tm.tm_mday,

&tm.tm_hour, &tm.tm_min, &tm.tm_sec);

 /*
Проверка ошибок для краткости опущена. */

 tm.tm_year -= 1900;

 tm.tm_mon -= 1;

 tm.tm_isdst = -1; /* О летнем времени ничего не известно */

 then = mktime(&tm);

 printf(_("Got: %s"), ctime(&then));

 exit(0);

}

Мы намеренно использовали

"gettext.h"
, а не
<gettext.h>
. Если наше приложение поставляется с отдельной копией библиотеки
gettext
, тогда
"gettext.h"
найдет ее, избежав использования системной копии. С другой стороны, если имеется лишь системная копия, она будет найдена, если локальной копии нет. Общеизвестно, что ситуация усложнена фактом наличия на системах Solaris библиотеки
gettext
, которая не имеет всех возможностей версии GNU.

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

xgettext
:

$ xgettext --keyword=_ --keyword=N_ \

> – -default-domain=echodate ch13-echodate.с

Опции

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

Вывод

xgettext
называется переносимым объектным файлом. Имя файла по умолчанию
messages.ро
, что соответствует текстовому домену по умолчанию
"messages"
. Опция
– -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 <EMAIL@ADDRESS>, YEAR.

#

#, fuzzy

msgid "" /* Подробная информация */

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

"Project-Id-Version: PACKAGE VERSION\n"

"Report-Msgid-Bugs-To: \n"

"POT-Creation-Date: 2003-07-14 18:46-0700\n"

"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"

"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"

"Language-Team: LANGUAGE <LL@li.org>\n"

"MIME-Version: 1.0\n"

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

"Content-Transfer-Encoding: 8bit\n"

#: 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
(portable object template — переносимый объектный шаблон):

$ mv echodate.ро echodate.pot

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

$ cp echodate.pot piglat.po

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

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

язык.po
, где
язык
является стандартным международным сокращением из двух или трех букв для обозначения языка. Иногда используется форма
язык_страна.po
: например,
pt_BR.po
для португальского в Бразилии. Поскольку свинский латинский не является настоящим языком, мы назвали файл
piglat.ро
. [147] Вот содержание после добавления перевода:

147

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

# echodate translations into pig Latin

# Copyright (C) 2004 Prentice-Hall

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

# Arnold Robbins <arnold@example.com> 2004

#

#, fuzzy

msgid ""

msgstr ""

"Project-Id-Version: echodate 1.0\n"

"Report-Msgid-Bugs-To: arnold@example.com\n"

Поделиться:
Популярные книги

Я еще не царь

Дрейк Сириус
25. Дорогой барон!
Фантастика:
юмористическое фэнтези
аниме
попаданцы
5.00
рейтинг книги
Я еще не царь

Путешествие. Дневник. Статьи

Кюхельбекер Вильгельм Карлович ""
243. Литературные памятники
Старинная литература:
прочая старинная литература
5.00
рейтинг книги
Путешествие. Дневник. Статьи

Газлайтер. Том 6

Володин Григорий Григорьевич
6. История Телепата
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Газлайтер. Том 6

Дважды одаренный. Том IV

Тарс Элиан
4. Дважды одаренный
Фантастика:
городское фэнтези
альтернативная история
аниме
7.29
рейтинг книги
Дважды одаренный. Том IV

Революционер

ReNaR_fox
Фантастика:
героическая фантастика
постапокалипсис
5.00
рейтинг книги
Революционер

Звездный патент. Тетралогия

Градинар Дмитрий Степанович
Фантастика:
боевая фантастика
7.00
рейтинг книги
Звездный патент. Тетралогия

Притчи человечества

Лавский Виктор Владимирович
Религия и эзотерика:
религия
5.00
рейтинг книги
Притчи человечества

Ангарский Сокол

Хван Дмитрий Иванович
2. Зерно жизни
Приключения:
исторические приключения
8.53
рейтинг книги
Ангарский Сокол

В лапах зверя

Зайцева Мария
1. Звериные повадки Симоновых
Любовные романы:
остросюжетные любовные романы
эро литература
5.00
рейтинг книги
В лапах зверя

Молчун-Неучтённый фактор. Компиляция. Книги 1-22

Усманов Хайдарали
Собрание сочинений
Фантастика:
фэнтези
боевая фантастика
космическая фантастика
попаданцы
5.00
рейтинг книги
Молчун-Неучтённый фактор. Компиляция. Книги 1-22

Чёрная Вдова, или Королева Смерти

АПОЛИЯ
Любовные романы:
любовно-фантастические романы
love action
5.00
рейтинг книги
Чёрная Вдова, или Королева Смерти

Точка Бифуркации VII

Смит Дейлор
7. ТБ
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Точка Бифуркации VII

Путь "Чёрной молнии"

Теущаков Александр Александрович
1. Путь "Чёрной молнии"
Детективы:
криминальные детективы
исторические детективы
боевики
7.50
рейтинг книги
Путь Чёрной молнии

Dolgin.indb

Маматов Алексей Сергеевич
Старинная литература:
прочая старинная литература
5.00
рейтинг книги
Dolgin.indb