2012-04-28 15 views
1

我的問題是關於gettext本身,我有點看不到使用gettext_noop函數。我知道它做了什麼,但有什麼好處?在PHP中使用gettext_noop函數會怎樣?

如果我用例如gettext_noop(),它不會被翻譯,但xgettext可以識別它,並且當我輸出字符串作爲變量時發生翻譯。

這是因爲內存使用情況還是什麼?在PHP中使用它更好嗎,還是隻使用_()(或gettext())?

回答

1

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中。

+0

這不是一個很好的理由不中PHP手冊,現在是它? – 2015-08-06 09:43:51

+0

@TimoHuovinen什麼是一個很好的理由?也許你的意思是我應該強調它在香草裝置中也不存在? – Roflo 2015-08-06 13:51:01

+0

哦,是的,措辭使得它看起來好像該功能實際上存在於香草php中,但我看到你修正了它:) – 2015-08-06 17:07:10

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 ... 
相關問題