pozz wrote: > Il 15/06/2017 15:22, Peter Otten ha scritto: >> pozz wrote: >> >>> I know I can load multiple gettext.translation: >>> >>> it = gettext.translation('test', localedir="locale", >>> languages=["it"]) es = gettext.translation('test', >>> localedir="locale", languages=["es"]) >>> >>> and install one translation at run-time when I want at a later time >>> (when the user selects a new language): >>> >>> it.install() >>> or >>> es.install() >>> >>> >>> However the problem is that strings already translated are not >>> translated again when a new translation is installed. So they stay at >>> the language selected during start-up and don't change after a new >>> install(). >>> >>> One solution is to restart the application, but I think there's a better >>> and more elegant solution. >> >> You need a way to defer the translation until the string is actually >> used. The documentation has a few ideas >> >> https://docs.python.org/dev/library/gettext.html#deferred-translations >> >> and here's another one -- perform the translation in the __str__ method >> of a custom class: > > [...] > > > It's a nice trick. However you will have a string that isn't a string, > but a class. I think you can't use the class everywhere you can use a > string. For example, len() can't be called.
len() could be implemented as class DeferredTranslation: ... def __len__(self): return len(str(self)) and usually I would expect that you only need a small subset of the str methods for localized text. However, when you switch languages between the len() and str() calls you will certainly make a mess... -- https://mail.python.org/mailman/listinfo/python-list