1 | import path from 'path';
|
2 | import glob from 'glob';
|
3 |
|
4 | import ExtractString from './extract-string';
|
5 | import submitPot from './submit-pot';
|
6 | import getPo from './get-po';
|
7 | import ConvertPoToJson from './convert-po-to-json';
|
8 | import ReplaceString from './replace-string';
|
9 |
|
10 |
|
11 |
|
12 |
|
13 |
|
14 |
|
15 |
|
16 |
|
17 | let languages = [
|
18 | {name: 'US English', value: 'en-US'},
|
19 | {name: 'Chinese (Simplified)', value: 'zh-CN'},
|
20 | {name: 'Chinese (Traditional)', value: 'zh-TW'},
|
21 | {name: 'Japanese', value: 'ja-JP'},
|
22 | {name: 'Korean', value: 'ko-KR'},
|
23 | {name: 'Spanish (Latin America)', value: 'es-LA'}
|
24 | ];
|
25 |
|
26 |
|
27 |
|
28 |
|
29 |
|
30 |
|
31 |
|
32 | let langCodeMap = {
|
33 | 'com_en': 'en-US',
|
34 | 'cn_zh': 'zh-CN',
|
35 | 'cn_zhs': 'zh-CN',
|
36 | 'com_es': 'es-LA',
|
37 | 'jp_ja': 'ja-JP',
|
38 | 'kr_ko': 'ko-KR',
|
39 | 'tw_zh': 'zh-TW',
|
40 | 'tw_zht': 'zh-TW'
|
41 | };
|
42 |
|
43 | let langDirCodes = Object.keys(langCodeMap);
|
44 |
|
45 | let extsToInclude = [
|
46 | '.js',
|
47 | '.html'
|
48 | ];
|
49 |
|
50 | let extsToExclude = [
|
51 | '__build.js',
|
52 | '.spec.js',
|
53 | '.min.js',
|
54 | 'js.map',
|
55 | 'min.js.map'
|
56 | ];
|
57 |
|
58 | let getTransationDirectories = (_srcPaths) => {
|
59 | let dirs = _srcPaths.reduce((acc, curr) => {
|
60 | let dir = path.resolve(curr);
|
61 | return acc.concat(langDirCodes.reduce((langAcc, langCurr) =>
|
62 | langAcc.concat(glob.sync(dir + '/**/*' + langCurr, {})), []));
|
63 | }, []);
|
64 | return dirs;
|
65 | };
|
66 |
|
67 | let getTransationFiles = (_srcPaths) => {
|
68 | let files = _srcPaths.reduce((acc, element) => {
|
69 | let dir = path.resolve(element);
|
70 |
|
71 | return acc.concat(extsToInclude.reduce((extAcc, extCurr) => {
|
72 | return extAcc.concat(glob.sync(dir + '/**/*' + extCurr, {
|
73 | ignore: extsToExclude.map((ext) => '**/*' + ext),
|
74 | nodir: true
|
75 | }));
|
76 | }, []));
|
77 | }, []);
|
78 |
|
79 | return files;
|
80 | };
|
81 |
|
82 | module.exports.generatePOT = (_srcPaths) => {
|
83 | let dirs = getTransationDirectories(_srcPaths);
|
84 | let promises = [];
|
85 |
|
86 | dirs.forEach((dir) => {
|
87 | let files = getTransationFiles([dir]);
|
88 | let extractString = new ExtractString(dir, files);
|
89 | promises.push = extractString
|
90 | .extractStrings()
|
91 | .then((str) => {
|
92 | submitPot(dir, str);
|
93 | })
|
94 | .catch(() => {});
|
95 | });
|
96 |
|
97 | return promises;
|
98 | };
|
99 |
|
100 | module.exports.replaceText = (_srcPaths) => {
|
101 | let dirs = getTransationDirectories(_srcPaths);
|
102 | let promises = dirs.map((dir) => {
|
103 | let files = getTransationFiles([dir]);
|
104 | let converter = new ConvertPoToJson(dir);
|
105 |
|
106 | return getPo(dir)
|
107 | .then((_result) => {
|
108 | let converted = converter.convert([_result.po]);
|
109 |
|
110 | let rs = new ReplaceString(dir, converted[_result.lang]);
|
111 | return rs.replace(files);
|
112 | })
|
113 | .catch(() => {});
|
114 | });
|
115 |
|
116 | return Promise.all(promises);
|
117 | };
|
118 |
|