You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

144 lines
3.0 KiB

#!/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()
}
)
})
}
)
}
)
}