Browse Source

Scripts to update categories <-> language files

master
parent
commit
d44f87e21b
  1. 101
      bin/categories-to-lang
  2. 97
      bin/lang-to-categories
  3. 1
      package.json

101
bin/categories-to-lang

@ -0,0 +1,101 @@
#!/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, contents) {
let data = JSON.parse(contents)
if (!(lang in all)) {
all[lang] = {}
}
for (var id in data) {
if (!(id in all[lang])) {
all[lang][id] = data[id]
}
}
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]
}
}
done()
})
},
writeTranslationFiles
)
}
)
function writeTranslationFiles () {
forEach(Object.keys(all), function (lang) {
let done = this.async()
let data = {}
allIds.forEach(function (id) {
data[id] = null
})
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()
}
)
})
}

97
bin/lang-to-categories

@ -0,0 +1,97 @@
#!/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, 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 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]
}
}
let result = {}
let keys = Object.keys(data.name)
keys.sort()
for (let i = 0; i < keys.length; i++) {
result[keys[i]] = data.name[keys[i]]
}
data.name = result
fs.writeFile(
f,
JSON.stringify(data, null, ' ') + '\n',
function (err, result) {
done()
}
)
})
}
)
}
)
}

1
package.json

@ -9,6 +9,7 @@
"dependencies": {
"@mapbox/maki": "^4.0.0",
"async": "^2.5.0",
"async-foreach": "^0.1.3",
"color-interpolate": "^1.0.2",
"font-awesome": "^4.7.0",
"i18next-client": "^1.11.4",

Loading…
Cancel
Save