473,395 Members | 1,652 Online
Bytes | Software Development & Data Engineering Community
Post Job

Home Posts Topics Members FAQ

Join Bytes to post your question to a community of 473,395 software developers and data experts.

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 2766
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 thread has been closed and replies have been disabled. Please start a new discussion.

Similar topics

1
by: Dave Patton | last post by:
Can someone point me to a definitive source for the answers to the following two questions: 1) In an environment with Redhat Linux 2.4.21-27.0.1, Apache 1.3.31, PHP 4.3.10, and GNU gettext...
2
by: StasZ | last post by:
Hello, I have some programs which are developed on Linux and uses gettext for the language support. While they run without problem on a win32 platform i haven't a clue how to get the gettext...
2
by: Daniele | last post by:
Dearest, I have a script that I need to localize. 1. step import gettext 2. step
3
by: Rolf Hemmerling | last post by:
Hello ! Beginner's question: Howto access .RC/.RES Ressource files with portable C++ code ( BCC,MSVC,GNU-C++, OpenWatcom) ? I just wanna access "local language strings", so that I may...
13
by: cantabile | last post by:
Hi, I'm failing to make it work but can't find out what's wrong. Here's what I do : ================ test.py import gettext gettext.install('')
1
by: James T. Dennis | last post by:
You'd think that using things like gettext would be easy. Superficially it seems well documented in the Library Reference(*). However, it can be surprisingly difficult to get the external details...
6
by: =?iso-8859-1?B?QW5kcuk=?= | last post by:
I've encountered a problem using gettext with properties while using a Python interpreter. Here's a simple program that illustrate the problem. ============== # i18n_test.py: test of gettext &...
2
by: paolob | last post by:
Hi to all, I'm running php 5.2.5 on Debian etch, with apache 2.0.56. I need to include, in php.ini, gettext.so library but I didn't find anything. I've already install: apt-get install gettext...
8
by: howa | last post by:
http://hk2.php.net/manual/en/ref.gettext.php I just wonder why those kind of translation/mapping can't be implemented in using plain PHP array? Howard
0
by: Charles Arthur | last post by:
How do i turn on java script on a villaon, callus and itel keypad mobile phone
0
by: ryjfgjl | last post by:
If we have dozens or hundreds of excel to import into the database, if we use the excel import function provided by database editors such as navicat, it will be extremely tedious and time-consuming...
0
by: ryjfgjl | last post by:
In our work, we often receive Excel tables with data in the same format. If we want to analyze these data, it can be difficult to analyze them because the data is spread across multiple Excel files...
0
by: emmanuelkatto | last post by:
Hi All, I am Emmanuel katto from Uganda. I want to ask what challenges you've faced while migrating a website to cloud. Please let me know. Thanks! Emmanuel
1
by: Sonnysonu | last post by:
This is the data of csv file 1 2 3 1 2 3 1 2 3 1 2 3 2 3 2 3 3 the lengths should be different i have to store the data by column-wise with in the specific length. suppose the i have to...
0
by: Hystou | last post by:
There are some requirements for setting up RAID: 1. The motherboard and BIOS support RAID configuration. 2. The motherboard has 2 or more available SATA protocol SSD/HDD slots (including MSATA, M.2...
0
marktang
by: marktang | last post by:
ONU (Optical Network Unit) is one of the key components for providing high-speed Internet services. Its primary function is to act as an endpoint device located at the user's premises. However,...
0
Oralloy
by: Oralloy | last post by:
Hello folks, I am unable to find appropriate documentation on the type promotion of bit-fields when using the generalised comparison operator "<=>". The problem is that using the GNU compilers,...
0
jinu1996
by: jinu1996 | last post by:
In today's digital age, having a compelling online presence is paramount for businesses aiming to thrive in a competitive landscape. At the heart of this digital strategy lies an intricately woven...

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.