Re: [Tutor] Simple way for i18n ?
Hello Micheal,I've changed LANGUAGE in the shell , it worked at the beginning and then it stopped working ...Also os.environ.setdefault method still has no effect. I begin to wonder if it's specific to my distro (Ubuntu Breezy). Anyway I managed to use translation but if I give None for languages (or nothing) he gives back an IOError.I'm finaly using a mix of install and translation through an exception handling and I can also change the language on the fly in the app.It works but it's probably not very academic :) http://www.flickr.com/photos/frenchy/117229913/Thanks francoisOn 24/03/06, Michael Lange [EMAIL PROTECTED] wrote:On Thu, 23 Mar 2006 23:58:58 +0100francois schnell [EMAIL PROTECTED] wrote: Now I'd like to be able to change language without loging out, change language, log in. Martelli says in his book that to set the default language for the app I just need to do: os.environ.setdefault('LANG', 'fr_FR') and Python doesn't complain (but doesn't work) but if I then do: print locale.getdefaultlocale () Python says : ('en_GB', 'utf-8')# meaning that really couldn't work ? How can I have my app in French even if I'm still in the GB version of Ubuntu (change the language for the app) ? Hi Francois,I tried to do so with one of my apps (on Mandrake) and found that I have to changethe LANGUAGE environment variable, changing LANG had no effect on this.From the python gettext docs I found: If languages is not given, then the following environment variables are searched: LANGUAGE, LC_ALL, LC_MESSAGES, and LANG.So it looks like the easiest may be to do$ LANGUAGE=en_GBin the shell before you start your app. I've also tried the translation way instead of the install way: if I do: gettext.install(myapp, localedir) #it translates in French when I'm in the French Ubuntu but if I do instead: gettext.translation(myapp, localedir, languages=fr_FR) #with the same localedir which worked before = Python complains: gettext.translation(myapp, localedir, languages=fr_FR) File /usr/lib/python2.4/gettext.py, line 480, in translation raise IOError(ENOENT, 'No translation file found for domain', domain) IOError: [Errno 2] No translation file found for domain: 'myapp' I find it strange that install finds it but not translation (for the same localedir) ? I admit I nevered bothered to find out how to use gettext.translation() since gettext.install()works that fine for me. Maybe you should set languages to fr instead of fr_FR (just a guess though)? I hope this helpsMichael___Tutor maillist-Tutor@python.org http://mail.python.org/mailman/listinfo/tutor ___ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor
Re: [Tutor] Simple way for i18n ?
On Thu, 23 Mar 2006 23:58:58 +0100 francois schnell [EMAIL PROTECTED] wrote: Now I'd like to be able to change language without loging out, change language, log in. Martelli says in his book that to set the default language for the app I just need to do: os.environ.setdefault('LANG', 'fr_FR') and Python doesn't complain (but doesn't work) but if I then do: print locale.getdefaultlocale() Python says : ('en_GB', 'utf-8') # meaning that really couldn't work ? How can I have my app in French even if I'm still in the GB version of Ubuntu (change the language for the app) ? Hi Francois, I tried to do so with one of my apps (on Mandrake) and found that I have to change the LANGUAGE environment variable, changing LANG had no effect on this. From the python gettext docs I found: If languages is not given, then the following environment variables are searched: LANGUAGE, LC_ALL, LC_MESSAGES, and LANG. So it looks like the easiest may be to do $ LANGUAGE=en_GB in the shell before you start your app. I've also tried the translation way instead of the install way: if I do: gettext.install(myapp, localedir) #it translates in French when I'm in the French Ubuntu but if I do instead: gettext.translation(myapp, localedir, languages=fr_FR) #with the same localedir which worked before = Python complains: gettext.translation(myapp, localedir, languages=fr_FR) File /usr/lib/python2.4/gettext.py, line 480, in translation raise IOError(ENOENT, 'No translation file found for domain', domain) IOError: [Errno 2] No translation file found for domain: 'myapp' I find it strange that install finds it but not translation (for the same localedir) ? I admit I nevered bothered to find out how to use gettext.translation() since gettext.install() works that fine for me. Maybe you should set languages to fr instead of fr_FR (just a guess though)? I hope this helps Michael ___ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor
Re: [Tutor] Simple way for i18n ?
On Wed, 22 Mar 2006 17:41:14 +0100 francois schnell [EMAIL PROTECTED] wrote: Hello all, I wish to translate a Python script from English to French. I've read the offical documentation (python.org doc) but I must admit that I'm lost now ... I've found some simple explanations here but I can't make it work: http://karrigell.sourceforge.net/en/internationalization.htm Here's where I'm stuck: Let's imagine my app is: myapp.py -- import gettext _ = gettext.gettext print _(hello friends) print _(Bye Bye) --- Here are my folders on a windows box: C:\myappfolder\ ---\Translations\francais\LC_MESSAGES My myapp.py is in myappfolder In this folder I've used pygettext.py to produce a messages.pot file = I add the translation in it = I have a messages.po file. I then used msgfmt.py to produce messages.mo file. I then copied messages.po and messages.mo in LC_MESSAGES folder C:\myappfolder\ ---\Translations\francais\LC_MESSAGES I now come back to myapp.py and add two lines: --- import gettext _ = gettext.gettext t=gettext.translation(messages,c:\myappfolder\Translations,francais) t.install() print _(hello friends) print _(Bye Bye) --- When I do that Python anwers: Traceback (most recent call last): File C:\myappfolder\myapp.py, line 4, in ? t=gettext.translation (messages,c:\myappfolder\Translations,francais) File C:\Python24\lib\gettext.py, line 456, in translation raise IOError(ENOENT, 'No translation file found for domain', domain) IOError: [Errno 2] No translation file found for domain: 'messages' Hi Francois, not sure if it is different on windows, on linux I simply do: import gettext gettext.install(domain, localedir) to install _() into my application's global namespace, where localedir in your case was c:\myappfolder\Translations. The path that contains the french translation should be ..\fr\LC_MESSAGES instead of ..\francais\LC_MESSAGES I think (at least that is true on linux). I hope this helps Michael ___ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor
Re: [Tutor] Simple way for i18n ?
Thanks both for your help, I managed to find one book which talk about i18n for Python: Python in a Nutshell (few pages for i18n) I've used sys.prefix on my ubuntu box to find the default directory and it works fine this way: http://www.flickr.com/photos/frenchy/116742621/ I've also done like you said: gettext.install(domain, localedir) and now it works fine also with a locale directory :) Then what I've got now is: - I log on the french version of Ubuntu I've got the french app version - I log on the UK version of Ubuntu I've got the original app version in English Now I'd like to be able to change language without loging out, change language, log in. Martelli says in his book that to set the default language for the app I just need to do: os.environ.setdefault('LANG', 'fr_FR') and Python doesn't complain (but doesn't work) but if I then do: print locale.getdefaultlocale() Python says : ('en_GB', 'utf-8') # meaning that really couldn't work ? How can I have my app in French even if I'm still in the GB version of Ubuntu (change the language for the app) ? I've also tried the translation way instead of the install way: if I do: gettext.install(myapp, localedir) #it translates in French when I'm in the French Ubuntu but if I do instead: gettext.translation(myapp, localedir, languages=fr_FR) #with the same localedir which worked before = Python complains: gettext.translation(myapp, localedir, languages=fr_FR) File /usr/lib/python2.4/gettext.py, line 480, in translation raise IOError(ENOENT, 'No translation file found for domain', domain) IOError: [Errno 2] No translation file found for domain: 'myapp' I find it strange that install finds it but not translation (for the same localedir) ? Thanks in advance If you can help. francois On 23/03/06, Michael Lange [EMAIL PROTECTED] wrote: On Wed, 22 Mar 2006 17:41:14 +0100francois schnell [EMAIL PROTECTED] wrote: Hello all, I wish to translate a Python script from English to French. I've read the offical documentation (python.org doc) but I must admit that I'm lost now ... I've found some simple explanations here but I can't make it work: http://karrigell.sourceforge.net/en/internationalization.htm Here's where I'm stuck: Let's imagine my app is: myapp.py -- import gettext _ = gettext.gettext print _(hello friends) print _(Bye Bye) --- Here are my folders on a windows box: C:\myappfolder\ ---\Translations\francais\LC_MESSAGES My myapp.py is in myappfolder In this folder I've used pygettext.py to produce a messages.pot file = I add the translation in it = I have a messages.po file. I then used msgfmt.py to produce messages.mo file. I then copied messages.po and messages.mo in LC_MESSAGES folder C:\myappfolder\ ---\Translations\francais\LC_MESSAGES I now come back to myapp.py and add two lines: --- import gettext _ = gettext.gettext t=gettext.translation(messages,c:\myappfolder\Translations,francais) t.install() print _(hello friends) print _(Bye Bye) --- When I do that Python anwers: Traceback (most recent call last): File C:\myappfolder\myapp.py, line 4, in ? t=gettext.translation (messages,c:\myappfolder\Translations,francais) File C:\Python24\lib\gettext.py, line 456, in translation raise IOError(ENOENT, 'No translation file found for domain', domain) IOError: [Errno 2] No translation file found for domain: 'messages' Hi Francois,not sure if it is different on windows, on linux I simply do: import gettextgettext.install(domain, localedir)to install _() into my application's global namespace,where localedir in your case was c:\myappfolder\Translations.The path that contains the french translation should be ..\fr\LC_MESSAGES instead of ..\francais\LC_MESSAGES I think (at least that is true on linux).I hope this helpsMichael___Tutor maillist-Tutor@python.org http://mail.python.org/mailman/listinfo/tutor ___ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor
Re: [Tutor] Simple way for i18n ?
On 3/22/06, francois schnell [EMAIL PROTECTED] wrote: Hello all, I wish to translate a Python script from English to French. I've read the offical documentation (python.org doc) but I must admit that I'm lost now ... I've found some simple explanations here but I can't make it work: http://karrigell.sourceforge.net/en/internationalization.htm Here's where I'm stuck: Let's imagine my app is: myapp.py -- import gettext _ = gettext.gettext print _(hello friends) print _(Bye Bye) --- Here are my folders on a windows box: C:\myappfolder\ ---\Translations\francais\LC_MESSAGES My myapp.py is in myappfolder In this folder I've used pygettext.py to produce a messages.pot file = I add the translation in it = I have a messages.po file. I then used msgfmt.py to produce messages.mo file. I then copied messages.po and messages.mo in LC_MESSAGES folder C:\myappfolder\ ---\Translations\francais\LC_MESSAGES I now come back to myapp.py and add two lines: --- import gettext _ = gettext.gettext t=gettext.translation(messages,c:\myappfolder\Translations,francais) t.install() print _(hello friends) print _(Bye Bye) --- When I do that Python anwers: Traceback (most recent call last): File C:\myappfolder\myapp.py, line 4, in ? t=gettext.translation(messages,c:\myappfolder\Translations,francais) File C:\Python24\lib\gettext.py, line 456, in translation raise IOError(ENOENT, 'No translation file found for domain', domain) IOError: [Errno 2] No translation file found for domain: 'messages' I'm stuck here. I understand it doesn't find the translation file but I can't figure out why. I've always seen standard directory structures (e.g. \locales\fr, etc.) rather than custom ones as above, so I can't comment for sure ... but: try to either write rc:\myappfolder\Translations or c:\\myappfolder\\Translations to avoid possible backslash problems... Bonne chance! André Can you tell me what I'm doing wrong or direct me to an URL (or a Python book) where simple internationalisation for Python is gently explained Thanks francois (...from France) ___ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor ___ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor