web-dev-qa-db-fra.com

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

J'écris du code Ruby, pas Rails, et je dois gérer quelque chose comme ceci:

found 1 match
found 2 matches

J'ai installé Rails, alors je pourrais peut-être ajouter une clause require en haut du script, mais est-ce que quelqu'un connaît une méthode Ruby qui pluralise les chaînes? Existe-t-il une classe dont je peux avoir besoin et qui peut traiter ce problème si le script n'est pas Rails mais que j'ai Rails installé?

Edit: Toutes ces réponses étaient proches, mais j’ai coché celle qui m’avait permis de travailler pour moi . Essayez cette méthode comme aide lors de l’écriture de Ruby, pas de Rails, code:

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

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.

67
scaney

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 où que vous soyez, vos fonctions d’utilité générale et ...

require "common" 

puts x(0, 'result') # 0 results
puts x(1, 'result') # 1 result
puts x(2, 'result') # 2 results

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

Personnellement, j’aime bien la gemme linguistique qui n’est certainement pas liée à Rails.

# from it's frontpage
require 'linguistics'

Linguistics.use :en

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

Cela fonctionne pour moi (avec Ruby 2.1.1 et actionpack 3.2.17):

~$ irb
>> require 'action_view'
=> true
>> include ActionView::Helpers::TextHelper
=> Object
>> pluralize(1, 'cat')
=> "1 cat"
>> pluralize(2, 'cat')
=> "2 cats"
2
EffectiveQA
require 'active_support'
require 'active_support/inflector'

inf = ActiveSupport::Inflector::Inflections.new

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

1
scaney

ma solution:

# Custom pluralize - will return text without the number as the default pluralize.
def cpluralize(number, text)
  return text.pluralize if number != 1 
  return text.singularize if number == 1
end

Ainsi, vous pouvez avoir «avis» renvoyé si vous appelez cpluralize (1, «avis»)

J'espère que cela pourra aider.

0
Giang Nguyen

J'ai défini une fonction d'assistance pour cela, je l'utilise pour la vue d'index de chaque modèle modifiable 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"
0
VikoAlucard