如何在Rails i18n yml文件中嵌入Ruby代码?

时间:2018-04-29 02:59:49

标签: ruby-on-rails internationalization

我想基于count参数创建一个可以是单数或复数的句子:

# When count is 1
"This profile still contains 1 post"

# When count is 2
"This profile still contains 2 posts"

使用Rails i18n机制,我相信我必须嵌入Ruby代码才能获得“post”这个词的正确复数。我正在尝试像这样构建它,但它不起作用:

# config/locales/en.yml
en:
  message: "This profile still contains %{count} <%= Post.model_name.human(count: count).lowercase %>"

# Output of I18n.translate(:message, count: 2)
"This profile still contains 2 <%= Post.model_name.human(count: count).lowercase %>"

我已经尝试<%= %>%{ }#{ }{{ }},但都失败了。

甚至可以在i18n文件中嵌入Ruby代码吗?怎么样?

2 个答案:

答案 0 :(得分:3)

根据docs,您应该这样做:

en:
  message:
    one: This profile still contains 1 post
    other: This profile still contains %{count} posts

并称之为:

I18n.t('message', count: count)

希望它有所帮助!

答案 1 :(得分:1)

使用pluralize方法:

配置/区域设置/ en.yml

en:
  message: "This profile still contains"

视图

"#{I18n.t('message')} #{Post.count} #{Post.model_name.human.pluralize(Post.count).downcase}."

#=> output : "This profile still contains 1 post." or "This profile still contains XX posts"

它有效,但我建议你将所有视图逻辑放在帮手中。

注意:我使用全局Post.count作为示例,但您可以将所需的任何计数用作user.posts.count等...