2012-04-22 5 views
5

Se indica here que Babel puede extraer mensajes gettext para archivos Python y Javascript.Extracción de los mensajes de texto de JavaScript mediante el extractor de Babel CLI

Babel viene con un par de extractores incorporadas: Pitón (que extrae mensajes de archivos de código fuente de Python), Javascript, e ignoran (que extractos nada).

El extractor de línea de comandos está documentado here - pero sin ejemplos de uso.

También en el same pointer anterior, hay alguna mención de un archivo de configuración para ser utilizado con la extracción, pero no mucho más.

Cuando ejecuto el comando básico para el extractor en un directorio con archivos js, obtengo solo el encabezado .PO generado pero no hay mensajes.

$ 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]>, 2012. 
# 
#, fuzzy 
msgid "" 
msgstr "" 
"Project-Id-Version: PROJECT VERSION\n" 
"Report-Msgid-Bugs-To: [email protected]SS\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" 

$ 

Aquí es un segmento de muestra de un archivo js estoy tratando de extraer mensajes de:

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])); 
    } 
} 

Le agradecería que si alguien puede proporcionar opciones de la CLI exactas y los ajustes de configuración para hacer la extracción trabajo, o un puntero a tal.

+3

¿Cuáles son las funciones gettext/ngettext que estás usando en tu js? Estoy en el mismo escenario ahora - Tengo babel trabajando para html y python pero no js – fastmultiplication

+0

En realidad es un proyecto de sistema operativo (Askbot) - puedes consultarlo aquí https://github.com/ASKBOT/askbot-devel –

+0

I descubrí mi problema, por cierto: http://stackoverflow.com/questions/10647449/serving-i18n-js-using-babel-django-jinja2 – fastmultiplication

Respuesta

6

Crear un archivo (babel.cfg) con el siguiente contenido:

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

Entonces, hacer:

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

Eso debería ser suficiente para que usted tenga algunas cadenas de mensajes.

Por cierto, puede consultar la ayuda para el comando extract haciendo:

pybabel extract --help 
+0

Perdón por llegar tarde a la respuesta. Estoy haciendo exactamente lo que usted describió y obtengo exactamente el mismo resultado que se muestra en mi pregunta. ¿Has probado el comando en ejemplos importantes? –

+1

Tuve el mismo problema. Luego creé un archivo babel.cfg que contenía esto: '' ' [javascript: **. Js] extract_messages = _ ' '' ' ¡y ahora está funcionando! –

+0

Y como un aparte defina una palabra clave plural como esta: '-k" ngettext: 1,2 "'. –

3

tuve un problema similar y fue capaz de conseguir alrededor de él mediante la desactivación de palabras clave por defecto con Babel.

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

Debe especificar al menos una palabra clave en el comando cuando deshabilita los valores predeterminados (-k [palabra clave]). Elegí -k __ porque "__" era un patrón que estaba buscando.

Simplemente use este comando y reemplace el "__" after -k con uno de su archivo babel.cfg.

Editar: esto le permite utilizar sus propias palabras clave en lugar de gettext()

0

Puede crear un objeto en tan frasco global y traducirlo con gettext

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

después añadirlo como una variable

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

y utilizarlo en JS:

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

Puede usar gettext directamente en Javascript.

Ver: jsgettext. Le permite usar las funciones * gettext estándar, incluida la que usa contextos y/o formas plurales.

Puede leer archivos PO/MO o puede importar archivos JSON personalizados.

Consulte this file de this project para obtener un ejemplo completo.

Cuestiones relacionadas