mirror of
https://github.com/facebook/docusaurus.git
synced 2025-05-09 23:27:28 +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
|
@ -11,16 +11,11 @@ const React = require('react');
|
|||
const fs = require('fs');
|
||||
const siteConfig = require(CWD + '/siteConfig.js');
|
||||
const translation = require('../../server/translation.js');
|
||||
const env = require('../../server/env.js');
|
||||
|
||||
const translate = require('../../server/translate.js').translate;
|
||||
const setLanguage = require('../../server/translate.js').setLanguage;
|
||||
|
||||
const ENABLE_TRANSLATION = fs.existsSync(CWD + '/languages.js');
|
||||
const ENABLE_VERSIONING = fs.existsSync(CWD + '/versions.json');
|
||||
let versions;
|
||||
if (ENABLE_VERSIONING) {
|
||||
versions = require(CWD + '/versions.json');
|
||||
}
|
||||
const readMetadata = require('../../server/readMetadata.js');
|
||||
readMetadata.generateMetadataDocs();
|
||||
const Metadata = require('../metadata.js');
|
||||
|
@ -28,26 +23,24 @@ const Metadata = require('../metadata.js');
|
|||
// language dropdown nav item for when translations are enabled
|
||||
class LanguageDropDown extends React.Component {
|
||||
render() {
|
||||
const enabledLanguages = [];
|
||||
if (!env.translation.enabled) {
|
||||
return null;
|
||||
}
|
||||
|
||||
let currentLanguage = 'English';
|
||||
setLanguage(this.props.language);
|
||||
let helpTranslateString = translate(
|
||||
'Help Translate|recruit community translators for your project'
|
||||
);
|
||||
// add all enabled languages to dropdown
|
||||
translation['languages'].map(lang => {
|
||||
if (lang.tag == this.props.language) {
|
||||
currentLanguage = lang.name;
|
||||
}
|
||||
if (lang.tag == this.props.language) {
|
||||
return;
|
||||
}
|
||||
enabledLanguages.push(
|
||||
const enabledLanguages = env.translation
|
||||
.enabledLanguages()
|
||||
.filter(lang => lang !== this.props.language)
|
||||
.map(lang => (
|
||||
<li key={lang.tag}>
|
||||
<a href={siteConfig.baseUrl + lang.tag}>{lang.name}</a>
|
||||
</li>
|
||||
);
|
||||
});
|
||||
));
|
||||
// if no languages are enabled besides English, return null
|
||||
if (enabledLanguages.length < 1) {
|
||||
return null;
|
||||
|
@ -126,17 +119,14 @@ class HeaderNav extends React.Component {
|
|||
);
|
||||
} else if (link.doc) {
|
||||
// set link to document with current page's language/version
|
||||
let id;
|
||||
if (!ENABLE_VERSIONING || this.props.version === 'next') {
|
||||
id = this.props.language + '-' + link.doc;
|
||||
} else {
|
||||
id =
|
||||
this.props.language +
|
||||
'-version-' +
|
||||
(this.props.version || versions[0]) +
|
||||
'-' +
|
||||
link.doc;
|
||||
}
|
||||
const langPart = env.translation.enabled ? this.props.language + '-' : '';
|
||||
const versionPart =
|
||||
env.translation.enabled && this.props.version !== 'next'
|
||||
? '-version-' +
|
||||
(this.props.version || env.versioning.latestVersion) +
|
||||
'-'
|
||||
: '';
|
||||
const id = langPart + versionPart + link.doc;
|
||||
if (!Metadata[id]) {
|
||||
if (id != link.doc) {
|
||||
throw new Error(
|
||||
|
@ -153,9 +143,13 @@ class HeaderNav extends React.Component {
|
|||
href = this.props.config.baseUrl + Metadata[id].permalink;
|
||||
} else if (link.page) {
|
||||
// set link to page with current page's language if appropriate
|
||||
const language = this.props.language || '';
|
||||
if (fs.existsSync(CWD + '/pages/en/' + link.page + '.js')) {
|
||||
href =
|
||||
siteConfig.baseUrl + this.props.language + '/' + link.page + '.html';
|
||||
siteConfig.baseUrl +
|
||||
(language ? language + '/' : '') +
|
||||
link.page +
|
||||
'.html';
|
||||
} else {
|
||||
href = siteConfig.baseUrl + link.page + '.html';
|
||||
}
|
||||
|
@ -180,7 +174,7 @@ class HeaderNav extends React.Component {
|
|||
render() {
|
||||
const versionsLink =
|
||||
this.props.baseUrl +
|
||||
(ENABLE_TRANSLATION
|
||||
(env.translation.enabled
|
||||
? this.props.language + '/versions.html'
|
||||
: 'versions.html');
|
||||
return (
|
||||
|
@ -198,9 +192,9 @@ class HeaderNav extends React.Component {
|
|||
<h2 className="headerTitle">{this.props.title}</h2>
|
||||
)}
|
||||
</a>
|
||||
{ENABLE_VERSIONING && (
|
||||
{env.versioning.enabled && (
|
||||
<a href={versionsLink}>
|
||||
<h3>{this.props.version || versions[0]}</h3>
|
||||
<h3>{this.props.version || env.versioning.latestVersion}</h3>
|
||||
</a>
|
||||
)}
|
||||
{this.renderResponsiveNav()}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue