与可选参数.yml翻译(Translation in .yml with optional para

2019-08-02 04: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"

这可能吗?

Answer 1:

当然是。 你只写这样的译文:

my_translation: This is my translation with an optional parameter which value is %{parameter}

是真的参数可选? 在上面的翻译,你必须提供所有参数。

UPDATE:对不起,我太很快回答。 我不认为这是容易做到的。 也许最简单的方法是这样的:

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


Answer 2:

我会说这是可能的,但不建议使用。 你有两个完全独立的字符串的基础上,@腌好的回答您的意见,我会说,他们应该在你的YAML文件中的两个独立的条目:

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

如果你想要的行为完全按照你所描述的,你需要两个YAML条目反正, 你有额外的卷积, 并且你会没有没有通过创建一个字符串,通过连接两个字符串,它假定做的I18n一个固定的语法句子结构(更不用说此驱动翻译了墙):

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

因此,总的来说,我会说去用两个独立的全字符串,像第一个例子。



Answer 3:

这是我做的方式!

  1. 首先设置我的翻译

     I18n.t('my_translation', parameter: optional_parameter) 
  2. 检查值是零

     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"


文章来源: Translation in .yml with optional parameter