#!/usr/bin/env node const fs = require('fs') const forEach = require('async-foreach').forEach var all = {} var allIds = [] /* read existing translation files in lang/ */ fs.readdir('lang', function (err, files) { forEach(files, function (f) { let m = f.match(/^(.*)\.json$/) if (!m) { return } let done = this.async() let lang = m[1] fs.readFile('lang/' + f, function (err) { if (!(lang in all)) { all[lang] = {} } done() }) }) }) fs.readdir( '.', function (err, files) { forEach( files, function (f) { if (f === 'package.json') { return } let m = f.match(/^(.*)\.json$/) if (!m) { return } let done = this.async() let id = m[1] allIds.push('category:' + id) fs.readFile(f, function (err, contents) { let data = JSON.parse(contents) if ('name' in data) { for (var lang in data.name) { if (!(lang in all)) { all[lang] = {} } all[lang]['category:' + id] = data.name[lang] } if (data.type && data.type === 'index') { parseSubCategories(data.subCategories, all) } if (data.type && data.type === 'overpass') { if (data.lists) { for (let listId in data.lists) { let list = data.lists[listId] let langStrId = 'category:' + id + ':' + listId allIds.push(langStrId) for (let lang in list.name) { all[lang][langStrId] = list.name[lang] } } } } } done() }) }, writeTranslationFiles ) } ) function parseSubCategories(categories, all) { categories.forEach(data => { if ('name' in data) { for (var lang in data.name) { if (!(lang in all)) { all[lang] = {} } allIds.push('category:' + data.id) all[lang]['category:' + data.id] = data.name[lang] } if (data.type && data.type === 'index') { parseSubCategories(data.subCategories, all) } } }) } function writeTranslationFiles () { forEach(Object.keys(all), function (lang) { let done = this.async() allIds = allIds.sort() let data = {} allIds.forEach(function (id) { data[id] = '' }) let keys = Object.keys(all[lang]) keys.sort() for (let i = 0; i < keys.length; i++) { data[keys[i]] = all[lang][keys[i]] } fs.writeFile( 'lang/' + lang + '.json', JSON.stringify(data, null, ' ') + '\n', function (err, result) { done() } ) }) }