WebookWeb業界で働いています。Railsを中心にプログラミングや事業開発のようなことを書いていきます。Internationalization)の方法をまとめています。デフォルトのlocale設定、基本的な翻訳の流れ、翻訳ファイルの作成、localeを動的に変更する方法を説明します。デフォルトのlocaleの設定と翻訳ファイルの読み込みデフォルトのlocaleは暗黙的に:enです。他のlocaleを設定したい場合は、明示的に指定する必要があります。翻訳ファイルはconfig/locales/*.rb,ymlに配置し、自動的にロードされるようになっています。デフォルトのlocaleの設定や翻訳ファイルのディレクトリの追加をしたい場合、application.rbを修正します。翻訳ファイルのディレクトを追加する場合は、次の行のコメントを外しパスを追加してください。'*.{rb,yml}').to_s]設定できるlocaleは次のメソッドで確認できます。...]I18n.load_pathメソッドで現在ロードしている翻訳ファイルの一覧を表示することができます。i18nの翻訳の基本i18nは、現在のlocaleに応じて、読み込んだ翻訳ファイルから適切な翻訳文を取得し、表示します。翻訳ファイルは次のようになっています。%z'変換には「翻訳(translate)を行うtメソッド」と「DateやTimeをlocalizeするlメソッド」を使います。翻訳ファイルのディレクトリ構成1つの翻訳に管理するのが難しくなってしまうので、プロジェクト規模に応じて、次のようにconfig/locales/配下のディレクトリ構成を行うとよいです。各言語の基本的な翻訳テンプレートファイル各言語の基本的な翻訳ファイルは「https://github.com/svenfuchs/rails-i18n/tree/master/rails/locale」から取得できます。日付、時刻、ActiveRecordのバリデーションエラー文言、数字などの基本的な翻訳が記載されていまので、上記でいう、config/locales/defaults/配下に配置するようなファイルを取得できます。lookup)Railsのビューファイルのディレクトリ構造と翻訳ファイルの階層構造を合わせることで、ビューに長ったらしくを書かなくてもよくなります。翻訳文内で式展開を行うことができます。翻訳ファイル内で%{}で変数名を定義します。%{name}'そして、tメソッドでKey-Valueで変数に値を設定します。翻訳ファイル内でHTMLを使用するには、キーに「_htmlで終わる」か「htmlというキー名」の場合、HTMLはエスケープされません。そのため、記載したHTMLが解釈されて表示されます。翻訳ファイル内で_htmlで終わるキー名にします。%{name}</b>'そして、tメソッドで表示します。太郎」が表示される次のようにhello_htmlの値にHTMLセーフでない文字を入力するとそれが表示されてしまうので注意してください。<script>alert("alertが表示される");</script>'逆に、式展開の%{}のHTMLはエスケープされます。ActiveRecord/ActiveModelの翻訳activerecord/activemodel.modelsとactiverecord/activemodel.attributesを使うことでActiveRecordの翻訳を行えます。次の翻訳ファイルは、Productモデルの翻訳例です。activerecordYAMLを開いて適切な設定になっているか確認できます。YAML.load_file(Rails.root.join("config/locales/ja.yml"))モジュールなどで階層構造の翻訳ファイルを書くときには、`/`で区切って階層構造を表します。'商品名'次のようにして、ビューファイル内で利用します。他言語のサイト(複数のlocaleのサイト)を作成するには、「URLからlocaleを取得する方法」が推奨です。「URLからlocaleを取得する方法」は次のとおりです。ヘルプを参照してください。他地域、他言語のサイトを作成するときに、SEO的にどうすれば良いかといったヒントが書かれています。次のようにサブドメイン名からlocaleを設定するようにしてみます。使用したサブドメイン」に対応します。英語のlocaleまず、applicaiton_controller.rbにlocaleを設定するメソッドを追記します。endendそして、application.html.erbなどのビューファイルで次のように言語を変更するリンクを追加することで、言語を変更できます。%>URL部分は簡易的に直書きをしていますが、設定ファイルからの値を取得することをお勧めします。http://ja.example.com:3000/...にアクセスすると、Railsのlocaleは、ja(日本語)になるので、日本語で画面に表示されています。http://en.example.com:3000/...にアクセスすると、Railsのlocaleは、en(英語)になるので、英語で画面に表示されています。使用したサブディレクトリ」に対応します。次のようにサブディレクトリ名からlocaleを設定するようにしてみます。英語のlocaleまず、ルートにscoopeで:localeを追加します。かっこがあることで、存在しない場合は、デフォルトのlocaleが使われます。:productsendURLのlocaleは、parmas[:locale]で取得できるので次のようにします。default_url_optionsをオーバーライドすることで、すべてのリンクに現在のlocaleを設定することができます。endendそして、application.html.erbなどのビューファイルで次のように言語を変更するリンクを追加することで、言語を変更できます。%>URLにlocaleがない場合は、Railsのlocaleは、デフォルトのlocaleの日本語なので、日本語で表示されています。「English」リンクを押すことで、URLにenが追加され、Railsのlocaleが英語になるので、英語表示になります。次のようにURLパタメータにlocaleを設定することでlocaleを設定するようにします。スペイン語(es)のlocaleGoogleの他地域、他言語のサイトによると、非推奨の方法です。applicaiton_controller.rbにlocaleを設定するメソッドを追記します。endendそして、application.html.erbなどのビューファイルで次のように言語を変更するリンクを追加することで、言語を変更できます。%>URLにlocaleがない場合は、Railsのlocaleは、デフォルトのlocaleの日本語なので、日本語で表示されています。「English」リンクを押すことで、locale=enがURLに追加され、Railsのlocaleが英語になるので、英語表示になります。アクセス月別アーカイブスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。