469,599 Members | 2,590 Online
Bytes | Developer Community
New Post

Home Posts Topics Members FAQ

Post your question to a community of 469,599 developers. It's quick & easy.

gettext on Windows

Hi,

I'm trying to use gettext to internationalise my project [1], but I'm
getting the following error message with some translations:

"Traceback (most recent call last):
file PanicButton.py line 36 in ?
file Gettext.pyc line 177 in _init_
file Gettext.pyc line 274 in _parse
struct.error : unpack str size does not match format"

The snippet of code that loads the .mo file is below:

<code>
# Code to find & install l10n file
import gettext, os, locale, glob
loc = locale.getdefaultlocale ()
sLocale = loc [0]

#Use translation file with same name as locale if it exists
if (os.path.exists (os.path.join ('locale', sLocale + '.mo'))):
sLang = os.path.join ('locale', sLocale + '.mo')
else:
#find a .mo file that matches the first part (first three
characters) of the locale
sMoFiles = glob.glob (os.path.join ('locale', sLocale [:3] +
'*.mo'))
if (len (sMoFiles) 0):
sLang = sMoFiles [0]
else:
#Could not find exact or partial match for locale - use default
translation file (British English)
sLang = os.path.join ('locale', 'en_GB.mo')

lan = gettext.GNUTranslations (open (sLang))
lan.install ()
# End of code to find & install l10n file
</code>

I *think* the problem is a unicode problem - it only seems to appear
when the translated file uses unicode strings.

Is the problem in the code that loads the .mo file - do I need to make
it use unicode? Or do the strings that are to be translated have to be
marked as unicode?

Full sourcecode is available via the SF.net project page [1], if
required.

Russ

[1] http://sourceforge.net/projects/panicbutton

Oct 28 '06 #1
7 2526
ru******************@googlemail.com wrote:
lan = gettext.GNUTranslations (open (sLang))
are you sure the data file is a text file? what happens if you change
the above to

lan = gettext.GNUTranslations (open (sLang, "rb"))

?

</F>

Oct 28 '06 #2
Fredrik Lundh wrote:
ru******************@googlemail.com wrote:
lan = gettext.GNUTranslations (open (sLang))

are you sure the data file is a text file? what happens if you change
the above to

lan = gettext.GNUTranslations (open (sLang, "rb"))
The .mo files aren't text files, they're binary, but when I make that
change, I get this error message:

Traceback (most recent call last):
File "panicbutton.py", line 36, in ?
lan = gettext.GNUTranslations (open (sLang, "rb"))
File "C:\Python24\lib\gettext.py", line 177, in __init__
self._parse(fp)
File "C:\Python24\lib\gettext.py", line 280, in _parse
raise IOError(0, 'File is corrupt', filename)
IOError: [Errno 0] File is corrupt: 'locale\\fr_FR.mo'

Russ

Oct 28 '06 #3
ru******************@googlemail.com schrieb:
Traceback (most recent call last):
File "panicbutton.py", line 36, in ?
lan = gettext.GNUTranslations (open (sLang, "rb"))
File "C:\Python24\lib\gettext.py", line 177, in __init__
self._parse(fp)
File "C:\Python24\lib\gettext.py", line 280, in _parse
raise IOError(0, 'File is corrupt', filename)
IOError: [Errno 0] File is corrupt: 'locale\\fr_FR.mo'
If it says so, it likely is right. How did you create the file?

Regards,
Martin
Oct 28 '06 #4

Martin v. L÷wis wrote:
ru******************@googlemail.com schrieb:
Traceback (most recent call last):
File "panicbutton.py", line 36, in ?
lan = gettext.GNUTranslations (open (sLang, "rb"))
File "C:\Python24\lib\gettext.py", line 177, in __init__
self._parse(fp)
File "C:\Python24\lib\gettext.py", line 280, in _parse
raise IOError(0, 'File is corrupt', filename)
IOError: [Errno 0] File is corrupt: 'locale\\fr_FR.mo'

If it says so, it likely is right. How did you create the file?
I only get the "File is corrupt" error when I changed

lan = gettext.GNUTranslations (open (sLang))

to

lan = gettext.GNUTranslations (open (sLang, "rb"))

Without the "rb" in the open () I get a "struct.error : unpack str size
does not match format" error (see original post).

The .mo files were created using poEdit (www.poedit.org), and I get the
same error with various translations, all created by different people.

Russ

Oct 28 '06 #5

ru******************@googlemail.com wrote:
Martin v. L÷wis wrote:
ru******************@googlemail.com schrieb:
Traceback (most recent call last):
File "panicbutton.py", line 36, in ?
lan = gettext.GNUTranslations (open (sLang, "rb"))
File "C:\Python24\lib\gettext.py", line 177, in __init__
self._parse(fp)
File "C:\Python24\lib\gettext.py", line 280, in _parse
raise IOError(0, 'File is corrupt', filename)
IOError: [Errno 0] File is corrupt: 'locale\\fr_FR.mo'
If it says so, it likely is right. How did you create the file?

I only get the "File is corrupt" error when I changed

lan = gettext.GNUTranslations (open (sLang))
This code definately corrupts .mo files since on windows files are
opened in text mode by default.
to

lan = gettext.GNUTranslations (open (sLang, "rb"))

Without the "rb" in the open () I get a "struct.error : unpack str size
does not match format" error (see original post).
struct.error usually means input data doesn't correspond to expected
format.
The .mo files were created using poEdit (www.poedit.org), and I get the
same error with various translations, all created by different people.
Try msgunfmt
http://www.gnu.org/software/gettext/...28.html#SEC128
to see if it can convert your files back to text.

-- Leo

Oct 28 '06 #6
Leo Kislov wrote:
Try msgunfmt
http://www.gnu.org/software/gettext/...28.html#SEC128
to see if it can convert your files back to text.
Just tried it, and it was able to convert each of the .mo files back to
text without any problems.

Russ

Oct 28 '06 #7
ru******************@googlemail.com schrieb:
Leo Kislov wrote:
>Try msgunfmt
http://www.gnu.org/software/gettext/...28.html#SEC128
to see if it can convert your files back to text.

Just tried it, and it was able to convert each of the .mo files back to
text without any problems.
Then you should make a bug report (or, better yet, a patch). Apparently,
the Python gettext implementation is not able to process the MO files
you are passing.

Regards,
Martin
Oct 28 '06 #8

This discussion thread is closed

Replies have been disabled for this discussion.

Similar topics

1 post views Thread by Dave Patton | last post: by
2 posts views Thread by StasZ | last post: by
2 posts views Thread by Daniele | last post: by
13 posts views Thread by cantabile | last post: by
1 post views Thread by James T. Dennis | last post: by
6 posts views Thread by =?iso-8859-1?B?QW5kcuk=?= | last post: by
2 posts views Thread by paolob | last post: by
8 posts views Thread by howa | last post: by
reply views Thread by suresh191 | last post: by
4 posts views Thread by guiromero | last post: by
By using this site, you agree to our Privacy Policy and Terms of Use.