i18n/L10n support in zope2
Dear list members, I am newbie/begineer in area of zope2 + i18n/L10n so please excuse me if this topic has already been discussed on the list, in that case can some one please point me to the past discussions/threads. After reading some basics about i18n+zope2, I have tried following - (zope version - Zope 2.9.7-final, python 2.4.4, win32 and Placeless Translation Service - 1.3.7) Created simple page template - <html> <body> <span i18n:domain="PlacelessTranslationService" i18n:translate="Reload this catalog"> Reload this catalog </span> </body> </html> Modified language preferences for browsers - (Mozilla Firefox 2.0.0.4 and MS-IE 7.0.5730.11) to set German [de] as primary langage. When I viewed above page in firfox got the corresponing german translation (Diesen Katalog neu einlesen) as specified in related .po file. But with MS-IE, no luck, gives same string - Reload this catalog So is it browser specific/dependable ? Another thing I tried is adding attribute i18n:target="cs", but it seems to have no effect, firefox gives german translation as per language settings as MS-IE gives same string - Reload this catalog Does it means that attribute target is not supported ? Is there any list/documentation about supported i18n attributes ? Also I was not able to find references/examples for DTML, does DTML supports i18n/L10n ? Any help/suggestions/pointers would be of great help. Thanking you, Harshad.
harshad behere, on 2008-04-09:
Dear list members,
I am newbie/begineer in area of zope2 + i18n/L10n so please excuse me if this topic has already been discussed on the list, in that case can some one please point me to the past discussions/threads.
After reading some basics about i18n+zope2, I have tried following - (zope version - Zope 2.9.7-final, python 2.4.4, win32 and Placeless Translation Service - 1.3.7)
Created simple page template - <html> <body> <span i18n:domain="PlacelessTranslationService" i18n:translate="Reload this catalog"> Reload this catalog </span> </body> </html>
I would expect either: i18n:translate="" so that the string behind it ends up in the .pot file (and you don't repeat yourself needlessly; also think what would happen when you change one string but forget to change the other). Or: i18n:translate="reload_this_catalog" or some other unique message id. But the above code should work. Well, using PlacelessTranslationService as i18n:domain is strange. You should use the name of your own product/package.
Modified language preferences for browsers - (Mozilla Firefox 2.0.0.4 and MS-IE 7.0.5730.11) to set German [de] as primary langage.
When I viewed above page in firfox got the corresponing german translation (Diesen Katalog neu einlesen) as specified in related .po file. But with MS-IE, no luck, gives same string - Reload this catalog
So is it browser specific/dependable ?
It should not. Do you have a way to check which browser headers are sent by IE and firefox and if they differ in the language preference?
Another thing I tried is adding attribute i18n:target="cs", but it seems to have no effect, firefox gives german translation as per language settings as MS-IE gives same string - Reload this catalog
Does it means that attribute target is not supported ? Is there any list/documentation about supported i18n attributes ?
I have never seen that attribute. From the top of my head, these i18n attributes are used in zope: translate, domain, name and attributes.
Also I was not able to find references/examples for DTML, does DTML supports i18n/L10n ?
No. At least, I do not think so, and this grep in a buildout did not return any relevant results: grep i18n $(find . -name '*dtml') -- Maurits van Rees | http://maurits.vanrees.org/ Work | http://zestsoftware.nl/ "This is your day, don't let them take it away." [Barlow Girl]
Maurits, Thanks for the reply and suggestions. I tried i18n:translate="", it works fine. But if I change domain (e.g i18n:domain="mydomain") it doesn't work. Is domain attribute is related to the domain specified in .po file, coz the example .po file which comes with PlacelessTranslationService has domain as 'PlacelessTranslationService' and if I used same it works fine. Actually I used i18n:target after reading - http://wiki.zope.org/zope3/ZPTInternationalizationExamples. I do understand that these are zope3 examples, but just thought of giving try. While searching further I found - https://bugs.launchpad.net/zope2/+bug/142771 which gives hint that i18n:target not supported at least for Zope 2.9.7-final, python 2.4.4, win32 I will try to check for incoming browser headers, but does zope provides any inbuilt method to do so ? Thank you, Harshad. Maurits van Rees wrote:
harshad behere, on 2008-04-09:
Dear list members,
I am newbie/begineer in area of zope2 + i18n/L10n so please excuse me if this topic has already been discussed on the list, in that case can some one please point me to the past discussions/threads.
After reading some basics about i18n+zope2, I have tried following - (zope version - Zope 2.9.7-final, python 2.4.4, win32 and Placeless Translation Service - 1.3.7)
Created simple page template - <html> <body> <span i18n:domain="PlacelessTranslationService" i18n:translate="Reload this catalog"> Reload this catalog </span> </body> </html>
I would expect either:
i18n:translate=""
so that the string behind it ends up in the .pot file (and you don't repeat yourself needlessly; also think what would happen when you change one string but forget to change the other).
Or:
i18n:translate="reload_this_catalog"
or some other unique message id.
But the above code should work.
Well, using PlacelessTranslationService as i18n:domain is strange. You should use the name of your own product/package.
Modified language preferences for browsers - (Mozilla Firefox 2.0.0.4 and MS-IE 7.0.5730.11) to set German [de] as primary langage.
When I viewed above page in firfox got the corresponing german translation (Diesen Katalog neu einlesen) as specified in related .po file. But with MS-IE, no luck, gives same string - Reload this catalog
So is it browser specific/dependable ?
It should not. Do you have a way to check which browser headers are sent by IE and firefox and if they differ in the language preference?
Another thing I tried is adding attribute i18n:target="cs", but it seems to have no effect, firefox gives german translation as per language settings as MS-IE gives same string - Reload this catalog
Does it means that attribute target is not supported ? Is there any list/documentation about supported i18n attributes ?
I have never seen that attribute. From the top of my head, these i18n attributes are used in zope: translate, domain, name and attributes.
Also I was not able to find references/examples for DTML, does DTML supports i18n/L10n ?
No. At least, I do not think so, and this grep in a buildout did not return any relevant results:
grep i18n $(find . -name '*dtml')
harshad behere, on 2008-04-10:
Maurits,
Thanks for the reply and suggestions.
I tried i18n:translate="", it works fine.
But if I change domain (e.g i18n:domain="mydomain") it doesn't work. Is domain attribute is related to the domain specified in .po file, coz the example .po file which comes with PlacelessTranslationService has domain as 'PlacelessTranslationService' and if I used same it works fine.
Yes, the two should be the same. But if you use this domain and other people use it too because it is the standard example then you can get conflicting translations.
Actually I used i18n:target after reading - http://wiki.zope.org/zope3/ZPTInternationalizationExamples. I do understand that these are zope3 examples, but just thought of giving try. While searching further I found - https://bugs.launchpad.net/zope2/+bug/142771 which gives hint that i18n:target not supported at least for Zope 2.9.7-final, python 2.4.4, win32
I have never seen it used anywhere. My i18n experience is with Zope 2.9 and 2.10 though, not pure Zope 3, so maybe it works fine there.
I will try to check for incoming browser headers, but does zope provides any inbuilt method to do so ?
In Firefox you can use the livehttpheaders extension to check those. I don't know if there is something similar to IE. In zope this information should be visible somewhere in the request object. To display the complete request in a page template for inspection you can probably do this: <div tal:replace="structure request" /> or simply this <div tal:content="request" /> -- Maurits van Rees | http://maurits.vanrees.org/ Work | http://zestsoftware.nl/ "This is your day, don't let them take it away." [Barlow Girl]
Maurits van Rees wrote:
In Firefox you can use the livehttpheaders extension to check those. I don't know if there is something similar to IE.
In zope this information should be visible somewhere in the request object. To display the complete request in a page template for inspection you can probably do this:
<div tal:replace="structure request" />
or simply this
<div tal:content="request" />
Ooops.. I missed out "REQUEST" .... While debugging negotiation mechanizm of PTS I found following headers are being consulted - HTTP_ACCEPT_LANGUAGE, _pts_negotiator_cache_language,_pts_catalog_names_PlacelessTranslationService_??? And here are the details -- MS-IE 7.0.5730.11 -- HTTP_ACCEPT_LANGUAGE 'de-DE,en-us;q=0.5' _pts_negotiator_cache_language {('cs', 'el', 'de', 'pt-br', 'en'): None} _pts_catalog_names_PlacelessTranslationService_none [] Mozilla Firefox 2.0.0.4 -- HTTP_ACCEPT_LANGUAGE 'de,en;q=0.7,en-us;q=0.3' _pts_negotiator_cache_language {('cs', 'el', 'de', 'pt-br', 'en'): 'de'} _pts_catalog_names_PlacelessTranslationService_de ['PlacelessTranslationService.i18n-pts-de.po'] Here are related entries from .po file - "Language-code: de\n" "Language-name: Deutsch\n" I suspect 'de-DE' from MSIE is the issue here. Thank you, Harshad.
Maurits van Rees wrote:
harshad behere, on 2008-04-10:
Maurits,
Thanks for the reply and suggestions.
I tried i18n:translate="", it works fine.
But if I change domain (e.g i18n:domain="mydomain") it doesn't work. Is domain attribute is related to the domain specified in .po file, coz the example .po file which comes with PlacelessTranslationService has domain as 'PlacelessTranslationService' and if I used same it works fine.
Yes, the two should be the same. But if you use this domain and other people use it too because it is the standard example then you can get conflicting translations.
Yes completely agreed. I tried changing domain in given example .po file (e.g. to "Domain=mydomain\n"), but it doesn't work even after doing "Reload catalog" for corresponding .po file object using PTS ZMI. I found reload catalog works if we modify message ids/text. Any idea how PTS manages this headers (like Domain/Content-Type etc) ? Is it possible to reload/refresh/rebuild this information ? Thank you, Harshad.
I tried changing domain in given example .po file (e.g. to "Domain=mydomain\n"), but it doesn't work even after doing "Reload catalog" for corresponding .po file object using PTS ZMI. I found reload catalog works if we modify message ids/text. Any idea how PTS manages this headers (like Domain/Content-Type etc) ? Is it possible to reload/refresh/rebuild this information ?
While working further I found following work aroud ( may not be on correct path, but it works) -- Edit the headings part (e.g Domain/Language etc) for .po files and save file. -- Make use of PTS ZMI to delete corresponding ZODB object of .po file. -- Restart Zope. I also found workaound for MSIE behaviour, include heading call "X-Is-Fallback-For: ?????\n" in your .po file. For e.g - "X-Is-Fallback-For: de-de\n". After making change and updating sample page template - (English as primary language for both browsers) <html> <body> English - <span i18n:domain="English" i18n:translate=""> Reload this catalog </span> <br> German - <span i18n:domain="Germany" i18n:translate=""> Reload this catalog </span> <br> Czech - <span i18n:domain="Czech" i18n:translate=""> Reload this catalog </span> <br> </body> </html> gives following o/p Mozilla Firefox 2.0.0.4 - -- English - Reload this catalog -- German - Reload this catalog -- Czech - Reload this catalog MS-IE 7.0.5730.11 - -- English - Reload this catalog -- German - Diesen Katalog neu einlesen -- Czech - Znovu nacíst katalog Interest thing is that MSIE respects selected language hierarchy where as FireFox gives preference to the primary one. Here are the headers - Mozilla Firefox 2.0.0.4 HTTP_ACCEPT_LANGUAGE 'en-us,en;q=0.8,de;q=0.5,cs;q=0.3' _pts_catalog_names_Germany_en [] _pts_catalog_names_Czech_en [] _pts_catalog_names_English_en [] _pts_negotiator_cache_language {('de', 'de-de', 'en'): 'en', ('en',): 'en', ('cs', 'cs-cz', 'en'): 'en'} MS-IE 7.0.5730.11 HTTP_ACCEPT_LANGUAGE 'en-us,de-DE;q=0.7,cs-CZ;q=0.3' _pts_catalog_names_Czech_cs-cz ['PlacelessTranslationService.i18n-pts-cs.po'] _pts_catalog_names_Germany_de-de ['PlacelessTranslationService.i18n-pts-de.po'] _pts_catalog_names_English_none [] _pts_negotiator_cache_language {('de', 'de-de', 'en'): 'de-de', ('en',): None, ('cs', 'cs-cz', 'en'): 'cs-cz'} Thank you, Harshad.
harshad behere, on 2008-04-10:
I also found workaound for MSIE behaviour, include heading call "X-Is-Fallback-For: ?????\n" in your .po file. For e.g - "X-Is-Fallback-For: de-de\n".
Ah yes, that is the correct solution here indeed.
After making change and updating sample page template - (English as primary language for both browsers)
<html> <body> English - <span i18n:domain="English" i18n:translate=""> Reload this catalog </span> <br> German - <span i18n:domain="Germany" i18n:translate=""> Reload this catalog </span> <br> Czech - <span i18n:domain="Czech" i18n:translate=""> Reload this catalog </span> <br> </body> </html>
Huh? You now state languages in the i18n domain. Don't you mean to make this three times the same domain and then perhaps add the i18n:target en/de/cs? -- Maurits van Rees | http://maurits.vanrees.org/ Work | http://zestsoftware.nl/ "This is your day, don't let them take it away." [Barlow Girl]
Maurits van Rees wrote:
After making change and updating sample page template - (English as primary language for both browsers)
<html> <body> English - <span i18n:domain="English" i18n:translate=""> Reload this catalog </span> <br> German - <span i18n:domain="Germany" i18n:translate=""> Reload this catalog </span> <br> Czech - <span i18n:domain="Czech" i18n:translate=""> Reload this catalog </span> <br> </body> </html>
Huh? You now state languages in the i18n domain. Don't you mean to make this three times the same domain and then perhaps add the i18n:target en/de/cs?
Yes..using i18n:target (not in Zope 2.9.7 at least as no support there :) ) with single domain can be much better approach. But honestly I am just beginner in this i18n/L10n arena, so need to work on i18n/L10n rules/standards. Thank you, Harshad.
participants (2)
-
harshad behere -
Maurits van Rees