Ruby On Rails in UA Icon_home Главная Add to bookmarks Translate translate Profile Войти
Регистрация Форум Блоги Пользователи Ресурсы Список джемов      Поиск   

Затегированы темы

GetText. Интернационализация приложений

Date2008-05-22 UserRoman V. Babenko Commentкоментарии 1

Преамбула

Каждое уважающее себя приложение должно обладать системой интернационализации. 

Для начала нужно установить гем 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

Rss
Ключевые слова:
Гости: 215 Онлайн: Дмитрий ,
Rambler's Top100
О проекте по всем вопросам обращайтесь на support
Rubyclub.com.ua Copyright © 2007 - 2008