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

-- 
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