Fight the Future

Java言語とJVM、そしてJavaエコシステム全般にまつわること

Ruby-GetText使ってみました

なんとなく面倒そうなイメージがあったRuby-GetTextですが、超簡単でした。
すみません。<誰に

参考サイト

Rails のためのものぐさな Web アプリケーションの国際化手法 - 川o・-・)<2nd life
http://d.hatena.ne.jp/secondlife/20070207/1170835130


GemでRuby-GetTextをインストール。

C:\Documents and Settings\sakata>gem install gettext
Bulk updating Gem source index for: http://gems.rubyforge.org
Select which gem to install for your platform (i386-mswin32)
 1. gettext 1.90.0 (ruby)
 2. gettext 1.10.0 (mswin32)
 3. gettext 1.10.0 (ruby)
 4. gettext 1.9.0 (mswin32)
 5. gettext 1.9.0 (ruby)
 6. Skip this gem
 7. Cancel installation
> 1
Successfully installed gettext-1.90.0

environment.rbの最後に追記。

# Include your application configuration below

require 'gettext/rails'

application.rbに追記。

class ApplicationController < ActionController::Base
  init_gettext "テキストドメイン(適当な英文字列)"

  # Pick a unique cookie name to distinguish our session data from others'
  session :session_key => '_fieldmanagement_session_id'
  
  after_init_gettext :locale_setting
  def locale_setting
    GetText.locale = ::Locale::SystemCGI.system.language rescue nil
  end
end

database.ymlはきちんと編集しましょう。

development:
  adapter: mysql
  database: ************
  username: ************
  password: ************
  host: localhost
  encoding: utf8

scaffoldすれば画面は英語のままに見えますが、エラーメッセージは日本語化されてます!


さらに、modelの属性も日本語化します。
Rakefileに追記します。

require 'rubygems'
require 'gettext/utils'
desc 'Update pot/po files.'
task :updatepo do
  GetText.update_pofiles('テキストドメイン(適当な英文字列)',
                         Dir.glob("{app,config,lib}/**/*.{rb,rhtml}"),
                         'テキストドメイン(適当な英文字列)1.0.0'
                        )
end

desc 'Create mo-files'
task :makemo do
  GetText.create_mofiles(true, 'po', 'locale')
end

その後「rake updatepo」すると、ルート/po/テキストドメイン.potが出来ます。
ルート/po/ja/テキストドメイン.po(potじゃなくpo)を作成して編集。

#: app/models/problem.rb:-
msgid "Problem|Description"
msgstr "内容"

こんな感じで翻訳。


「rake makemo」してサーバーを再起動すればOK!