Rails: Bagaimana cara menurunkan huruf non-Inggris?

Bagaimana saya bisa menurunkan string non-Inggris di Ruby on Rails 3?

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

Saya ingin ini berfungsi di Ruby 1.8.7 dan juga Ruby 1.9.2.


person Misha Moroshko    schedule 11.09.2011    source sumber
comment
Maksud Anda yang berbahasa Yunani atau yang non-Inggris lainnya?   -  person Cydonia7    schedule 11.09.2011
comment
Saat ini, saya tertarik dengan bahasa Rusia, namun saya mungkin ingin menggunakan bahasa lain di masa mendatang, jadi saya mencari solusi umum.   -  person Misha Moroshko    schedule 11.09.2011


Jawaban (5)


Mengapa tidak menggunakan permata unicode_utils. Permata ini tidak akan memaksa downcase berfungsi, namun Anda dapat menggunakan:

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

Jika ingin menggunakannya mudah seperti ini:

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

Anda harus memasukkan file folder penginisialisasi 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
person Dima Melnik    schedule 10.12.2016

Sejak Ruby 2.4, ada pemetaan kasus Unicode lengkap. Sumber: https://stackoverflow.com/a/38016153/888294. Lihat dokumentasi Ruby 2.4.0 untuk detailnya: https://ruby-doc.org/core-2.4.0/String.html#method-i-downcase

person mmichaa    schedule 18.09.2017

Solusi yang bagus dan mudah di Rails adalah menambahkan string.rb ke dalam folder inisialisasi, kemudian dalam file ini Anda dapat mengganti String menggunakan mb_chars, sekarang turunkan aksen dukungan dan huruf seperti Ñ

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
person Jose Miguel Richard    schedule 08.07.2019

person    schedule
comment
Tanpa Rails, Anda memerlukan require 'active_support/core_ext' tambahan untuk menghindari kesalahan metode tidak terdefinisi - person knut; 26.07.2012
comment
luar biasa mengapa mereka tidak memperbaikinya di Ruby 2.0 :( - person Egor Malkevich; 22.08.2013
comment
mb_chars juga berfungsi dengan capitalize dan upcase. Solusi hebat! Kami juga dapat menghubungi 'Привет'.mb_chars.downcase.wrapped_string - person Stepan Zakharov; 07.06.2016
comment
Di Ruby 2.4 akhirnya berfungsi seperti yang diharapkan: "Привет".downcase #=> "привет" - person michau; 01.09.2016