GetTextでLoginEngineとUserEngineを日本語化したい!
GetTextを利用して、程々に日本語で表示できるようになった。RadRailsと連携して快適な作業環境で楽しくなっていたところ、その調子に乗って、ログイン管理、ユーザー管理の部分も日本語化しようと思った時、壁にぶつかった...。
まず最初やったことは、今までと同じ方法でvender/plugins/*_engine/appフォルダ以下の日本語化したいファイルを、プロジェクト直下のappフォルダへコピーして、_()で囲ってupdatepo、makemoで日本語化してみた。ちゃんと正常に日本語化できた。しかし、このやり方では悩み事がいくつか発生した。
-
-
- この後、新たなプロジェクトで日本語化したlogin.engineを利用しようするためには、どうすれば良いのだろう?今回、日本語化のためにコピーしたlogin_engine関連ファイルを、新たに開発するプロジェクト直下のappフォルダにコピーすれば良いのだが、日本語化とは関係ない変更が加えられていたら、コピーしてそのまま使うことはできない...。
- 雛形として日本語化だけの変更をして保存していたとしても、毎回appフォルダ以下のファイル構成をコピーするのは面倒くさい...。
-
そこで、vender/plugins/*_engineフォルダ以下のファイルを直接_()で囲って処理してみたのだが...
-
-
- .poファイルや.moファイルは、プロジェクト直下のpoフォルダやlocaleフォルダに保存される。
- テーブル名、フィールド名が抽出されない。
- まったく、日本語化されない...。
-
悩み続けて、web検索とその試行錯誤の結果、以下のページにEnginesプラグインの取り扱い方がちゃんと書いてあった。
Ruby-GetText-Package HOWTO for Rails Engines
(web検索を日本語ページに限定していたため、見つけられずにずいぶん遠回りをしてしまった。これからは日本語の限定はしない...。英語でも前向きに読む...。)
コードの理解はちゃんと出来ていないが、手順はとても良く理解できたので、さっそく作業開始。
サンプルファイルのダウンロード
ちゃんと手順書通りにやってみようと思ったが、LoginEngineをGetTextで日本語化したサンプルファイルが公開されていた。本当に日本語化されるのか、先に結果を見てみたい...。
- Ruby-GetText-Package HOWTO for Rails Enginesから早速、ダウンロードしてみた。(ページの一番下の方にリンクがある。)
- login_engine_v1.0.2.gettext.tar.gzを解凍すると、venderフォルダが生成される。
- 解凍したvenderフォルダの中のlogin_engineフォルダ以下を、softwarebook2プロジェクトのlogin_engineへコピーして上書きした。
- サーバーを再起動してログインしてみると、見事に日本語化されている!
手順書に沿ってやってみる
それではUserEngineを手順書に沿って日本語化してみる。お手本にLoginEngineのサンプルがあるので心強い。
前提条件
- Ruby-GetText-Package1.8.0がインストールされている。(Locomotive2.0.8には左記バージョンがインストール済)
- config/environment.rbに以下のコードが追記されている。(関連記事:GetTextで日本語化してみる。)
$KCODE = 'u' require 'jcode' ...(途中省略)... require 'gettext/rails'
Rakefileの新規作成
vender/plugins/user_engine/Rakefileを新規作成した。以前のlib/tasks/gettext.rakeと比べてみると、オレンジ色の行が追加された部分だ。コードの意味は詳しく分からないが、EnginesプラグインでGetTextを利用するためのおまじないと考えて、このまま使わせて頂くことに。(感謝です。)
desc "Create mo-files for L10n" task :makemo do require 'gettext/utils' GetText.create_mofiles(true, "po", "locale") end $: << "../../../" desc "Update pot/po files to match new version." task :updatepo do require 'gettext/utils' GetText::ActiveRecordParser.init(:db_yml => "../../../config/database.yml") GetText.update_pofiles("user_engine", Dir.glob("{app,lib}/**/*.{rb,rhtml}"), "user_engine 1.0.0") end
major = 0
minor = 0
release = 0
IO.foreach("init_engine.rb") do |line|
if line =~ /Major?s+?=?s+(?d+)/
major = $1
elsif line =~ /Minor?s+?=?s+(?d+)/
minor = $1
elsif line =~ /Release?s+?=?s+(?d+)/
release = $1
end
end
version = "#{major}.#{minor}.#{release}"
desc "Create mo-files for L10n"
task :makemo do
require 'gettext/utils'
GetText.create_mofiles(true, "po", "locale")
end
$: << "../../../"
desc "Update pot/po files to match new version."
task :updatepo do
require 'gettext/utils'
GetText::ActiveRecordParser.init(:db_yml => "../../../config/database.yml")
GetText.update_pofiles("login_engine", Dir.glob("{app,lib}/**/*.{rb,rhtml}"),
"login_engine #{version}")
end
コントローラーへの追記
vender/plugins/user_engine/app/controllersフォルダのすべてのコントローラーの定義の最初に、init_gettext "user_engine"を追記する。
user_controller.rb記入例(role_controller.rb、permission_controller.rbにも同様に追記する)
class UserController < ApplicationController
init_gettext "user_engine"
...(途中省略)...
end
_()で囲む
vendor/plugins/user_engine/appフォルダの表示に関する部分をすべて_()で囲んだ。(関連記事:GetTextで実際に日本語化作業をやってみる。)
updatepoの実行
ターミナルを起動して、vender/plugins/user_engineディレクトリへ移動して、updatepoを実行する。
MacBook:~ zari$ cd ~/railsapp/softwarebook_ja2/vendor/plugins/user_engine MacBook:~/railsapp/softwarebook_ja2/vendor/plugins/user_engine zari$ rake updatepo
vender/plugins/user_engine/po/user_engine.potが生成される。
msginitの実行
poフォルダの中にjaフォルダを新規作成する。
ターミナルで、poフォルダに移動して、msginitを実行する。
MacBook:~/railsapp/softwarebook_ja2/vendor/plugins/user_engine zari$ cd po MacBook:~/railsapp/softwarebook_ja2/vendor/plugins/user_engine/po zari$ msginit -i user_engine.pot -o ja/user_engine.po : : Please enter your email address. : : Created ja/user_engine.po.
メールアドレスを要求されるので、入力すると...
vender/plugins/user_engine/po/ja/user_engine.poが生成される。
makemoの実行
user_engine.poを開いて、翻訳する。(全305行)翻訳が終わったら...
ターミナルで、一つ上のuser_engineフォルダに戻り、makemoを実行する。
MacBook:~/railsapp/softwarebook_ja2/vendor/plugins/user_engine/po zari$ cd .. MacBook:~/railsapp/softwarebook_ja2/vendor/plugins/user_engine zari$ rake makemo (in /Users/zari/railsapp/softwarebook_ja2/vendor/plugins/user_engine) po/ja/user_engine.po -> locale/ja/LC_MESSAGES/user_engine.mo
以上の手順で、サーバーを再起動して確認すると、UserEngineも日本語化されていた。
- Enginesプラグインごとにpoフォルダ、localeフォルダが追加され、以下のようなファイル構成になった。