21

1 つの単語を複数形にするのは簡単です。

pluralize(@total_users, "user")

しかし、「There is/are N user/users」と出力したい場合はどうすればよいでしょうか:

0 人のユーザー
がいます 1 人のユーザー
がいます 2 人のユーザーがいます

、つまり、を複数形にする方法は?

4

4 に答える 4

34

カスタムの抑揚を追加できます。デフォルトでは、Rails は to を追加inflections.rbconfig/initializersます。そこに追加できます:

ActiveSupport::Inflector.inflections do |inflect|
  inflect.irregular "is", "are"
end

pluralize(@total_users, "is")その後、ユーザー/ユーザーと同じルールを使用して is/are を返すことができます。

編集:文を複数形にする方法に関する質問を明確にしました。これを一般的に行うのははるかに困難ですが、やりたい場合はNLP に飛び込む必要があります。

コメントが示唆するように、いくつかの文でそれを行いたい場合は、I18n で何かを行うことができます。次のようなものを作成できます。

  def pluralize_sentence(count, i18n_id, plural_i18n_id = nil)
    if count == 1
      I18n.t(i18n_id, :count => count)
    else
      I18n.t(plural_i18n_id || (i18n_id + "_plural"), :count => count)
    end
  end

  pluralize_sentence(@total_users, "user_count")

そしてでconfig/locales/en.yml

  en:
    user_count: "There is %{count} user."
    user_count_plural: "There are %{count} users."
于 2012-01-09T15:01:58.110 に答える
7

これはおそらく、Rails i18n の複数形化機能によって最もよくカバーされます。http://guides.rubyonrails.org/i18n.html#pluralizationから適応

I18n.backend.store_translations :en, :user_msg => {
  :one => 'There is 1 user',
  :other => 'There are %{count} users'
}
I18n.translate :user_msg, :count => 2
# => 'There are 2 users'
于 2013-04-14T02:19:31.140 に答える
5

マーティン・ゴードンの答えの最初の部分はかなり良いと思います。

あるいは、それはちょっと厄介ですが、いつでも自分でロジックを書くことができます:

"There #{@users.size == 1 ? 'is' : 'are'} #{@users.size} user#{'s' unless @users.size == 1}."
于 2012-01-09T16:43:18.517 に答える