my_translation
オプションのパラメータで翻訳を行いたいです。例えば:
> I18n.t('my_translation')
=> "This is my translation"
> I18n.t('my_translation', parameter: 1)
=> "This is my translation with an optional parameter which value is 1"
これは可能ですか?
my_translation
オプションのパラメータで翻訳を行いたいです。例えば:
> I18n.t('my_translation')
=> "This is my translation"
> I18n.t('my_translation', parameter: 1)
=> "This is my translation with an optional parameter which value is 1"
これは可能ですか?
はい、間違いなく。次のように翻訳を書くだけです。
my_translation: This is my translation with an optional parameter which value is %{parameter}
パラメータは本当にオプションですか? 上記の翻訳では、すべてのパラメーターを指定する必要があります。
更新: 申し訳ありませんが、私はあまりにも早く答えました。簡単にはできないと思います。おそらく最も簡単な方法は次のとおりです。
> I18n.t('my_translation1')
=> "This is my translation"
> I18n.t('my_translation2', parameter: 1)
=> "This is my translation with an optional parameter which value is 1"
推奨されていませんが、可能だと思います。@Yanhaoの回答のコメントに基づいて、2つの完全に別個の文字列があり、yamlファイルには2つの別個のエントリである必要があります。
report_name: My report
report_name_with_date: My report on %{date}
の存在によってdate
表示する文字列が決まるためparams
、コントローラー メソッドのハッシュでその存在をテストし、タイトルを変数に割り当ててから、それをビューで使用することができます。おそらく次のようなものです:
report_date = params[:report_date]
if report_date && report_date.is_a?(Date)
@report_name = I18n.t('report_name_with_date', date: report_date.to_s)
else
@report_name = I18n.t('report_name')
end
説明したとおりの動作が必要な場合は、とにかく2つのyamlエントリが必要であり、余分な畳み込みが必要であり、2つの文字列を連結して文字列を作成することでI18n no-noを行うことになります。固定された文法的な文構造 (言うまでもなく、これは翻訳者を壁に押し上げます):
report_name_with_date: My report%{on_date}
on_date: on %{date}
次のようなコードで:
report_date = params[:report_date]
if report_date && report_date.is_a?(Date)
on_date = I18n.t('on_date', date: report_date.to_s)
@report_name = I18n.t('report_name_with_date', on_date: " #{on_date}")
else
@report_name = I18n.t('report_name_with_date', on_date: nil)
end
つまり、要約すると、最初の例のように、2 つの個別の文字列全体を使用することになります。
これが私がやった方法です!
最初に翻訳を設定
I18n.t('my_translation', parameter: optional_parameter)
値が nil かどうかを調べる
optional_parameter = value.nil? "" : "with an optional parameter which value is #{value}"
I18n.t('my_translation', parameter: optional_parameter)
=>"This is my translation"
=> "This is my translation with an optional parameter which value is 1"