td-octopus 0.0.20 → 0.0.22

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "td-octopus",
3
- "version": "0.0.20",
3
+ "version": "0.0.22",
4
4
  "description": "I18N tool",
5
5
  "author": "Anthony Li",
6
6
  "bin": {
@@ -3,7 +3,7 @@
3
3
  * @Author: 郑泳健
4
4
  * @Date: 2022-06-01 13:56:18
5
5
  * @LastEditors: 郑泳健
6
- * @LastEditTime: 2022-12-28 15:47:31
6
+ * @LastEditTime: 2023-06-12 11:33:34
7
7
  */
8
8
  const {
9
9
  syncFiles,
@@ -25,6 +25,7 @@ function doExport() {
25
25
  (async () => {
26
26
  const otpConfig = getProjectConfig()
27
27
  const distLang = otpConfig && otpConfig.distLangs
28
+ const baiduApiKey = otpConfig && otpConfig.baiduApiKey
28
29
 
29
30
  if (!Array.isArray(distLang)) {
30
31
  console.log(`请配置${OCTOPUS_CONFIG_FILE}里面的distLangs`)
@@ -42,7 +43,7 @@ function doExport() {
42
43
  const langFlat = flatObject(currentLangMap);
43
44
  spinner.start('正在同步文件的key')
44
45
  // 删除掉多余的key,增加新的key,同时提取没有翻译过的key的列表
45
- const { fileKeyValueList, addList, allList } = await getAdjustLangObjAndAddList(lang, langFlat, zhCNflat);
46
+ const { fileKeyValueList, addList, allList } = await getAdjustLangObjAndAddList(lang, langFlat, zhCNflat, baiduApiKey, spinner);
46
47
  spinner.succeed('同步文件的key成功')
47
48
  // 重写文件
48
49
  rewriteFiles(fileKeyValueList, lang);
@@ -23,6 +23,9 @@ function getLangData(fileName) {
23
23
  */
24
24
  function getLangJson(fileName) {
25
25
  const fileContent = fs.readFileSync(fileName, { encoding: 'utf8' });
26
+ if(!fileContent) {
27
+ return {}
28
+ }
26
29
  let obj = fileContent.match(/export\s*default\s*({[\s\S]+);?$/)[1];
27
30
  obj = obj.replace(/\s*;\s*$/, '');
28
31
  let jsObj = {};
@@ -3,7 +3,7 @@
3
3
  * @Author: 郑泳健
4
4
  * @Date: 2022-06-01 13:56:18
5
5
  * @LastEditors: 郑泳健
6
- * @LastEditTime: 2022-12-28 15:47:31
6
+ * @LastEditTime: 2023-06-12 11:33:51
7
7
  */
8
8
  const {
9
9
  syncFiles,
@@ -25,6 +25,7 @@ function translate() {
25
25
  (async () => {
26
26
  const otpConfig = getProjectConfig()
27
27
  const distLang = otpConfig && otpConfig.distLangs
28
+ const baiduApiKey = otpConfig && otpConfig.baiduApiKey
28
29
 
29
30
  if (!Array.isArray(distLang)) {
30
31
  console.log(`请配置${OCTOPUS_CONFIG_FILE}里面的distLangs`)
@@ -42,7 +43,7 @@ function translate() {
42
43
  const langFlat = flatObject(currentLangMap);
43
44
  spinner.start('正在同步文件的key')
44
45
  // 删除掉多余的key,增加新的key,同时提取没有翻译过的key的列表
45
- const { fileKeyValueList, addList } = await getAdjustLangObjAndAddList(lang, langFlat, zhCNflat);
46
+ const { fileKeyValueList, addList } = await getAdjustLangObjAndAddList(lang, langFlat, zhCNflat, baiduApiKey, spinner);
46
47
  spinner.succeed('同步文件的key成功')
47
48
  // 重写文件
48
49
  rewriteFiles(fileKeyValueList, lang);
@@ -3,7 +3,7 @@
3
3
  * @Author: 郑泳健
4
4
  * @Date: 2022-06-02 10:09:01
5
5
  * @LastEditors: 郑泳健
6
- * @LastEditTime: 2023-01-04 14:54:06
6
+ * @LastEditTime: 2023-06-12 11:32:52
7
7
  */
8
8
  const fs = require('fs');
9
9
  const path = require('path');
@@ -130,12 +130,12 @@ function getFileKeyValueList(adjustLangObj) {
130
130
  * @param {*} zhCNObj zh-CN 的key/value
131
131
  * @returns { fileKeyValueList: [{fileName: a, value: {"b.c": xx}}], addList: [["a.b.c": "dd"]] }
132
132
  */
133
- async function getAdjustLangObjAndAddList(lang, langObj = {}, zhCNObj = {}) {
133
+ async function getAdjustLangObjAndAddList(lang, langObj = {}, zhCNObj = {}, baiduApiKey, spinner) {
134
134
  const langObjKeys = Object.keys(langObj);
135
135
  // 调整后的语言包key/value
136
136
  const adjustLangObj = {};
137
137
  // 需要新增的key/value
138
- const needAddList = [];
138
+ let needAddList = [];
139
139
  // 全量的的key/value
140
140
  const allList = [];
141
141
  // 循环zh-CN的key,得到当前语言包的key
@@ -154,8 +154,10 @@ async function getAdjustLangObjAndAddList(lang, langObj = {}, zhCNObj = {}) {
154
154
 
155
155
  adjustLangObj[key] = langObj[key] || zhCNObj[key];
156
156
  }
157
-
158
- const addList = await combinText(needAddList, lang);
157
+ if(baiduApiKey) {
158
+ spinner.text = `当前配置了百度翻译,预计翻译时间需要${(needAddList.length / 60)?.toFixed(2)}分钟,如果等不及,请先去掉百度翻译配置`
159
+ }
160
+ const addList = await combinText(needAddList, lang, spinner);
159
161
 
160
162
  return {
161
163
  fileKeyValueList: getFileKeyValueList(adjustLangObj),
@@ -167,9 +169,9 @@ async function getAdjustLangObjAndAddList(lang, langObj = {}, zhCNObj = {}) {
167
169
  /**
168
170
  * 合并需要翻译的中文,因为百度翻译限制一次性中文只能有3000字
169
171
  * 因为百度免费翻译有时候会抽风,会导致翻译结果出错,为了减少没被翻译的,所以现在设置一次性翻译200字
170
- * @param {*} needAddList
172
+ * @param {*} needAddList
171
173
  */
172
- async function combinText(needAddList, lang) {
174
+ async function combinText(needAddList, lang, spinner) {
173
175
  const otpConfig = getProjectConfig()
174
176
  const { baiduApiKey, baiduLangMap } = otpConfig || {}
175
177
  const { appId, appKey } = baiduApiKey || {}
@@ -183,11 +185,10 @@ async function combinText(needAddList, lang) {
183
185
  if (!appId || !appKey || !toLang) {
184
186
  return needAddList;
185
187
  }
186
-
187
188
  // 分组
188
189
  const groupList = groupByLength(needAddList, 200)
189
190
  // 分组翻译结果
190
- const transformResultList = await getTransformResultList(groupList, appId, appKey, 'zh', toLang)
191
+ const transformResultList = await getTransformResultList(groupList, appId, appKey, 'zh', toLang, spinner)
191
192
 
192
193
  return needAddList.map((i, index) => {
193
194
  i[2] = transformResultList[index];
@@ -197,28 +198,30 @@ async function combinText(needAddList, lang) {
197
198
 
198
199
  /**
199
200
  * 对分组的结果进行翻译
200
- * @param {*} groupList
201
- * @param {*} appId
202
- * @param {*} appKey
203
- * @param {*} fromLang
204
- * @param {*} toLang
205
- * @returns
201
+ * @param {*} groupList
202
+ * @param {*} appId
203
+ * @param {*} appKey
204
+ * @param {*} fromLang
205
+ * @param {*} toLang
206
+ * @returns
206
207
  */
207
- async function getTransformResultList(groupList, appId, appKey, fromLang, toLang) {
208
- let translatList = []
208
+ async function getTransformResultList(groupList, appId, appKey, fromLang, toLang, spinner) {
209
+ let translatList = [];
210
+ let num = 1
209
211
  for (const i of groupList) {
212
+ spinner.text = `翻译进度${num}/${groupList.length}`
210
213
  const baiduResult = await baiduTranslation(appId, appKey, fromLang, toLang, JSON.stringify(i))
211
-
214
+ num++;
212
215
  try {
213
- const splitBaiduResult = baiduResult?.[0]
214
- const transResultList = JSON.parse(splitBaiduResult);
215
- // 这里是判断百度翻译返回的长度是不是和传入的一样
216
- const reduceNum = i.length - transResultList.length;
217
- translatList = [...translatList, ...transResultList].concat(Array(reduceNum).fill(''))
216
+ const res = baiduResult?.[0]
217
+ // const transResultList = JSON.parse(splitBaiduResult);
218
+ // // 这里是判断百度翻译返回的长度是不是和传入的一样
219
+ // const reduceNum = i.length - transResultList.length;
220
+ translatList = [...translatList, res]
218
221
 
219
222
  } catch (e) {
220
223
  console.log(`百度翻译出现部分失败, 失败原因: ${e.message}`)
221
- translatList = translatList.concat(Array(i.length).fill(''))
224
+ translatList = translatList.concat('')
222
225
  }
223
226
  }
224
227
 
@@ -229,32 +232,32 @@ async function getTransformResultList(groupList, appId, appKey, fromLang, toLang
229
232
  * 对数组进行分组
230
233
  * @param {*} groupList 原数组
231
234
  * @param {*} max 最大多少字
232
- * @returns
235
+ * @returns
233
236
  */
234
237
  function groupByLength(groupList, max) {
235
238
  const list = [[]]
236
239
  let str = ''
237
240
  // 变成${max}个字符一组的数组,用于一次百度翻译
238
241
  groupList.forEach((it) => {
239
- let [, text] = it;
240
-
241
- if ((str + text).length < max) {
242
- list[list.length - 1] = Array.isArray(list[list.length - 1]) ? [...list[list.length - 1], text] : [text]
243
- str = str + text
244
- } else {
245
- list.push([text])
246
- str = ''
247
- }
242
+ const [, text] = it;
243
+ list.push(text)
244
+ // if ((str + text).length < max) {
245
+ // list[list.length - 1] = Array.isArray(list[list.length - 1]) ? [...list[list.length - 1], text] : [text]
246
+ // str = str + text
247
+ // } else {
248
+ // list.push([text])
249
+ // str = ''
250
+ // }
248
251
  })
249
252
  return list
250
253
  }
251
254
 
252
255
  /**
253
256
  * 百度翻译
254
- * @param {*} from
255
- * @param {*} to
256
- * @param {*} text
257
- * @returns
257
+ * @param {*} from
258
+ * @param {*} to
259
+ * @param {*} text
260
+ * @returns
258
261
  */
259
262
  async function baiduTranslation(appId, appKey, from, to, text) {
260
263
  return new Promise((resolve, reject) => {
@@ -263,15 +266,15 @@ async function baiduTranslation(appId, appKey, from, to, text) {
263
266
  return baiduTranslate(appId, appKey, to, from)(text)
264
267
  .then(data => {
265
268
  if (data && data.trans_result) {
266
- const result = data.trans_result.map(item => item.dst) || [];
269
+ const result = data.trans_result.map(item => item.dst) || '';
267
270
  resolve(result);
268
271
  } else {
269
- resolve('[]')
272
+ resolve('')
270
273
  }
271
274
  }).catch(err => {
272
- reject('[]');
275
+ reject('');
273
276
  });
274
- }, 1000)
277
+ }, 1100)
275
278
  })
276
279
  }
277
280