私は現在、非常に大規模な Perl/ Mason Web アプリケーションの国際化に取り組んでいます。このアプリケーションは 20 年近く経ち、比較的古風な Perl スタイルで書かれています。Moose や別のオブジェクト指向モジュールは使用しません。現在、Locale::Maketext::Gettextを使用してメッセージを検索し、GNU Gettext カタログ ファイルを使用することを計画しています。
bigass コードベースから文字列を抽出するためのツールをいくつか開発しようとしています。現在、私が持っているのは、文字列リテラルを探してソースを解析し、ユーザーにコンテキストと文字列を翻訳用にマークする必要があるかどうかを尋ね、そうであればマークする比較的単純な Perl スクリプトだけです。
マークする必要のある文字列と、無視できる文字列に関しては、あまりにも多くのノイズがあります。ソース内の多くの文字列は、ハッシュ キーや次のような型比較など、ユーザー向けではありません。
if (ref($db_obj) eq 'A::Type::Of::Db::Module')
提案された各文字列にいくつかのヒューリスティックを適用して、すぐに無視できるかどうかを確認します (たとえば、ハッシュ ルックアップに使用される文字列は無視します。これは、コードベースでは 99% の時間、これらはユーザーに面していないためです)。しかし、それにもかかわらず、私のプログラムが表示する文字列の約 90% は、私が気にしないものです。
文字列抽出のタスクを自動化するのに役立つより良い方法はありますか (つまり、ソースからすべての文字列リテラルを取得するよりもインテリジェントなもの)? Perl と Mason の両方のソースを処理できる商用プログラムはありますか?
また、私は優れたツールについて (かなりばかげた) アイデアを思いつきました。そのワークフローを以下に示します。このようなものを実装する努力をする価値があるでしょうか (おそらく作業の 80% を非常に迅速に処理できます)、それとも面倒で煩わしい手動の文字列抽出プロセスに従うべきでしょうか?
- ソースからすべての文字列リテラルを抽出し、それを Gettext PO ファイルに入れることから始めます。
- 次に、Mason プラグインを作成して、アプリケーションによって提供される各ページの HTML を解析し、ユーザーが見ている文字列に注目することを目標にします。
- アプリケーションを徹底的に使用し、すべてのユースケースをカバーして、ユーザー向けの文字列のストアを構築してください。
- ユーザーが見たこの文字列のストアを考慮して、カタログ ファイル内の文字列に対してあいまい一致を実行し、一致するカタログ エントリを UI から追跡します。
- 最後に、カタログ ファイル内で一致しなかったものはユーザー向けではない可能性が高いため、それらをカタログから削除します。