2015-04-21 31 views
5

Sto usando Flask, Flask-Babel e Jinja2. Sto cercando di generare il file .pot. Quello che ho fatto finora.Pybabel genera un file vuoto con jinja2

mio babel.cfg assomiglia a questo:

[python: **.py] 

[jinja2: **.html] 
encoding = utf-8 
extensions=jinja2.ext.autoescape,jinja2.ext.with_ 

Sono inizializzare Flask-Babel con la mia app come questo:

# Babel init 
babel = Babel(app) 
app.config['BABEL_DEFAULT_LOCALE'] = 'en' 

Nel mio elenco dei modelli che faccio avere homepage.html:

... 
<div class="news-wrapper"> 
    <p class="quote">{{ gettext('Hey there') }}</p> 
    <p class="quote">{% trans %}Trying 42{% endtrans %}</p> 
    <p class="quote">{{ _('Maybe like this?') }}</p> 
</div> 
... 

poi eseguire questo comando (mentre io sono nel mio virtualenv):

pybabel extract -F babel.cfg -o messages.pot . 

Una delle linee uscite è:

extracting messages from templates/homepage.html (extensions="jinja2.ext.autoescape,jinja2.ext.with_", encoding="utf-8") 

Ed è genera un messaggio. file pot con questo contenuto:

# Translations template for PROJECT. 
# Copyright (C) 2015 ORGANIZATION 
# This file is distributed under the same license as the PROJECT project. 
# FIRST AUTHOR <[email protected]>, 2015. 
# 
#, fuzzy 
msgid "" 
msgstr "" 
"Project-Id-Version: PROJECT VERSION\n" 
"Report-Msgid-Bugs-To: [email protected]\n" 
"POT-Creation-Date: 2015-04-21 10:06+0300\n" 
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" 
"Last-Translator: FULL NAME <[email protected]>\n" 
"Language-Team: LANGUAGE <[email protected]>\n" 
"MIME-Version: 1.0\n" 
"Content-Type: text/plain; charset=utf-8\n" 
"Content-Transfer-Encoding: 8bit\n" 
"Generated-By: Babel 1.3\n" 

Il file non ha le mie traduzioni.

Non ricevo errori o avvisi, pybabel non riesce a trovare le variazioni gettext nei file jinja2. MA quando uso lo gettext in un file .py è che funziona bene.

Mi manca qualcosa? Grazie

risposta

3

Dopo aver passato ore a capirlo, ho trovato la soluzione, postando un aiuto futuro se qualcuno ne avesse bisogno.

ho avuto Flask-Assets installati nei miei modelli, a quanto pare se lo avete, è necessario aggiungere in te babel.cfg:

extensions=jinja2.ext.autoescape,jinja2.ext.with_,webassets.ext.jinja2.AssetsExtension 

Dalla documentazione Flask-Attivo:

In caso contrario, babel non estrae stringhe da alcun modello che include un tag di risorse.

ho intenzione di fare una richiesta di pull che controlla se si dispone di Flask-Attività e Flask-Babel installato e non ha aggiunto l'estensione a destra, Vi darà avvertimento - penso che lo sviluppatore dovrebbe ottenere qualche errore/avvertimento.

+3

impostazione 'silenzio = FALSE nel vostro' babel.cfg' aiuterà a individuare il problema: cosa è, questo dovrebbe davvero essere il default :( Grazie per aver segnalato l'estensione Jinja2 dei webassets! – Manuel

+1

Phew, questo era un bug oscuro - grazie per aver postato la tua correzione, ha funzionato perfettamente. – rlafuente

2

Per gli altri che potrebbero non utilizzare l'estensione delle risorse come indicato nella risposta accettata, il problema potrebbe risiedere nel file babel.cfg.

Per me il problema era con il mio file babel.cfg che avevo preso da questo tutorial.

Più tardi quando sono passato a usare la babele.file cfg proprio dalla domanda qui, le cose hanno funzionato bene per me.

Solo per registrazione, ecco il file babel.cfg che ha funzionato per me.

[python: **.py] 
[jinja2: **.html] 
encoding = utf-8 
extensions=jinja2.ext.autoescape,jinja2.ext.with_ 
4

ho incontrato lo stesso problema e nel mio caso la questione è stata specificare i file di input, vale a dire i file dove cercare le stringhe marcate per la traduzione.

Quando corro pybabel extract -F babel.cfg -o messages.pot come suggerito in vari tutorial (ad esempio this one), ho ricevuto l'errore pybabel: error: no input files or directories specified.

Il comando che finalmente ha funzionato per me è stato:

pybabel extract -F babel.cfg -o messages.pot --input-dirs=. 
+0

Questo funziona per me, è necessario aggiungere --input-dirs =. –