mirror of
https://github.com/facebook/docusaurus.git
synced 2025-05-10 23:57:22 +02:00
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:
parent
f52e12df84
commit
7dc6c6c2da
7 changed files with 161 additions and 163 deletions
|
@ -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');
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue