Rails: как уменьшить неанглийские строки? - PullRequest
37 голосов
/ 11 сентября 2011

Как мне записать неанглийскую строку в 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.

Ответы [ 5 ]

95 голосов
/ 11 сентября 2011
str = "Привет"
str.mb_chars.downcase.to_s
#=> "привет"
7 голосов
/ 09 марта 2014

Почему бы не использовать драгоценный камень unicode_utils. Этот драгоценный камень не заставит downcase работать, однако вы можете использовать:

UnicodeUtils.downcase('Привет') #=> 'привет'
6 голосов
/ 10 декабря 2016

Если вы хотите использовать это просто, как это:

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

вы должны поместить в папку инициализатора файл 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
2 голосов
/ 18 сентября 2017

Начиная с Ruby 2.4, есть встроенное полное сопоставление регистров Unicode .Источник: https://stackoverflow.com/a/38016153/888294. Подробнее см. Документацию по Ruby 2.4.0: https://ruby -doc.org / core-2.4.0 / String.html # method-i-downcase

1 голос
/ 08 июля 2019

Хорошее и простое решение в rails - добавить string.rb в папку инициализаторов, затем в этом файле вы можете переопределить String с помощью mb_chars, теперь в нижнем регистре поддерживаются акценты и буквы типа С

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...