Преамбула
Каждое уважающее себя приложение должно обладать системой интернационализации.
Для начала нужно установить гем gettext. На данный момент самым свежим был 1.90, более ранние версии имели серьезные проблемы в парсере и отлавливали не все строки ресурсов для локализации.
gem install gettext
Дополним дерево каталогов нашего приложения следующими структурами:
/locale/ru/LC_MESSAGES
/locale/uk/LC_MESSAGES
Каждый каталог соответствует одной из локалей, присутствующих в приложении. В них будут расмещаться уже скомпилированные бинарные mo файлы языковых словарей.
/po/ru
/po/ru
В этих каталогах будут размещаться po файлы, представляющие собой извлеченные из приложения ресурсы и уже переведенные на соответствующий язык.
Для начала создадим две rake-задачи, для облегчения нашей работы в будущем.
/lib/tasks/gettext.rake
desc "Update pot/po files."
task :updatepo do
require 'gettext/utils'
GetText.update_pofiles("blog", Dir.glob("{app,lib,bin}/**/*.{rb,erb,rjs}"), "blog 1.0.0")
end
desc "Create mo-files"
task :makemo do
require 'gettext/utils'
GetText.create_mofiles(true, "po", "locale")
end
Дополним файл /config/environment.rb строкой
require 'gettext/rails'
В файл app/controllers/application.rb добавим слудеющий код.
class ApplicationController < ActionController::Base
# Выбираем локаль
GetText.locale = "ru"
# Инициализируем систему доменом
init_gettext "blog"
# Устанавливаем кодировку
before_filter :set_charset
def set_charset
headers['Content-Type'] = "text/html;charset=utf-8"
end
end
После вышеперечисленных действий в наше распоряжени поступила функция _() (нижнее подчеркивание) и все строки к которым она будет применена подлежат извлечению и локализации.
Напишем где нибудь в коде <%= _("Hello world!!!") %> и выполним задачу
rake updatepo
В каталоге /po система содаст файл языкового домена с расширением pot. В дальнейшем вам вообще не понадобиться трогать этот файл. Кроме случаев создания новой языковой локали, которая заключается в копировании файла pot в каталог /po/{lang}/LC_MESSAGES изменяя только расшинение на po.
Скопируем переименованный blog.pot в файл /po/ru/LC_MESSAGES/blog.po
Открываем blog.po любым редатором, например poEdit. Находим в списке ресурс "Hello wordl!!!" и в нижнем окне пишем его перевод: "Привет мир!!!".
После закрытия файла достаточно просто выполнить задачу:
rake makemo
Это приведет к компиляции переведенного po файла в mo файл.
Оригинал статьи находиться rubyhammer.com/articles/2008-07-27-080320-gettext-lokalizatsiya-prilozheniy