是否有命令标记和清除GetText po文件中具有相同翻译的不同消息?
#: templates/translations.html:7161
msgid "Straightedges"
msgstr "Règles de précision"
#: templates/translations.html:11697
msgid "Straight hemostats"
msgstr "Règles de précision"
在这种情况下,有办法擦除所有翻译吗?
答案 0 :(得分:2)
您可以将以下Perl脚本用于该任务:
#! /usr/bin/env perl
use strict;
use Locale::PO;
die "usage: $0 POFILE\n" unless $ARGV[0];
binmode 'STDOUT', ':utf8';
my $entries = Locale::PO->load_file_asarray($ARGV[0], 'UTF-8')
or die "$ARGV[0]: $!\n";
my %seen;
foreach my $entry (@$entries) {
++$seen{$entry->dequote($entry->msgstr)};
}
foreach my $entry (@$entries) {
my $msgstr = $entry->dequote($entry->msgstr);
#next if $seen{$msgstr} > 1;
$entry->msgstr("") if $seen{$msgstr} > 1;
print $entry->dump;
}
您需要为此使用Perl库Locale-PO
。您可以使用命令sudo perl -MCPAN -e 'install Locale::PO'
安装它。如果不需要,请忽略sudo
。
如果您确实要删除翻译重复的条目,请用next
取消注释该行。我的版本只是舍弃了您最可能想要的翻译。
该解决方案简化了一点。它不支持具有复数形式或消息上下文的条目,但是您可能仍然不需要它们。