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
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.
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
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
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"
require 'active_support'
require 'active_support/inflector'
inf = ActiveSupport::Inflector::Inflections.new
pour obtenir l'inflecteur, vous ne savez pas comment vous l'utilisez
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.
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"