Domanda

Quindi Matz ha deciso di continuare upcase E downcase limitato a /[A-Z]/i in rubino 1.9.1.

ActiveSupport::Multibyte ha avuto a lungo un ottimo case i18n che si muoveva in Ruby 1.8.x tramite String#mb_chars.

Tuttavia, quando provato con Ruby 1.9.1, non sembra funzionare.Ecco un semplice script di test che ho scritto, insieme all'output che ottengo:

$ cat test.rb
# encoding: UTF-8

puts("@ #{RUBY_VERSION} " + (__ENCODING__ rescue $KCODE).to_s)
sd, su = "Iñtërnâtiônàlizætiøn", "IÑTËRNÂTIÔNÀLIZÆTIØN"
def ps(u, d, k); puts "%-30s:  %24s / %-24s" % [k, u, d] end
ps sd.upcase, su.downcase, "Plain ruby"

require 'rubygems'; require 'active_support'
ps sd.upcase, su.downcase, "With active_support"
ps sd.mb_chars.upcase.to_s, su.mb_chars.downcase.to_s, "With active_support mb_chars"

$ ruby -KU test.rb
@ 1.8.7 UTF8
Plain ruby                    :  IñTëRNâTIôNàLIZæTIøN / iÑtËrnÂtiÔnÀlizÆtiØn
With active_support           :  IñTëRNâTIôNàLIZæTIøN / iÑtËrnÂtiÔnÀlizÆtiØn
With active_support mb_chars  :  IÑTËRNÂTIÔNÀLIZÆTIØN / iñtërnâtiônàlizætiøn

$ ruby1.9 test.rb
@ 1.9.1 UTF-8
Plain ruby                    :      IñTëRNâTIôNàLIZæTIøN / iÑtËrnÂtiÔnÀlizÆtiØn
With active_support           :      IñTëRNâTIôNàLIZæTIøN / iÑtËrnÂtiÔnÀlizÆtiØn
With active_support mb_chars  :      IñTëRNâTIôNàLIZæTIøN / iÑtËrnÂtiÔnÀlizÆtiØn

Quindi, come posso internazionalizzarmi? upcase E downcase con rubino 1.9.1?

aggiornamento

Dovrei aggiungere che ho testato anche con ActiveSupport della corrente master, 2-3-* E 3-0-unstable rails su GitHub.Stessi risultati.

È stato utile?

Soluzione

La conversione dei casi dipende dalla locale e non sempre avviene in andata e ritorno, motivo per cui Ruby 1.9 non la copre (vedi Qui E Qui)

IL gemma unicode-util dovrebbe soddisfare le tue esigenze.

Altri suggerimenti

per chiunque proveniente da Google per ruby upcase utf8:

> "your problem chars here çöğıü Iñtërnâtiônàlizætiøn".mb_chars.upcase.to_s
=> "YOUR PROBLEM CHARS HERE ÇÖĞIÜ IÑTËRNÂTIÔNÀLIZÆTIØN"

soluzione è usare mb_chars.

Documentazione:

conversione di caso è complicato e locale-dipendente. Per fortuna, Martin Dürst ha aggiunto Unicode completo caso mappatura in Ruby 2.4:

puts RUBY_DESCRIPTION

sd, su = "Iñtërnâtiônàlizætiøn", "IÑTËRNÂTIÔNÀLIZÆTIØN"
def ps(u, d, k); puts "%-30s:  %24s / %-24s" % [k, u, d] end 
ps sd.upcase,              su.downcase,              "Ruby 2.4 (default)"
ps sd.upcase(:ascii),      su.downcase(:ascii),      "Ruby 2.4 (ascii)"
ps sd.upcase(:turkic),     su.downcase(:turkic),     "Ruby 2.4 (turkic)"
ps sd.upcase(:lithuanian), su.downcase(:lithuanian), "Ruby 2.4 (lithuanian)"
ps "-",                    su.downcase(:fold),       "Ruby 2.4 (fold)"

Output:

ruby 2.4.0dev (2016-06-24 trunk 55499) [x86_64-linux]
Ruby 2.4 (default)            :      IÑTËRNÂTIÔNÀLIZÆTIØN / iñtërnâtiônàlizætiøn
Ruby 2.4 (ascii)              :      IñTëRNâTIôNàLIZæTIøN / iÑtËrnÂtiÔnÀlizÆtiØn
Ruby 2.4 (turkic)             :      IÑTËRNÂTİÔNÀLİZÆTİØN / ıñtërnâtıônàlızætıøn
Ruby 2.4 (lithuanian)         :      IÑTËRNÂTIÔNÀLIZÆTIØN / iñtërnâtiônàlizætiøn
Ruby 2.4 (fold)               :                         - / iñtërnâtiônàlizætiøn
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top