Valós kisbetű-nagybetű váltás Ruby nyelvben
Ékezetes karaktereknél a .upcase és társai hibáznak. Javítsuk ki!
Márc.
27
Ha ruby nyelven programozunk, és nem csak színtiszta angol szövegeket tárolunk String típusú változóban, hanem ékezetes karaktereket is, akkor a kisbetű-nagybetű konverziót végző parancsok sajnos hibásan működnek. A probléma megoldásához az Activesupport::Multibyte-ra lesz szükségünk.
Próbálkozzunk először az interaktív rubyban:
irb(main):001:0> a="árvíztűrő tükörfúrógép"
=> "árvíztűrő tükörfúrógép"
irb(main):002:0> a.upcase
=> "áRVíZTűRő TüKöRFúRóGéP"
irb(main):003:0> require 'active_support/core_ext/string'
=> true
irb(main):004:0> a.mb_chars.upcase.to_s
=> "ÁRVÍZTŰRŐ TÜKÖRFÚRÓGÉP"
A kényelmes használathoz definiáljuk újra a String osztály megfelelő függvényeit:
require 'active_support/core_ext/string'
class Srting
def upcase
self.mb_chars.upcase.to_s
end
def capitalize
self.mb_chars.capitalize.to_s
end
end