Как встроить код Ruby в файл Rails i18n yml? - PullRequest
0 голосов
/ 29 апреля 2018

Я хочу создать предложение, которое может быть единственным или множественным числом на основе параметра 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 %>"

Я уже пробовал <%= %>, %{ }, #{ } и {{ }}, и все не удалось.

Можно ли даже вставить код Ruby в файл i18n? Как?

Ответы [ 2 ]

0 голосов
/ 29 апреля 2018

Используйте метод 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 и т.д ...

0 голосов
/ 29 апреля 2018

Согласно документам , вы должны сделать что-то вроде этого:

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

И назовите это:

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

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...