2011-12-12 1 views
12

cerco di attivare il tag trans e ho fatto un modello di prova i18n.html:Come abilitare il tag {% trans%} per i modelli jinja?

{% trans %}For sale{% endtrans %}--{{message}}--{{decimal_format}} Ecco il mio codice python secondo il manpages:

from webapp2_extras import i18n as multilingua 
import jinja2 
from webapp2_extras.i18n import lazy_gettext as gettext 
from webapp2_extras.i18n import lazy_gettext as _ 
from jinja2 import Environment, FileSystemLoader 
jinja_environment = jinja2.Environment(loader=jinja2.FileSystemLoader(os.path.dirname(__file__)), 
         extensions=['jinja2.ext.i18n']) 

# The code below seems wrong since it is django but it was the only way I could make the page load 

jinja_environment.install_gettext_translations(django.utils.translation) 

class HelloWorldHandler(webapp2.RequestHandler): 
    def get(self): 
     # Set the requested locale. 
     locale = self.request.GET.get('locale', 'pt') 
     multilingua.get_i18n().set_locale(locale) 
     message = multilingua.gettext('For sale') 
     #django.utils.translation.activate('pt') 
     template = jinja_environment.get_template('templates/i18n.html') 
    decimal_format = multilingua.I18n(self.request).format_decimal(1000) 
     self.response.out.write(template.render(message=message, decimal_format=decimal_format)) 

non ho potuto farlo funzionare senza django e quindi chiedo come perdere la traduzione di django e stare con webapp2.i18n + jinja.

C'è stata anche una discussione in a thread in cui non sono l'unico a dire che la documentazione è in qualche modo incompleta o difficile da trovare. Potresti rispondere o commentare quale è il modo consigliato di far funzionare il tag trans e perché devo includere jinja_environment.install_gettext_translations(django.utils.translation) ?

Quando tento di rimuovere il mio uso di django, perdo anche le funzioni di webapp2.i18n. I miei file locali sono sia in locale/... e conf/locale .. poiché il primo è il valore predefinito per webapp2 e il secondo è il valore predefinito per le traduzioni di django, quindi potrei davvero usare alcune linee guida per le migliori pratiche qui per sbarazzarsi di le dipendenze di django e usano webapp2 e jinja per rendere le mie localizzazioni.

Se a qualsiasi aiuto, ho ricevuto un messaggio di errore quando si cerca di rimuovere django:

self.response.out.write(template.render(message=message, decimal_format=decimal_format)) 
    File "/media/Lexar/montao/montaoproject/jinja2/environment.py", line 894, in render 
    return self.environment.handle_exception(exc_info, True) 
    File "/media/Lexar/montao/montaoproject/templates/i18n.html", line 2, in top-level template code 
    {{ _('For sale') }}--{{message}}--{{decimal_format}} 
UndefinedError: 'gettext' is undefined 

Grazie

+0

Soluzione non documentata/soluzione che rende wor le mie tag jinja trans k: 'da webapp2_extras import i18n jinja_environment.install_gettext_translations (i18n)' –

+1

Sarebbe interessante sapere come hai trovato questa soluzione/soluzione non documentata. – eyquem

+1

a chiunque stia leggendo questo, ecco una guida aggiornata su come fare questo http://mikeshilkov.wordpress.com/2012/07/26/enable-jinja2-and-i18n-translations-on-google-appengine/ –

risposta

9

Date un'occhiata a Jinja2 di i18n Extension documentation. La chiamata a install_gettext_translations imposta fondamentalmente l'oggetto attraverso il quale Jinja2 chiamerà gettext, ngettext, ecc. Per tradurre stringhe quando incontra un tag {% trans %}.

Tali funzioni sono definite sulla webapp2.i18n (vedi here), Jinja2 avrà successo chiamare queste funzioni per recuperare traduzioni, dipende dalla vostra chiamata a set_locale all'interno della richiesta. Non ho il codice di fronte a me, ma suppongo che lo gettext e la società definita in webapp2.i18n siano semplicemente proxy per chiamare lo webapp.i18.get_i18n().gettext, che è la magia che fa funzionare tutto questo.

2

Ecco un esempio di lavoro per Django + Jinja2:

from jinja2 import PackageLoader, Environment 
from django.utils import translation 

...

jinja_environment = Environment(loader=PackageLoader('website', 'templates'), 
           extensions=['jinja2.ext.i18n']) 

jinja_environment.install_gettext_translations(translation) 

template = jinja_environment.get_template('test.jinja.html') 

page_next_app_table = template.render() 

...

In test.jinja.html:

<html> 
<b> {{ _("Traslate This") }}:</b> 
</html>