2012-04-22 38 views
5

據說here Babel可以爲Python和Javascript文件提取gettext消息。使用Babel CLI提取器提取Javascript gettext消息

通天帶有一些內置的提取:蟒蛇(從Python源文件提取 消息),JavaScript和忽視(這 提取物沒有)。

命令行提取程序記錄在here - 但沒有使用示例。

同樣在上面的same pointer中,提到了一個用於提取的配置文件,但沒有多少擴展。

當我使用js文件在dir上運行提取器的基本命令時,我只得到生成的.PO頭,但沒有消息。

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

$ 

下面是一個js文件的樣本段我想提取的消息:

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

我將不勝感激,如果有人能提供準確的CLI選項和配置設置,使提取工作,還是指向這樣的指針。

+3

你在js中使用的gettext/ngettext函數是什麼?我現在在同一階段 - 我有babel工作的HTML&python,但不是js – fastmultiplication 2012-05-16 08:57:13

+0

其實它是一個OS項目(Askbot) - 你可以在這裏查看https://github.com/ASKBOT/askbot-devel – 2012-05-19 00:48:22

+0

我順便說一句,我的問題,順便說一句:http://stackoverflow.com/questions/10647449/serving-i18n-js-using-babel-django-jinja2 – fastmultiplication 2012-05-21 03:22:43

回答

6

創建一個文件(babel.cfg)具有以下內容:

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

然後執行:

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

這應該是足以讓你有一些消息字符串。

順便說一句,您可以通過諮詢爲extract命令的幫助:

pybabel extract --help 
+0

對不起,因爲在響應遲了。我正在按照您所概述的方式進行操作,並獲得了我的問題中所示的完全相同的結果。你有沒有在大的例子上測試過這個命令。 – 2012-05-23 08:57:34

+1

我有同樣的問題。然後我創建了一個包含以下內容的babel.cfg文件: ''' [javascript:**。js] extract_messages = _ '''' 現在它正在運行! – 2012-11-07 14:09:00

+0

另外定義一個複數形式的關鍵字:'-k「ngettext:1,2」'。 – 2017-01-26 20:25:33

3

我也有類似的問題,並能夠通過禁用默認關鍵字巴貝爾繞過它。

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

當您禁用默認值(-k [關鍵字])時,您必須在命令中指定至少一個關鍵字。我選擇了-k __,因爲「__」是我正在尋找的模式。

只需使用此命令並將-k替換爲babel.cfg文件中的「__」。

編輯:這可以讓你用自己的關鍵字,而不是gettext的()

0

可以作爲燒瓶全球創建一個對象,並將其與gettext的翻譯

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

然後將其添加爲一個變量

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

和JS使用它:

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

你實際上可以直接在Javascript中使用gettext

參見:jsgettext。它允許您使用標準* gettext函數,包括使用上下文和/或複數形式的函數。

它可以讀取PO/MO文件,也可以導入自定義的JSON文件。

查看this filethis project的完整示例。