7

ここでは、Babel が Python および Javascript ファイルの gettext メッセージを抽出できることが述べられています。

Babel には、python (Python ソース ファイルからメッセージを抽出する)、javascript、ignore (何も抽出しない) という組み込みのエクストラクターがいくつか付属しています。

コマンド ライン エクストラクタはここに文書化されていますが、使用例はありません。

また、上記の同じポインターで、抽出で使用される構成ファイルについて言及されていますが、あまり拡張されていません。

js ファイルを含むディレクトリでエクストラクタの基本コマンドを実行すると、生成された .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@ADDRESS>, 2012.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\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@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\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 オプションと構成設定、またはそのようなポインタを提供していただければ幸いです。

4

4 に答える 4

6

babel.cfg次の内容のファイル ( ) を作成します。

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

次に、次のようにします。

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

いくつかのメッセージ文字列を取得するには、これで十分です。

ところで、extractコマンドのヘルプを参照するには、次のようにします。

pybabel extract --help
于 2012-05-16T23:37:02.080 に答える
2

同様の問題があり、babel でデフォルトのキーワードを無効にすることで回避できました。

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

デフォルトを無効にする場合は、コマンドで少なくとも 1 つのキーワードを指定する必要があります (-k [キーワード])。-k __「_」が探していた柄だったので選びました。

このコマンドを使用して、-k の後の「__」を、babel.cfg ファイルの 1 つに置き換えます。

編集:これにより、gettext() ではなく独自のキーワードを使用できます

于 2012-06-15T17:28:08.160 に答える
0

実際にgettextは Javascript で直接使用できます。

参照: jsgettext。コンテキストや複数形を使用するものを含む、標準の *gettext 関数を使用できます。

PO/MO ファイルを読み取ったり、代わりにカスタム作成の JSON ファイルをインポートしたりできます。

完全な例については、このプロジェクトのこのファイルを参照してください。

于 2016-07-14T13:19:28.203 に答える
0

You can create an object in as flask global and translate it with gettext

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

Then add it as a variable

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

and use it in JS:

var labelTranslate = {
                    Casa: i18n.Casa,
                    Persona: i18n.Persona,
                    Auto: i18n.Auto
                };
于 2016-07-11T09:36:00.190 に答える