1 つの単語を複数形にするのは簡単です。
pluralize(@total_users, "user")
しかし、「There is/are N user/users」と出力したい場合はどうすればよいでしょうか:
0 人のユーザー
がいます 1 人のユーザー
がいます 2 人のユーザーがいます
、つまり、文を複数形にする方法は?
1 つの単語を複数形にするのは簡単です。
pluralize(@total_users, "user")
しかし、「There is/are N user/users」と出力したい場合はどうすればよいでしょうか:
0 人のユーザー
がいます 1 人のユーザー
がいます 2 人のユーザーがいます
、つまり、文を複数形にする方法は?
カスタムの抑揚を追加できます。デフォルトでは、Rails は to を追加inflections.rb
しconfig/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."
これはおそらく、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'
マーティン・ゴードンの答えの最初の部分はかなり良いと思います。
あるいは、それはちょっと厄介ですが、いつでも自分でロジックを書くことができます:
"There #{@users.size == 1 ? 'is' : 'are'} #{@users.size} user#{'s' unless @users.size == 1}."