Integrate handling of translation tag into static html building, add default description to translate tags

This commit is contained in:
Frank Li 2017-07-10 14:08:00 -07:00
parent ed648074f2
commit 30a8ff329a
4 changed files with 61 additions and 14 deletions

View file

@ -22,6 +22,7 @@
const glob = require('glob');
const Site = require('../core/Site.js');
const siteConfig = require(CWD + '/siteConfig.js');
const translate = require('./translate.js');
let languages;
if (fs.existsSync(CWD + '/languages.js')) {
languages = require(CWD + '/languages.js');
@ -224,26 +225,47 @@
files = glob.sync(CWD + '/pages/**');
files.forEach(file => {
if (file.match(/\.js$/)) {
let parts = file.split('pages');
let tempFile = __dirname +'/../pages' + parts[1];
/* make temp file for sake of require paths */
const parts = file.split('pages');
let tempFile = __dirname + '/../pages' + parts[1];
tempFile = tempFile.replace(path.basename(file), 'temp' + path.basename(file));
mkdirp.sync(tempFile.replace(new RegExp('/[^/]*$'), ''));
fs.copySync(file, tempFile);
let language = 'en';
const ReactComp = require(tempFile);
let targetFile = __dirname + '/../../build/' + siteConfig.projectName + '/' + parts[1];
targetFile = targetFile.replace(/\.js$/, '.html');
const regexLang = /\/pages\/(.*)\//;
const match = regexLang.exec(file);
let langParts = match[1].split('/');
for (let i = 0; i < langParts.length; i++) {
if (enabledLanguages.indexOf(langParts[i]) !== -1) {
language = langParts[i];
const langParts = match[1].split('/');
if (langParts.indexOf('en') !== -1) {
/* copy and compile a page for each enabled language from the English file */
for (let i = 0; i < enabledLanguages.length; i++) {
let language = enabledLanguages[i];
/* skip conversion from english file if a file exists for this language */
if (language !== 'en' && fs.existsSync(file.replace('/en/', '/' + language + '/'))) {
continue;
}
translate.setLanguage(language);
const str = renderToStaticMarkup(<Site language={language} config={siteConfig}><ReactComp language={language}/></Site>);
writeFileAndCreateFolder(targetFile.replace('/en/', '/' + language + '/'), str);
}
}
/* allow for rendering of other files not in pages/en folder */
else {
let language = 'en';
for (let i = 0; i < langParts.length; i++) {
if (enabledLanguages.indexOf(langParts[i]) !== -1) {
language = langParts[i];
}
}
translate.setLanguage(language);
const str = renderToStaticMarkup(<Site language={language} config={siteConfig}><ReactComp language={language}/></Site>);
writeFileAndCreateFolder(targetFile, str);
}
let targetFile = __dirname + '/../../build' + '/' + siteConfig.projectName + '/' + parts[1];
targetFile = targetFile.replace(/\.js$/, '.html');
const ReactComp = require(tempFile);
const str = renderToStaticMarkup(<Site language={language} config={siteConfig}><ReactComp language={language}/></Site>);
writeFileAndCreateFolder(targetFile, str);
fs.removeSync(tempFile);
}