質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

解決済

1回答

369閲覧

Rails : i18nがリフレッシュすると機能しなくなる

innjera

総合スコア132

Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

1クリップ

投稿2018/12/06 11:14

編集2018/12/06 11:18

Ruby on Rails 5.2.1で作業しています。
i18nを活用しているのですが、添付画像のと通り、初期画面で機能しているものの
サイトをリフレッシュすると、途端に機能しなくなります。原因わからずご教示戴けますと幸甚です。

イメージ説明

イメージ説明

ruby

1###application.rb 2 3config.i18n.default_locale = :en 4 5###model 6 STATUS_VALUES = %w(draft ready) 7 8 class << self 9 def status_text(status) 10 I18n.t("activerecord.attributes.tender.status_#{status}") 11 end 12 13 def status_options 14 STATUS_VALUES.map {|status| [status_text(status), status]} 15 end 16 end 17 18### contorller 19class Sellers::TendersController < ApplicationController 20 I18n.locale = "ja" 21 22 省略 23 24 def new 25 @tender = Tender.new 26 time0 = Time.current.beginning_of_day 27 @tender.starts_at = time0.advance(days: 1, hours: 10) 28 @tender.ends_at = time0.advance(days: 3, hours: 15) 29 end 30 31 省略 32 33end 34 35###form 36 37<%= f.label :status, "ステータス" %> 38<%= f.select :status, Tender.status_options, {}, class: 'form-control' %>

yml

1###ja.yml 2 3ja: 4 activerecord: 5 models: 6 tender: 入札 7 attributes: 8 tender: 9 status: 状態 10 status_draft: ドラフト 11 status_ready: 完了 12

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

クラス定義で記述しているので TendersController クラスが読み込まれる1回しか動きません
リフレッシュしても動かないのは同じファイルを無駄に読み込まないようRailsがキャッシュしているためです
おそらく、このファイルを変更した時は再読込するため、リフレッシュしても日本語になると思います

ruby

1class Sellers::TendersController < ApplicationController 2 I18n.locale = "ja" 3end

対策例1

常に日本語を出すつもりならデフォルトを日本語にしてしまう

ruby

1 config.i18n.default_locale = :ja

対策例2

言語を切り替えたいなら before_action で毎回各処理の前に動かす
Sellers::TendersController に定義しても動きますが、この手の挙動は全画面共通にするのをお勧めします

ruby

1class ApplicationController < ActionController::Base 2 before_action :set_locale 3 4 private 5 6 def set_locale 7 I18n.locale = params[:locale] || "ja" 8 end 9end

投稿2018/12/08 17:52

Ighrs

総合スコア656

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

innjera

2018/12/09 12:27

ありがとうございます! 初歩的な質問で申し訳ありません。。params[:locale] に、例えば"en"を渡す場合、どうすれば良いのかわからず、ご教示戴けますとたすかります。
innjera

2018/12/10 11:10

ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問