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

时间:2018-07-24 09:11:57

标签: gettext

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

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

1 个答案:

答案 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取消注释该行。我的版本只是舍弃了您最可能想要的翻译。

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

相关问题