diff --git a/examples/siteConfig.js b/examples/siteConfig.js index 606a023219..f5dcc7f1cf 100644 --- a/examples/siteConfig.js +++ b/examples/siteConfig.js @@ -76,28 +76,4 @@ const siteConfig = { /* gaTrackingId: "" */ }; -/* DO NOT EDIT BELOW THIS LINE */ - -const fs = require("fs"); - -let languages; -if (fs.existsSync("./languages.js")) { - languages = require("./languages.js"); -} else { - languages = [ - { - enabled: true, - name: "English", - tag: "en" - } - ]; -} - -const enabledLanguages = languages.filter(lang => lang.enabled); - -siteConfig["languages"] = enabledLanguages; - -/* INJECT LOCALIZED FILES BEGIN */ -/* INJECT LOCALIZED FILES END */ - module.exports = siteConfig; diff --git a/lib/core/DocsLayout.js b/lib/core/DocsLayout.js index 6803e836de..f6e62e445c 100644 --- a/lib/core/DocsLayout.js +++ b/lib/core/DocsLayout.js @@ -12,12 +12,13 @@ const Container = require("./Container.js"); const Doc = require("./Doc.js"); const DocsSidebar = require("./DocsSidebar.js"); const Site = require("./Site.js"); +const translation = require("../server/translation.js"); class DocsLayout extends React.Component { render() { const metadata = this.props.metadata; const content = this.props.children; - const i18n = this.props.config[this.props.metadata.language]; + const i18n = translation[this.props.metadata.language]; return ( ←{" "} {i18n - ? this.props.config[this.props.metadata.language][ + ? translation[this.props.metadata.language][ "localized-strings" ]["previous"] || "Previous" : "Previous"} @@ -69,7 +70,7 @@ class DocsLayout extends React.Component { href={metadata.next_id + ".html#content"} > {i18n - ? this.props.config[this.props.metadata.language][ + ? translation[this.props.metadata.language][ "localized-strings" ]["next"] || "Next" : "Next"}{" "} diff --git a/lib/core/Site.js b/lib/core/Site.js index 19338178e5..6e415e838d 100644 --- a/lib/core/Site.js +++ b/lib/core/Site.js @@ -11,6 +11,7 @@ const React = require("react"); const HeaderNav = require("./nav/HeaderNav.js"); const Head = require("./Head.js"); const Footer = require(process.cwd() + "/core/Footer.js"); +const translation = require("../server/translation.js"); class Site extends React.Component { /* @@ -48,8 +49,8 @@ class Site extends React.Component { */ render() { - const tagline = this.props.config[this.props.language] - ? this.props.config[this.props.language]["localized-strings"].tagline + const tagline = translation[this.props.language] + ? translation[this.props.language]["localized-strings"].tagline : this.props.config.tagline; const title = this.props.title ? this.props.title + " · " + this.props.config.title diff --git a/lib/core/nav/HeaderNav.js b/lib/core/nav/HeaderNav.js index 7b891cf2af..ba86bbf263 100644 --- a/lib/core/nav/HeaderNav.js +++ b/lib/core/nav/HeaderNav.js @@ -10,13 +10,14 @@ const React = require("react"); const siteConfig = require(process.cwd() + "/siteConfig.js"); +const translation = require("../../server/translation.js"); class LanguageDropDown extends React.Component { render() { const enabledLanguages = []; let currentLanguage = "English"; - siteConfig["languages"].map(lang => { + translation["languages"].map(lang => { if (lang.tag == this.props.language) { currentLanguage = lang.name; } @@ -97,8 +98,8 @@ class HeaderNav extends React.Component { href={linkWithLang} className={link.section === this.props.section ? "active" : ""} > - {siteConfig[this.props.language] - ? siteConfig[this.props.language]["localized-strings"][link.text] + {translation[this.props.language] + ? translation[this.props.language]["localized-strings"][link.text] : link.text} diff --git a/lib/core/nav/SideNav.js b/lib/core/nav/SideNav.js index 5a6d939ab3..2ea8576642 100644 --- a/lib/core/nav/SideNav.js +++ b/lib/core/nav/SideNav.js @@ -11,6 +11,7 @@ const React = require("react"); const classNames = require("classnames"); const siteConfig = require(process.cwd() + "/siteConfig.js"); +const translation = require("../../server/translation.js"); class SideNav extends React.Component { render() { @@ -61,15 +62,15 @@ class SideNav extends React.Component { ); } getLocalizedCategoryString(category) { - let categoryString = siteConfig[this.props.language] - ? siteConfig[this.props.language]["localized-strings"][category] || + let categoryString = translation[this.props.language] + ? translation[this.props.language]["localized-strings"][category] || category : category; return categoryString; } getLocalizedString(metadata) { - let localizedString = siteConfig[this.props.language] - ? siteConfig[this.props.language]["localized-strings"][ + let localizedString = translation[this.props.language] + ? translation[this.props.language]["localized-strings"][ metadata.localized_id ] || metadata.title : metadata.title; diff --git a/lib/server/generate.js b/lib/server/generate.js index 1ee2341b78..426bf7f323 100644 --- a/lib/server/generate.js +++ b/lib/server/generate.js @@ -8,9 +8,6 @@ */ function execute() { - const translation = require("./translation.js"); - translation(); - const CWD = process.cwd(); const fs = require("fs-extra"); const readMetadata = require("./readMetadata.js"); diff --git a/lib/server/server.js b/lib/server/server.js index acf67a5449..ebc1d133fe 100644 --- a/lib/server/server.js +++ b/lib/server/server.js @@ -9,7 +9,6 @@ function execute(port) { const translation = require("./translation.js"); - translation(); const CWD = process.cwd(); const express = require("express"); const React = require("react"); @@ -282,8 +281,8 @@ function execute(port) { const match = regexLang.exec(req.path); const parts = match[1].split("/"); const enabledLangTags = []; - for (let i = 0; i < siteConfig["languages"].length; i++) { - enabledLangTags.push(siteConfig["languages"][i].tag); + for (let i = 0; i < translation["languages"].length; i++) { + enabledLangTags.push(translation["languages"][i].tag); } for (let i = 0; i < parts.length; i++) { if (enabledLangTags.indexOf(parts[i]) !== -1) { diff --git a/lib/server/translate.js b/lib/server/translate.js index a9927163c3..1ec08f3581 100644 --- a/lib/server/translate.js +++ b/lib/server/translate.js @@ -7,7 +7,7 @@ * of patent rights can be found in the PATENTS file in the same directory. */ -const siteConfig = require(process.cwd() + "/siteConfig.js"); +const translation = require("./translation.js"); let language = "en"; @@ -16,7 +16,7 @@ function setLanguage(lang) { } function translate(str) { - return siteConfig[language]["pages-strings"][str]; + return translation[language]["pages-strings"][str]; } module.exports = { diff --git a/lib/server/translation.js b/lib/server/translation.js index 68cf76324b..1ce2057eb1 100644 --- a/lib/server/translation.js +++ b/lib/server/translation.js @@ -1,71 +1,35 @@ -/** - * Copyright (c) 2017-present, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - */ - const CWD = process.cwd(); -const fs = require("fs-extra"); +const fs = require("fs"); const glob = require("glob"); const path = require("path"); -const mkdirp = require("mkdirp"); -console.log("translation.js triggered..."); - -function writeFileAndCreateFolder(file, content) { - mkdirp.sync(file.replace(new RegExp("/[^/]*$"), "")); - fs.writeFileSync(file, content); -} - -function execute() { - if (fs.existsSync(CWD + "/languages.js")) { - injectContent(); - } else { - console.log("No languages besides English enabled"); - } -} - -function injectContent() { - const I18N_JSON_DIR = CWD + "/i18n/"; - - const files = glob.sync(I18N_JSON_DIR + "**"); - const languages = []; - const langRegex = /\/i18n\/(.*)\.json$/; - - files.forEach(file => { - const extension = path.extname(file); - if (extension == ".json") { - const match = langRegex.exec(file); - const language = match[1]; - languages.push(language); +let languages; +if (fs.existsSync(CWD + "/languages.js")) { + languages = require(CWD + "/languages.js"); +} else { + languages = [ + { + enabled: true, + name: "English", + tag: "en" } - }); - - let injectedContent = ""; - languages.forEach(language => { - injectedContent += - "\nsiteConfig['" + - language + - "'] = require('./i18n/" + - language + - ".json');"; - }); - - let siteConfigFile = fs.readFileSync(CWD + "/siteConfig.js", "utf8"); - const injectStart = "/* INJECT LOCALIZED FILES BEGIN */"; - const injectEnd = "/* INJECT LOCALIZED FILES END */"; - siteConfigFile = - siteConfigFile.slice( - 0, - siteConfigFile.indexOf(injectStart) + injectStart.length - ) + - injectedContent + - "\n" + - siteConfigFile.slice(siteConfigFile.indexOf(injectEnd)); - fs.writeFileSync(CWD + "/siteConfig.js", siteConfigFile); + ]; } -module.exports = execute; +const enabledLanguages = languages.filter(lang => lang.enabled); + +const translation = { languages: enabledLanguages }; + +const files = glob.sync(CWD + "/i18n/**"); +const langRegex = /\/i18n\/(.*)\.json$/; + +files.forEach(file => { + const extension = path.extname(file); + if (extension === ".json") { + const match = langRegex.exec(file); + const language = match[1]; + translation[language] = require(file); + } +}); + +module.exports = translation;