如何使用PostgreSQL从数据库数据直接生成.po翻译文件?
从PostgreSQL生成符合格式的.po翻译文件
要直接从你的lang表生成标准的.po文件,核心是把所有翻译条目合并成连续的文本内容,同时处理特殊字符转义避免po文件语法错误。以下是最优实现方案:
基础版:生成核心翻译内容
使用string_agg将每个翻译条目拼接成完整的po格式文本,同时用replace转义双引号(防止破坏po文件的字符串结构):
SELECT string_agg( format( E'msgid "%s"\nmsgstr "%s"', replace(msgid, '"', '\"'), -- 转义msgid中的双引号 replace(de, '"', '\"') -- 转义德语翻译中的双引号 ), E'\n\n' -- 用空行分隔不同翻译条目 ) AS po_content FROM lang;
这个查询会返回单个字符串,内容完全匹配你期望的.po格式:
msgid "task" msgstr "Aufgabe" msgid "subject" msgstr "Thema" msgid "description" msgstr "Beschreibung"
进阶版:添加标准po文件头部
完整的.po文件需要包含元信息头部(字符编码、语言等),通过嵌套format即可实现:
SELECT format( E'msgid ""\nmsgstr ""\n"Content-Type: text/plain; charset=UTF-8\\n"\n"Language: de\\n"\n\n%s', string_agg( format( E'msgid "%s"\nmsgstr "%s"', replace(msgid, '"', '\"'), replace(de, '"', '\"') ), E'\n\n' ) ) AS po_content FROM lang;
生成的内容会包含符合gettext规范的标准头部:
msgid "" msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Language: de\n" msgid "task" msgstr "Aufgabe" msgid "subject" msgstr "Thema" msgid "description" msgstr "Beschreibung"
导出为.po文件
在psql中直接导出
执行以下命令将结果保存为de.po文件:
\o de.po -- 执行上面的SQL查询 \o -- 恢复输出到控制台
在pgAdmin中导出
- 执行查询后,点击查询结果的「导出」按钮
- 选择「文本格式」,编码设为UTF-8
- 保存文件时后缀设为
.po即可
处理特殊场景
如果翻译内容包含换行符,需要额外转义:
replace(de, E'\n', E'\\n') -- 将实际换行转义为po文件中的\n
内容的提问来源于stack exchange,提问作者sibert
相关产品推荐
相关产品推荐

