0

JavaScript内で使用される文字列をローカライズするために、すべてのjsファイルをスキャンしてそのような文字列を探します。

次のように文字列の翻訳を要求する関数を使用してt()います。

t("Hello world");

または動的な部分で:

t("Hello @user", {"@user": "d_inevitable"});

関数へのすべての呼び出しを検出してt()、php "build"スクリプトの最初の引数に含まれる文字列を収集したいのですが、以下をスキップします。

function foo(t) {
   t("This is not the real t, do not localize this!");
}

function bar() {
    var t = function(){}; //not the real t either...
}

function zoo() {
    function t() {
       //This also isn't the real t() function.
    }
}

t("Translate this string, because this is the real t() in its global scope");

したがって、ここでの簡単なルールは、最初の引数が変換文字列として修飾されるためには、呼び出されるt関数がグローバルスコープ内にある必要があるということです。

原則として、最初の引数としての動的ランタイムデータは許可されていません。の最初の引数t()は、常に「定数」リテラル文字列である必要があります。

php codenifferは私がそれを行うのに役立つと思いますが、私が見つけることができるすべてのドキュメントは、コード標準の実施(またはその違反の検出)に関するものです。そのjsレクサーへの低レベルのアクセスが必要です。

私の質問は:

  1. phpcodesnifferのjslexerは、私の問題を解決するのに役立ちますか?
  2. もしそうなら、どうすればそのレクサーにアクセスできますか?
  3. の呼び出しを見つけるのに役立つ他のphpライブラリはありますt()か?

スタンドアロンの正規表現は私の問題を完全に解決できない可能性があるため、提案しないでください。

前もって感謝します。

4

1 に答える 1

1

あなたが説明しているのは、基本的にコーディング標準です。確かに、文字列が正しくローカライズされるようにすることは、多くのプロジェクト標準の一部です。したがって、PHPCS はあなたにとって適切なツールだと思いますが、あなたが求めていることを正確に行うものは何も存在しないため、カスタムのスニフを作成する必要があります。

おそらく最善の方法は、Github から PHPCS Git リポジトリのクローンを作成し、CodeSniffer/Standards の下に新しいディレクトリを作成して、カスタム スニフを格納することです。それを MyStandard と呼ぶとしましょう。その下に Sniffs ディレクトリを作成してから、新しい sniff を格納するサブディレクトリを作成してください。そこにある他の標準を見て、それらがどのように機能するかを確認してください。また、既存の ruleset.xml ファイルを別の標準からコピーして、コンテンツを自分に合うように変更する方が簡単です。どこからも他のスニフを含めたくない場合 (コードに対してこの 1 つのチェックを実行するだけの場合) は、名前と説明を指定して、残りを空白のままにすることができます。

それをカバーする基本的なチュートリアルがあります。

スニフ内では、明らかに JS ファイルのみをチェックする必要があるため、supportedTokenizers メンバー var (ドキュメントでも) でそれを指定してください。これにより、PHP および CSS ファイルが常に無視されるようになります。

実際のチェックに取り掛かると、ファイルの解析およびトークン化されたコンテンツへの完全な低レベル アクセスが可能になります。コードが他のスコープ内にあるかどうかなどをチェックしたり、必要なコードのビットを探してスタックを前後に移動したりするのに役立つ多くのヘルパー関数があります。

ヒント: -v オプションを使用して PHPCS を実行し、ファイルのトークン出力を確認します。構造をより簡単に確認するのに役立ちます。

物事を本当に適切に行いたい場合は、スニフの優れた単体テストを作成して、時間の経過とともに実行され続けることを確認することもできます.

このすべての後、次のようにコードをチェックします。 phpcs --standard=MyStandard /path/to/code

また、PHPCS 用に存在する多くの統合をコード エディター内で使用できます。

他のことをチェックするために、新しいスニフを標準に追加することを決定する場合があります。これは、ruleset.xml ファイルを使用するか、カスタム スニフ クラスをさらに作成することで簡単に実行できます。

それが少し役立つことを願っています。独自のスニフを作成することに決め、助けが必要な場合は、お知らせください。

于 2012-06-15T03:27:16.750 に答える