1

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

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

(欢迎提出实现此目的的其他方法的想法,但我正在考虑过滤掉面向用户的字符串进行翻译,然后仅将这些字符串放在 PO 文件中。母语是英语,我可以将所有面向管理员的内容保留为英语。)

过滤掉这个:

#: ../admin/add_new_packet.php:64
#: ../admin_processing/add_new_packet_processing.php:9
msgstr "取消"
msgstr ""

把它留在:

#: ../header-employer.php:81
#: ../admin/add_new_packet.php:64
msgstr "注销"
msgstr ""

以下是不熟悉的人的 PO 文件格式。

4

1 回答 1

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在评论中所建议的那样,您既没有提供输入也没有提供输出,因此很难猜测脚本应该如何表现以获得解决方案并对其进行测试以检查其是否有效。

于 2012-07-16T22:33:27.443 回答