[DRE-maint] Bug#684182: ruby-gettext: rgettext wrongly skips translatable strings containing the hash symbol (#)

Francesco Poli (wintermute) invernomuto at paranoici.org
Tue Aug 7 15:14:00 UTC 2012


Package: ruby-gettext
Version: 2.2.1-2
Severity: normal

Hello, thanks for maintaining ruby-gettext in Debian!

I noticed a bug in rgettext.
I prepared a small test case to reproduce it.

Let's consider the following short Ruby program:

  $ cat myapplication.rb
  #!/usr/bin/ruby1.8
  # Copyright (C) 2012 Francesco Poli
  #
  #  This program is free software; you can redistribute it and/or modify
  #  it under the terms of the GNU General Public License as published by
  #  the Free Software Foundation; either version 2 of the License, or
  #  (at your option) any later version.
  #
  #  This program is distributed in the hope that it will be useful,
  #  but WITHOUT ANY WARRANTY; without even the implied warranty of
  #  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  #  GNU General Public License for more details.
  #
  #  You should have received a copy of the GNU General Public License with
  #  the Debian GNU/Linux distribution in file /usr/share/common-licenses/GPL;
  #  if not, write to the Free Software Foundation, Inc., 59 Temple Place,
  #  Suite 330, Boston, MA  02111-1307  USA

  require 'gettext'
  include GetText
  GetText::bindtextdomain("myapplication")

  count = 0
  print _("Hello everybody!\n")
  count += 1

  print _("You are running an internationalized Ruby program.\n")
  count += 1

  # TRANSLATORS: %d is the number of already printed messages
  print _("You have already seen %d translatable messages.\n") % count

  print _("Is this message # 3 or # 4 ?\n")

  print _("OK, I am tired...\n")

  print _("Goodbye!\n")


Suppose we want to generate the corresponding .pot file.
We can use xgettext (from the gettext package):

  $ xgettext --add-comments=TRANSLATORS --no-wrap \
             --copyright-holder="Francesco Poli" \
             --package-name=myapplication --package-version=0.1 \
             --msgid-bugs-address="address at example.com" \
             --language=python \
             myapplication.rb -o myapplication_XGETTEXT.pot
  $ cat myapplication_XGETTEXT.pot 
  # SOME DESCRIPTIVE TITLE.
  # Copyright (C) YEAR Francesco Poli
  # This file is distributed under the same license as the PACKAGE package.
  # FIRST AUTHOR <EMAIL at ADDRESS>, YEAR.
  #
  #, fuzzy
  msgid ""
  msgstr ""
  "Project-Id-Version: myapplication 0.1\n"
  "Report-Msgid-Bugs-To: address at example.com\n"
  "POT-Creation-Date: 2012-08-07 16:38+0200\n"
  "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
  "Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
  "Language-Team: LANGUAGE <LL at li.org>\n"
  "Language: \n"
  "MIME-Version: 1.0\n"
  "Content-Type: text/plain; charset=CHARSET\n"
  "Content-Transfer-Encoding: 8bit\n"

  #: myapplication.rb:24
  msgid "Hello everybody!\n"
  msgstr ""

  #: myapplication.rb:27
  msgid "You are running an internationalized Ruby program.\n"
  msgstr ""

  #. TRANSLATORS: %d is the number of already printed messages
  #: myapplication.rb:31
  #, python-format
  msgid "You have already seen %d translatable messages.\n"
  msgstr ""

  #: myapplication.rb:33
  msgid "Is this message # 3 or # 4 ?\n"
  msgstr ""

  #: myapplication.rb:35
  msgid "OK, I am tired...\n"
  msgstr ""

  #: myapplication.rb:37
  msgid "Goodbye!\n"
  msgstr ""

Everything seems to be OK.
But the language is actually Ruby, not Python.
Hence, rgettext should be the tool of choice.
Let's try with rgettext, then:

  $ rgettext myapplication.rb -o myapplication_RGETTEXT.pot
  $ cat myapplication_RGETTEXT.pot 
  # SOME DESCRIPTIVE TITLE.
  # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
  # This file is distributed under the same license as the PACKAGE package.
  # FIRST AUTHOR <EMAIL at ADDRESS>, YEAR.
  #
  #, fuzzy
  msgid ""
  msgstr ""
  "Project-Id-Version: PACKAGE VERSION\n"
  "POT-Creation-Date: 2012-08-07 16:39+0200\n"
  "PO-Revision-Date: 2012-08-07 16:39+0200\n"
  "Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
  "Language-Team: LANGUAGE <LL at li.org>\n"
  "MIME-Version: 1.0\n"
  "Content-Type: text/plain; charset=UTF-8\n"
  "Content-Transfer-Encoding: 8bit\n"
  "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"

  #: myapplication.rb:24
  msgid "Hello everybody!\n"
  msgstr ""

  #: myapplication.rb:27
  msgid "You are running an internationalized Ruby program.\n"
  msgstr ""

  #. %d is the number of already printed messages
  #: myapplication.rb:31
  msgid "You have already seen %d translatable messages.\n"
  msgstr ""

  #. %d is the number of already printed messages
  #: myapplication.rb:35
  msgid "OK, I am tired...\n"
  msgstr ""

  #. %d is the number of already printed messages
  #: myapplication.rb:37
  msgid "Goodbye!\n"
  msgstr ""

Wait!
Where is the string from line 33 ?!?
It seems that it was wrongly skipped, since it contains hash
symbols (#)...
I think that this should not happen.

Please fix this bug and/or forward this bug report upstream.
Thanks for your time!



-- System Information:
Debian Release: wheezy/sid
  APT prefers testing
  APT policy: (800, 'testing'), (500, 'unstable')
Architecture: amd64 (x86_64)

Kernel: Linux 3.2.0-3-amd64 (SMP w/2 CPU cores)
Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/bash

Versions of packages ruby-gettext depends on:
ii  ruby                          4.9
ii  ruby-locale                   2.0.5-5
ii  ruby1.8 [ruby-interpreter]    1.8.7.358-4
ii  ruby1.9.1 [ruby-interpreter]  1.9.3.194-1

ruby-gettext recommends no packages.

ruby-gettext suggests no packages.

-- no debconf information



More information about the Pkg-ruby-extras-maintainers mailing list