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.
 
 
 
 

129 lines
2.8 KiB

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