Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String xgettext-如何提取由空值分割的字符串_String_Gettext_Xgettext - Fatal编程技术网

String xgettext-如何提取由空值分割的字符串

String xgettext-如何提取由空值分割的字符串,string,gettext,xgettext,String,Gettext,Xgettext,从字符串具有空分隔符的位置提取字符串(使用xgettext)时存在问题- static const gchar genres[] = "Blues\000Classic Rock\000Country\000Dance\000Disco\000Funk\000Grunge\000" "Hip-Hop\000Jazz\000Metal\000New Age\000Oldies\000Other\000Pop\000R&B\000" "Rap

从字符串具有空分隔符的位置提取字符串(使用xgettext)时存在问题-

static const gchar genres[] =
"Blues\000Classic Rock\000Country\000Dance\000Disco\000Funk\000Grunge\000"
"Hip-Hop\000Jazz\000Metal\000New Age\000Oldies\000Other\000Pop\000R&B\000"
"Rap\000Reggae\000Rock\000Techno\000Industrial\000Alternative\000Ska\000"
"Death Metal\000Pranks\000Soundtrack\000Euro-Techno\000Ambient\000Trip-Hop"
"\000Vocal\000Jazz+Funk\000Fusion\000Trance\000Classical\000Instrumental\000"
"Acid\000House\000Game\000Sound Clip\000Gospel\000Noise\000Alternative Rock"
"\000Bass\000Soul\000Punk\000Space\000Meditative\000Instrumental Pop\000"
"Instrumental Rock\000Ethnic\000Gothic\000Darkwave\000Techno-Industrial\000"
"Electronic\000Pop-Folk\000Eurodance\000Dream\000Southern Rock\000Comedy"
"\000Cult\000Gangsta\000Top 40\000Christian Rap\000Pop/Funk\000Jungle\000"
"Native American\000Cabaret\000New Wave\000Psychedelic\000Rave\000Showtunes"
"\000Trailer\000Lo-Fi\000Tribal\000Acid Punk\000Acid Jazz\000Polka\000"
"Retro\000Musical\000Rock & Roll\000Hard Rock\000Folk\000Folk/Rock\000"
"National Folk\000Swing\000Bebob\000Latin\000Revival\000Celtic\000Bluegrass"
"\000Avantgarde\000Gothic Rock\000Progressive Rock\000Psychedelic Rock\000"
"Symphonic Rock\000Slow Rock\000Big Band\000Chorus\000Easy Listening\000"
"Acoustic\000Humour\000Speech\000Chanson\000Opera\000Chamber Music\000"
"Sonata\000Symphony\000Booty Bass\000Primus\000Porn Groove\000Satire\000"
"Slow Jam\000Club\000Tango\000Samba\000Folklore\000Ballad\000Power Ballad\000"
"Rhythmic Soul\000Freestyle\000Duet\000Punk Rock\000Drum Solo\000A Capella"
"\000Euro-House\000Dance Hall\000Goa\000Drum & Bass\000Club-House\000"
"Hardcore\000Terror\000Indie\000BritPop\000Negerpunk\000Polsk Punk\000"
"Beat\000Christian Gangsta Rap\000Heavy Metal\000Black Metal\000"
"Crossover\000Contemporary Christian\000Christian Rock\000Merengue\000"
"Salsa\000Thrash Metal\000Anime\000Jpop\000Synthpop";
我正在使用xgettext-0.21来提取字符串-

xgettext -a --no-wrap ./gst-libs/gst/tag/gstid3tag.c -o -
#: gst-libs/gst/tag/gstid3tag.c:51
msgid "Blues"
msgstr ""
我只得到一根弦-

xgettext -a --no-wrap ./gst-libs/gst/tag/gstid3tag.c -o -
#: gst-libs/gst/tag/gstid3tag.c:51
msgid "Blues"
msgstr ""
而我也应该得到“经典摇滚”,“乡村”,“舞蹈”等等


还有其他方法提取这些字符串吗?可能是其他工具,或者通过使用xgettext命令的特定标志?

使用
xgettext
无法提取此字符串,这是出于设计。即使有办法,也没有工具可以编辑包含空字节条目的po文件

解决方案是在运行时或编译时用空字节组装字符串。后者需要一个助手脚本来生成包含流派列表的源文件

Perl中的一个示例:

#! /usr/bin/env perl

use strict;

# Stub gettext that just returns the argument.
sub gettext {
    shift;
}

my $genres = join '\\000', (
    gettext('Blues'),
    gettext('Classic Rock'),
    gettext('Country'),
    gettext('Dance'),
);

print <<EOF;
static const gchar genres[] = "$genres";
EOF
当然,您可以在
xgettext
支持的所有其他语言中这样做,而不仅仅是在Perl中。选择最容易集成到构建系统中的一个

仅仅使用不同的分隔符(例如“Blues:Classic Rock:…”)不仅会有转义问题,还会导致生成难以翻译的po文件