init
This commit is contained in:
94
platform/i18n/writeLocaleIndexFiles.js
Normal file
94
platform/i18n/writeLocaleIndexFiles.js
Normal file
@@ -0,0 +1,94 @@
|
||||
const path = require('path');
|
||||
const fs = require('fs');
|
||||
|
||||
const directoryPath = path.join(__dirname, 'src', 'locales');
|
||||
const { lstatSync, readdirSync } = require('fs');
|
||||
const { join } = require('path');
|
||||
|
||||
const isDirectory = source => lstatSync(source).isDirectory();
|
||||
const getDirectories = source =>
|
||||
readdirSync(source)
|
||||
.map(name => join(source, name))
|
||||
.filter(isDirectory);
|
||||
|
||||
const getJSONFiles = source =>
|
||||
readdirSync(source)
|
||||
.filter(name => name.includes('.json'))
|
||||
.map(name => join(source, name))
|
||||
.filter(a => !isDirectory(a));
|
||||
|
||||
const directories = getDirectories(directoryPath);
|
||||
|
||||
function writeFile(filepath, name, content) {
|
||||
fs.writeFile(path.join(filepath, name), content, err => {
|
||||
if (err) {
|
||||
throw err;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// For each language directory
|
||||
const languages = [];
|
||||
directories.forEach(directory => {
|
||||
const language = path.basename(directory);
|
||||
languages.push(language);
|
||||
const name = 'index.js';
|
||||
|
||||
// Create one file (index.js) inside the language folder
|
||||
// For each namespace
|
||||
let content = '';
|
||||
|
||||
const files = getJSONFiles(directory);
|
||||
const namespaces = files.map(file => path.basename(file, '.json'));
|
||||
|
||||
files.forEach(file => {
|
||||
const filename = path.basename(file);
|
||||
const namespace = path.basename(file, '.json');
|
||||
|
||||
content += `import ${namespace} from './${filename}';\n`;
|
||||
});
|
||||
|
||||
content += '\n';
|
||||
let exportLines = `export default { \n '${language}': {\n`;
|
||||
namespaces.forEach(namespace => {
|
||||
exportLines += ` ${namespace},\n`;
|
||||
});
|
||||
exportLines += ' }\n};\n';
|
||||
|
||||
content += exportLines;
|
||||
|
||||
// If the file {namespace}.json is present,
|
||||
// create a file to import the namespace and
|
||||
// export all of the namespaces for the language
|
||||
// e.g.
|
||||
// import namespace from './{namespace}.json';
|
||||
// export { namespace1, namespace2, ... }
|
||||
writeFile(directory, name, content);
|
||||
});
|
||||
|
||||
let fileContent = '';
|
||||
const languageVariables = languages.map(language => {
|
||||
const languageVariable = language.replace('-', '_');
|
||||
|
||||
fileContent += `import ${languageVariable} from './${language}/';\n`;
|
||||
|
||||
return languageVariable;
|
||||
});
|
||||
|
||||
fileContent += '\n';
|
||||
|
||||
fileContent += 'export default {\n';
|
||||
languageVariables.forEach(language => {
|
||||
fileContent += ` ...${language},\n`;
|
||||
});
|
||||
|
||||
fileContent += '};\n';
|
||||
|
||||
// Create one file (index.js) inside the locales folder
|
||||
// which exports each of the languages
|
||||
// e.g.
|
||||
// import language1 from './{language1}/'
|
||||
// import language2 from './{language2}/'
|
||||
//
|
||||
// export { language1, language2 }
|
||||
writeFile(directoryPath, 'index.js', fileContent);
|
||||
Reference in New Issue
Block a user