2012-04-28 8 views
1

私の質問はgettext自体についてです、私はちょっとgettext_noop関数の使用が表示されません。私はそれが何をしているか知っていますが、どのような利点がありますか?PHPでgettext_noop関数を使うのはどうですか?

たとえば、 gettext_noop()は翻訳されませんが、xgettextはそれを認識でき、文字列を変数として出力すると翻訳が行われます。

これはメモリ使用量なのでしょうか? PHPで使用する方が良いか、_()(またはgettext())を使うだけですか?

$options = array(gettext_noop("one string"), 
      gettext_noop("another string") ,); 
echo _($options[0]); 

それは完璧でなければなりません:Gettext manualはPHPでC.

でプログラミングする場合の方法gettext_noopが有用であるかもしれない、しかし、何を意味をなすようには見えませんきれいにカバーしてい

答えて

1

$options = array(_("one string") , 
      _("another string"),); 
echo $options[0]; 

をPHPは動的型付け言語であるので、我々はのために良いの使用を見つけるために、より多くの創造する必要があるでしょう:行うには、[OK]。おそらく、あなたはPHPでそれを必要としないでしょう。

これはおそらくgettext_noopがバニラインストールに存在せず、PHP's manualに表示されないことが原因です。

+0

でないと非常に良い理由はありませんPHPのマニュアルは、今それですか? –

+0

@TimoHuovinen何がいい理由でしょうか?おそらく、バニラインストールでも存在しないと強調しなければならないのでしょうか? – Roflo

+0

ああ、言い訳は、その関数が実際にバニラのPHP内に存在するかのように見えるが、私はあなたがそれを修正しているのを見る:) –

0

gettext_noop

ためのユースケースは、特定の状況において有用であり得ます。たとえば、あなたがフォームのドロップダウンのために許可された値の配列を持っているとしましょう:

$allowed_values = ["red", "orange", "blue"]; 

フォームでは、ユーザーが翻訳された値を確認したいのですが、リクエストのために提出します非翻訳値:彼らはマークされていないため

<select name="color"> 
<?php foreach ($allowed_values as $allowed_value) : ?> 
    <option value="<?= htmlspecialchars($allowed_value) ?>"> 
     <?= htmlspecialchars(_($allowed_value)) ?> 
    </option> 
<?php endforeach ?> 
</select> 

は残念ながら、xgettextは、翻訳可能な文字列を見つけることができません。

$allowed_values = [_("red"), _("orange"), _("blue")]; 

ただし、翻訳されていない値は後で取得できません。

代わりに、あなたができる:

$allowed_values = [gettext_noop("red"), gettext_noop("orange"), gettext_noop("blue")]; 

を意図したように今、すべては限り、あなたはこの答えの残りの部分を実装するよう、動作することができます。 gettext_noop

PHPを実装する方法

は実際には、デフォルトではgettext_noop含まれていません。 、それを自分で実装するこのPHPを追加するには:

function gettext_noop($string) 
{ 
    return $string; 
} 

とコマンドライン上xgettextのあなたの呼び出しで、この--keyword引数が含ま:

xgettext --keyword=gettext_noop ... 

関連する問題