HOWTO for Rails Engines


Rails Engines are supported by Ruby-GetText-Package since 1.8.0. It's similar with supporting Rails. So you can understand this HOWTO well if you learn Rails localization with GetText before.

Read Ruby-GetText-Package HOWTO for Ruby on Rails first.

LoginEngine plugin

In this tutorial, I explain to localize LoginEngine plugin.

So you need to set up Rails Engines and LoginEngine first.

LoginEngine has its own database tables. Ruby-GetText-Package extracts the field names of these tables. So you need to create your database and database.yml, too.

The directories:



Add a Rakefile to the top of plugin directory.

desc "Create mo-files for L10n"
task :makemo do
  require 'gettext/utils'
  GetText.create_mofiles(true, "po", "locale")

$: << "../../../"
desc "Update pot/po files to match new version."
task :updatepo do
  require 'gettext/utils'
  GetText::ActiveRecordParser.init(:db_yml => "../../../config/database.yml")
                         "login_engine 1.x.x")

The directories becomes:



Translate all Controllers/Views/Models/Helpers like as Rails applications.


Like Rails, set init_gettext the top of controllers.

class UserController < ApplicationController
  init_gettext "login_engine"
  model   :user

  def home
     @fullname = _("Not logged in...")


Nothing special. In the Login Engine, you don't need to translate some fields and is required the field which is not in the database. So use untranslate and N_() methods here.

class User < ActiveRecord::Base
  include LoginEngine::AuthenticatedUser

  untranslate :salt, :salted_password, :verified, :role, :security_token,
              :token_expiry, :created_at, :updated_at, :logged_in_at,
              :deleted, :delete_after



Just same as Rails views.

Run the tasks

Next step is same as Rails, but in the plugin directory.

$ cd {RAILS_ROOT}/vendor/plugins/login_engine

To create po/login_engine.pot, run "updatepo" task.

$ rake updatepo

To create mo-files, run "makemo" task.

$ rake makemo

To update po/{lang}/blog.po, run "updatepo" task again.

$ rake updatepo

See HOWTO maintain po/mo files for more details.

Update SVN

Now the directory becomes like:


If you manage your plugin in SVN for installing it using script/plugin script, you need to import "locale" directory and all of mo-files into the repository. Because users(the application developers) don't run "rake makemo" when the plugin users download your plugin.

Sample files

Here is the localized UserEngine v1.0.2 with Japanese locale.



2006-09-16 Added - Masao