翻訳したい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エントリが必要になります。and追加の畳み込みがあります-and I18n -いいえ、2つの文字列を連結して文字列を作成します。これは、固定の文法文構造を前提としています(これはもちろん、翻訳者を壁に押し上げます)。
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"