是否有一个命令来标记和清除po文件中具有相同翻译的不同消息



是否有一个命令来标记和清除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"

在这种情况下,有没有办法擦除所有的翻译?

您可以使用以下Perl脚本执行该任务:

#! /usr/bin/env perl
use strict;
use Locale::PO;
die "usage: $0 POFILEn" 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取消注释该行。我的版本只是丢弃了最可能是你真正想要的翻译。

这个解决方案过于简单化了一点。它不支持具有复数形式或消息上下文的条目,但您可能根本不需要它们。

最新更新