Rails 3.2 を使用しています。
サイトをルーマニア語にローカライズしています。正規表現では、正規表現間隔 [az] に次の文字を順番に含める必要があります: a、ă、â、 b、c など。
私のロケールに基づいて、[az] が上記のリストであることをアプリケーションに伝える方法はありますか?
また、大文字化にも問題があります。"â".upcase は "Â" になりません。
それとも、これらの機能がまだ Rails に実装されていないのでしょうか?
Rails 3.2 を使用しています。
サイトをルーマニア語にローカライズしています。正規表現では、正規表現間隔 [az] に次の文字を順番に含める必要があります: a、ă、â、 b、c など。
私のロケールに基づいて、[az] が上記のリストであることをアプリケーションに伝える方法はありますか?
また、大文字化にも問題があります。"â".upcase は "Â" になりません。
それとも、これらの機能がまだ Rails に実装されていないのでしょうか?
これは Rails の問題ではありません。[az] に非 ASCII 文字を含める必要はありません。ruby の場合、[az] は連続する ASCII 文字に一致する正規表現の範囲を表します。
Ruby では、String.upcase はロケール依存である必要はありません。代わりに、次のように UnicodeUtils gem を試すことができます。
% gem install unicode_utils
#encoding: UTF-8
require 'unicode_utils'
p UnicodeUtils.upcase('ă', :ro)
「あ」
文字列の大文字と小文字を変換するときにロケールを指定すると、より理にかなっています。たとえば、次のような理由があります。
UnicodeUtils.upcase('i', :en) # is not equal to
UnicodeUtils.upcase('i', :tr)
シーケンスは ASCII コード番号に基づいていると思います[a-z]
ので、ルーマニア語の文字は考慮されません。任意のラテン文字に一致させたい場合は、Onigmo の character プロパティを使用します。
"ă" =~ /\p{Latin}/
# => 0