如何通过引用过滤PO文件?

时间:2012-07-16 21:18:19

标签: regex sed grep gettext po

我需要从PO文件中过滤出仅在wordpress admin 中使用的所有条目(因此我只能翻译面向用户的字符串)。换句话说,如果任何给定条目的所有引用都包含字符串“../admin”(即,以“#:../admin”开头)我不希望它们出现在输出文件中

工具可以是grep,sed,基于windows,任何东西。有什么想法吗?

  

(关于其他方法的想法是受欢迎的,但我在想   过滤掉面向字符串的用户进行翻译然后放置   只有PO文件上的那些。母语是英语,我可以   让所有管理员都面对英文内容。)

过滤掉这个:


#: ../admin/add_new_packet.php:64
#: ../admin_processing/add_new_packet_processing.php:9
msgid "Cancel"
msgstr ""

留待:


#: ../header-employer.php:81
#: ../admin/add_new_packet.php:64
msgid "Logout"
msgstr ""

对于那些不熟悉的人来说,这是format for PO Files

1 个答案:

答案 0 :(得分:1)

使用awk的一种解决方案。内容script.awk

BEGIN {
    ## Separate records by one or more blank lines.
    RS = ""

    ## Each line will be one field. Both for input and output.
    FS = OFS = "\n"
}

## For every paragraph...
{
    ## Flag: If 0, print current record of PO file. If 1, don't
    ## print it.
    admin = 0 

    ## Traverse all lines of each record. If matches '#: ../admin'
    ## set flag and end processing.
    for (i = 1; i <= NF; i++ ) { 
        if ( $i ~ /^#: *\.\.\/admin\/?/ ) { 
            admin = 1 
            break
        }   
    }   

    ## Print only if flag hasn't been set.
    if ( ! admin ) { 
        print $0 "\n"
    }   
}

您没有在评论中提供 Lev Levitsky 既不提供输入也不提供输出,因此要猜测脚本应该如何表现以获得解决方案并测试它以检查其是否有效。 / p>