【问题标题】:Rails Cannot Parameterize Cyrillic Characters (Russian)Rails 无法参数化西里尔字符(俄语)
【发布时间】:2011-10-12 17:57:52
【问题描述】:

我们的应用程序使用页面名称的参数化版本自动生成页面 URL。例如:

http://www.domainname.com/this-is-the-page-name

简单。工作正常,除了页面名称使用西里尔字符时,参数化方法返回一个空白字符串:

"Пробна галерия".parameterize

我一直在网上研究如何处理这个问题,我发现的建议指向音译技术。想知道是否有一种简单直接的方法来处理这个问题。

【问题讨论】:

    标签: ruby-on-rails


    【解决方案1】:

    尝试使用 gsub:

    irb> "Пробна галерия".gsub!(/\s/,'-')
      => "Пробна-галерия" 
    

    【讨论】:

    • 我们对西里尔字符没有太多经验,但如果可能的话,我宁愿显示字符串的罗马化版本,除非有人可以确认在地址栏中显示西里尔字符是标准的。其次,parameterize 可以很好地清理我们的输出字符串,其中 gsub 解决方案过于简单。
    • 然后尝试 gem russian >重载方法参数化变形器 ActiveSupport (String#parameterize)。现在它是俄语字母的罗马化。
    【解决方案2】:

    试试这个:

    def to_slug      
      # http://stackoverflow.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
    

    【讨论】:

      猜你喜欢
      • 2015-10-14
      • 1970-01-01
      • 1970-01-01
      • 2018-12-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多