Программирование на языке 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]
(сообщение с существительным во множественном числе).
Поделиться:
Популярные книги
По осколкам твоего сердца
2. Хулиган и новенькая
Любовные романы:
современные любовные романы
5.56
рейтинг книги
Черный Маг Императора 19
19. Черный маг императора
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Купец из будущего
1. Третий Рим
Фантастика:
попаданцы
5.25
рейтинг книги
Дракон - не подарок
2. Королевская академия Драко
Фантастика:
фэнтези
6.74
рейтинг книги
Идеальный мир для Демонолога
1. Демонолог
Фантастика:
юмористическое фэнтези
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Волков. Гимназия №6
1. Волков
Фантастика:
попаданцы
альтернативная история
аниме
7.00
рейтинг книги
Газлайтер. Том 16
16. История Телепата
Фантастика:
боевая фантастика
попаданцы
аниме
5.00
рейтинг книги
Я — Легион
3. О чем молчат могилы
Фантастика:
боевая фантастика
7.88
рейтинг книги
Гранит науки. Том 2
2. Героями не становятся, ими умирают
Фантастика:
фэнтези
5.00
рейтинг книги
Архил...? 4
4. Архил...?
Фантастика:
фэнтези
попаданцы
альтернативная история
5.50
рейтинг книги
Черный Маг Императора 12
12. Черный маг императора
Фантастика:
юмористическое фэнтези
попаданцы
аниме
сказочная фантастика
фэнтези
5.00
рейтинг книги
Адвокат Империи 12
12. Адвокат империи
Фантастика:
городское фэнтези
альтернативная история
аниме
дорама
попаданцы
5.00
рейтинг книги
Вернувшийся: Корпорация. Том III
3. Вернувшийся
Фантастика:
космическая фантастика
боевая фантастика
рпг
5.00
рейтинг книги
Убивать чтобы жить 3
3. УЧЖ
Фантастика:
героическая фантастика
боевая фантастика
рпг
5.00