@chaoswise/intl 2.0.0 → 2.1.0

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.
@@ -2,6 +2,7 @@
2
2
  const runCollect = require('./scripts/collect');
3
3
  const runUpdate = require('./scripts/update');
4
4
  const runInitConfig = require('./scripts/initConfig');
5
+ const runAddLocale = require('./scripts/addLocale');
5
6
 
6
7
  // 可执行的指令
7
8
  const SCRIPTS = ['intl', 'collect', 'update'];
@@ -24,3 +25,7 @@ if(script === 'collect') {
24
25
  if(script === 'update') {
25
26
  runUpdate();
26
27
  }
28
+ // 收集全部语种
29
+ if(script === 'addLocale') {
30
+ runAddLocale();
31
+ }
@@ -0,0 +1,33 @@
1
+ const getConf = require('./conf');
2
+ const { targetOutputFiles } = require('./util/getTargetFiles');
3
+ const transformAst = require('./util/transformAst');
4
+ const getWordsByIds = require('./util/getWordsByIds');
5
+ const log = require('./util/log');
6
+ const genXlsx = require('./util/genXlsx');
7
+
8
+ async function update() {
9
+ log.info('收集全部词条...');
10
+ const conf = getConf();
11
+ const files = targetOutputFiles(conf);
12
+
13
+ const info = transformAst('update', files, conf, {});
14
+ const _downloadIds = [...new Set(info.downloadIds.filter(Boolean))];
15
+ // 获取全部词条
16
+ const allWords = await getWordsByIds(_downloadIds, conf);
17
+
18
+ const localeKeys = Object.keys(allWords);
19
+ const xlsxData = _downloadIds.map(id => {
20
+ const localeObj = {};
21
+ localeKeys.forEach(key => {
22
+ localeObj[key] = allWords[key][id] || '待翻译';
23
+ });
24
+ return {
25
+ id,
26
+ ...localeObj
27
+ }
28
+ });
29
+
30
+ await genXlsx(xlsxData)
31
+ }
32
+
33
+ module.exports = update;
@@ -7,15 +7,15 @@ module.exports = function (excludes = []) {
7
7
 
8
8
  // exclude pattern, <string array>
9
9
  // e.g. ['**/dist/**', '**/*.config.js', '**/*.data.js']
10
- exclude: [
11
- '**/src/public/**',
12
- '**/_MOCK_/**'
13
- ],
10
+ exclude: ['**/src/public/**', '**/_MOCK_/**'],
14
11
 
15
12
  // output path, <string array>
16
13
  // e.g. ['dist']
17
14
  output: ['src'], // default i18n in place
18
15
 
16
+ // 国际化词条导出目录(locales/*.json)
17
+ localeOutput: 'src/public',
18
+
19
19
  // ignored components, <string array>
20
20
  // e.g. ['EventTracker']
21
21
  ignoreComponents: ['style', 'svg'],
@@ -1,40 +1,40 @@
1
- const getConf = require("./conf");
2
- const { targetOutputFiles } = require("./util/getTargetFiles");
3
- const transformAst = require("./util/transformAst");
4
- const downloadJson = require("./util/downloadJson");
5
- const log = require("./util/log");
6
- const file = require("./util/file");
7
- const getPkgJson = require("./util/getPkgJson");
8
- const getGroupName = require("./util/getGroupName");
1
+ const getConf = require('./conf');
2
+ const { targetOutputFiles } = require('./util/getTargetFiles');
3
+ const transformAst = require('./util/transformAst');
4
+ const downloadJson = require('./util/downloadJson');
5
+ const log = require('./util/log');
6
+ const file = require('./util/file');
7
+ const getPkgJson = require('./util/getPkgJson');
8
+ const getGroupName = require('./util/getGroupName');
9
9
 
10
10
  async function update() {
11
- log.info("词条更新中...");
11
+ log.info('词条更新中...');
12
12
  const conf = getConf();
13
13
  const files = targetOutputFiles(conf);
14
14
 
15
15
  // relationKey { key: id } key是脚本生成的临时id,id是数据库对应词条的id
16
- const relationKey = file.readJson("relationKey.json") || {};
16
+ const relationKey = file.readJson('relationKey.json') || {};
17
17
 
18
- const info = transformAst("update", files, conf, relationKey);
18
+ const info = transformAst('update', files, conf, relationKey);
19
19
  const _downloadIds = [...new Set(info.downloadIds.filter(Boolean))];
20
- await downloadJson(_downloadIds);
20
+ await downloadJson(_downloadIds, conf);
21
21
 
22
22
  const needDelete = Boolean(Object.keys(relationKey).length);
23
23
  if (needDelete) {
24
24
  const package = getPkgJson();
25
25
  const groupName = getGroupName();
26
26
 
27
- let type = conf.newWordsFileType || "excel";
28
- type = type === "json" ? "json" : "xlsx";
27
+ let type = conf.newWordsFileType || 'excel';
28
+ type = type === 'json' ? 'json' : 'xlsx';
29
29
 
30
30
  const version = package.version;
31
31
  const fileName = `${groupName}_${version}.${type}`;
32
32
  file.delete(fileName);
33
- file.delete("relationKey.json");
34
- log.success("已删除历史文件:" + fileName + "和relationKey.json");
33
+ file.delete('relationKey.json');
34
+ log.success('已删除历史文件:' + fileName + '和relationKey.json');
35
35
  }
36
36
 
37
- log.success("★★★ 脚本执行成功 ★★★");
37
+ log.success('★★★ 脚本执行成功 ★★★');
38
38
  }
39
39
 
40
40
  // update();
@@ -1,10 +1,11 @@
1
- const service = require("../service");
2
- const file = require("./file");
3
- const log = require("./log");
4
- const getGroupName = require("./getGroupName");
5
- const getPkgJson = require("./getPkgJson");
1
+ const service = require('../service');
2
+ const file = require('./file');
3
+ const log = require('./log');
4
+ const getGroupName = require('./getGroupName');
5
+ const getPkgJson = require('./getPkgJson');
6
+ const path = require('path');
6
7
 
7
- module.exports = async function downloadJson(downloadIds) {
8
+ module.exports = async function downloadJson(downloadIds, conf) {
8
9
  // 读取groupName
9
10
  const groupName = getGroupName();
10
11
  const package = getPkgJson();
@@ -22,6 +23,8 @@ module.exports = async function downloadJson(downloadIds) {
22
23
  const data = res.data || {};
23
24
  Object.keys(data).forEach((key) => {
24
25
  const item = data[key];
25
- file.write(`locales/${key}.json`, JSON.stringify(item));
26
+
27
+ const localeOutput = path.resolve(conf.localeOutput, `locales/${key}.json`);
28
+ file.write(localeOutput, JSON.stringify(item));
26
29
  });
27
30
  };
@@ -0,0 +1,23 @@
1
+ const file = require("./file");
2
+ const log = require("./log");
3
+ const getGroupName = require("./getGroupName");
4
+ const getPkgJson = require("./getPkgJson");
5
+
6
+ module.exports = async function genXlsx(words) {
7
+ const package = getPkgJson();
8
+ // 读取groupName
9
+ const groupName = getGroupName();
10
+ const fileName = `${groupName}_${package.version}.xlsx`;
11
+ // 写入xlsx
12
+ // 把新增的词条对象,转为数组
13
+ const newWordsArr = Object.entries(words).map(([id, word]) => ({
14
+ id,
15
+ ...word,
16
+ }));
17
+ // 合并数据,并写入文件
18
+ console.log('%c [ newWordsArr ]-14', 'font-size:13px; background:pink; color:#bf2c9f;', newWordsArr)
19
+
20
+ file.writeXlsx(fileName, { Sheet1: newWordsArr });
21
+
22
+ log.info(`全部词条请查看: ${fileName}中`);
23
+ };
@@ -0,0 +1,22 @@
1
+ const service = require('../service');
2
+ const log = require('./log');
3
+ const getGroupName = require('./getGroupName');
4
+ const getPkgJson = require('./getPkgJson');
5
+
6
+ module.exports = async function getWordsByIds(downloadIds) {
7
+ // 读取groupName
8
+ const groupName = getGroupName();
9
+ const package = getPkgJson();
10
+
11
+ const res = await service.getJson({
12
+ version: package.version,
13
+ groupName,
14
+ downloadIds,
15
+ });
16
+ if (res.code !== 10000) {
17
+ log.error(res.msg);
18
+ process.exit(1);
19
+ }
20
+
21
+ return res.data || {};
22
+ };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@chaoswise/intl",
3
- "version": "2.0.0",
3
+ "version": "2.1.0",
4
4
  "author": "cloudwiser",
5
5
  "description": "intl",
6
6
  "main": "lib/index.js",
@@ -84,5 +84,5 @@
84
84
  "react-dom": "^16.13.1"
85
85
  },
86
86
  "license": "MIT",
87
- "gitHead": "6bea40aa64b55508f7efbeed5a97719232bd0ff0"
87
+ "gitHead": "f7289295edebb57f5bd96f7f3df2271ebd3aa3f0"
88
88
  }