36

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"

これは可能ですか?

4

4 に答える 4

36

はい、間違いなく。次のように翻訳を書くだけです。

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"
于 2012-11-01T13:43:16.523 に答える
19

推奨されていませんが、可能だと思います。@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 つの個別の文字列全体を使用することになります。

于 2012-11-02T09:05:06.560 に答える
3

これが私がやった方法です!

  1. 最初に翻訳を設定

    I18n.t('my_translation', parameter: optional_parameter)
    
  2. 値が nil かどうかを調べる

    optional_parameter = value.nil? "" : "with an optional parameter which value is #{value}"
    I18n.t('my_translation', parameter: optional_parameter)
    
    • 値がゼロの場合 =>"This is my translation"
    • 値が 1 の場合=> "This is my translation with an optional parameter which value is 1"
于 2015-08-26T02:39:42.897 に答える