LoginSignup
2
1

More than 3 years have passed since last update.

rails6でi18nによるja.yml(日本語化)が適用されない時に確認すべき3つのポイント

Posted at

railsの教科書を読みながらサンプルアプリを作っていたところ、日本語化ができずに詰まってしまいました。
今回はうまく日本語化できなかった原因と、どうやって解消したかについて紹介します。
また、調べている中で、よくある日本語化が適用できない原因もざっと知れたため、併せて紹介していきます。

  1. 私のアプリが日本語化できなかった理由
  2. railsアプリが日本語化されない際によくある3つの間違い
  3. 参考

私のアプリが日本語化できなかった理由

まずは、私の作成したアプリがうまく日本語化できなかった原因は、「インスタンスを作成していないため」でした。
下記コード+Gemfile記載後のbundle installが主に日本語化に必要だったことなのですが、この内私はcontrollerのメソッド内(今回はnewメソッド)において、
@task = Task.newを記載していませんでした。

html.erbでは該当部分に、model: @taskと記載がありますが、controllerでtaskモデルのターゲットを作っていなかったため、ja.ymlの判定には適用されていなかったようです。

locales/Gemfile
source 'https://rubygems.org'
git_source(:github) { |repo| "https://github.com/#{repo}.git" }

ruby '2.6.6'
〜
gem 'rails-i18n'
config/application.rb
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
locales/ja.yml
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: '更新日時'
tasks_controller.rb
class TasksController < ApplicationController

  def new
    @task = Task.new
  end
tasks/new.html.erb
<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ファイルに以下を記載していない場合も日本語化ができません。

config/application.rb

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

2
1
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1