調べたもののメモです 随時更新
I18n入門的な事
[blogcard url=”https://rakuda3desu.net/out-of-rakudas-rails-tutorial-i18n/”]
フラッシュメッセージの日本語化(controllerのリテラルを日本語化)
フォルダとファイルを作成 (最初にmodelsフォルダを作って仕分けをしたのでcontrollerも分ける)
#言語
ja:
#controller名(_controller部分は付けない)
users:
#アクション名
create:
#リテラル: '対応リテラル'
welcome_message: 'サンプルアプリへようこそ!'
・
・
・
def create
@user = User.new(user_params)
if @user.save
#tメソッドで翻訳
flash[:success] = t('.welcome_message')
redirect_to @user
else
render 'new'
end
end
・
・
・
HTMLを含めた出力
キーに「_html」を付ける (もちろんリンク以外でもOK)
static_pages:
home:
Welcome_Sample_App: 'サンプルアプリへようこそ!'
welcome_message_html: 'このページはRuby on Rails Tutorialのサンプルアプリです'
<%= link_to image_tag("rails.png", alt: "Rails logo"), 'http://rubyonrails.org/' %><%= t('.Welcome_Sample_App') %>
<%= t('.welcome_message_html') %>
<%= link_to "Sign up now!", signup_path, class: "btn btn-lg btn-primary" %>
モデルの属性名を取得
モデルの属性名を他のリソースのviewから参照したい!
#参照元
ja:
activerecord:
models:
user: ユーザー
attributes:
user:
name: 名前
email: メールアドレス
password: パスワード
password_confirmation: パスワード(確認用)
・
・
・
#第二引数に表示したい文字を指定
#モデル名.human_attribute_name(属性名)
<%= f.label :email, User.human_attribute_name(:email) %>
<%= f.email_field :email, class: 'form-control' %>
<%= f.label :password, User.human_attribute_name(:password) %>
<%= f.password_field :password, class: 'form-control' %>
・
・
・
RoRT・8章のログインフォームと見比べて、emailとpasswordが日本語表示に変更できている!
→モデル名.human_attribute_name(属性名)
指定のモデルの属性名を表示
→モデル名.model_name.human
指定のモデル名を表示
同一コントローラー内のすべてのアクションから参照させたい
ja:
users:
#コントローラー名の直下に書く(アクション名は指定しない)
please_log_in: 'ログインしてください'
create:
welcome_message: 'サンプルアプリへようこそ!'
・
・
・
・
・
・
# beforeアクション
# ログイン済みユーザーかどうか確認
def logged_in_user
# logged_in?がfalseの場合
unless logged_in?
# flashsでエラーメッセージを表示
#コントローラー名.キーで変換の指定
flash[:danger] = t('users.please_log_in')
# login_urlにリダイレクト
redirect_to login_url
end
end
end
これ、難しく考えなくてもネストの通りにキーを省略しないで指定すればどこからでも呼べるね。 上記のも間違いではなくて、I18nのymlの書き方は思ったより自由(?)臨機応変(?)で良さそう。 そしてtメソッドをオーバーライドして自分で定義することもできるそうだ。 スゴイ。 [blogcard url=”https://easyramble.com/leave-keys-on-controller-i18nt.html”]
モデルに追加したバリデーションのエラー文を日本語に
Tutorial本文のこの辺 [blogcard url=”https://railstutorial.jp/chapters/user_microposts?version=5.1#code-micropost_model_image_validation”]
def picture_size
if picture.size > 5.megabytes
# この部分を日本語にしたい
errors.add(:picture, "should be less than 5MB")
end
end
:pictureは属性名なので普通にする
ja:
activerecord:
models:
user: ユーザー
microposts: 投稿
attributes:
user:
name: 名前
email: メールアドレス
password: パスワード
password_confirmation: パスワード(確認用)
micropost:
content: 投稿内容
picture: 画像
次にエラー文を日本語にしたい 最初にやったことはこれ↓ これではNoMethodError
# /sample_app/config/locales/models/ja.yml該当部分
micropost:
content: 投稿内容
picture: 画像
less_than_5MB: 'は5MB未満にしないとアップロードできません'
# /sample_app/app/models/micropost.rb該当部分
errors.add(:picture, t('.less_than_5MB'))
うむわからん!となったのでにゅ〜ぶる会で質問
tだけで動かない場合は、I18n.tって省略せずに書こう!
との事でそのようにしてみる →viewは表示されるようになったけどエラー文が表示されたい部分に「画像translation missing: ja.less_than_5MB」 !!(ピコーン)
# 階層を全部指定
errors.add(:picture, I18n.t('activerecord.attributes.micropost.less_than_5mb'))
できた!
けどこのままでは問題がある!
→現状の指定ではless_than_5mbは属性名として認識されている
今後less_than_5mbという名前の属性名が出来た時、エラーメッセージがそのまま表示されてしまう!!
エラーメッセージはエラーメッセージとして表示されたい!のでmicropost以下ではないところに移動しよう!
さらに、設定をしておけばerrors.addの第二2引数をシンボルで定義できるということも教えてもらいましたよ! これはコードもすっきり!! [blogcard url=”https://railsguides.jp/active_record_validations.html#%E3%83%90%E3%83%AA%E3%83%87%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%82%A8%E3%83%A9%E3%83%BC%E3%81%AB%E5%AF%BE%E5%BF%9C%E3%81%99%E3%82%8B-errors-details”] と、いう事で 最終的にこう!
ja:
activerecord:
models:
user: ユーザー
microposts: 投稿
attributes:
user:
name: 名前
email: メールアドレス
password: パスワード
password_confirmation: パスワード(確認用)
micropost:
content: 投稿内容
picture: 画像
errors:
messages:
less_than_5mb: は5MBより小さいファイルをアップロードしてください
・
・
・
private
# アップロードされた画像のサイズをバリデーションする
def picture_size
if picture.size > 5.megabytes
errors.add(:picture, :less_than_5mb)
end
end
end
viewのJSコード内の文章を日本語にしたい
参考ページ あとで読む [blogcard url=”https://qiita.com/yosaprog/items/3b2c509cf5de94f89cdb”]
