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