Ruby NOT Rails中是否有复数forms的函数?
我写了一些Ruby代码,而不是Rails,我需要处理这样的事情:
found 1 match found 2 matches
我已经安装了Rails,所以也许我可以在脚本的顶部添加一个require
子句,但是有谁知道一个将string复数化的RUBY方法? 有没有一个类,我可以要求,可以处理这个如果脚本不是Rails,但我已经安装了Rails?
编辑:所有这些答案都很接近,但我检查了它为我工作的一个。 在编写Ruby而不是Rails代码时,请尝试以下方法作为帮助程序:
def pluralize(number, text) return text.pluralize if number != 1 text end
其实所有你需要做的是
require 'active_support/inflector'
这将扩展stringtypes。
你可以这样做
"MyString".pluralize
这将返回
"MyStrings"
为2.3.5试试:
require 'rubygems' require 'active_support/inflector'
应该得到它,如果不尝试
sudo gem install activesupport
然后要求。
在大多数情况下,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
我个人喜欢绝对不是与轨道相关的语言学gem 。
# from it's frontpage require 'linguistics' Linguistics.use :en "box".en.plural #=> "boxes" "mouse".en.plural #=> "mice" # etc
这适用于我(使用ruby2.1.1和行动包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
得到这个inflector,不知道你如何使用它
我为此定义了一个辅助函数,我将其用于每个用户可编辑模型的索引视图:
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"
我的解决scheme
# 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,'reviews'),则可以返回“review”
希望有所帮助。