将 .po 文件转换为 ICU4C .txt 文件

Convert .po file into ICU4C .txt file

我尝试使用如下 sed 脚本从 gettext .po 文件创建 ICU4C file

/^#/ d                            /* delete comments */
:a;/"$/{N;s/"\n"//;ba}            /* merge quoted lines in loop */
/^msgid /s/msgid (.*)//         /* convert msgids */
s/msgstr "(.*)"/\{ "" }/        /* convert msgstrs */

它已经运行良好(忽略复数形式),但出于某种原因它不会转换最后一对 msgid/msgstr,除非我不合并引号两次。但是其他东西的语法就变得错误了。有任何想法吗?不必使用 sed.

这些 ICU 文件是 genrb 唯一接受的文件,我想使用 PHP 中的 ResourceBundle。

我已经通过 shell 脚本实现了我的目标。这是粗略的想法:

#!/usr/bin/env bash

# remove comments
sed -r -e '/^#/ d' < de.po >de.icu.txt
# merge strings
sed -i de.icu.txt -r -e ':L;/"$/{N;s/"\n"//;b L}'
# delete gettext header
sed -i -e '1,2 d' de.icu.txt
# convert into ICU format
sed -i de.icu.txt -r -e '
# delete untranslated
/msgid ".+"/{
    N
    /msgstr ""/{
        N;s/msgid ".+"\nmsgstr ""\n//
    }
}
# generate ICU txt
/msgid /s/msgid (.*)//
s/msgstr "(.*)"/\{ "" }/'
sed -i -e '1i de {' -e '$ a\n}' de.icu.txt

可能有更好的方法,但它确实有效。