You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用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中导出

  1. 执行查询后,点击查询结果的「导出」按钮
  2. 选择「文本格式」,编码设为UTF-8
  3. 保存文件时后缀设为.po即可

处理特殊场景

如果翻译内容包含换行符,需要额外转义:

replace(de, E'\n', E'\\n')  -- 将实际换行转义为po文件中的\n

内容的提问来源于stack exchange,提问作者sibert

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 22:45:23