mirror of
https://github.com/facebook/docusaurus.git
synced 2025-05-05 05:07:14 +02:00
Integrate handling of translation tag into static html building, add default description to translate tags
This commit is contained in:
parent
ed648074f2
commit
30a8ff329a
4 changed files with 61 additions and 14 deletions
|
@ -22,6 +22,7 @@
|
||||||
const glob = require('glob');
|
const glob = require('glob');
|
||||||
const Site = require('../core/Site.js');
|
const Site = require('../core/Site.js');
|
||||||
const siteConfig = require(CWD + '/siteConfig.js');
|
const siteConfig = require(CWD + '/siteConfig.js');
|
||||||
|
const translate = require('./translate.js');
|
||||||
let languages;
|
let languages;
|
||||||
if (fs.existsSync(CWD + '/languages.js')) {
|
if (fs.existsSync(CWD + '/languages.js')) {
|
||||||
languages = require(CWD + '/languages.js');
|
languages = require(CWD + '/languages.js');
|
||||||
|
@ -224,26 +225,47 @@
|
||||||
files = glob.sync(CWD + '/pages/**');
|
files = glob.sync(CWD + '/pages/**');
|
||||||
files.forEach(file => {
|
files.forEach(file => {
|
||||||
if (file.match(/\.js$/)) {
|
if (file.match(/\.js$/)) {
|
||||||
let parts = file.split('pages');
|
/* make temp file for sake of require paths */
|
||||||
let tempFile = __dirname +'/../pages' + parts[1];
|
const parts = file.split('pages');
|
||||||
|
let tempFile = __dirname + '/../pages' + parts[1];
|
||||||
tempFile = tempFile.replace(path.basename(file), 'temp' + path.basename(file));
|
tempFile = tempFile.replace(path.basename(file), 'temp' + path.basename(file));
|
||||||
mkdirp.sync(tempFile.replace(new RegExp('/[^/]*$'), ''));
|
mkdirp.sync(tempFile.replace(new RegExp('/[^/]*$'), ''));
|
||||||
fs.copySync(file, tempFile);
|
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 regexLang = /\/pages\/(.*)\//;
|
||||||
const match = regexLang.exec(file);
|
const match = regexLang.exec(file);
|
||||||
let langParts = match[1].split('/');
|
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(<Site language={language} config={siteConfig}><ReactComp language={language}/></Site>);
|
||||||
|
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++) {
|
for (let i = 0; i < langParts.length; i++) {
|
||||||
if (enabledLanguages.indexOf(langParts[i]) !== -1) {
|
if (enabledLanguages.indexOf(langParts[i]) !== -1) {
|
||||||
language = langParts[i];
|
language = langParts[i];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
let targetFile = __dirname + '/../../build' + '/' + siteConfig.projectName + '/' + parts[1];
|
translate.setLanguage(language);
|
||||||
targetFile = targetFile.replace(/\.js$/, '.html');
|
|
||||||
const ReactComp = require(tempFile);
|
|
||||||
const str = renderToStaticMarkup(<Site language={language} config={siteConfig}><ReactComp language={language}/></Site>);
|
const str = renderToStaticMarkup(<Site language={language} config={siteConfig}><ReactComp language={language}/></Site>);
|
||||||
writeFileAndCreateFolder(targetFile, str);
|
writeFileAndCreateFolder(targetFile, str);
|
||||||
|
}
|
||||||
|
|
||||||
fs.removeSync(tempFile);
|
fs.removeSync(tempFile);
|
||||||
}
|
}
|
||||||
|
|
|
@ -20,7 +20,7 @@ module.exports = function translatePlugin(babel) {
|
||||||
}
|
}
|
||||||
/* assume translate element only has one child which is the text */
|
/* assume translate element only has one child which is the text */
|
||||||
const text = path.node.children[0].value.trim();
|
const text = path.node.children[0].value.trim();
|
||||||
let description;
|
let description = "no description given";
|
||||||
const attributes = path.node.openingElement.attributes;
|
const attributes = path.node.openingElement.attributes;
|
||||||
for (let i = 0; i < attributes.length; i++) {
|
for (let i = 0; i < attributes.length; i++) {
|
||||||
if (attributes[i].name.name === "desc") {
|
if (attributes[i].name.name === "desc") {
|
||||||
|
|
25
lib/server/translate.js
Normal file
25
lib/server/translate.js
Normal file
|
@ -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
|
||||||
|
};
|
|
@ -74,7 +74,7 @@ function execute() {
|
||||||
path.node.openingElement.name.name === "translate"
|
path.node.openingElement.name.name === "translate"
|
||||||
) {
|
) {
|
||||||
const text = path.node.children[0].value.trim();
|
const text = path.node.children[0].value.trim();
|
||||||
let description;
|
let description = "no description given";
|
||||||
const attributes = path.node.openingElement.attributes;
|
const attributes = path.node.openingElement.attributes;
|
||||||
for (let i = 0; i < attributes.length; i++) {
|
for (let i = 0; i < attributes.length; i++) {
|
||||||
if (attributes[i].name.name === "desc") {
|
if (attributes[i].name.name === "desc") {
|
||||||
|
|
Loading…
Add table
Reference in a new issue