Плюрализировать и объединять для испанского языка

Извините за мой английский...

У меня есть приложение 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"
Другие вопросы по тегам