UNPKG

2.87 kBJavaScriptView Raw
1import path from 'path';
2import glob from 'glob';
3
4import ExtractString from './extract-string';
5import submitPot from './submit-pot';
6import getPo from './get-po';
7import ConvertPoToJson from './convert-po-to-json';
8import ReplaceString from './replace-string';
9
10/**
11 * Array of language names and codes for use in prompting the user what the
12 * source or destination language is for each page. Need to add to this array
13 * as new languages are supported.
14 *
15 * @type {Array}
16 */
17let 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 * Map of common folder name suffixes to language codes. Need to add to this
28 * as new languages are supported.
29 *
30 * @type {Object}
31 */
32let 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
43let langDirCodes = Object.keys(langCodeMap);
44
45let extsToInclude = [
46 '.js',
47 '.html'
48];
49
50let extsToExclude = [
51 '__build.js',
52 '.spec.js',
53 '.min.js',
54 'js.map',
55 'min.js.map'
56];
57
58let 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
67let 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
82module.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
100module.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