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

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

Жанры

Программирование на языке Ruby
Шрифт:

Отметим, что сообщения по умолчанию обязаны быть англоязычными (даже если родной язык программиста не английский). Нравится вам это или нет, но английский ближе всего к универсальному языку с точки зрения большинства переводчиков.

Я сказал, что нам пригодится программа

rake
. Создадим файл
Rakefile
(в каталоге
myapp
) для сопровождения справочников сообщений. Он будет выполнять две основные операции: обновлять РО-файлы и создавать МО-файлы.

require 'gettext/utils'

desc "Update pot/po files."

task :updatepo do

 GetText.update_pofiles("myapp", ["person.rb"], "myapp 1.0.0")

end

desc "Create mo-files"

task :makemo do

 GetText.create_mofiles

end

Здесь

мы воспользовались библиотекой
gettext/utils
, в которой имеются функции для работы со справочниками сообщения. Метод
update_pofiles
создает начальный файл
myapp/ро/myapp.pot
на основе исходного текста
person.rb
. При втором (и всех последующих) вызовах эта функция выполнит обновление, или слияние файла
myapp/po/myapp.pot
и всех файлов вида
myapp/po/#{lang}/myapp.ро
. Второй параметр — массив целевых файлов. Обычно он задается примерно так:

GetText.update_pofiles("myapp",

Dir.glob("{lib,bin}/**/*.{rb,rhtml}"),

 "myapp 1.0.0")

Вызов метода

GetText.create_mofiles
создает необходимые подкаталоги в каталоге
data/locale/
и генерирует МО-файлы из РО-файлов.

Итак, выполнив команду

rake updatepo
, мы создадим каталог
myapp/ро
, а в нем файл
myapp.pot
.

Теперь отредактируем заголовок файла

po/myapp.pot
. Он содержит описание приложения (название, имя автора, адрес электронной почты, условия лицензирования и т.д.).

# Пример приложения. (Осмысленное название)

# Copyright (С) 2006 Foo Bar (Автор приложения)

# Файл распространяется по лицензии XXX. (Лицензия)

#

# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. (Информация о переводчике)

#

#, fuzzy

msgid ""

msgstr ""

"Project-Id-Version: myapp 1.0.0\n" (ID и версия проекта)

#...

Что такое маркер

fuzzy
? Так отмечается тот факт, что какая-то часть не переведена или перевод вызывает сомнения. Все автоматически сгенерированные сообщения помечаются таким образом, чтобы человек знал, что их нужно проверить и изменить.

Файл

myapp.pot
нужно разослать переводчикам. (Конечно, вы можете перевести его и самостоятельно.)

Предположим, что вы переводите на японский язык. На машине установлена локаль

ja_jp.UTF-8
, что означает «Япония (
ja
), японский язык (
JP
), кодировка UTF-8».

Для начала скопируем файл

myapp.pot
в
myapp.ро
. При наличии набора GNU-утилит
gettext
лучше воспользоваться командой
msginit
, а не просто
cp
. Эта утилита учитывает переменные окружения и правильно устанавливает некоторые переменные в заголовке. В UNIX она вызывается следующим образом:

LANG=ja_JP.UTF-8 msginit -i myapp.pot -o myapp.po

Затем отредактируйте файл

myapp.ро
, как показано в листинге 4.3. Редактировать необходимо в той кодировке, которая указана в строке
Content-Type
.

Листинг 4.3. Файл myapp.ро после редактирования

# Пример приложения.

# Copyright (С) 2006 Foo Bar

# Файл распространяется по лицензии XXX.

#

# Ваше имя <yourname@foo.com>, 2006. (Вся информация о переводчике)

# (Удалите строку 'fuzzy')

msgid ""

msgstr ""

"Project-Id-Version: myapp 1.0.0\n"

"POT-Creation-Date: 2006-05-22 23:27+0900\n"

"PO-Revision-Date: 2006-05-23 14:39+0900\n"

# Информация о текущем переводчике.

"Last-Translator: Your Name <foo@bar.com>\n"

"Language-Team: Japanese\n" (Ваш язык)

"MIME-Version: 1.0\n"

"Content-Type: text/plain; charset=UTF-8\n" (Кодировка файла)

"Content-Transfer-Encoding: 8bit \r."

# Форма множественного числа.

"Plural-Forms: nplurals=2; plural=(n != l);\n"

#: person.rb:12

msgid "Information"

msgstr "Jouhou"

#: person.rb:13

msgid "Name: %{name}, Age: %{age}"

msgstr "Namae: %{name}, Nenrei: %{age}"

#: person.rb:14

msgid "%{name} has a child."

msgid_plural "%{name} has %{num} children."

msgstr[0] "%{name} ha hitori kodomo ga imasu."

msgstr[1] "%{name) ha %{num} nin no kodomo ga imasu."

Тегом

msgid
помечается исходное сообщение, а тегом
msgstr
— переведенное. При наличии строки
msgid_plural
необходимо включить отдельные строки
msgstr[i]
в соответствии с правилом
Plural-Forms
. Индекс
i
вычисляется на основе выражения
Plural-Forms
. В данном случае при
num != 1
используется
msgstr[1]
(сообщение с существительным во множественном числе).

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

Как я строил магическую империю 6

Зубов Константин
6. Как я строил магическую империю
Фантастика:
попаданцы
аниме
фантастика: прочее
фэнтези
5.00
рейтинг книги
Как я строил магическую империю 6

Proxy bellum

Ланцов Михаил Алексеевич
5. Фрунзе
Фантастика:
попаданцы
альтернативная история
4.25
рейтинг книги
Proxy bellum

Гримуар тёмного лорда I

Грехов Тимофей
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Гримуар тёмного лорда I

Стеллар. Трибут

Прокофьев Роман Юрьевич
2. Стеллар
Фантастика:
боевая фантастика
рпг
8.75
рейтинг книги
Стеллар. Трибут

Петля, Кадетский корпус. Книга вторая

Алексеев Евгений Артемович
2. Петля
Фантастика:
боевая фантастика
попаданцы
аниме
4.80
рейтинг книги
Петля, Кадетский корпус. Книга вторая

Шайтан Иван 2

Тен Эдуард
2. Шайтан Иван
Фантастика:
боевая фантастика
попаданцы
альтернативная история
5.00
рейтинг книги
Шайтан Иван 2

Я еще князь. Книга XX

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

Барон Дубов 8

Карелин Сергей Витальевич
8. Его Дубейшество
Фантастика:
юмористическое фэнтези
аниме
сказочная фантастика
фэнтези
5.00
рейтинг книги
Барон Дубов 8

Как я строил магическую империю 2

Зубов Константин
2. Как я строил магическую империю
Фантастика:
попаданцы
аниме
5.00
рейтинг книги
Как я строил магическую империю 2

Зеркало силы

Кас Маркус
3. Артефактор
Фантастика:
городское фэнтези
попаданцы
аниме
5.00
рейтинг книги
Зеркало силы

Имя нам Легион. Том 19

Дорничев Дмитрий
19. Меж двух миров
Фантастика:
боевая фантастика
рпг
аниме
5.00
рейтинг книги
Имя нам Легион. Том 19

Сапер

Вязовский Алексей
1. Сапер
Фантастика:
героическая фантастика
попаданцы
альтернативная история
5.29
рейтинг книги
Сапер

Черный Маг Императора 4

Герда Александр
4. Черный маг императора
Фантастика:
юмористическое фэнтези
попаданцы
аниме
5.00
рейтинг книги
Черный Маг Императора 4

Отморозок 2

Поповский Андрей Владимирович
2. Отморозок
Фантастика:
попаданцы
5.00
рейтинг книги
Отморозок 2