Есть ли плюрализующая функция в 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, "отзывы" )
Надеюсь, что это поможет.