2012-01-09 11 views

cevap

29

Bunun için özel bir bükülme ekleyebilirsiniz. Varsayılan olarak, Rails config/initializers'a inflections.rb ekleyecektir. Orada ekleyebilirsiniz: Daha sonra kullanıcı/kullanıcılar ile aynı kuralları kullandığı/edilir dönmek için pluralize(@total_users, "is") kullanmak mümkün olacak

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

.

EDIT: Bir cümleyi çoğaltma konusunda soruya açıklık getirdiniz. Bu, genel olarak yapmak çok daha zordur, ancak bunu yapmak isterseniz, dive into NLP'a sahip olmanız gerekir.

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

Ve config/locales/en.yml yılında:

en: 
    user_count: "There is %{count} user." 
    user_count_plural: "There are %{count} users." 

comment sadece birkaç cümle ile yapmak istiyorsan, böyle bir şey inşa edebileceğini, I18n ile bir şeyler yapabileceğini anlaşılacağı gibi

+0

uyarlanan i soru örn i18n ve pluralisation arasında bir karışımı gibi görünebilir yani şey kullanıcı sayısını interpole konusunda daha fazla olduğunu düşünüyorum çoğul (@total_users, "1 $ kullanıcı var") '... açıkça sefil başarısız olacak :) – Pierre

+0

[Rails, Dördüncü Baskı ile Çevik Geliştirme] (http://pragprog.com/book/rails4/agile- web-development-with-ray'lar, sayfa 217, hata mesajlarını çoğaltmak için YAML dosyasında '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''' komutunu kullanır. Bu, sayfa hatalarını görüntülemek için herhangi bir ekstra kod kullanılmadan kullanılır, bu nedenle doğrudan 't() 'ile çalışmalıdır. – l0b0

+0

Bu çözümle karşılaştığım bir sorun, 'are' (benim durumumda ExtendedCare) ile biten bir modeliniz varsa, kodlarınızın tümü – Doug

4

Martin Gordon'un cevabının ilk kısmı oldukça iyi.

Alternatif olarak, biraz dağınık ama her zaman sadece üzerinde lojik kendiniz yazabilir:

"There #{@users.size == 1 ? 'is' : 'are'} #{@users.size} user#{'s' unless @users.size == 1}." 
5

Bu muhtemelen en iyi Raylar i18n çoğulculuk özellikleri kaplıdır. Aslında 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' 
İlgili konular