4

一部の記事のタイトルにパーマリンクのような動作を作成しようとしていますが、パーマリンク用の新しい db フィールドを追加したくありません。そこで、記事のタイトルを以下から変換するヘルパーを作成することにしました。

" O "focoasă" a pornit cruciada, împotriva bărbaţilor zgârciţi " から " o-focoasa-a-pornit-cruciada-impotriva-barbatilor-zgarciti ".

スペースをハイフンに置き換え、他の特殊文字 (- 以外) を削除する方法を見つけました。

title.gsub(/\s/, "-").gsub(/[^\w-]/, '').downcase

1 つの .gsub メソッド呼び出しから文字を特定の他の文字に置き換える他の方法があるかどうか疑問に思っているので、すべての title.gsub("ă", "a") メソッドをチェーンする必要はありません。私のローカリゼーションの UTF-8 特殊文字。

すべての特殊文字とそれに対応するものを使用してハッシュを作成することを考えていましたが、正規表現で変数を使用する方法をまだ理解していません。

私が探していたのは次のようなものです:

title.gsub(/\s/, "-").gsub(*replace character goes here*).gsub(/[^\w-]/, '').downcase

ありがとう!

4

2 に答える 2

5

Unidecoder gemを使用して、アプリケーションでこれを解決しました。

require 'unidecode'

def uninternationalize(str)
  Unidecoder.decode(str).gsub("[?]", "").gsub(/`/, "'").strip
end
于 2010-04-20T19:55:09.860 に答える
4

ある文字から別の文字にのみ音訳したい場合はString#tr、Unix コマンドとまったく同じことを行う方法を使用できますtr。最初のリストのすべての文字を、2 番目のリストの同じ位置にある文字に置き換えます。

'Ünicöde'.tr('ÄäÖöÜüß', 'AaOoUus') # => "Unicode"

ただし、@Daniel Vandersluis に同意します。おそらく、より専門的なライブラリを使用することをお勧めします。このようなことは、非常に退屈で、非常に速くなる可能性があります。また、これらの文字の多くは実際には標準化された音訳 (ä → ae、ö → oe、...、ß → ss) を持っており、ユーザーは音訳が正しいことを期待している可能性があります (私は確かに Jorg と呼ばれるのが好きではありません)。 – 本当にそうしなければならない場合は、私を Joerg と呼んでもかまいませんが、私は Jörg の方が断然好きです) そして、それらの音訳を提供するライブラリがあれば、それらを使用してみませんか? String#tr単一の文字ではないため、とにかく使用できない音訳がたくさんあることに注意してください。

于 2010-04-20T21:43:48.697 に答える