4

i18ndude の改良版 (v3.2.2 をチェックアウト済み)、または何らかの後継バージョンを探しています。i18ndude は、Python コード (pygettext を使用) と Zope ページ テンプレートから翻訳可能な文字列を抽出しますが、やや不十分です:

  • pygettext のコマンドライン オプションを非表示にするため、たとえば、コードをハッキングせずにキーワードを指定することができなくなります。
  • 理解しにくく、拡張しにくい (たとえば、Javascript ファイルの解析を追加したい場合など)。
  • コマンドラインの構文が面倒です (例: "i18ndude merge --pot ... --merge ... --merge2 ...")
  • 一部のファイルは解析されないか、間違った方法で解析され、結果として一部の文字列が見つかりません (たとえば、"*pt" のような名前のすべてのファイルは、"*.xml.pt" であっても HTML と見なされます)。
  • 2010年に開発が終了したようです。

何かあってもいいですね

  • 「コマンド」と「ヘルプ コマンド」をサポートする Subversion のインターフェイスなど、より優れたコマンドライン インターフェイスを使用する
  • 簡単に拡張可能
  • 簡単に設定可能 (例: どの種類のファイルをどのパーサーを使用して解析するか、ファイルの種類をどのように伝えるか、例: svn:mime-type プロパティを考慮に入れる)

コマンドライン インターフェイスは i18ndude のものと互換性がない可能性が高いため、交換するのが最善だと思います。

今までにそのようなツールを書いて共有したいと思っている人はいますか?

4

1 に答える 1

4

バベルを試しましたか?さまざまなソースからメッセージを抽出するためのプラグインシステムをサポートしています。

linguaは、ZPTおよびzope.i18nmessageidのプラグインを提供し、i18ndudeのすべての機能を提供しますが、適度にアクティブなオープンソースコミュニティを備えています。

プロジェクトでbabelを使用するには、babelコマンドを使用するようにsetup.pyを構成してから、それらの関数をsetup.pyコマンドとして実行する必要があります。例:python yourpackage/setup.py extract_messages

lingua依存関係としてeggが利用できる場合は、setup.pyの構造内のプラグインを使用message_extractorsして、ソースファイルからi18nメッセージを抽出する方法をBabelに指示できます。

... 
from babel.messages import frontend as babel
...


setup(...
    setup_requires=['lingua'],
    cmdclass = dict(
        compile_catalog=babel.compile_catalog,
        extract_messages=babel.extract_messages,
        init_catalog=babel.init_catalog,
        update_catalog=babel.update_catalog,
    ),
    message_extractors = {
        'path/in/package': [
            ('**.py',                'lingua_python', None),
            ('**/templates/**.pt',   'lingua_xml', None),
        ],
    },
    ...
)

setup.pyスクリプトは、実際にbabelをインポートできる場合にのみ機能するため、setup_requires依存関係としてBabelを含めることはできないことに注意してください。cmdclassエントリのシムを作成することでこれを回避することができますが、私はまだこれを試していません。今のところ、仮想環境またはグローバルにBabeleggをインストールするだけです。

--mapping-fileエントリの代わりにCLIオプションを使用する場合、そのオプションはヘッダーmessage_extractors付きのINIスタイルのファイル形式を想定しています。[method fileglob]

[lingua_python **.py]

[lingua_xml **/templates/**.pt]

各セクションには、extractor関数に渡されるオプションを含めることができます(各行option = valueは、渡されるoptions dictのキーと値のペアになります)が、lingua_*メソッドはオプションをとらないと思います。

次に、エクストラクタ構成は、コマンドラインで指定されたすべての入力ディレクトリ、またはsetup.pypackagesオプションで指定された各パッケージに使用されます。

于 2012-05-18T09:46:55.583 に答える