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

如何将msgid为英文、msgstr为法文的PO文件转为两个JSON文件

从PO文件生成react-i18next兼容的多语言翻译文件

一、用i18next-gettext-converter实现需求

你之前的参数组合有误,正确做法是分两次转换,分别生成英文和法文文件:

  1. 生成英文翻译文件
    msgid本身就是英文原文,用--key-as-value(或-K)参数将msgid作为翻译值输出:
i18next-gettext-converter --input path/to/your/file.po --output en/translation.json --language en --key-as-value

执行后,en/translation.json会得到:

{
  "hello everyone": "hello everyone"
}
  1. 生成法文翻译文件
    直接提取PO里的msgstr作为翻译值:
i18next-gettext-converter --input path/to/your/file.po --output fr/translation.json --language fr

执行后,fr/translation.json会得到:

{
  "hello everyone": "bonjour toute la monde"
}

二、替代JavaScript库推荐

如果i18next-gettext-converter不符合预期,可以试试以下工具:

1. gettext-parser

纯JS解析库,灵活性高,可自定义脚本拆分语言:

const fs = require('fs');
const gettextParser = require('gettext-parser');

// 解析PO文件
const poContent = fs.readFileSync('path/to/your/file.po', 'utf8');
const parsedData = gettextParser.po.parse(poContent);

// 生成英文翻译文件
const enTrans = {};
for (const msgid in parsedData.translations['']) {
  if (msgid) enTrans[msgid] = msgid;
}
fs.writeFileSync('en/translation.json', JSON.stringify(enTrans, null, 2));

// 生成法文翻译文件
const frTrans = {};
for (const msgid in parsedData.translations['']) {
  if (msgid) frTrans[msgid] = parsedData.translations[''][msgid].msgstr[0] || msgid;
}
fs.writeFileSync('fr/translation.json', JSON.stringify(frTrans, null, 2));

2. po2json

专门的PO转JSON工具,支持i18next格式输出:

  • 生成英文文件:
po2json path/to/your/file.po en/translation.json -f i18next -k
  • 生成法文文件:
po2json path/to/your/file.po fr/translation.json -f i18next

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 06:43:10