Y a-t-il une méthode intégrée en Ruby pour supporter cela?
Réponses
Trop de publicités?Si vous êtes dans Rails, vous pouvez convertir 1
en 1er
, 2
en 2ème
, et ainsi de suite, en utilisant ordinalize
.
Exemple:
1.ordinalize # => "1er"
2.ordinalize # => "2ème"
3.ordinalize # => "3ème"
...
9.ordinalize # => "9ème"
...
1000.ordinalize # => "1000ème"
Et si vous voulez des virgules dans les grands nombres:
number_with_delimiter(1000, :delimiter => ',') + 1000.ordinal # => "1,000ème"
dans ruby vous n'avez pas cette méthode mais vous pouvez ajouter votre propre dans la classe Integer comme ceci.
class Integer
def ordinalize
case self%10
when 1
return "#{self}er"
when 2
return "#{self}ème"
when 3
return "#{self}ème"
else
return "#{self}ème"
end
end
end
22.ordinalize #=> "22ème"
Je voulais une méthode ordinalize qui donne "premier, deuxième, troisième" plutôt que '1er, 2e, 3e' - donc voici un petit extrait de code qui fonctionne jusqu'à 10 (et qui utilise ordinalize de Rails s'il ne trouve pas la correspondance).
class TextOrdinalize
def initialize(value)
@value = value
end
def text_ordinalize
ordinalize_mapping[@value] || @value.ordinalize
end
private
def ordinalize_mapping
[nil, "premier", "deuxième", "troisième", "quatrième", "cinquième", "sixième", "septième",
"huitième", "neuvième", "dixième" ]
end
end
Voici comment cela fonctionne :
TextOrdinalize.new(1).text_ordinalize #=> 'premier'
TextOrdinalize.new(2).text_ordinalize #=> 'deuxième'
TextOrdinalize.new(0).text_ordinalize #=> '0er'
TextOrdinalize.new(100).text_ordinalize #=> '100ème'
Que diriez-vous de Linguistique? Ce n'est pas inclus de base. Si vous voulez l'inclure, vous devez le configurer en utilisant des hashs, etc.. Voir aussi des exemples ici