【问题标题】:Rails: How to downcase non-English string?Rails:如何小写非英文字符串?
【发布时间】:2011-11-14 17:42:40
【问题描述】:

如何在 Ruby on Rails 3 中小写非英语字符串?

str = "Привет"    # Russian 
puts str[0].ord   # => 1055
str.downcase!
puts str[0].ord   # => 1055 (Should be 1087)

我希望它可以在 Ruby 1.8.7 和 Ruby 1.9.2 中工作。

【问题讨论】:

  • 你的意思是希腊语还是任何一种非英语的?
  • 目前我对俄语很感兴趣,但我以后可能想使用其他语言,所以我正在寻找一个通用的解决方案。

标签: ruby-on-rails ruby string ruby-on-rails-3 lowercase


【解决方案1】:

Rails 中一个不错且简单的解决方案是将 string.rb 添加到初始化程序文件夹中,然后在此文件中您可以使用 mb_chars 覆盖 String,现在小写支持重音符号和字母,如 Ñ

class String
  def downcase
    self.mb_chars.downcase.to_s
  end

  def capitalize
    self.mb_chars.capitalize.to_s
  end

  def upcase
    self.mb_chars.upcase.to_s
  end

  def titleize
    self.mb_chars.titleize.to_s
  end
end

【讨论】:

    【解决方案2】:

    【讨论】:

      【解决方案3】:

      如果你想像这样简单地使用它:

      > "Привет".downcase
      => "привет"
      

      你必须放入initializers文件夹文件string.rb

      require 'unicode'
      
      class String
        def downcase
          Unicode::downcase(self)
        end
        def downcase!
          self.replace downcase
        end
        def upcase
          Unicode::upcase(self)
        end
        def upcase!
          self.replace upcase
        end
        def capitalize
          Unicode::capitalize(self)
        end
        def capitalize!
          self.replace capitalize
        end
      end
      

      【讨论】:

        【解决方案4】:

        为什么不使用 gem unicode_utils。这个 gem 不会强制 downcase 工作,但是你可以使用:

        UnicodeUtils.downcase('Привет') #=> 'привет'
        

        【讨论】:

          【解决方案5】:
          str = "Привет"
          str.mb_chars.downcase.to_s
          #=> "привет"
          

          【讨论】:

          • 如果没有rails,您需要一个额外的require 'active_support/core_ext' 以避免未定义的方法-错误
          • 太棒了,为什么他们没有在 ruby​​ 2.0 中修复它:(
          • mb_chars 也适用于capitalizeupcase。很好的解决方案!我们也可以拨打'Привет'.mb_chars.downcase.wrapped_string
          • 在 Ruby 2.4 中,它最终按预期工作:"Привет".downcase #=> "привет"
          猜你喜欢
          • 2011-08-10
          • 2016-09-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-08-22
          • 2018-01-28
          • 2017-05-04
          • 2020-10-05
          相关资源
          最近更新 更多