You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
54 lines
1.7 KiB
JavaScript
54 lines
1.7 KiB
JavaScript
import fs from 'fs-extra';
|
|
import path from 'path';
|
|
import xliffToJSON from 'xliff-to-json';
|
|
|
|
async function recFindByExt(base,ext,files,result)
|
|
{
|
|
files = files || (await fs.readdir(base))
|
|
result = result || []
|
|
|
|
for (const file of files) {
|
|
var newbase = path.join(base,file)
|
|
if ( (await fs.stat(newbase)).isDirectory() )
|
|
{
|
|
result = await recFindByExt(newbase,ext,await fs.readdir(newbase),result)
|
|
}
|
|
else
|
|
{
|
|
if ( file.substr(-1*(ext.length+1)) == '.' + ext )
|
|
{
|
|
result.push(newbase)
|
|
}
|
|
}
|
|
}
|
|
return result
|
|
}
|
|
|
|
// outputs array of supported locales
|
|
async function createLocalizationJSON() {
|
|
xliffToJSON.convert('src/assets/i18n');
|
|
const files = await recFindByExt(path.join('src', 'assets', 'i18n'), 'json');
|
|
const locales = [];
|
|
|
|
for (let i = 0; i < files.length; i++) {
|
|
const file = path.basename(files[i]);
|
|
const file_parts = file.split('.');
|
|
if (file_parts.length !== 3 || file_parts[1] === 'en') continue;
|
|
try {
|
|
const locale_json = fs.readJSONSync(files[i]);
|
|
const locale_json_keys = Object.keys(locale_json);
|
|
let has_defined_keys = false;
|
|
for (let i = 0; i < locale_json_keys.length; i++) {
|
|
if (locale_json[locale_json_keys[i]] !== '') has_defined_keys = true;
|
|
}
|
|
if (has_defined_keys) locales.push(file_parts[1]);
|
|
} catch (err) {
|
|
console.error(err);
|
|
}
|
|
}
|
|
|
|
fs.unlinkSync('src/assets/i18n/messages.en.json');
|
|
fs.writeJSONSync('src/assets/i18n/supported_locales.json', {supported_locales: locales});
|
|
}
|
|
|
|
createLocalizationJSON(); |