我想使用可选参数制作翻译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"
这可能吗?
答案 0 :(得分: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"
答案 1 :(得分:18)
我会说这是可能的,虽然不推荐。你有两个完全独立的字符串,基于你在@Yanhao回答中的评论,我想说它们应该是你的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 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 :(得分:4)
这就是我做的方式!
首先设置我的翻译
I18n.t('my_translation', parameter: optional_parameter)
检查值是否为零
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"