2009-07-11 73 views
1

使用--extract-allxgettext不適用於複數形式。使用I18n C++ hello world with plurals作爲C++代碼的答案是使用xgettext的兩個測試。使用xgettextt處理複數 - with -extract-all

cat >helloplurals.cxx <<EOF 
// hellopurals.cxx 
#include <libintl.h> 
#include <locale.h> 
#include <iostream> 
int main(){ 
    setlocale(LC_ALL, ""); 
    bindtextdomain("helloplurals", "."); 
    textdomain("helloplurals"); 
    for (int ii=0; ii<5; ii++) 
     printf(ngettext("Hello world with %d moon.\n", "Hello world with %d moons.\n", ii), ii); 
EOF 
xgettext --package-name helloplurals --package-version 1.1 --default-domain helloplurals --output helloplurals.pot helloplurals.cxx 
xgettext --extract-all --package-name helloplurals --package-version 1.1 --default-domain helloplurals --output helloplurals-ea.pot helloplurals.cxx 

如預期包括複數形式的處理的一個沒有--extract-all作品:

#: helloplurals.cxx:10 
#, c-format 
msgid "Hello world with %d moon.\n" 
msgid_plural "Hello world with %d moons.\n" 
msgstr[0] "" 
msgstr[1] "" 

--extract-all被添加到命令行所得POT文件沒有。取而代之的是單獨的條目:被直接傳遞到gettext()類似功能的正確處理多個消息,如圖在第一實施例使用xgettext

#: helloplurals.cxx:10 
#, c-format 
msgid "Hello world with %d moon.\n" 
msgstr "" 

#: helloplurals.cxx:10 
#, c-format 
msgid "Hello world with %d moons.\n" 
msgstr "" 

字符串文字。

對於未直接傳遞到gettext()類似功能 使用選項--extract-allxgettext中的一個字符串文字可以被用來產生在一個鍋文件中的條目。

怎樣才能獲得不直接傳遞給gettext()像在還含有被直接傳遞給gettext()之類的函數產生的多個條目的多個字符串字面量輸出功能字符串文字的處理:msgid_pluralmsgstr[]

回答

1

我不認爲xgettext支持。如果您傳遞--extract-all,它將忽略任何出現字符串的上下文。您可以考慮將其報告爲錯誤。

無論如何,我會建議顯式標記所有字符串。有很好的工具支持可以很快完成。