13

.js ファイルから gettext 文字列を抽出するには、少なくとも 2 つの方法があることを知っています。Python モードで gettext パーサーを使用する方法 (いくつかの欠点があると聞いています) と、Python で記述された Babel を使用する方法です。

HTML ファイルから gettext 文字列を抽出する方法、またはより正確には Javascript テンプレート (アンダースコア、口ひげなど) を抽出する方法はありますか? 私の知る限りでは、Babel も gettext もそれを行いません。

私の友人がBabelを適応させようとしましたが、いくつかの翻訳が欠けているなどの深刻な問題がありました...

更新: 友人がこれについて少し指示してくれたので、今ではすべての文字列を好きなように抽出できるようです。私が見逃しているのは「翻訳者のコメント」だけです。私が使用しているコマンドは次のとおりです。

find . -iname '*.html' -o -iname '*.js' | xargs xgettext --language=Python --from-code=utf-8 --keyword=pgettext:1c,2 --keyword=npgettext:1c,2,3

これにより、キーワードに pgettext と npgettext が含まれます

更新 2: HTML タグ属性内にある gettext メッセージを抽出するには、JS 部分の間に改行を挿入する必要があることを発見しました。たとえば、これを変換する必要がありました。

<a href="" title="<%= ST.i18n.gettext('Click to add another row') %>"></a>

これに:

<a href="" title="
<%= ST.i18n.gettext('Click to add another row') %>"></a>

Python モードの xgettext は、同じ行にある場合、gettext メッセージを抽出しません。これは私にとってはうまくいくように見える簡単なハックです。

更新 3: PHP モードの xgettext は問題なく (少なくとも Undsrscore テンプレートを使用して) HTML からメッセージを抽出し、翻訳者のコメントにも適用されるようです。

find ../app -iname '*.html' | xargs xgettext --language=PHP --from-code=utf-8 -c --keyword=gettext --keyword=ngettext:1,2 --keyword=pgettext:1c,2 --keyword=npgettext:1c,2,3 -o translations.po

このようにして、テンプレート ファイルで通常の書式設定を維持できます。

<a href="" title="<%= ST.i18n.gettext('Click to add another row') %>"></a>
4

1 に答える 1

1

Babel のメッセージ抽出は拡張可能であり、新しいタイプ専用のエクストラクターを作成する必要があります。

あなた (またはあなたの友人) が見つけた「重大な問題」を特定していないため、ここで詳細を説明するのは困難ですが、特定の形式に関する問題は抽出コードの欠陥に帰着します。

Babel は を使用した卵からのエクストラクタのロードをサポートしてentry_pointsおり、その結果、PyPI にリストされているそのようなエクストラクタの多数のリストがあります (リンクされた検索には、Babel に関連するものはすべてリストされていますが、それらの多くはエクストラクタです。Babel エクストラクタの Trove 分類子はありません。まだ)。特定のテンプレート システムに対して追加の PyPI 検索を使用して、それらの Babel エクストラクタがあるかどうかを確認できます。

于 2012-08-19T13:30:56.070 に答える