множественного числа и единственного числа для испанского языка - PullRequest
4 голосов
/ 05 января 2011

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

У меня есть приложение 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 ]

7 голосов
/ 06 января 2011

Теперь вы можете определить свои собственные изгибы.

посмотрите в config / initializers / inflections.rb

пример, основанный на вашем вопросе

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

Таким образом

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

Конечно, вам нужно знать список ключевых слов заранее, чтобы использовать неправильный метод в config / inflections.rb. Посмотрите на закомментированные примеры в этом файле. Существуют и другие методы, позволяющие определять правила с помощью регулярных выражений, и вы можете разработать сопоставления с образцами, чтобы повлиять на перегибы для произвольных ключевых слов, которые соответствуют известным шаблонам.

5 голосов
/ 28 июня 2011

Вы должны очистить все отклонения по умолчанию на английском и создать новые на испанском.

Добавить 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
4 голосов
/ 26 июля 2011

Я нашел этот отличный способ: http://www.slideshare.net/crnixon/advanced-internationalization-with-rails

Привет.

3 голосов
/ 26 марта 2014

Похоже, теперь можно использовать локализованные перегибы:

# 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"
...