web-dev-qa-db-ja.com

オプションのパラメーターを使用した.ymlの翻訳

翻訳したい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"

これは可能ですか?

32

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

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"
36
Yanhao

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

19
Paul Fioravanti

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

  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)
    
    • 値がnil =>"This is my translation"
    • 値が1の場合=> "This is my translation with an optional parameter which value is 1"