2010-07-14 2 views
2

У меня есть сценарий, когда мне нужно предоставить пользователям сообщение. Сообщение может быть в следующих формах:English list

  • "Джон любит поесть < B> белки </b>."
  • «Джон любит есть < b> белка </b> и < b> gator </b>."
  • "Джон любит поесть < B> белки </b>, < B> аллигатора </b> и < B> birdpoop </b>."
  • "Джон любит поесть < B> белки </b>, < B> аллигатора </b>, < B> birdpoop </b> и < B> зефир </b>."
  • ...

Так что я думаю, что вы можете увидеть английский образец здесь. Мой вопрос заключается в том, как взять массив вещей (1 ... n), который Джон любит есть (например, белка) и динамически превращать его в одну из вышеперечисленных английских форм в зависимости от количества элементов в массиве?

+1

Надеюсь, это был всего лишь пример. :) – ChaosPandion

ответ

4

Поскольку вопрос имеет тег ruby-on-rails, я предполагаю, что вы работаете в среде Rails, и в этом случае Array#to_sentence (добавленный ActiveSupport) - это то, что вы ищете.

+0

это выглядит хорошо, но мне нужно отформатировать каждую пищу жирным шрифтом. могу ли я выполнить это с помощью этого метода? – keruilin

+2

'array.map {| a | "# {a}"} .to_sentence' –

+1

В дополнение к этому, в Rails 2.3 to_sentence следует Чикагское руководство по стилю в отношении последней запятой, поэтому вы получаете 1, 2 и 3 вместо английского английского 1, 2 и 3. Возможно, вам придется изменить способ работы to_sentence (last_word_connector) http://github.com/rails/rails/blob/master/activesupport/lib/active_support/locale/en.yml#L36 - довольно тривиальное изменение i18n. –