Rails 无法参数化西里尔字符(俄语)
Posted
技术标签:
【中文标题】Rails 无法参数化西里尔字符(俄语)【英文标题】:Rails Cannot Parameterize Cyrillic Characters (Russian) 【发布时间】:2011-10-12 17:57:52 【问题描述】:我们的应用程序使用页面名称的参数化版本自动生成页面 URL。例如:
http://www.domainname.com/this-is-the-page-name
简单。工作正常,除了页面名称使用西里尔字符时,参数化方法返回一个空白字符串:
"Пробна галерия".parameterize
我一直在网上研究如何处理这个问题,我发现的建议指向音译技术。想知道是否有一种简单直接的方法来处理这个问题。
【问题讨论】:
【参考方案1】:尝试使用 gsub:
irb> "Пробна галерия".gsub!(/\s/,'-')
=> "Пробна-галерия"
【讨论】:
我们对西里尔字符没有太多经验,但如果可能的话,我宁愿显示字符串的罗马化版本,除非有人可以确认在地址栏中显示西里尔字符是标准的。其次,parameterize 可以很好地清理我们的输出字符串,其中 gsub 解决方案过于简单。 然后尝试 gem russian >重载方法参数化变形器 ActiveSupport (String#parameterize)。现在它是俄语字母的罗马化。【参考方案2】:试试这个:
def to_slug
# http://***.com/questions/1302022/best-way-to-generate-slugs-human-readable-ids-in-rails
#strip the string
ret = self.strip
#replace all whitespaces and underscores to dashes
ret.gsub!(/[\s_]+/, '-')
#replace all non alphanumeric, non dashes with empty string
ret.gsub! /\s*[^A-Za-z0-9А-Яа-я\-]\s*/, ''
#convert double dashes to single
ret.gsub! /-+/,"-"
#strip off leading/trailing dashes
ret.gsub! /\A[-]+|[-]+\z/,""
ret
end
【讨论】:
以上是关于Rails 无法参数化西里尔字符(俄语)的主要内容,如果未能解决你的问题,请参考以下文章