自定义正则表达式i18n

时间:2013-06-05 10:44:56

标签: ruby string internationalization

我正在使用Rails 3.2。

我正在用罗马尼亚语本地化我的网站。在正则表达式中,正则表达式区间[a-z]应按顺序包含以下字母: a,ă,â, b,c等。

根据我的语言环境,有没有办法告诉我的应用程序[a-z]应该是上面的列表?

此外,还有一个大写问题 - “â”.upup不会导致“”。

或者,这些功能可能还没有在Rails中实现?

2 个答案:

答案 0 :(得分:1)

这不是轨道问题,[a-z]不需要包含非ascii字符。在ruby的情况下,[a-z]表示匹配连续ascii字母的正则表达式范围。

在ruby中,String.upcase不需要依赖于语言环境。相反,您可以尝试使用UnicodeUtils gem:

%gem install unicode_utils

#encoding: UTF-8
require 'unicode_utils'

p UnicodeUtils.upcase('ă', :ro)

“A”

转换字符串大小写时指定语言环境更有意义,因为例如:

 UnicodeUtils.upcase('i', :en) # is not equal to 
 UnicodeUtils.upcase('i', :tr)

答案 1 :(得分:0)

我认为[a-z]序列基于ASCII码编号,因此不会考虑罗马尼亚字符。如果要匹配任何拉丁字符,请使用Onigmo的字符属性:

"ă" =~ /\p{Latin}/
# => 0