mirror of
https://github.com/facebook/docusaurus.git
synced 2025-05-02 03:37:48 +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 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(<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++) {
|
||||
if (enabledLanguages.indexOf(langParts[i]) !== -1) {
|
||||
language = langParts[i];
|
||||
}
|
||||
}
|
||||
translate.setLanguage(language);
|
||||
const str = renderToStaticMarkup(<Site language={language} config={siteConfig}><ReactComp language={language}/></Site>);
|
||||
writeFileAndCreateFolder(targetFile, str);
|
||||
}
|
||||
let targetFile = __dirname + '/../../build' + '/' + siteConfig.projectName + '/' + parts[1];
|
||||
targetFile = targetFile.replace(/\.js$/, '.html');
|
||||
const ReactComp = require(tempFile);
|
||||
const str = renderToStaticMarkup(<Site language={language} config={siteConfig}><ReactComp language={language}/></Site>);
|
||||
writeFileAndCreateFolder(targetFile, str);
|
||||
|
||||
fs.removeSync(tempFile);
|
||||
}
|
||||
|
|
|
@ -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") {
|
||||
|
|
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"
|
||||
) {
|
||||
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") {
|
||||
|
|
Loading…
Add table
Reference in a new issue