Railsとの国際化


Wikipediaによると、国際化(最初の「i」と最後の「n」の間の正確な18のキャラクタがあるi 18 nとしての短縮)は、それがエンジニアリング変更なしでいろいろな言語と地域に適応することができるようにソフトウェアアプリケーションを設計するプロセスです.
Railsガイドによると、「国際化」のプロセスは、通常、あなたのアプリケーションからすべてのストリングと他のロケール特有のビット(日付や通貨形式など)を抽象化することを意味します.「ローカライズ」のプロセスは、これらのビットのための翻訳とローカライズされたフォーマットを提供することを意味します.
私はアプリのレール上の反応で構築に取り組んでいた.ほとんどのページが反応して書かれていたが、いくつかのページが書かれ、レールビューからレンダリングされた.これは、バックエンドとフロントエンドの両方に翻訳を提供する方法を理解する必要があることを意味しました.
私は記事とチュートリアルを捜しました、しかし、私は私が持っていた同じ問題を解決していたものを見つけることができませんでした.私は“i 18 n ing”レールのアプリの多くのチュートリアルを発見し、いくつかのレールとJavascriptではなく、レールと反応します.
いくらかの時間を調査した後に、私は試みることに決めましたrails-i18n and i18n-js ジェム.rails-i18n あなたのアプリケーションを翻訳するための簡単に使用できる拡張フレームワークを提供します.i18n-js JavaScript側でレールI 18 nトランスレーションを生成する小さなライブラリです.これは、自動的に自動的には、レール側からYMLの翻訳ファイルを使用してJavaScriptファイルを生成するミドルウェアを提供します.
それらの宝石を使うことは、私が持っていた問題を解決する良い方法のようでした.
私は、私がそれをした方法を共有したいです.
まず、宝石ファイルに宝石を追加します.
gem "i18n-js"
gem "rails-i18n"
実行して宝石をインストールすることを忘れないでくださいbundle installWebPackerを使用している場合はnpm install i18n-jsあなたが資産パイプラインを使用しているならば、チェックしてくださいthis ReadMe .
で使用可能なロケールを定義するconfig/application.rb . 私の場合、英語と日本語のサポートを追加しています.
config.i18n.available_locales = [:en, :ja]
Railsコンソールで利用可能なすべてのロケールを確認できます.
I18n::JS.filtered_translations.keys
=> [:en, :ja]
では、英語の文字列をen.yml .
en:
  hello: "Hello world"
このように柵コンソールで動作しているかどうかを確認できます.
I18n.t 'hello'
=> "Hello world"
では、日本語訳を追加しましょうja.yml .
ja:
  hello: "こんにちは 世界"
これは、我々が細いファイルで翻訳にアクセスする方法です.
h1 = t('hello')
現在、我々はレール側で働いて、反応側で翻訳を得ることに動きましょう.
このラインを加えてミドルウェアを追加
config.middleware.use I18n::JS::Middleware
to config/application.rb . ミドルウェアはフロントエンドで翻訳ファイルを生成します.
ランrails generate i18n:js:config , これはconfig/i18n-js.ymlこれは私の設定ですconfig/i18n-js.yml
translations:
- file: 'app/javascript/bundles/i18n/en.js'
  prefix: "import I18n from 'i18n-js';\n"
  pretty_print: true
  only: 'en.*'
- file: 'app/javascript/bundles/i18n/ja.js'
  prefix: "import I18n from 'i18n-js';\n"
  pretty_print: true
  only: 'ja.*'
file はJS翻訳ファイルのパスを指定します.prefix がオプションであるが、それなしでは"i 18 nは定義されていません"エラーが発生しました.結果の翻訳ファイルの先頭に行を追加します.pretty_print もオプションですが、私は間違いなくこれを置くことをお勧めします.それはあなたの出力ファイルに空白と押韻を追加します.
ランrake i18n:js:exportこれは、選択したパスに翻訳ファイルを生成します.
これを反応ファイルに加える
import i18n from 'i18n-js'
バックエンドにデフォルトのロケールとロケールを設定するにはviews/layouts/application.slim
- javascript_tag do
      I18n.locale = I18n.locale
      I18n.defaultLocale = I18n.default_locale
そして、application.rb
config.i18n.default_locale = :ja

反応側に設定するには、これをレンダリングの中に追加することができます.
I18n.defaultLocale = "ja"
I18n.locale = "ja"
JAは文字列である必要があります"ja"最後に、我々のように反応からあなたのレールの翻訳にアクセスすることができます追加します.
<h2>{I18n.t('hello')}</h2>
ロケールが英語に設定されている場合は、次のようになります.

ロケールが日本語に設定されている場合は、次のようになります.

ご覧のように、いくつかの翻訳文字列が長くなる可能性があります😱
このポストが誰かに役立つことを願っています.
ハッピーi 18 n ing!