railsの教科書を読みながらサンプルアプリを作っていたところ、日本語化ができずに詰まってしまいました。
今回はうまく日本語化できなかった原因と、どうやって解消したかについて紹介します。
また、調べている中で、よくある日本語化が適用できない原因もざっと知れたため、併せて紹介していきます。
まずは、私の作成したアプリがうまく日本語化できなかった原因は、「インスタンスを作成していないため」でした。
下記コード+Gemfile記載後のbundle installが主に日本語化に必要だったことなのですが、この内私はcontrollerのメソッド内(今回はnewメソッド)において、
@task = Task.newを記載していませんでした。
html.erbでは該当部分に、model: @taskと記載がありますが、controllerでtaskモデルのターゲットを作っていなかったため、ja.ymlの判定には適用されていなかったようです。
source 'https://rubygems.org'
git_source(:github) { |repo| "https://github.com/#{repo}.git" }
ruby '2.6.6'
〜
gem 'rails-i18n'
source 'https://rubygems.org'
git_source(:github) { |repo| "https://github.com/#{repo}.git" }
module yourAppName # ここにはあなたのアプリの名前が入ります。
class Application < Rails::Application
# Initialize configuration defaults for originally generated Rails version.
config.load_defaults 6.0
config.i18n.default_locale = :ja
end
end
ja:
activerecord:
errors:
messages:
record_invalid: 'バリデーションに失敗しました: %{errors}'
restrict_dependent_destroy:
has_one: "%{record}が存在しているので削除できません"
has_many: "%{record}が存在しているので削除できません"
models:
task: 'タスク'
attributes:
task:
id: 'ID'
name: '名称'
description: '詳しい説明'
created_at: '登録日時'
updated_at: '更新日時'
class TasksController < ApplicationController
def new
@task = Task.new
end
<h1>タスクの新規登録</h1>
<%= link_to '一覧', tasks_path, class:'nav-link' %>
<%= form_with model: @task, local: true do |f| %>
<div class='form-group'>
<%= f.label :name %>
<%= f.text_field :name, class:'form-control', id:'task_name' %>
</div>
<div class='form-group'>
<%= f.label :description %>
<%= f.text_area :description, ros: 5, class:'form-control', id:'task_description' %>
</div>
<%= f.submit nil, class: 'btn btn-primary' %>
<% end %>
続いて、よくある間違い3つの紹介に移っていきます。
railsアプリが日本語化されない際によくある3つの間違い
##ja.ymlの記載方法が違う
ja.ymlファイルはインデントでの判定が厳密です。
htmlファイルなどはインデントが適当でも動きますが、ja.ymlはインデントが適当だとそれ自体がエラーの原因になるので、注意しましょう。
##Gemfileをインストールしていない
当たり前かも知れませんが、gem 'rails-i18n'を記載の上、bundle installを行わなければ、i18n(国際化)はされません。
忘れないように気をつけましょう。
##configファイルに必要事項を記載していない
configファイルに以下を記載していない場合も日本語化ができません。
module yourAppName # ここにはあなたのアプリの名前が入ります。
class Application < Rails::Application
config.i18n.default_locale = :ja
end
end
以上、日本語化がうまく適用できない原因を探る中でよく見かけた3つの原因でした。
参考
[初学者]Railsのi18nによる日本語化対応
https://qiita.com/shimadama/items/7e5c3d75c9a9f51abdd5
Railsでja.ymlが反映されない
https://qiita.com/kobaryo04/items/10793fd7717919454a60