2012-04-22 6 views
5

Viene indicato here che Babel può estrarre messaggi gettext per file Python e Javascript.Estrazione di messaggi gettext Javascript utilizzando l'estrattore Babel CLI

Babel viene fornito con un paio di estrattori built: python (che estrae messaggio per file sorgenti Python), javascript, e ignorano (che estratti nulla).

L'estrattore da riga di comando è documentato here - ma senza esempi sull'utilizzo.

Anche nello same pointer precedente, c'è qualche menzione di un file di configurazione da utilizzare con l'estrazione, ma non molto ampliato.

Quando eseguo il comando di base per l'estrattore su una directory con file js, ottengo solo l'intestazione .PO generata ma nessun messaggio.

$ pybabel extract /path/to/js-dir 

# Translations template for PROJECT. 
# Copyright (C) 2012 ORGANIZATION 
# This file is distributed under the same license as the PROJECT project. 
# FIRST AUTHOR <[email protected]ESS>, 2012. 
# 
#, fuzzy 
msgid "" 
msgstr "" 
"Project-Id-Version: PROJECT VERSION\n" 
"Report-Msgid-Bugs-To: [email protected]\n" 
"POT-Creation-Date: 2012-04-22 19:39+1000\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 0.9.6\n" 

$ 

Qui è un segmento di esempio da un file js Sto cercando di estrarre i messaggi di:

else if(data.status == "1"){ 
    var follow_html = gettext('Follow'); 
    object.attr("class", 'button follow'); 
    object.html(follow_html); 
    var fav = getFavoriteNumber(); 
    fav.removeClass("my-favorite-number"); 
    if(data.count === 0){ 
     data.count = ''; 
     fav.text(''); 
    }else{ 
     var fmts = ngettext('%s follower', '%s followers', data.count); 
     fav.text(interpolate(fmts, [data.count])); 
    } 
} 

sarei grato se qualcuno può fornire opzioni CLI esatte e le impostazioni di configurazione per rendere l'estrazione lavoro, o un puntatore a tale.

+3

Quali sono le funzioni gettext/ngettext che stai usando nel tuo js? Sono allo stesso stadio ora - ho babel che lavora per html e python ma non js – fastmultiplication

+0

In realtà è un progetto OS (Askbot) - puoi controllare qui https://github.com/ASKBOT/askbot-devel –

+0

I A proposito, ho trovato il mio problema: http://stackoverflow.com/questions/10647449/serving-i18n-js-using-babel-django-jinja2 – fastmultiplication

risposta

6

Creare un file (babel.cfg) con il seguente contenuto:

[javascript:*.js] 
encoding = utf-8 

Poi, fare:

pybabel extract -F babel.cfg /path/to/js-dir 

Questo dovrebbe essere sufficiente per voi di avere alcune stringhe di messaggio.

BTW, è possibile consultare la guida per il comando extract facendo:

pybabel extract --help 
+0

Ci scusiamo per il ritardo nel rispondere. Sto facendo esattamente quello che hai delineato e ottenendo lo stesso identico risultato mostrato nella mia domanda. Hai testato il comando su esempi considerevoli. –

+1

Ho avuto lo stesso problema. Quindi ho creato un file babel.cfg che contiene questo: '' ' [javascript: **. Js] extract_messages = _ ' '' ' e ora funziona! –

+0

E a parte definire una parola chiave plurale come questa: '-k" ngettext: 1,2 "'. –

3

ho avuto un problema simile ed è stato in grado di ottenere intorno ad esso disabilitando le parole chiave predefinite con Babel.

pybabel extract -k __ -F babel.cfg --no-default-keywords /path/to/js-dir 

È necessario specificare almeno una parola chiave nel comando quando si disabilitano i valori predefiniti (-k [parola chiave]). Ho scelto -k __ perché "__" era uno schema che stavo cercando.

Basta usare questo comando e sostituire "__" dopo -k con uno dal file babel.cfg.

Edit: questo consente di utilizzare le proprie parole chiave piuttosto che gettext()

0

È possibile creare un oggetto come pallone globale e tradurre con gettext

g.i18n = { 
    'Casa' : lazy_gettext('Home'), 
    'Auto' : lazy_gettext('Car'), 
    'Persona' : lazy_gettext('Person') 
} 

quindi aggiungerlo come una variabile

<script> 
    var i18n = {{ g.i18n | tojson }} 
</script> 

e utilizzarlo in JS:

var labelTranslate = { 
        Casa: i18n.Casa, 
        Persona: i18n.Persona, 
        Auto: i18n.Auto 
       }; 
0

In realtà è possibile utilizzare gettext direttamente in Javascript.

Vedere: jsgettext. Permette di usare le funzioni gettext standard *, compresa quella che usa contesti e/o forme plurali.

Può leggere file PO/MO oppure è possibile importare file JSON personalizzati.

Vedere this file di this project per un esempio completo.

Problemi correlati