alibaba / kiwi

🐤 Kiwi-国际化翻译全流程解决方案
2.5k stars 229 forks source link

在使用kiwi --translate之后不能成功翻译 #114

Open huchaolin opened 1 year ago

huchaolin commented 1 year ago

如下报错信息所示,该如何解决呢, 文档实在太简洁了,不知道从何入手; 步骤: kiwi --init 的时候配置了文件目,然后kiwi -- extract 完成之后 执行 kiwi --translate 就报错了

1.最开始报错 是

(node:30313) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). To terminate the node process on unhandled promise rejection, use the CLI flag `--unhandled-rejections=strict` (see https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (rejection id: 3)
(node:30313) UnhandledPromiseRejectionWarning: Error: ENOENT: no such file or directory, open '/.../.kiwi/en-US/CrossAnalysisModalContent.ts'
(node:30313) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). To terminate the node process on unhandled promise rejection, use the CLI flag `--unhandled-rejections=strict` (see https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (rejection id: 4)
(node:30313) UnhandledPromiseRejectionWarning: Error: ENOENT: no such file or directory, open '/.../.kiwi/en-US/CustomModal.ts'
(node:30313) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). To terminate the node process on unhandled promise rejection, use the CLI flag `--unhandled-rejections=strict` (see https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (rejection id: 5)``

然后我看了下en-US文件夹没有对应的映射文件;

2.再次执行 kiwi --translate 如下报错,然后我看了下en-US文件夹有对应的映射文件, 但是映射出来的是中文的
```> kiwi --translate

⠦ 使用 Baidu 翻译中...en-US 自动翻译完成
/..../node_modules/kiwi-clis/dist/import.js:27
            throw new Error(`Illegal message: ${value}`);
            ^

Error: Illegal message: Add "and" condition
    at /.../node_modules/kiwi-clis/src/import.ts:26:13
    at Object.parseRows [as tsvParseRows] (/.../node_modules/d3-dsv/dist/d3-dsv.js:122:23)
    at getMessagesToImport (/.../node_modules/kiwi-clis/src/import.ts:20:20)
    at Object.importMessages (/.../node_modules/kiwi-clis/src/import.ts:59:26)
    at /.../node_modules/kiwi-clis/src/translate.ts:158:9
    at /.../node_modules/graceful-fs/graceful-fs.js:61:14
    at FSReqCallback.oncomplete (fs.js:179:23)

第二点bug补充: 是因为 提取文本为 增加“且”条件 被翻译为了 "Add ""and"" condition" 导致调用tsvParseRows时报错,后面是手动修改中文双引号为ASCII码就好了, 然后批量处理还是会有一些比较复杂的字符串模板会转错, 特别是嵌套比较深的或者想echarts render自定义templete的这种,需要自己手动提取中文变量至最外层, 不过已经很好用了~

这是我的config.json配置

{
  "kiwiDir": "./.kiwi",
  "srcLang": "zh-CN",
  "distLangs": [
    "en-US"
  ],
  "googleApiKey": "",
  "baiduApiKey": {
    "appId": "xxxxx",
    "appKey": "xxxxx"
  },
  "baiduLangMap": {
    "en-US": "en"
  },
  "translateOptions": {
    "concurrentLimit": 10,
    "requestOptions": {}
  },
  "defaultTranslateKeyApi": "Pinyin",
  "importI18N": "import I18N from '@i18n';",
  "ignoreDir": ["./src/assets", "./src/server", "./src/mock", "./src/common", "./src/utils", "./node_modules"],
  "ignoreFile": ""
}
dinglino1 commented 1 year ago

image 我也出现类似的问题,其他语种没问题,就这个西班牙翻译就报错。