Issue 305 broken link because of language fixes (#322)

* 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

* link with language fixes

* do not show language dropdown if only one enabled

* check translation outside of LanguageDropDown.render
This commit is contained in:
Richard Zhang 2017-12-19 17:44:43 -08:00 committed by Joel Marcey
parent 4a3da1f30a
commit a5e963dba1
8 changed files with 177 additions and 175 deletions

View file

@ -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,20 @@ const Metadata = require('../metadata.js');
// language dropdown nav item for when translations are enabled
class LanguageDropDown extends React.Component {
render() {
const enabledLanguages = [];
let currentLanguage = 'English';
setLanguage(this.props.language);
setLanguage(this.props.language || 'en');
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;
@ -116,27 +105,32 @@ class HeaderNav extends React.Component {
</li>
);
} else if (link.languages) {
return (
// return language dropdown
<LanguageDropDown
baseUrl={this.props.baseUrl}
language={this.props.language}
key="languagedropdown"
/>
);
if (
env.translation.enabled &&
env.translation.enabledLanguages().length > 1
) {
return (
<LanguageDropDown
baseUrl={this.props.baseUrl}
language={this.props.language}
key="languagedropdown"
/>
);
} else {
return null;
}
} 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 || 'en') + '-'
: '';
const versionPart =
env.versioning.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 +147,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 +178,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 +196,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()}