diff --git a/lib/server/generate.js b/lib/server/generate.js
index 95d0cb061e..9eed3661fc 100644
--- a/lib/server/generate.js
+++ b/lib/server/generate.js
@@ -22,6 +22,7 @@
const glob = require('glob');
const Site = require('../core/Site.js');
const siteConfig = require(CWD + '/siteConfig.js');
+ const translate = require('./translate.js');
let languages;
if (fs.existsSync(CWD + '/languages.js')) {
languages = require(CWD + '/languages.js');
@@ -224,26 +225,47 @@
files = glob.sync(CWD + '/pages/**');
files.forEach(file => {
if (file.match(/\.js$/)) {
- let parts = file.split('pages');
- let tempFile = __dirname +'/../pages' + parts[1];
+ /* make temp file for sake of require paths */
+ const parts = file.split('pages');
+ let tempFile = __dirname + '/../pages' + parts[1];
tempFile = tempFile.replace(path.basename(file), 'temp' + path.basename(file));
mkdirp.sync(tempFile.replace(new RegExp('/[^/]*$'), ''));
fs.copySync(file, tempFile);
- let language = 'en';
+ const ReactComp = require(tempFile);
+
+ let targetFile = __dirname + '/../../build/' + siteConfig.projectName + '/' + parts[1];
+ targetFile = targetFile.replace(/\.js$/, '.html');
+
const regexLang = /\/pages\/(.*)\//;
const match = regexLang.exec(file);
- let langParts = match[1].split('/');
- for (let i = 0; i < langParts.length; i++) {
- if (enabledLanguages.indexOf(langParts[i]) !== -1) {
- language = langParts[i];
+ const langParts = match[1].split('/');
+ if (langParts.indexOf('en') !== -1) {
+ /* copy and compile a page for each enabled language from the English file */
+ for (let i = 0; i < enabledLanguages.length; i++) {
+ let language = enabledLanguages[i];
+ /* skip conversion from english file if a file exists for this language */
+ if (language !== 'en' && fs.existsSync(file.replace('/en/', '/' + language + '/'))) {
+ continue;
+ }
+ translate.setLanguage(language);
+ const str = renderToStaticMarkup();
+ writeFileAndCreateFolder(targetFile.replace('/en/', '/' + language + '/'), str);
}
+
+ }
+ /* allow for rendering of other files not in pages/en folder */
+ else {
+ let language = 'en';
+ for (let i = 0; i < langParts.length; i++) {
+ if (enabledLanguages.indexOf(langParts[i]) !== -1) {
+ language = langParts[i];
+ }
+ }
+ translate.setLanguage(language);
+ const str = renderToStaticMarkup();
+ writeFileAndCreateFolder(targetFile, str);
}
- let targetFile = __dirname + '/../../build' + '/' + siteConfig.projectName + '/' + parts[1];
- targetFile = targetFile.replace(/\.js$/, '.html');
- const ReactComp = require(tempFile);
- const str = renderToStaticMarkup();
- writeFileAndCreateFolder(targetFile, str);
fs.removeSync(tempFile);
}
diff --git a/lib/server/translate-plugin.js b/lib/server/translate-plugin.js
index 845d079dbc..cfadac8ca1 100644
--- a/lib/server/translate-plugin.js
+++ b/lib/server/translate-plugin.js
@@ -20,7 +20,7 @@ module.exports = function translatePlugin(babel) {
}
/* assume translate element only has one child which is the text */
const text = path.node.children[0].value.trim();
- let description;
+ let description = "no description given";
const attributes = path.node.openingElement.attributes;
for (let i = 0; i < attributes.length; i++) {
if (attributes[i].name.name === "desc") {
diff --git a/lib/server/translate.js b/lib/server/translate.js
new file mode 100644
index 0000000000..44dfed7602
--- /dev/null
+++ b/lib/server/translate.js
@@ -0,0 +1,25 @@
+/**
+ * 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 siteConfig = require(CWD + "/siteConfig.js");
+
+let language = "en";
+
+function setLanguage(lang) {
+ language = lang;
+}
+
+function translate(str) {
+ return siteConfig[language]["pages-strings"][str];
+}
+
+module.exports = {
+ setLanguage: setLanguage,
+ translate: translate
+};
diff --git a/lib/write-translations.js b/lib/write-translations.js
index 463b916b55..7dff6ff650 100644
--- a/lib/write-translations.js
+++ b/lib/write-translations.js
@@ -74,7 +74,7 @@ function execute() {
path.node.openingElement.name.name === "translate"
) {
const text = path.node.children[0].value.trim();
- let description;
+ let description = "no description given";
const attributes = path.node.openingElement.attributes;
for (let i = 0; i < attributes.length; i++) {
if (attributes[i].name.name === "desc") {