2012-01-09 9 views

答えて

29

カスタムの屈曲を追加できます。デフォルトでは、Railsはinflections.rbconfig/initializersに追加します。そこには、追加することができます:あなたは、ユーザー/ユーザーと同じルールを使用している/されて返すようにpluralize(@total_users, "is")を使用することができます

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

EDIT:文を複数形にする方法の問題を明確にしました。これは一般的に行うのがはるかに難しいですが、それをしたい場合はdive into NLPにする必要があります。

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

コメントはあなただけのいくつかの文章でそれをしたい場合、あなたはあなたがこのような何かを構築することができ、国際化で何かができる通り

+0

から適応、私は質問には、例えば国際化とpluralisationのミックスのようになります。つまり、何かをユーザーの数を補間する方法についての詳細だと思います''複数形(@total_users、 "$ 1 user") '...明らかに惨めに失敗するでしょう:) – Pierre

+0

[Agile Development with Rails、第4版](http://pragprog.com/book/rails4/agile- web-development-with-rails)(217ページ)では、エラーメッセージを複数にするためにYAMLファイルに 'one'と' other'を使います。これはページエラーを表示するための特別なコードなしで使用されるので、 't()'で直接動作するはずです。 – l0b0

+0

私がこのソリューションでヒットした1つの問題は、あなたのモデルがすべて「あなたのコードでブレークする」(私のケースではExtendedCare)で終わる場合です – Doug

4

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

また、それは一種の厄介だが、あなたはいつもちょうどロジックを自分で書くことができます。

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

これは、おそらく最高の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' 
関連する問題