On 2/11/2009 5:58 PM, Doug Bell wrote:
Frédéric wrote:
On mercredi 11 février 2009, Doug Bell wrote:
Are there some tips, for example, to bind the _() method I use with
gettext and PyGTK? Something to help me migrate my code without having
to modify it everywhere...
Here's how I do it:
def translate(text, comment=''):
"""Translation function that sets context to calling module's
filename"""
try:
frame = sys._getframe(1)
fileName = frame.f_code.co_filename
finally:
del frame
context = os.path.basename(os.path.splitext(fileName)[0])
return unicode(QtCore.QCoreApplication.translate(context, text,
comment))
def markNoTranslate(text, comment=''):
"""Mark text for translation without actually doing the
translation"""
return text
__builtin__._ = translate
__builtin__.N_ = markNoTranslate
Thanks!
What is the purpose of the N_() function?
It's for cases where you want to mark a string to be included in the
language files, but you don't want to change the string by doing the
translation immediately. An example would be a string used as a key in
an untranslated data file that later needs to be translated for output.
The N_() function applied to the string literal would just mark it, then
the _() function could be applied later to a variable containing that
string.
Note that you will also need to slightly modify the pylupdate program
to look for the _() and N_() functions and to use the proper context.
It looks like a little too much effort. For such cases, what we usually
do is something like:
if 0:
self.tr("text 1")
self.tr("text 2")
self.tr("text 3")
self.tr("text 4")
self.tr("text 5")
and you're done. Moreover: if those strings comes from a data file, you
can even write a generator that parses the data file, produces a file
like the above snippet, and feed it to pylupdate. You don't need a
custom pylupdate for sure.
This said, I don't agree with the recommendation of not using self.tr().
In my experience, there are only a few cases where this turns out to be
a problem, compared to the benefits of code readability of self.tr().
For those cases in which it is a problem, the alternative is to use
qApp.translate(), which is a much shorter synonymous of
QtCore.QCoreApplication.translate :) (OK I'm cheating: I'm not taking
into account that I can use 'qApp' because of star-imports).
--
Giovanni Bajo
Develer S.r.l.
http://www.develer.com
_______________________________________________
PyQt mailing list [email protected]
http://www.riverbankcomputing.com/mailman/listinfo/pyqt