Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to pluralize "There is/are N object/objects"?

Tags:

Pluralizing a single word is simple:

pluralize(@total_users, "user") 

But what if I want to print "There is/are N user/users":

There are 0 users
There is 1 user
There are 2 users

, i.e., how to pluralize a sentence?

like image 719
l0b0 Avatar asked Jan 09 '12 14:01

l0b0


2 Answers

You can add a custom inflection for it. By default, Rails will add an inflections.rb to config/initializers. There you can add:

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

You will then be able to use pluralize(@total_users, "is") to return is/are using the same rules as user/users.

EDIT: You clarified the question on how to pluralize a sentence. This is much more difficult to do generically, but if you want to do it, you'll have to dive into NLP.

As the comment suggests, you could do something with I18n if you just want to do it with a few sentences, you could build something like this:

  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") 

And in config/locales/en.yml:

  en:     user_count: "There is %{count} user."     user_count_plural: "There are %{count} users." 
like image 164
Martin Gordon Avatar answered Jan 02 '23 22:01

Martin Gordon


This is probably best covered by the Rails i18n pluralization features. Adapted from 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' 
like image 25
s01ipsist Avatar answered Jan 02 '23 23:01

s01ipsist