On Wed, Mar 28, 2012 at 9:03 PM, tonthon <[email protected]> wrote:
> Le 28/03/2012 20:43, tonthon a écrit :
>> Le 28/03/2012 19:56, John Anderson a écrit :
>>>
>>> On Wed, Mar 28, 2012 at 12:15 PM, tonthon <[email protected]
>>> <mailto:[email protected]>> wrote:
>>>
>>>     Hi,
>>>
>>>     I'm trying to get translated messages while using deform (I'm
>>>     working on
>>>     a french-only application).
>>>
>>>     I've added :
>>>     """
>>>     pyramid.default_locale_name = fr
>>>     """
>>>     to my application inifile.
>>>
>>>     I've added :
>>>     """
>>>     config.add_translation_dirs('deform:locale')
>>>     """
>>>     to my application __init__.py.
>>>
>>>     But it doesn't seem to be sufficient.
>>>
>>>     I've tried launching the following one from within one of my views :
>>>     """
>>>     from pyramid.i18n import
>>>     TranslationStringFactory
>>>     from pyramid.i18n import
>>>     get_localizer
>>>
>>>
>>>     translater =
>>>     TranslationStringFactory('deform')
>>>
>>>     def _(request, string,
>>>     mapping=None):
>>>         ts = translater(string,
>>>     mapping)
>>>         localizer =
>>>     get_localizer(request)
>>>         return localizer.translate(ts)
>>>
>>>     def myview(request):
>>>         print _(Required)
>>>         ...
>>>     """
>>>     and it prints "Requis" as expected. I can consider my setup is
>>>     fine, but
>>>     I can't understand why deform messages are still in english.
>>>
>>>     How should I do to make deform render translated strings ?
>>>
>>>     Regards,
>>>     Gaston
>>>
>>>
>>> deform has nothing to do with pyramid or its translation hooks.  You
>>> need to pass deform a renderer with a translator as well with:
>>>
>>>  deform.Form.set_default_renderer(renderer)
>>>
>>>
>> Ok, I thought it could magically handle it :).
>>
>> I've now passed a renderer and some of my strings are translated, but
>> the one coming from the chameleon templates are still in english.
>> Did I miss something ?
>>
>> A sample of my code :
>> """
>> def
>> get_deform_renderer():
>>      deform_template_dir = resource_filename('deform',
>> 'templates/')
>>      def
>> translator(term):
>>          return
>> get_localizer(get_current_request()).translate(term)
>>      renderer =
>> deform.ZPTRendererFactory(
>>
>> [deform_template_dir],
>>
>> translator=translator)
>>      return
>> renderer
>>
>>   def
>> set_deform_renderer():
>>        renderer =
>> get_deform_renderer()
>>        deform.Form.set_default_renderer(renderer)
>> """
> I've got it work.
>
> So to get deform translated :
>
> 1 * Add a pyramid.default_locale_name = <lang> in your .ini file
> (development.ini ...)
>
> 2 * Configure deform's locale directory in your main function :
> config.add_translation_dirs('deform:locale')
>
> 3 * Create a translator :
>
> factory = TranslationFactory('deform')
> def translator(term):
>     localizer = get_localizer(get_current_request())
>     return localizer.translate(factory(term))
>
> 4 * retrieve the deform template dir :
> deform_template_dir = resource_filename('deform','templates/')
>
> 5 * set deform's zpt_renderer with
> deform.Form.set_zpt_renderer(
>                        deform_template_dir
>                        translator=translator)
>
> That's it
>
> John, Thanks for your help

I've been using much of the same code in Kotti, and decided to factor
it out into pyramid_deform.  The latest release has an 'includeme'
hook that'll set up the translator for you.  So you just do

  pyramid.includes = ... pyramid_deform

and it should work (so steps 2-5 no longer necessary).  See
https://github.com/Pylons/pyramid_deform/blob/master/docs/index.rst

(Btw, the alpha in the latest release stands for 'not fully
documented', not for 'unstable'.)


Daniel

-- 
You received this message because you are subscribed to the Google Groups 
"pylons-discuss" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/pylons-discuss?hl=en.

Reply via email to