On Jun 26, 4:17 pm, André <[EMAIL PROTECTED]> wrote: > On Jun 26, 3:56 pm, Peter Otten <[EMAIL PROTECTED]> wrote: > > > > > André wrote: > > > 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 & properties > > > > import gettext > > > > fr = gettext.translation('i18n_test', './translations', > > > languages=['fr']) > > > _ = fr.gettext # untested > > > > help = _("Help me!") > > > > class Test_i18n(object): > > > def get(self): > > > __help = _("HELP!") > > > return __help > > > help_prop = property(get, None, None, 'help') > > > > test = Test_i18n() > > > > print help > > > print test.help_prop > > > #### end of file > > > > To run the above program, you need to have the strings translated and > > > the proper ".po" and ".mo" files created. (for those interested, I > > > can send the whole lot in a zip file) > > > > If I run the program as is, the output is: > > > Aidez-moi! > > > AIDE!!! > > > > Ok, let's try with the Python interpreter: > > > > ActivePython 2.4.2 Build 248 (ActiveState Corp.) based on > > > Python 2.4.2 (#67, Oct 30 2005, 16:11:18) [MSC v.1310 32 bit (Intel)] > > > on win32 > > > Type "help", "copyright", "credits" or "license" for more information. > > >>>> import i18n_test > > > Aidez-moi! > > > AIDE!!! > > > > # No surprise there so far. > > > >>>> print i18n_test.help > > > Aidez-moi! > > >>>> print i18n_test.test.help_prop > > > AIDE!!! > > >>>> i18n_test.help > > > 'Aidez-moi!' > > > > # all of the above are as expected; now for the first surprise > > > >>>> i18n_test.test.help_prop > > > Traceback (most recent call last): > > > File "<stdin>", line 1, in ? > > > File "i18n_test.py", line 12, in get > > > __help = _("HELP!") > > > TypeError: 'str' object is not callable > > > > # and a second surprise where we try to repeat something that used to > > > work > > > >>>> print i18n_test.test.help_prop > > > Traceback (most recent call last): > > > File "<stdin>", line 1, in ? > > > File "i18n_test.py", line 12, in get > > > __help = _("HELP!") > > > TypeError: 'str' object is not callable > > > > #============= > > > > Dare I say: "Help!" I really need to use the above at the > > > interpreter prompt. > > > > André > > > The _ builtin is set to the result of the last expression evaluated by the > > interpreter: > > > >>> for i in range(3): > > > ... i > > ... > > 0 > > 1 > > 2>>> _ > > 2 > > >>> import __builtin__ > > >>> __builtin__._ > > > 2 > > > Therefore you get a name clash with _() as an alias for gettext(). Use > > module-global aliases instead, e. g. > > > _ = fr.gettext > > > in the above code. > > > Peter > > Thanks, that works ... but, [snip...] One more question (back to the original) post. Why does i18n_test.help does the right thing but i18n_test.test.help_prop does not? Both use _() ...
Is it because help = _(...) is defined at the module level but test.help_prop is defined locally, and that the lookup for _() is done first locally (finds nothing) and then globally (outside the module scope) ? André -- http://mail.python.org/mailman/listinfo/python-list