2011-01-05 72 views
4

对不起我的英语...以复数和singularize为西班牙语

我已经发展到西班牙的Rails应用程序,因此,所有的内容是西班牙语,所以,我有一个搜索框,在MySQL数据库中进行搜索,所有行的西班牙语,我想提高我的搜索允许用户搜索的关键字,单数还是复数形式,例如:

keyword: patatas 
found: patata 

keyword: veces 
found: vez 

keyword: vez 
found: veces 

keyword: actividades 
found: actividad 

在英语中,这可能是与singularize的帮助相对容易和多种方法...

where `searching_field` like '%singularized_keyword%' or `searching_field` like '%pluralized_keyword%' 

但是,西班牙文....

有些帮助吗?

谢谢!

回答

7

你现在可以定义你自己的变化。

看在配置/初始化/是inflections.rb

根据你的问题的例子

ActiveSupport::Inflector.inflections do |inflect| 
    inflect.irregular 'patata', 'patatas' 
end 

因此

"patata".pluralize # => "patatas" 
"patatas".singularize #=> "patata" 

当然,你需要知道的关键字提前列表在config/inflections.rb中使用不规则的方法。查看该文件中注释掉的示例。还有其他一些方法可以使用正则表达式定义规则,并且可以设计模式匹配来影响与已知模式匹配的任意关键字的拐点。

5

您必须清除英文中的所有默认变形并用西班牙文创建新变形。

添加在配置/初始化/是inflections.rb

ActiveSupport::Inflector.inflections do |inflect| 
    inflect.clear :all 

    inflect.plural /([^djlnrs])([A-Z]|_|$)/, '\1s\2' 
    inflect.plural /([djlnrs])([A-Z]|_|$)/, '\1es\2' 
    inflect.plural /(.*)z([A-Z]|_|$)$/i, '\1ces\2' 

    inflect.singular /([^djlnrs])s([A-Z]|_|$)/, '\1\2' 
    inflect.singular /([djlnrs])es([A-Z]|_|$)/, '\1\2' 
    inflect.singular /(.*)ces([A-Z]|_|$)$/i, '\1z\2' 
end 
3

看来,现在有可能现在使用本地化的语调:

# config/initializers/inflections.rb 
ActiveSupport::Inflector.inflections(:es) do |inflect| 
    inflect.plural /([^djlnrs])([A-Z]|_|$)/, '\1s\2' 
    inflect.plural /([djlnrs])([A-Z]|_|$)/, '\1es\2' 
    inflect.plural /(.*)z([A-Z]|_|$)$/i, '\1ces\2' 

    inflect.singular /([^djlnrs])s([A-Z]|_|$)/, '\1\2' 
    inflect.singular /([djlnrs])es([A-Z]|_|$)/, '\1\2' 
    inflect.singular /(.*)ces([A-Z]|_|$)$/i, '\1z\2' 
end 

随着那(并重新启动服务器后),您可以使用:

"trebol".pluralize(:es) #=> "treboles"