Fixing Issue 305 - broken links because of language (#316)

* without having having to worry about site design.

Let me know if double having is intentional

* distinguish case of no translation and en lang

* prettier recommends

* distinguish case of no translation and en lang

* prettier recommends

* merge with latest origin/master changes

* typo
This commit is contained in:
Richard Zhang 2017-12-19 09:20:32 -08:00 committed by Joel Marcey
parent f52e12df84
commit 7dc6c6c2da
7 changed files with 161 additions and 163 deletions

View file

@ -20,30 +20,15 @@ function execute() {
const glob = require('glob');
const chalk = require('chalk');
const Site = require('../core/Site.js');
const env = require('./env.js');
const siteConfig = require(CWD + '/siteConfig.js');
const translate = require('./translate.js');
const versionFallback = require('./versionFallback.js');
const feed = require('./feed.js');
const sitemap = require('./sitemap.js');
const join = path.join;
const ENABLE_TRANSLATION = fs.existsSync(join(CWD, 'languages.js'));
const ENABLE_VERSIONING = fs.existsSync(join(CWD, 'versions.json'));
let languages;
if (ENABLE_TRANSLATION) {
languages = require(CWD + '/languages.js');
} else {
languages = [
{
enabled: true,
name: 'English',
tag: 'en',
},
];
}
// create the folder path for a file if it does not exist, then write the file
function writeFileAndCreateFolder(file, content) {
mkdirp.sync(file.replace(new RegExp('/[^/]*$'), ''));
@ -87,10 +72,9 @@ function execute() {
console.log('generate.js triggered...');
// array of tags of enabled languages
const enabledLanguages = [];
languages.filter(lang => lang.enabled).map(lang => {
enabledLanguages.push(lang.tag);
});
const enabledLanguages = env.translation
.enabledLanguages()
.map(lang => lang.tag);
readMetadata.generateMetadataDocs();
const Metadata = require('../core/metadata.js');
@ -134,7 +118,7 @@ function execute() {
// determine what file to use according to its id
let file;
if (metadata.original_id) {
if (ENABLE_TRANSLATION && metadata.language !== 'en') {
if (env.translation.enabled && metadata.language !== 'en') {
file = join(CWD, 'translated_docs', metadata.language, metadata.source);
} else {
file = join(CWD, 'versioned_docs', metadata.source);
@ -161,12 +145,7 @@ function execute() {
rawContent = insertTableOfContents(rawContent);
}
let latestVersion;
if (ENABLE_VERSIONING) {
latestVersion = JSON.parse(
fs.readFileSync(join(CWD, 'versions.json'), 'utf8')
)[0];
}
let latestVersion = env.versioning.latestVersion;
// replace any links to markdown files to their website html links
Object.keys(mdToHtml).forEach(function(key, index) {
@ -207,7 +186,10 @@ function execute() {
writeFileAndCreateFolder(targetFile, str);
// generate english page redirects when languages are enabled
if (ENABLE_TRANSLATION && metadata.permalink.indexOf('docs/en') !== -1) {
if (
env.translation.enabled &&
metadata.permalink.indexOf('docs/en') !== -1
) {
const redirectComp = (
<Redirect
metadata={metadata}
@ -443,21 +425,25 @@ function execute() {
str
);
}
// write to base level
let language = '';
const str = renderToStaticMarkup(
<Site language={language} config={siteConfig}>
<ReactComp language={language} />
</Site>
);
writeFileAndCreateFolder(targetFile.replace('/en/', '/'), str);
} else {
// allow for rendering of other files not in pages/en folder
let language = 'en';
for (let i = 0; i < langParts.length; i++) {
if (enabledLanguages.indexOf(langParts[i]) !== -1) {
language = langParts[i];
}
}
let language = '';
translate.setLanguage(language);
const str = renderToStaticMarkup(
<Site language={language} config={siteConfig}>
<ReactComp language={language} />
</Site>
);
writeFileAndCreateFolder(targetFile, str);
writeFileAndCreateFolder(targetFile.replace('/en/', '/'), str);
}
fs.removeSync(tempFile);
} else if (!fs.lstatSync(file).isDirectory()) {
@ -469,15 +455,6 @@ function execute() {
}
});
// copy html files in 'en' to base level as well
files = glob.sync(join(buildDir, 'en', '**'));
files.forEach(file => {
let targetFile = file.replace(join(buildDir, 'en'), join(buildDir));
if (file.match(/\.html$/)) {
fs.copySync(file, targetFile);
}
});
// Generate CNAME file if a custom domain is specified in siteConfig
if (siteConfig.cname) {
let targetFile = join(buildDir, 'CNAME');