Package: liblocale-ruby1.8 Version: 2.0.5-2 Severity: normal Locale.current= doesn't check the param, so code like
bak = Locale.current Locale.current = 'C' #...something that needs locale C Locale.current = bak GetText.gettext("string") fails with the mysterious #<NoMethodError: undefined method `downcase' for [#<Locale::Tag::Posix: en_US.UTF-8>]:Loca /usr/lib/ruby/1.8/locale/tag/simple.rb:78:in `initialize' /usr/lib/ruby/1.8/locale/tag/common.rb:59:in `initialize' /usr/lib/ruby/1.8/locale/tag/irregular.rb:35:in `new' /usr/lib/ruby/1.8/locale/tag/irregular.rb:35:in `_unmemoized_convert_to' /usr/lib/ruby/1.8/locale/util/memoizable.rb:73:in `convert_to' /usr/lib/ruby/1.8/locale/util/memoizable.rb:87:in `_memoize' /usr/lib/ruby/1.8/locale/util/memoizable.rb:72:in `convert_to' (eval):2:in `_unmemoized_to_common' /usr/lib/ruby/1.8/locale/util/memoizable.rb:73:in `to_common' /usr/lib/ruby/1.8/locale/util/memoizable.rb:95:in `_memoize_dup' /usr/lib/ruby/1.8/locale/util/memoizable.rb:87:in `_memoize' /usr/lib/ruby/1.8/locale/util/memoizable.rb:95:in `_memoize_dup' /usr/lib/ruby/1.8/locale/util/memoizable.rb:72:in `to_common' /usr/lib/ruby/1.8/locale.rb:229:in `send' /usr/lib/ruby/1.8/locale.rb:229:in `collect_candidates' /usr/lib/ruby/1.8/locale.rb:229:in `collect' /usr/lib/ruby/1.8/locale.rb:229:in `collect_candidates' /usr/lib/ruby/1.8/locale.rb:222:in `candidates' /usr/lib/ruby/1.8/gettext/runtime/textdomain_manager.rb:78:in `each_textdomains' /usr/lib/ruby/1.8/gettext/runtime/textdomain_manager.rb:102:in `translate_singluar_message /usr/lib/ruby/1.8/gettext.rb:128:in `gettext' Because tag/simple.rb:intialize calls @language = @language.downcase if @language @region = @region.upcase if @region expecting them to be strings, but because of the Locale.current = Locale.current, @language is Locale::Tag::Posix . This simple patch to locale.rb: set_current seems to fix it: --- /usr/lib/ruby/1.8/locale.rb.bak 2010-10-19 15:38:50.000000000 +0200 +++ /usr/lib/ruby/1.8/locale.rb 2010-10-19 15:39:05.000000000 +0200 @@ -145,7 +145,7 @@ if tags[0] languages = Locale::TagList.new tags.each do |tag| - languages << create_language_tag(tag) + languages << create_language_tag(tag.to_s) end end Thread.current[:current_languages] = languages -- System Information: Debian Release: 5.0.6 APT prefers stable APT policy: (500, 'stable') Architecture: i386 (i686) Kernel: Linux 2.6.30-2-686-bigmem (SMP w/1 CPU core) Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8) (ignored: LC_ALL set to en_US.UTF-8) Shell: /bin/sh linked to /bin/bash Versions of packages liblocale-ruby1.8 depends on: ii libruby1.8 1.8.7.72-3lenny1 Libraries necessary to run Ruby 1. liblocale-ruby1.8 recommends no packages. liblocale-ruby1.8 suggests no packages. -- no debconf information -- To UNSUBSCRIBE, email to debian-bugs-dist-requ...@lists.debian.org with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org