Top > 開発ガイド > コンポーネント開発Tips集 > 多言語化

多言語化

対象バージョン

当ドキュメントはRubricks-0.6.x向けです。

メッセージの定義

メッセージの定義は、Rubricks共通のメッセージが用意されており、各コンポーネント側でも用意することができます。
コンポーネントで定義するメッセージは他のコンポーネントとの衝突を避けるため、Prefixとしてコンポーネント名をつけてください。

Rubricks共通のメッセージ定義

  • RAILS_ROOT/languages/english.rb
  • RAILS_ROOT/languages/japanese.rb

各コンポーネントのメッセージ定義

  • RAILS_ROOT/components/XXX/languages/english.rb
  • RAILS_ROOT/components/XXX/languages/japanese.rb

▼メッセージ定義例

module RubricksLanguage
  def define_lang
    lang('japanese').merge!(
      {
        '_SampleComponent_Create'        => '作成',
        '_SampleComponent_Delete'        => '削除',
        '_SampleComponent_CreateMessage' => '%sを作成しました。',
      }
    )
  end
end

View

Viewにおいて以下の3つのメソッドを利用することで国際化を実現できます。

  • l(str)
    • 国際化を行うメソッド
    • strのうち、[]で囲った国際化メッセージが上記の定義に則って変換されます
      <span><%= l('[_SampleComponent_Create]') %></span>
        => <span>作成</span>
      
  • hl(str)
    • 国際化と共にHTMLエスケープを行うメソッド
    • html_escape(l(str))に相当
  • jl(str)
    • 国際化と共にJavaScriptエスケープを行うメソッド
    • tag_escape(escape_javascript(l(str)))に相当

Model/Controller

ModelやControllerにおいては以下のようにして上記メソッドを利用することが可能です。

  • RubricksLib.l(str)
  • RubricksLib.hl(str)
  • RubricksLib.jl(str)

sprintf相当の機能

sprintfと同様にフォーマットを利用して文字列を整形することも可能です。メソッド内部でsprintfを使用していますのでフォーマットに関してはsprintfに完全準拠します。但し、使用方法は以下のように制限されます。

  • l(arr)
  • hl(*args)
  • hl(arr)
  • jl(*args)
  • jl(arr)

hlメソッド及びjlメソッドに関しては可変長引数・配列のどちらの引数もサポートされますが、lメソッドにおいては引数は配列のみをサポートします。

<span><%= l(['[_SampleComponent_CreateMessage]', sample_model.name]) %></span>
  => <span>×××を作成しました。</span>