将 .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
可能有更好的方法,但它确实有效。
我尝试使用如下 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
可能有更好的方法,但它确实有效。