Top > 開発ガイド > コンポーネント開発逆引きリファレンス > 多言語対応を実現する

多言語対応を実現する

対象バージョン

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

概要

Rubricksの言語モードを切り替えることによりコンポーネントを多言語対応させることができます。

イメージ

使い方

基本的な使い方

  1. 言語ごとに言語ファイルを作成しメッセージを定義します。

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

▼Rubricks共通のメッセージ定義

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

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

  • RAILS_ROOT/components/XXX/languages/chinese.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
  1. メッセージを表示したいビューで多言語化を行うヘルパを言語ファイルで定義したメッセージを呼び出します。

以下の3つのヘルパはRubricksの言語モードに応じて言語ファイルを判別し、多言語化を実現します。

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

※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>

関連項目

Attachments