我正在使用 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:
% 宝石安装 unicode_utils
#encoding: UTF-8
require 'unicode_utils'
p UnicodeUtils.upcase('ă', :ro)
“一个”
在转换字符串大小写时指定语言环境更有意义,例如:
UnicodeUtils.upcase('i', :en) # is not equal to
UnicodeUtils.upcase('i', :tr)
我认为[a-z]
序列是基于 ASCII 码的,所以罗马尼亚字符不会被考虑在内。如果要匹配任何拉丁字符,请使用 Onigmo 的字符属性:
"ă" =~ /\p{Latin}/
# => 0