el_*_*ick 4 ruby-on-rails internationalization pluralize singular
对不起我的英语不好...
我有一个为西班牙开发的rails应用程序,因此,所有内容都是西班牙语,所以,我有一个搜索框在mysql数据库中搜索,所有行都是西班牙语,我想改进我的搜索,以允许用户以单数或复数形式搜索关键字,例如:
keyword: patatas
found: patata
keyword: veces
found: vez
keyword: vez
found: veces
keyword: actividades
found: actividad
Run Code Online (Sandbox Code Playgroud)
在英语中,在单一化和复数化方法的帮助下,这可能相对容易...
where `searching_field` like '%singularized_keyword%' or `searching_field` like '%pluralized_keyword%'
Run Code Online (Sandbox Code Playgroud)
但是,对于西班牙语....
一些帮助?
谢谢!
您现在可以定义自己的变形.
查看config/initializers/inflections.rb
一个基于你的问题的例子
ActiveSupport::Inflector.inflections do |inflect|
inflect.irregular 'patata', 'patatas'
end
Run Code Online (Sandbox Code Playgroud)
从而
"patata".pluralize # => "patatas"
"patatas".singularize #=> "patata"
Run Code Online (Sandbox Code Playgroud)
当然,您需要事先知道关键字列表,以便在config/inflections.rb中使用不规则方法.看看该文件中注释掉的示例.还有其他方法允许使用正则表达式定义规则,您可以设计模式匹配以影响与已知模式匹配的任意关键字的变形.
您必须清除所有英语默认变形并用西班牙语创建新变形.
添加config/initializers/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
Run Code Online (Sandbox Code Playgroud)
我发现了这个好方法: http ://www.slideshare.net/crnixon/advanced-internationalization-with-rails
问候。
归档时间: |
|
查看次数: |
4332 次 |
最近记录: |