2012-04-22 8 views
5

Podano, że Babel może wyodrębnić komunikaty gettext dla plików Python i Javascript.Wyodrębnianie wiadomości gettext JavaScript za pomocą ekstraktora Babel CLI

Babel pochodzi z kilku wbudowanych pochłaniaczy: Python (który wydobywa wiadomości z plików źródłowych Pythona), JavaScript i ignorować (co ekstrakty nic).

Ekstraktor wiersza poleceń jest udokumentowany here - ale bez przykładów użycia.

W powyższej części znajduje się także wzmianka o pliku konfiguracyjnym, który ma być używany przy wyodrębnianiu, ale nie jest rozbudowany.

Po uruchomieniu podstawowego polecenia dla ekstraktora w katalogu z plikami js, generowany jest tylko nagłówek .PO, ale brak wiadomości.

$ 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]\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" 

$ 

Oto przykładowy segment z pliku js Próbuję wydobyć wiadomości dla:

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

byłbym wdzięczny, jeśli ktoś może dostarczyć dokładnych opcje CLI i ustawień konfiguracyjnych, aby wydobycie praca lub wskaźnik do takich.

+3

jakie są funkcje gettext/ngettext, z których korzystasz w swoim js? Jestem teraz na tym samym etapie - mam babel pracujący dla html & python ale nie js – fastmultiplication

+0

W rzeczywistości jest to projekt systemu operacyjnego (Askbot) - możesz to sprawdzić tutaj https://github.com/ASKBOT/askbot-devel –

+0

I odkryłem mój problem, przy okazji: http://stackoverflow.com/questions/10647449/serving-i18n-js-using-babel-django-jinja2 – fastmultiplication

Odpowiedz

6

Utwórz plik (babel.cfg) o następującej treści:

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

Następnie zrobić:

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

To powinno wystarczyć, aby mieć pewne ciągi wiadomości.

BTW, można zapoznać się z pomocy dla komendy extract wykonując:

pybabel extract --help 
+0

Przepraszamy za spóźnienie w odpowiedzi. Robię dokładnie to, co nakreśliłeś i otrzymujesz dokładnie taki sam wynik, jaki pokazałem w moim pytaniu. Przetestowałeś polecenie na sporej liczbie przykładów. –

+1

Miałem ten sam problem. Następnie utworzyłem plik babel.cfg zawierający: '' ' [javascript: **. Js] extract_messages = _ ' '' ' i teraz działa! –

+0

A na bok definiujemy takie słowo w liczbie mnogiej: '-k" ngettext: 1,2 "'. –

3

miałem podobny problem i był w stanie obejść wyłączając domyślne słowa kluczowe Babel.

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

Musisz podać co najmniej jedno słowo kluczowe w komendzie po wyłączeniu wartości domyślnych (-k [słowo kluczowe]). Wybrałem -k __, ponieważ "__" było wzorem, którego szukałem.

Po prostu użyj tego polecenia i zastąp "__" po -k jednym z pliku babel.cfg.

Edit: ten pozwala użyć własnych słów kluczowych zamiast gettext()

0

można utworzyć obiekt w jak kolby globalny i przełożyć go z gettext

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

Następnie dodać ją jako zmienną

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

i używać go w JS:

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

Możesz faktycznie użyć gettext bezpośrednio w JavaScript.

Zobacz: jsgettext. Umożliwia korzystanie ze standardowych funkcji * gettext, w tym z użyciem kontekstów i/lub form liczby mnogiej.

Może odczytywać pliki PO/MO lub importować niestandardowe pliki JSON.

Aby uzyskać pełny przykład, zobacz this file z this project.

Powiązane problemy