【问题标题】:How to run formatjs compile?如何运行 formatjs 编译?
【发布时间】:2023-10-20 21:44:01
【问题描述】:

如何在不替换已翻译消息的情况下运行 formatjs 编译命令? 现在我这样运行:

../../node_modules/.bin/formatjs compile lang/ru.json --out-file compiled-lang/ru.json

【问题讨论】:

  • without replacement of already translated messages 是什么意思?
  • @LongHo 在这个文件“compiled-lang/ru.json”中,我已经翻译了消息(初始)。当我运行上一个命令时,我得到带有新键 + 值对的新文件,所有值都是默认语言,但预期结果是我的初始消息和来自“lang/ru.json”的新消息的混合
  • 你应该用你的翻译更新lang/ru.jsoncompile 仅将字符串转换为 AST

标签: reactjs react-intl formatjs


【解决方案1】:

您需要有一个带有自己编译功能的自定义格式化程序: https://formatjs.io/docs/tooling/cli/#custom-formatters

这是我的格式化程序文件的样子:

const argv = require('yargs').argv;
const originTranslations = require(argv['out-file']);

module.exports = {
  compile: function (msgs) {
    const results = {};
    for (const k in msgs) {
      const defaultMessage = msgs[k].defaultMessage;
      if (originTranslations[k]) {
        results[k] = originTranslations[k];
      } else if (defaultMessage) {
        results[k] = defaultMessage;
      } else {
        results[k] = 'MISSING TRANSLATION';
      }
    }
    return results;
  },
};

您需要使用--format 选项传入此格式化程序

yarn formatjs compile lang/ru.json --out-file compiled-lang/ru.json --format <your formatter file>

【讨论】: