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") {