2016-04-30 11 views
0

私はWPテーマを翻訳しようとしています。私はこのコードを持っている:WPを__()とsprintf()で翻訳する

$translation = __(get_color(), 'textdomain'); 

それは動作しますが、私はget_color()関数から動的に色を取得し、それがうまく変換されます。しかし、私が "Theme Check"プラグインを使用すると、私はこのコードでエラーが発生します。

$translation = sprintf(__('%s', 'textdomain'), get_color()); 

をしかし、その場合には、私のプレースホルダ%sは変換しない、と私は、元の色の名前(翻訳されていない)を取得:

は私の代わりにこれを使用する必要があります。

私は間違っていますか?ありがとうございました。

答えて

1

A.、あなたのコードで

$translation = sprintf(__('%s', 'textdomain'), get_color()); 

文字列 '%S' の翻訳のための__()機能をチェック - あなたはおそらく何の翻訳を持っていないその - とし、「%置き換えますs 'となり、結果はget_color()となります。したがって、get_color()の値は決して変換関数を渡しません。

正しい解決策がここにあるかどうかわかりませんが、この場合はテーマチェックを忘れている可能性があります。

$translation = __('red', 'textdomain'); 

それはテーマチェックプラグインがあなたのダイナミックという事実を警告していることを安全な賭けの*です:リテラル、このような文字列を探します翻訳可能な文字列を抽出

0

多くの翻訳ツールこのようなツールでは文字列は抽出されません。これは、抽出中にコードが実行されないため、式get_color()は翻訳可能な文字列として評価されません。

文字列抽出ツールとの互換性を気にしない場合は、最初の例のコードをそのまま残してください(2番目の例は既に指摘したとおり間違っています)。

コードを翻訳ツールで使用する場合は、ダミーの PHPファイルを作成して、すべての可能な色の値を含むようにすることをおすすめします。 (リストが有限であると仮定して)。あなたが拾っ得ることはありません何かにそれをリファクタリングする必要があります「のテーマチェック」エラーが発生する実際の翻訳の呼び出しを停止したい場合は、次に

<?php 
__('red', 'textdomain'); 
__('blue', 'textdomain'); 
// and so on.. 

:あなたのファイルには、次のようになります。このような何かは、ほとんどの抽出では見逃さになるだろう:

$translation = call_user_func('__', get_color(), 'textdomain'); 

テーマチェックの著者は、コアWordPressの貢献者とdoing WordPress i18n correctlyについてかなりのボーカルであることは注目に値します*。

0
echo sprintf(__("text %s", your domain or plugin name), $data); 
+3

このコードでは質問に答えることができますが、このコードが質問に答える理由と理由についての追加の文脈を提供すると、長期的な価値が向上します。 – liliscent