lila/bin/trans-dump.js

52 lines
1.5 KiB
JavaScript
Raw Normal View History

const fs = require('fs').promises;
2017-05-27 03:28:28 -06:00
const parseString = require('xml2js').parseString;
2017-07-06 06:40:09 -06:00
const baseDir = 'translation/source';
2021-02-06 06:26:05 -07:00
const dbs = 'site arena emails learn activity coordinates study clas contact patron coach broadcast streamer tfa settings preferences team perfStat search tourname faq lag swiss puzzle puzzleTheme challenge storm'.split(
' '
);
2017-05-27 03:28:28 -06:00
2017-07-06 06:46:53 -06:00
function ucfirst(s) {
return s.charAt(0).toUpperCase() + s.slice(1);
}
2020-02-07 13:21:41 -07:00
function xmlName(name) {
return name == 'clas' ? 'class' : name;
}
2017-07-06 06:46:53 -06:00
function keyListFrom(name) {
2020-02-07 13:21:41 -07:00
return fs.readFile(`${baseDir}/${xmlName(name)}.xml`, { encoding: 'utf8' }).then(txt => {
2021-02-06 06:26:05 -07:00
return new Promise((resolve, reject) =>
parseString(txt, (_, xml) => {
const strings = (xml.resources.string || []).map(e => e['$'].name);
const plurals = (xml.resources.plurals || []).map(e => e['$'].name);
const keys = strings.concat(plurals);
resolve({
name: name,
code:
keys
.map(k => 'val `' + k + '` = new I18nKey("' + (name == 'site' ? '' : xmlName(name) + ':') + k + '")')
.join('\n') + '\n',
});
})
);
2017-07-06 06:40:09 -06:00
});
}
2017-07-06 06:52:04 -06:00
Promise.all(dbs.map(keyListFrom)).then(objs => {
function dbCode(obj) {
2021-02-06 06:26:05 -07:00
return obj.name === 'site' ? obj.code : `object ${obj.name} {\n${obj.code}}\n`;
2017-07-06 06:52:04 -06:00
}
2017-07-06 06:40:09 -06:00
const code = `// Generated with bin/trans-dump.js
2017-05-27 03:28:28 -06:00
package lila.i18n
2017-05-27 15:31:31 -06:00
// format: OFF
2017-05-27 03:28:28 -06:00
object I18nKeys {
2017-07-06 06:52:04 -06:00
${objs.map(dbCode).join('\n')}
2017-07-16 03:58:59 -06:00
}
`;
2017-07-06 06:52:04 -06:00
return fs.writeFile('modules/i18n/src/main/I18nKeys.scala', code);
2017-05-27 03:28:28 -06:00
});