将一组动态插值参数传递给 rails-i18n?
Passing a dynamic set of interpolation arguments to rails-i18n?
我正在升级到 Rails 6.1.3 以及 rails-i18n
(1.8.9) 的最新版本。
我曾经能够像这样传递插值参数的散列:
I18n.with_locale(:en) do
message = I18n.translate("foo", message_args.merge({default: ""}))
end
但这现在引发了:
ArgumentError (wrong number of arguments (given 2, expected 0..1)):
将它们作为参数传递 as described 工作正常:
I18n.with_locale(:en) do
message = I18n.translate("foo", bar: "baz", default: "")
end
检查 gems translate
方法时,它似乎在版本之间发生了变化:
# 1.5.3
def translate(*args)
...
end
# 1.8.9
def translate(key = nil, throw: false, raise: false, locale: nil, **options)
...
end
有人知道我是如何重新获得传递一组动态插值参数的能力的吗?
由于翻译助手 (https://api.rubyonrails.org/classes/ActionView/Helpers/TranslationHelper.html) 中的翻译方法接受关键字参数散列,因此您需要使用双 splat 运算符 **
。此答案中的更多信息:
我正在升级到 Rails 6.1.3 以及 rails-i18n
(1.8.9) 的最新版本。
我曾经能够像这样传递插值参数的散列:
I18n.with_locale(:en) do
message = I18n.translate("foo", message_args.merge({default: ""}))
end
但这现在引发了:
ArgumentError (wrong number of arguments (given 2, expected 0..1)):
将它们作为参数传递 as described 工作正常:
I18n.with_locale(:en) do
message = I18n.translate("foo", bar: "baz", default: "")
end
检查 gems translate
方法时,它似乎在版本之间发生了变化:
# 1.5.3
def translate(*args)
...
end
# 1.8.9
def translate(key = nil, throw: false, raise: false, locale: nil, **options)
...
end
有人知道我是如何重新获得传递一组动态插值参数的能力的吗?
由于翻译助手 (https://api.rubyonrails.org/classes/ActionView/Helpers/TranslationHelper.html) 中的翻译方法接受关键字参数散列,因此您需要使用双 splat 运算符 **
。此答案中的更多信息: