我在 NSIS 论坛上问了同样的问题,但没有成功。最后,我创建了一个小的 Perl 脚本,它解析我的 NSIS 代码并检测包含的语言和所有语言字符串,检测丢失的翻译,并创建初始化为默认语言的语言字符串:
#!/usr/bin/perl
#
# filltranslationgaps.pl
# Get list of included languages
my $tmp = uc(`grep "^!insertmacro MUI_LANGUAGE" installer.nsi |grep -v ";" |cut -f2 -d\\"`);
my @lang = split(/\n/, $tmp);
my $DEFAULTLANGUAGE = $lang[0];
# Get langstrings
open( $fh, "<installer.nsi");
while (<$fh>) {
if (/LangString *(.*?) *\${LANG_(.*?)} *\"(.*)\"/) {
$phrases{$1}{$2}=$3;
}
}
close $fh;
# Foreach Langstring, check if it's defined in all included languages.
foreach my $k (keys %phrases) {
foreach my $j (@lang) {
if (not defined $phrases{$k}{$j}) {
#print "MISSING PAIR: $k\t$j\n";
print "LangString $k \${LANG_$j} \"$phrases{$DEFAULTLANGUAGE}{$j}\"\n";
}
}
}
我的编译脚本:
#/bin/sh
perl filltranslationgaps.pl >missingphrases.nsi
makensis installer.nsi
在installer.nsi 我需要包含生成的nsi:
!include missingphrases.nsi
希望能帮助到你。