Help us understand the problem. What is going on with this article?

Railsの日本語化、ヘルパーメソッドで呼べるようにする。

More than 1 year has passed since last update.

はじめに

Rails 国際化 (i18n) API
RubyのI18n (国際化・多言語化を意味する internationalization を短縮したもの) gemはRuby on Rails 2.2以降からRailsに同梱されています。このgemは、アプリケーションの文言を英語以外の 別の1つの言語に翻訳 する機能や 多言語サポート 機能を簡単かつ拡張可能な方式で導入するためのフレームワークを提供します。
Railsガイドより

Railsのデフォルトはエラーメッセージ一つにしても英語表記であり、日本語サービスを開発するのであれば、日本語対応になるよう実装しなくてはならない。

user.rb 
validates :name, presence: true
=> name can't be blank #英語表記になってしまう。

日本語化対応にするためには設定(参考サイトはこちら)が必要であり、ある程度の日本語化対応のための日本語メッセージを集約したファイル(参考サイトはこちら)も存在する。
またこのファイルはエラーメッセージ以外にもヘルパーメソッドを使って呼び出すこともできる。

Railsの日本語化、ヘルパーメソッドで呼べるようにする。

- submit_name = user.new_record? ? t('view.new') : t('view.update')

= form_for(@user) do |f|
  = f.label :name
  = f.text_field :name

  = f.label :email
  = f.email_field :email

  = f.submit submit_name

ユーザーを生成、更新するフォームであるが

ja.yml
ja:
  application_name: Trecon-App
  ~~~ 省略 ~~~
  view:
    title: Trecon-App
    header:
      logout: ログアウト
      login: ログイン
      my_menu: マイメニュー
      profile: プロフィール
      note: ノート
    new: 作成  <====  ここ
    edit: 編集  <====  ここ
    update: 更新

と編集して、t('')メソッドで呼び出すことで、

- submit_name = user.new_record? ? t('view.new') : t('view.update')
t('view.new') : t('view.update')

ユーザーが新しく生成される場合は'作成', ユーザー情報を更新する場合は'更新'と表示されるようになる。
userフォームだけでなく、その他のデータベースの作成、更新に意味合いが同じであれば、このヘルパーメソッドを使えば使い回せるようになる。

<% provide(:submit, "作成") %>
<%= yield(:submit) %>

他にもprovideとyieldを組み合わせて送信ボタンの名称を変える方法があるが、
userフォームのupdateは'更新'
micropostフォームのupdateは'更新する'

と同じ意味合いなのに若干違う文が生まれるので、それだったら一つのファイルに統一させてコンポネート化させた方がいい。

参考

Railsガイド
Railsで日本語サービスを作るときのテンプレート
svenfuchs/rails-i18n

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away