UNPKG

2.02 kBJavaScriptView Raw
1
2const request = require('request');
3const fs = require('fs');
4const _ = require('lodash');
5const config = require('../src/config');
6
7// verbs
8const verbs = {
9
10 // igo i18n update
11 update: function(args, callback) {
12 if (!config.i18n.spreadsheet_id) {
13 return callback('Missing config.i18n.spreadsheet_id');
14 }
15 const path = 'https://spreadsheets.google.com/feeds/list/' +
16 config.i18n.spreadsheet_id +
17 '/default/public/values?alt=json';
18
19 // request json data
20 request(path, (err, res, body) => {
21 if (err) {
22 return callback(err);
23 }
24 const json = JSON.parse(body);
25 //console.dir(json);
26 const translations = {};
27
28 // parse
29 json.feed.entry.forEach(entry => {
30 //
31 const key = _.get(entry, 'gsx$key.$t');
32 config.i18n.whitelist.forEach((lang) => {
33 const value = _.get(entry, 'gsx$' + lang + '.$t');
34 if (value) {
35 _.setWith(translations, lang + '.' + key, value, Object);
36 }
37 });
38
39 });
40
41 // write translation files
42 config.i18n.whitelist.forEach((lang) => {
43 const dir = `./locales/${lang}`;
44 if (!fs.existsSync(dir)) {
45 console.warn('Missing directory: ' + dir);
46 return;
47 }
48 translations[lang]._meta = {
49 generated_at: new Date(),
50 lang
51 };
52 const data = JSON.stringify(translations[lang], null, 2);
53 const filename = `${dir}/translation.json`;
54 console.log('Writing ' + filename);
55 fs.writeFileSync(filename, data );
56 });
57
58 callback();
59 });
60 }
61
62};
63
64// igo i18n
65module.exports = function(argv) {
66 var args = argv._;
67 config.init();
68
69 if (args.length > 1 && verbs[args[1]]) {
70 verbs[args[1]](args, function(err) {
71 console.log(err || 'Done.');
72 process.exit(0);
73 });
74 } else {
75 console.error('ERROR: Wrong options');
76 console.error('Usage: igo i18n [update]')
77 }
78
79
80};