I18nの便利機能大全!RubyRailsI18nI18n、使ってますか?多言語化しなくても、アプリケーション内で文言を統一するなどの用途で使用している方も多いのではないかと思います。YAMLを書いて、viewやcontrollerで参照するぐらいの単純な機能に見えますが、実はかなりたくさんの便利機能があるので、まとめてみました。日付や時刻のフォーマットを定義する普段よく使うのはI18n#tだけど、日付や時刻をローカライズするI18n#lもある。+0900"Rubyスクリプトで訳文を定義する訳文は通常YAMLで定義するけど、実はRubyスクリプトで定義することもできる。"こんにちは"Rubyなので、スクリプトで定義を生成できる。できるけど、いい活用方法が思いつかない。"101匹わんちゃん"訳文としてlambdaを与えることもできる。できるけど、訳文にコードを入れるのはI18nの守備範囲を逸脱している気がする。"ガチャピンさんは、5歳470ヶ月です"I18nの訳文を動的に追加するI18n::Backend::Base#store_translationsを使う。"こんにちは"ロケールごとにViewのテンプレートを切り替えるヘルプページなど、内容の大部分が文章であるときなどに便利。HelpControllerのindexアクションを呼ぶ場合、通常はapp/views/helps/index.html.erbが使われるが、index.ja.html.erbを置いておくと、ロケールが:jaのときにこちらを使ってくれる。"テスト"この場合、以下のように、階層を.でつなげた文字列で指定するのが一般的。"テスト":scopeを使うことで、キーと階層を分けて指定することもできる。"テスト"階層を動的に変える場合は、文字列の式展開でやるよりキレイになるかも。"101匹わんちゃん"訳文が見つからない場合に出す文字列を指定する:defaultオプションを指定すると、訳文が見つからない場合にそちらを見てくれる。どんなユースケースがあるんだろう。"テスト"ロケールを明示的に与える:localeオプションでロケールを明示的に与えることができる。ユースケースが思いつかない。"Hello"訳文にHTMLを使用するキー名がhtml、もしくは_htmlで終わっていれば、html_safeとみなされ、viewで使う場合にエスケープされない。式展開%{}の中身はエスケープされる。%></div>訳文を一括取得するキーを配列で渡すことによって、訳文を一括取得可能。"住所"]特定のViewファイル専用の訳文を簡単に参照するViewファイルのパスに沿った階層で訳文を定義することで、Viewファイルの中で簡単に参照できる。%>モデル名やモデルのアトリビュート名を取得する指定された階層に置くことで、Model.model_name.humanでモデル名を、Model.human_attribute_name(attribute)でアトリビュート名を取得できる。"作成日時"与えた数によって単数形/複数形を切り替えるcountというパラメーターを渡すことで、数に応じて単数形/複数形を切り替えることができる。"101人家族"Model.model_name.humanやModel.human_attribute_name(attribute)もほぼ同様だけど、countを与えなかった場合はoneが使われる。otherだけでなく、定義次第でいろいろ対応可能。参考:https://github.com/svenfuchs/i18n/blob/master/test/test_data/locales/plurals.rbActiveRecordのバリデーションメッセージを定義するバリデーションに引っかかった場合、以下の優先順位でメッセージが検索される。trueendpresenceに対応するメッセージのキー名はblankなので、nameがバリデーションに引っかかると以下の順にエラーメッセージが検索される。activerecord.errors.models.user.attributes.name.blankactiverecord.errors.models.user.blankactiverecord.errors.messages.blankerrors.attributes.name.blankerrors.messages.blankまた、一部のバリデーションは、オプションとしてそのバリデーションに関連する数値が渡ってくるので、それを組み込むこともできる。バリデーションに対するメッセージキーとオプションはこちらを参照。Mailerメールの件名を訳文を定義するmailメソッドに件名が渡されなかった場合、デフォルトで[mailer_scope].[action_name].subjectというキーで件名を検索する。ご登録ありがとうございます。その他のI18n関連メソッドActionViewdistance_of_time_in_words投稿から大体◯日とか、表示するアレ。http://api.rubyonrails.org/v5.1/classes/ActionView/Helpers/DateHelper.html#method-i-distance_of_time_in_wordsこんな感じで定義する。select_monthdatetime_select日時を選択するセレクトボックスを作成するhttp://api.rubyonrails.org/v5.1/classes/ActionView/Helpers/DateHelper.html#method-i-datetime_selectselect_month月を選択するセレクトボックスを作成するhttp://api.rubyonrails.org/v5.1/classes/ActionView/Helpers/DateHelper.html#method-i-select_month月の表示名は、"date.month_names"で定義する。"date.order"で年月日の表示順も切替可能。ActionView::Helpers::NumberHelperhttp://api.rubyonrails.org/classes/ActionView/Helpers/NumberHelper.html#method-i-number_to_phonenumber_to_currency数値を通貨フォーマットに変換するnumber_with_precision数値を特定の桁で丸めるnumber_to_percentage数値をパーセントに変換するnumber_with_delimiter数値に桁区切り文字を追加するnumber_to_human_sizeバイト単位の数値を人間に読みやすい桁に変換するこれらのメソッドの一部のオプションはI18nの定義ファイルに設定することで、ロケールごとに変えることが可能。%>ActiveSupportArray#to_sentence複数の要素をつなげて文章っぽくしてくれる。requestStockLike343@Kta-MFollow株式会社Fusic受託開発・自社サービスの2本柱で「日本を代表する福岡の企業」を目指している企業です。upLoginユーザーは見つかりませんでした。