¿Existe una función de pluralizar en Ruby NOT Rails?
require pluralize (7)
Estoy escribiendo un código Ruby, no Rails, y necesito manejar algo como esto:
found 1 match
found 2 matches
Tengo Rails instalado, así que tal vez pueda agregar una cláusula require
en la parte superior del script, pero ¿alguien sabe de un método RUBY que pluraliza cadenas? ¿Hay alguna clase que pueda requerir que pueda manejar esto si el script no es Rails pero tengo Rails instalado?
Edit: Todas estas respuestas estaban cerca, pero marqué la que funcionó para mí. Pruebe este método como un ayudante al escribir código Ruby, no Rails:
def pluralize(number, text)
return text.pluralize if number != 1
text
end
En realidad todo lo que necesitas hacer es
require ''active_support/inflector''
y que se extenderá el tipo de cadena.
entonces puedes hacer
"MyString".pluralize
que volverá
"MyStrings"
para 2.3.5 intente:
require ''rubygems''
require ''active_support/inflector''
Deberías conseguirlo, si no intentarlo.
sudo gem install activesupport
y luego lo requiere.
Esto me funciona (usando ruby 2.1.1 y actionpack 3.2.17):
~$ irb
>> require ''action_view''
=> true
>> include ActionView::Helpers::TextHelper
=> Object
>> pluralize(1, ''cat'')
=> "1 cat"
>> pluralize(2, ''cat'')
=> "2 cats"
He definido una función auxiliar para eso, la uso para la vista de índice de cada modelo editable del usuario:
def ovyka_counter(array, name=nil, plural=nil)
name ||= array.first.class.human_name.downcase
pluralize(array.count, name, plural)
end
entonces puedes llamarlo desde la vista:
<% ovyka_counter @posts %>
para la internacionalización (i18n), luego puede agregar esto a sus archivos YAML locales:
activerecord:
models:
post: "Conversation"
Inflector es una exageración para la mayoría de las situaciones.
def x(n, singular, plural=nil)
if n == 1
"1 #{singular}"
elsif plural
"#{n} #{plural}"
else
"#{n} #{singular}s"
end
end
Ponga esto en common.rb, o donde quiera que le gusten sus funciones de utilidad general y ...
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
Personalmente, me gusta la gema lingüística que definitivamente no está relacionada con los rieles.
# from it''s frontpage
require ''linguistics''
Linguistics.use :en
"box".en.plural #=> "boxes"
"mouse".en.plural #=> "mice"
# etc
mi solución:
# 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
Por lo tanto, puede tener ''revisión'' devuelta si llama a cpluralize (1, ''reseñas'')
Espero que ayude.
require ''active_support''
require ''active_support/inflector''
inf = ActiveSupport::Inflector::Inflections.new
Para obtener el inflector, no estoy seguro de cómo lo usas.