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

Is there a command to flag and clean different messages that have the same translation in a po file?

是否有命令来标记和清除 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: [=10=] 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 的行。我的版本只是丢弃了很可能是您真正想要的翻译。

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