Есть ли плюрализующая функция в Ruby NOT Rails?

Я пишу код Ruby, а не Rails, и мне нужно обработать что-то вроде этого:

found 1 match
found 2 matches

У меня установлен Rails, возможно, я могу добавить предложение require в верхней части script, но знает ли кто-нибудь о методе RUBY, который плюрализует строки? Есть ли класс, который я могу потребовать, чтобы справиться с этим, если script не является Rails, но у меня установлен Rails?

Изменить: Все эти ответы были близки, но я проверил тот, который заработал у меня. Попробуйте этот метод в качестве помощника при написании Ruby, а не Rails, код:

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

Ответ 1

На самом деле все, что вам нужно сделать, это

require 'active_support/inflector'

и это расширит тип String.

вы можете сделать

"MyString".pluralize

который вернет

"MyStrings"

для 2.3.5 try:

require 'rubygems'
require 'active_support/inflector'

должен получить его, если не попробовать

sudo gem install activesupport

а затем требуется.

Ответ 2

Inflector для большинства ситуаций является излишним.

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

Поместите это в common.rb или где вам нравятся ваши общие функции полезности и...

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 

Ответ 3

Мне лично нравится лингвистический камень, который определенно не связан с рельсами.

# from it frontpage
require 'linguistics'

Linguistics.use :en

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

Ответ 4

Это работает для меня (используя ruby ​​2.1.1 и actionpack 3.2.17):

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

Ответ 5

require 'active_support'
require 'active_support/inflector'

inf = ActiveSupport::Inflector::Inflections.new

чтобы получить инфлектор, не уверен, как вы его используете

Ответ 6

Я определил для этого вспомогательную функцию, я использую ее для каждого пользовательского редактируемого вида индекса модели:

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

то вы можете вызвать его из представления:

<% ovyka_counter @posts %>

для интернационализации (i18n), вы можете добавить это в свои языковые файлы YAML:

  activerecord:
    models:
      post: "Conversation"

Ответ 7

мое решение:

# 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

Итак, вы можете вернуть "отзыв", если вы вызываете cpluralize (1, "отзывы" )

Надеюсь, что это поможет.