Rails 中某些复合词的复数化规则
Pluralization rule for some compound terms in Rails
我想为一些未正确复数化的术语创建复数化规则。我会把它放在我的 inflections.rb 文件中。
这些术语是一些复合词,我可以将第一个单词而不是第二个单词复数,但就我而言,我无法选择仅对第一个单词应用复数功能。例如:
'base of knowledge'.pluralize
应该 return 'bases of knowledge'
而不是 'base of knowledges'
我试过像这样的正则表达式 /\sof\s/
来找到字符串中的 of
部分,但无法编写正确的词形变化规则。
inflect.plural(???, ???)
Obs:我不是在寻找语言解决方法,例如 'knowledge base'。这个例子只是说明性的。
试试这个:
创建一个名为:config/initializers/inflections.rb
的文件
简单的非动态示例:
ActiveSupport::Inflector.inflections do |inflect|
inflect.irregular 'base of knowledge', 'bases of knowledge'
end
这只需要您指定每个不规则的复数短语而不是单词。只要调用pluralize方法,它就会找到。
编辑:
如果您只想要一种方法来处理所有这些类型的更改。您可以定义一个 irregular_pluralize
方法,它接受与 pluralize 相同的输入或接受 3 个对象。
def irregular_pluralize(count, string)
if count > 1
split_string = string.split(" ")
size = split_string.size
first = split_string.first
first.pluralize + " " + split_string.last(size - 1).join(" ")
else
string
end
end
我找到了一种通过添加此规则来改变复合词的方法:
inflect.plural(/(^\w+)\s(of\s\w+)/i, 's ')
然后我得到:
'base of knowledge'.pluralize -> 'bases of knowledge'
符合预期
我想为一些未正确复数化的术语创建复数化规则。我会把它放在我的 inflections.rb 文件中。
这些术语是一些复合词,我可以将第一个单词而不是第二个单词复数,但就我而言,我无法选择仅对第一个单词应用复数功能。例如:
'base of knowledge'.pluralize
应该 return 'bases of knowledge'
而不是 'base of knowledges'
我试过像这样的正则表达式 /\sof\s/
来找到字符串中的 of
部分,但无法编写正确的词形变化规则。
inflect.plural(???, ???)
Obs:我不是在寻找语言解决方法,例如 'knowledge base'。这个例子只是说明性的。
试试这个:
创建一个名为:
config/initializers/inflections.rb
的文件
简单的非动态示例:
ActiveSupport::Inflector.inflections do |inflect| inflect.irregular 'base of knowledge', 'bases of knowledge' end
这只需要您指定每个不规则的复数短语而不是单词。只要调用pluralize方法,它就会找到。
编辑:
如果您只想要一种方法来处理所有这些类型的更改。您可以定义一个 irregular_pluralize
方法,它接受与 pluralize 相同的输入或接受 3 个对象。
def irregular_pluralize(count, string)
if count > 1
split_string = string.split(" ")
size = split_string.size
first = split_string.first
first.pluralize + " " + split_string.last(size - 1).join(" ")
else
string
end
end
我找到了一种通过添加此规则来改变复合词的方法:
inflect.plural(/(^\w+)\s(of\s\w+)/i, 's ')
然后我得到:
'base of knowledge'.pluralize -> 'bases of knowledge'
符合预期