[Zope-dev] How can I force the language for a particular template rendering?
Hi All, What I want to do is best shown in pseudocode: something.setLanguage('fr') text = my_page_template() something.restoreLanguage() ...the reason I want to do this is that the results of that template will not be in the language negotiated for the current user, as the result is then emailed to someone who may not be speaking the same language as them. I can't find a way to specify a target_language that overrides the negotiated language into the ZPT rendering process. Is there such a way? Suggestions welcomed! Chris -- Simplistix - Content Management, Zope Python Consulting - http://www.simplistix.co.uk ___ Zope-Dev maillist - Zope-Dev@zope.org http://mail.zope.org/mailman/listinfo/zope-dev ** No cross posts or HTML encoding! ** (Related lists - http://mail.zope.org/mailman/listinfo/zope-announce http://mail.zope.org/mailman/listinfo/zope )
Re: [Zope-dev] How can I force the language for a particular template rendering?
How about just monkeypatching the active negotiator? {{{ negotiator = getUtility(zope.i18n.interfaces.INegotiator) orig = negotiator.getLanguage negotiator.getLanguage = lambda foo, bar: 'fr' text = my_page_template() negotiator.getLanguage = orig }}} Haven't tested it, but in my (limited) understanding of the I18N system something like that ought to work.. egj On Fri, Apr 17, 2009 at 3:14 PM, Chris Withers ch...@simplistix.co.ukwrote: Hi All, What I want to do is best shown in pseudocode: something.setLanguage('fr') text = my_page_template() something.restoreLanguage() ...the reason I want to do this is that the results of that template will not be in the language negotiated for the current user, as the result is then emailed to someone who may not be speaking the same language as them. I can't find a way to specify a target_language that overrides the negotiated language into the ZPT rendering process. Is there such a way? Suggestions welcomed! Chris ___ Zope-Dev maillist - Zope-Dev@zope.org http://mail.zope.org/mailman/listinfo/zope-dev ** No cross posts or HTML encoding! ** (Related lists - http://mail.zope.org/mailman/listinfo/zope-announce http://mail.zope.org/mailman/listinfo/zope )
Re: [Zope-dev] How can I force the language for a particular template rendering?
Ethan Jucovy wrote: How about just monkeypatching the active negotiator? {{{ negotiator = getUtility(zope.i18n.interfaces.INegotiator) orig = negotiator.getLanguage negotiator.getLanguage = lambda foo, bar: 'fr' text = my_page_template() negotiator.getLanguage = orig }}} Haven't tested it, but in my (limited) understanding of the I18N system something like that ought to work.. As the default negotiator is based on the request, it might be possible to forge a different request object for the template. Or attach a marker interface to the request and register a different IUserPreferredLanguages adapter for it. A more specialized version should take precedence over the normal adapter based on the HTTP header. Hanno ___ Zope-Dev maillist - Zope-Dev@zope.org http://mail.zope.org/mailman/listinfo/zope-dev ** No cross posts or HTML encoding! ** (Related lists - http://mail.zope.org/mailman/listinfo/zope-announce http://mail.zope.org/mailman/listinfo/zope )
Re: [Zope-dev] How can I force the language for a particular template rendering?
Actually -- for a more proper solution -- I believe zope.i18n.interfaces.IUserPreferredLanguages is expected to adapt a request (rather than being a contextless utility) so I bet you could register a custom IUserPreferredLanguages whose getPreferredLanguages returns ['fr'] on an IForceLanguage interface, and mark the current request with IForceLanguage before rendering the template. egj On Fri, Apr 17, 2009 at 3:35 PM, Ethan Jucovy ethan.juc...@gmail.comwrote: How about just monkeypatching the active negotiator? {{{ negotiator = getUtility(zope.i18n.interfaces.INegotiator) orig = negotiator.getLanguage negotiator.getLanguage = lambda foo, bar: 'fr' text = my_page_template() negotiator.getLanguage = orig }}} Haven't tested it, but in my (limited) understanding of the I18N system something like that ought to work.. egj On Fri, Apr 17, 2009 at 3:14 PM, Chris Withers ch...@simplistix.co.ukwrote: Hi All, What I want to do is best shown in pseudocode: something.setLanguage('fr') text = my_page_template() something.restoreLanguage() ...the reason I want to do this is that the results of that template will not be in the language negotiated for the current user, as the result is then emailed to someone who may not be speaking the same language as them. I can't find a way to specify a target_language that overrides the negotiated language into the ZPT rendering process. Is there such a way? Suggestions welcomed! Chris ___ Zope-Dev maillist - Zope-Dev@zope.org http://mail.zope.org/mailman/listinfo/zope-dev ** No cross posts or HTML encoding! ** (Related lists - http://mail.zope.org/mailman/listinfo/zope-announce http://mail.zope.org/mailman/listinfo/zope )
Re: [Zope-dev] How can I force the language for a particular template rendering?
Actually -- for a more proper solution -- I believe zope.i18n.interfaces.IUserPreferredLanguages is expected to adapt a request (rather than being a contextless utility) so I bet you could register a custom IUserPreferredLanguages whose getPreferredLanguages returns ['fr'] on an IForceLanguage interface, and mark the current request with IForceLanguage before rendering the template. egj On Fri, Apr 17, 2009 at 3:35 PM, Ethan Jucovy ethan.juc...@gmail.comwrote: How about just monkeypatching the active negotiator? {{{ negotiator = getUtility(zope.i18n.interfaces.INegotiator) orig = negotiator.getLanguage negotiator.getLanguage = lambda foo, bar: 'fr' text = my_page_template() negotiator.getLanguage = orig }}} Haven't tested it, but in my (limited) understanding of the I18N system something like that ought to work.. egj On Fri, Apr 17, 2009 at 3:14 PM, Chris Withers ch...@simplistix.co.ukwrote: Hi All, What I want to do is best shown in pseudocode: something.setLanguage('fr') text = my_page_template() something.restoreLanguage() ...the reason I want to do this is that the results of that template will not be in the language negotiated for the current user, as the result is then emailed to someone who may not be speaking the same language as them. I can't find a way to specify a target_language that overrides the negotiated language into the ZPT rendering process. Is there such a way? Suggestions welcomed! Chris ___ Zope-Dev maillist - Zope-Dev@zope.org http://mail.zope.org/mailman/listinfo/zope-dev ** No cross posts or HTML encoding! ** (Related lists - http://mail.zope.org/mailman/listinfo/zope-announce http://mail.zope.org/mailman/listinfo/zope )