G
Guest
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
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