正如你所看到的,这不是很干:
en:
dashboard_policy:
statistics?: 'You cannot access the statistics panel because you are not an admin!content'
forums?: 'You cannot access the forums panel because you are not an admin!'
browser?: 'You cannot access the browser panel because you are not an admin!'
users?: 'You cannot access the users panel because you are not an admin!'
在YAML中可以有方法或变量,以便不再重复自己吗?
答案 0 :(得分:1)
您无法直接在YAML中使用变量,但您可以将它们嵌入字符串中,以便程序代码进行插值。但是,您可以使用锚点和别名节点对YAML进行大量干扰。例如:
en:
warn_not_admin: &warn_not_admin
"You can't access this panel because you aren't an admin."
dashboard_policy:
statistics?: *warn_not_admin
forums?: *warn_not_admin
browser?: *warn_not_admin
users?: *warn_not_admin
这定义了一个名为 warn_not_admin 的锚,将其分配给:warn_not_admin键的值,然后在:dashboard_policy键的每个子元素中引用该节点。
请注意,在这种特殊情况下,我们会重复使用相同的消息。通过假设您的用户知道他们正在处理哪个面板,这会增加一些干扰。如果他们确实需要被告知消息所指的面板,在代码中使用插值(如this other answer所述)可能是一个合理的选择。
答案 1 :(得分:1)
除了重用整个值或使用%{variable}
表示法将变量传递给转换之外,您不能在yml中使用变量。
所以在你的情况下我会写一些类似的东西:
en:
dashboard_policy:
access_denied: 'You cannot access the %{location} because you are not an admin!'
locations:
forums: "forums panel"
...
然后在你看来,即:
<%= t('dashboard_policy.access_denied', location: t('locations.forums')) %>