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

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

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

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

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

i18n

i18n(Internationalization)とは、ユーザーの国や文化によってソフトウェアの反応を変えることで国際化を図るテクニックやツールのことを言います。

Q&A

解決済

2回答

523閲覧

rails パラメータで受け取った値を対応した文字列に変換したい

hatayanshota

総合スコア20

Ruby on Rails 5

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

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

i18n

i18n(Internationalization)とは、ユーザーの国や文化によってソフトウェアの反応を変えることで国際化を図るテクニックやツールのことを言います。

0グッド

0クリップ

投稿2019/03/29 10:25

railsでparams[:genre]で受け取ったの値(1~6)に対応した文字列を表示させたいです。
そのためにjaファイルを以下のように設定しました

ja: posts: 1: '1に対応する文字列' 2: '2に対応する文字列' 3: '3に対応する文字列' 4: '4に対応する文字列' 5: '5に対応する文字列' 6: '6に対応する文字列'

params[:genre]で受け取った値は対応するactionにて@genreに格納してあります
この場合@genreに1が入っていたとして、viewではどのように対応する文字列を表示すれば良いでしょうか?<%= t('posts.#{@genre}') %>とやると#{@genre}と表示されます

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

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

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

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

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

guest

回答2

0

ベストアンサー

config/application.rbのclass定義の中に

Ruby

1config.i18n.default_locale = :ja

は書いてありますでしょうか?
また、書いていなかった場合、コードを変更後にはサーバの再起動をしてみて下さい。

投稿2019/03/29 17:56

ReiLeiLei1025

総合スコア236

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

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

hatayanshota

2019/03/29 19:47 編集

はい、書いてあります 問題のymlと同じディレクトリ内においてある他のymlはうまく機能している状態です。
ReiLeiLei1025

2019/03/30 01:11

こちらの環境(Rails 5.2.2)では <%= t("hello.#{@genre}")%> @genreの中身は1 で正常に出力されています。 他のymlと言いますと複数ymlファイルがあるということでしょうか。 ファイル名は ja.yml ではないのでしょうか。 問題の区分けをしましょう。 まず、機能しているymlファイルに今回の件に該当するコードを記述して動くか試してみて下さい。
hatayanshota

2019/04/01 04:34

~~@genreの中身は1で正常に出力されています。~~ ->@genreの中身自体を出力した場合正常に1と表示されます。 ~~他のymlと言いますと複数ymlファイルがあるということでしょうか。ファイル名はja.ymlではないのでしょうか。~~ ->config/locales/以下にkaminariを使ったページャー用のpaginate.ja.ymlと今回のja.ymlがあります。 ~~機能しているymlファイルに今回の件に該当するコードを記述して動くか試してみて下さい。~~ ->下記エラー I18n::InvalidLocaleData in Posts#index
ReiLeiLei1025

2019/04/01 11:56

自分の環境で、質問者様のコードを貼りつけて実行したところ、 I18n::InvalidLocaleData in Posts#index が出ました。 ja.yml ファイル ここから~ ja: posts: 1: '1に対応する文字列' 2: '2に対応する文字列' 3: '3に対応する文字列' 4: '4に対応する文字列' 5: '5に対応する文字列' 6: '6に対応する文字列' ~ここまで 上記のコードは自分の環境では問題なく <%= t("posts.#{@genre}")%> が機能しています。 (@genreの中身は1、文字列、"1に対応する文字列" と出力) こちらの環境で動いている上記のコードをja.ymlファイルにコピー&ペーストをして機能するか試してもらえませんか?
ReiLeiLei1025

2019/04/01 12:02 編集

すいません。貼り付けたところインデントが崩れてしまっています。 posts:のインデントは半角空白2文字、 1~6:までのインデントは半角空白4文字です。
hatayanshota

2019/04/01 14:44

貼っていただいたja.ymlをコピペし、インデントに気をつけて実行してみたところ無事に機能致しました! なぜ同じように打っていたのに自分のコードで構文エラーが起きたかわかりませんが、これからはインデントなどが原因ぽいときは正常に動作するファイルをコピペしてみるようにしたいと思います 大変長く丁寧に回答していただきありがとうございますm(_ _)m
ReiLeiLei1025

2019/04/01 19:43

自分のブラウザ環境(Chrome)では、質問者様のコードのposts.1と値の間に□が見えています。 1: '1に対応する文字列' これが、原因ではないかと思われます。 yml形式のファイルはとても形に厳密なので。 ともかく、動いて良かったです。
guest

0

文字列の中で#{}式展開を使うには ダブルコーテーションじゃないとダメかも

<%= t("posts.#{@genre}") %>

投稿2019/03/29 11:31

mypt

総合スコア170

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

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

hatayanshota

2019/03/29 11:43

回答ありがとうございます。 ' ' -> " " に変更してみたところ、今度は@genreに格納された値がそのまま表示されました。 @genre => 1に変更してみたら、これもそのまま1と表示されたので、jaファイルが上手く反映されていなさそうです。 jaの設定は上記のとおりですが、問題点はありますでしょうか?
mypt

2019/03/29 12:06 編集

yml には詳しくないんですが左辺に数字だけというのがダメなのかも 何か文字をつけるのはダメですか? ``` value1: '1に対応する文字列' ``` ``` <%= t("posts.value#{@genre}") %> ```
hatayanshota

2019/03/29 19:43

やってみましたが以下のようなエラーが出ました I18n::InvalidLocaleData in Posts#index 試しにデータベースの型をintからtextに変更してパラメータの値とymlの左辺を同じ文字列にしてみましたが同じ結果になってしまいました もとの質問とは違う問題になってしまって申し訳ありません。。
mypt

2019/03/30 02:26

質問文のコードをコピーしてみると : のあとのスペースが変な文字になるんですよね yml ファイルの文字コードとかスペースがちゃんと半角スペースになってますか? あと yml ファイルではタブは使えないのでインデントはすべてスペースになってますか?
hatayanshota

2019/04/01 04:38

Atomによる自動インデントで記述していました。 言われたように:のあとにもう一度半角スペースをうち、インデントも同様にスペースでやりましたがだめでした。。。
hatayanshota

2019/04/01 14:47

無事解決致しました! どうやらやはりインデントか見えない構文エラーだったようで他回答者様のコードをコピペしてみたところ無事に機能しました ご丁寧にありがとうございましたm(_ _)m
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問