如何将msgid为英文、msgstr为法文的PO文件转为两个JSON文件
从PO文件生成react-i18next兼容的多语言翻译文件
一、用i18next-gettext-converter实现需求
你之前的参数组合有误,正确做法是分两次转换,分别生成英文和法文文件:
- 生成英文翻译文件
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" }
- 生成法文翻译文件
直接提取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
相关产品推荐
相关产品推荐

