Плюрализировать и объединять для испанского языка
Извините за мой английский...
У меня есть приложение rails, разработанное для испанского языка, поэтому весь контент на испанском языке, поэтому у меня есть окно поиска для поиска в базе данных mysql, все строки на испанском языке, я хотел бы улучшить свой поиск, чтобы позволить пользователям искать ключевые слова в единственном или множественном числе, например:
keyword: patatas
found: patata
keyword: veces
found: vez
keyword: vez
found: veces
keyword: actividades
found: actividad
На английском языке это может быть относительно легко с помощью методов единственного и множественного числа...
where `searching_field` like '%singularized_keyword%' or `searching_field` like '%pluralized_keyword%'
Но для испанского....
Некоторая помощь?
Спасибо!
4 ответа
Я нашел этот отличный способ: http://www.slideshare.net/crnixon/advanced-internationalization-with-rails
С уважением.
Вы можете определить свои собственные склонности сейчас.
посмотри в config/initializers/inflections.rb
пример, основанный на вашем вопросе
ActiveSupport::Inflector.inflections do |inflect|
inflect.irregular 'patata', 'patatas'
end
таким образом
"patata".pluralize # => "patatas"
"patatas".singularize #=> "patata"
Конечно, вам необходимо знать список ключевых слов заранее, чтобы использовать неправильный метод в 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
Кажется, теперь можно использовать локализованные перегибы:
# 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"