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

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

Жанры

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"

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

Эволюционер из трущоб. Том 9

Панарин Антон
9. Эволюционер из трущоб
Фантастика:
попаданцы
аниме
фэнтези
фантастика: прочее
5.00
рейтинг книги
Эволюционер из трущоб. Том 9

Егерь. Опасная Зона

Скиба Николай
2. Зверолов
Фантастика:
рпг
фэнтези
фантастика: прочее
попаданцы
7.17
рейтинг книги
Егерь. Опасная Зона

Книга гор (сборник)

Лукьяненко Сергей Васильевич
Фантастика:
социально-философская фантастика
героическая фантастика
6.12
рейтинг книги
Книга гор (сборник)

Пламенев. Книга IX

Карелин Сергей Витальевич
9. Пламенев
Фантастика:
аниме
уся
сказочная фантастика
фэнтези
фантастика: прочее
5.00
рейтинг книги
Пламенев. Книга IX

Натюрморт с воронами

Престон Дуглас
4. Пендергаст
Фантастика:
ужасы и мистика
9.37
рейтинг книги
Натюрморт с воронами

Геймер. Тетралогия

Андреева Юлия Игоревна
Фантастика:
альтернативная история
6.80
рейтинг книги
Геймер. Тетралогия

Миллион приключений (сборник)

Булычев Кир
15. Отцы-основатели - Русское пространство. Кир Булычев - Собрание сочинений
Фантастика:
научная фантастика
7.00
рейтинг книги
Миллион приключений (сборник)

Экспансия — II

Семенов Юлиан Семенович
11. Штирлиц
Детективы:
исторические детективы
7.78
рейтинг книги
Экспансия — II

Дело чести

Вебер Дэвид Марк
12. Хонор Харрингтон
Фантастика:
космическая фантастика
7.93
рейтинг книги
Дело чести

Генрик Сенкевич. Собрание сочинений. Том 6-7

Сенкевич Генрик
6. Собрание сочинений в девяти томах
Проза:
историческая проза
5.00
рейтинг книги
Генрик Сенкевич. Собрание сочинений. Том 6-7

12 великих комедий

Шекспир Уильям
Вожди Советского Союза
Проза:
классическая проза
6.25
рейтинг книги
12 великих комедий

Киберпространство

Ливадный Андрей Львович
43. Экспансия: История Галактики
Фантастика:
космическая фантастика
7.69
рейтинг книги
Киберпространство

Гарнизон

Николаев Игорь Игоревич
Фантастика:
боевая фантастика
космическая фантастика
6.40
рейтинг книги
Гарнизон

Серые сутки

Сай Ярослав
4. Медорфенов
Фантастика:
фэнтези
аниме
5.00
рейтинг книги
Серые сутки