4

私の英語でごめんなさい...

スペイン向けに開発された Rails アプリケーションがあるため、すべてのコンテンツはスペイン語です。したがって、mysql データベースを検索するための検索ボックスがあり、すべての行はスペイン語です。ユーザーができるように検索を改善したいと考えています。単数形または複数形のキーワードを検索します。例:

keyword: patatas
found: patata

keyword: veces
found: vez

keyword: vez
found: veces

keyword: actividades
found: actividad

英語では、これはsingularizeとpluralizeメソッドの助けを借りて比較的簡単になる可能性があります...

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

しかし、スペイン語の場合....

手助け?

ありがとう!

4

4 に答える 4

7

これで、独自の語尾変化を定義できます。

config / initializers/inflections.rbを見てください

あなたの質問に基づく例

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

したがって

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

もちろん、config / inflections.rbの不規則なメソッドを使用するには、キーワードのリストを事前に知っておく必要があります。そのファイルのコメントアウトされた例を見てください。正規表現を使用してルールを定義できる方法は他にもあります。パターンの一致を考案して、既知のパターンに一致する任意のキーワードの語尾変化に影響を与えることができます。

于 2011-01-06T04:46:36.703 に答える
5

英語のデフォルトの語形変化をすべてクリアし、スペイン語で新しい語形変化を作成する必要があります。

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
于 2011-06-28T16:04:06.620 に答える
4

私はこの素晴らしい方法を見つけました:http: //www.slideshare.net/crnixon/advanced-internationalization-with-rails

よろしく。

于 2011-07-25T20:37:48.247 に答える
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"
于 2014-03-26T19:52:17.840 に答える