63 votes

Existe-t-il une fonction de pluralisation dans Ruby NOT Rails?

Je suis en train d'écrire du code Ruby, pas de Rails, et j'ai besoin de manipuler quelque chose comme ceci:

found 1 match
found 2 matches

J'ai Rails installés de sorte que peut-être je pourrais être en mesure d'ajouter un require clause en haut du script, mais personne ne sait d'une méthode RUBY qui pluralizes cordes? Est-il de classe I peuvent exiger que peut faire face à cette si le script n'est pas de Rails, mais j'ai des Rails installés?

Edit: Toutes ces réponses étaient proches, mais j'ai coché celui qui l'a obtenu de travailler pour moi. Essayez cette méthode comme une aide lors de la rédaction de Ruby, pas de Rails, de code:

def pluralize(number, text)
  return text.pluralize if number != 1
  text
end

83voto

scaney Points 1161

En fait, tout ce que vous devez faire est

 require 'active_support/inflector'
 

et cela étendra le type String.

vous pouvez alors faire

 "MyString".pluralize
 

qui reviendra

 "MyStrings"
 

pour 2.3.5, essayez:

 require 'rubygems'
require 'active_support/inflector'
 

devrait l'obtenir, sinon essayez

 sudo gem install activesupport
 

et puis le nécessite.

58voto

Kalessin Points 239

Inflector est excessif dans la plupart des situations.

 def x(n, singular, plural=nil)
    if n == 1
        "1 #{singular}"
    elsif plural
        "#{n} #{plural}"
    else
        "#{n} #{singular}s"
    end
end
 

Mettez cela en commun.rb, ou partout où vous le souhaitez, vos fonctions d’utilité générale et ...

 require "common" 

puts x(0, 'tree') # 0 trees
puts x(1, 'tree') # 1 tree
puts x(2, 'tree') # 2 trees

puts x(0, 'match', 'matches') # 0 matches
puts x(1, 'match', 'matches') # 1 match 
puts x(2, 'match', 'matches') # 2 matches 
 

15voto

hawx Points 693

Personnellement, j'aime bien le joyau de la linguistique qui n'est pas lié aux rails.

 # from it's frontpage
require 'linguistics'

Linguistics.use :en

"box".en.plural #=> "boxes"
"mouse".en.plural #=> "mice"
# etc
 

1voto

scaney Points 1161
 require 'active_support'
require 'active_support/inflector'

inf = ActiveSupport::Inflector::Inflections.new
 

pour obtenir l'inflecteur, vous ne savez pas comment vous l'utilisez

0voto

VikoAlucard Points 11

J'ai défini une fonction d'assistance pour cela, je l'utilise pour la vue d'index de chaque modèle éditable par l'utilisateur:

   def ovyka_counter(array, name=nil, plural=nil)
    name ||= array.first.class.human_name.downcase
    pluralize(array.count, name, plural)
  end
 

alors vous pouvez l'appeler depuis la vue:

 <% ovyka_counter @posts %>
 

pour l'internationalisation (i18n), vous pouvez ensuite ajouter ceci à vos fichiers YAML de paramètres régionaux:

   activerecord:
    models:
      post: "Conversation"
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X