我的問題是關於gettext本身,我有點看不到使用gettext_noop函數。我知道它做了什麼,但有什麼好處?在PHP中使用gettext_noop函數會怎樣?
如果我用例如gettext_noop(),它不會被翻譯,但xgettext可以識別它,並且當我輸出字符串作爲變量時發生翻譯。
這是因爲內存使用情況還是什麼?在PHP中使用它更好嗎,還是隻使用_()(或gettext())?
我的問題是關於gettext本身,我有點看不到使用gettext_noop函數。我知道它做了什麼,但有什麼好處?在PHP中使用gettext_noop函數會怎樣?
如果我用例如gettext_noop(),它不會被翻譯,但xgettext可以識別它,並且當我輸出字符串作爲變量時發生翻譯。
這是因爲內存使用情況還是什麼?在PHP中使用它更好嗎,還是隻使用_()(或gettext())?
的Gettext manual很好的覆蓋方式gettext_noop
可能是有用的C.編程時
在PHP中,但是,它似乎沒有什麼意義的事:
$options = array(gettext_noop("one string"),
gettext_noop("another string") ,);
echo _($options[0]);
它應該是完美的確定這樣做:
$options = array(_("one string") ,
_("another string"),);
echo $options[0];
由於PHP是一種動態類型語言,我們就需要多出很多創意找到一個良好的使用。最有可能的是,你不需要它在PHP中。
這可能是gettext_noop在香草裝置中不存在的原因,甚至不在PHP's manual中。
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 ...
這不是一個很好的理由不中PHP手冊,現在是它? – 2015-08-06 09:43:51
@TimoHuovinen什麼是一個很好的理由?也許你的意思是我應該強調它在香草裝置中也不存在? – Roflo 2015-08-06 13:51:01
哦,是的,措辭使得它看起來好像該功能實際上存在於香草php中,但我看到你修正了它:) – 2015-08-06 17:07:10