ruby-gettext / gettext

Gettext gem is a pure Ruby Localization(L10n) library and tool which is modeled after the GNU gettext package.
https://ruby-gettext.github.io/
68 stars 28 forks source link

Fix sorting by msgid when a msgctxt is present #61

Closed rgraff closed 5 years ago

rgraff commented 5 years ago

The sort_by_msgid errors when an entry has a msgctxt present. This seems like an oversight.

rgraff commented 5 years ago

One another PR an example error was requested.

› rxgettext --sort-by-msgid sort_error_example.rb      
/Users/rgraff/.gem/ruby/2.4.3/gems/gettext-3.2.9/lib/gettext/po.rb:269:in `sort_by': comparison of Array with Array failed (ArgumentError)
    from /Users/rgraff/.gem/ruby/2.4.3/gems/gettext-3.2.9/lib/gettext/po.rb:269:in `sort_by_msgid'
    from /Users/rgraff/.gem/ruby/2.4.3/gems/gettext-3.2.9/lib/gettext/po.rb:227:in `sort'
    from /Users/rgraff/.gem/ruby/2.4.3/gems/gettext-3.2.9/lib/gettext/po.rb:208:in `to_s'
    from /Users/rgraff/.gem/ruby/2.4.3/gems/gettext-3.2.9/lib/gettext/tools/xgettext.rb:222:in `generate_pot'
    from /Users/rgraff/.gem/ruby/2.4.3/gems/gettext-3.2.9/lib/gettext/tools/xgettext.rb:151:in `run'
    from /Users/rgraff/.gem/ruby/2.4.3/gems/gettext-3.2.9/lib/gettext/tools/xgettext.rb:34:in `run'
    from /Users/rgraff/.gem/ruby/2.4.3/gems/gettext-3.2.9/bin/rxgettext:24:in `<top (required)>'
    from /Users/rgraff/.gem/ruby/2.4.3/bin/rxgettext:23:in `load'
    from /Users/rgraff/.gem/ruby/2.4.3/bin/rxgettext:23:in `<main>'

Where sort_error_example.rb is

require 'rubygems'
require 'gettext'

class HelloWorld
  include GetText

  base_dir = File.dirname(__FILE__)
  bindtextdomain("hello", :path => File.join(base_dir, "locale"))

  def hello
    print _("Hello World\n")
  end

  def goodbye
    print p_("fatal message","Goodbye World\n")
  end
end
kou commented 5 years ago

Thanks. It's reproducible on my environment. Can you add a test for this case to test/tools/test_xgettext.rb?

rgraff commented 5 years ago

@kou test added

kou commented 5 years ago

Thanks!