mirror of
https://github.com/facebook/docusaurus.git
synced 2025-06-05 20:32:42 +02:00
wip: trans & versioning
This commit is contained in:
parent
d00864d222
commit
988232edd4
14 changed files with 350 additions and 10 deletions
|
@ -20,6 +20,7 @@ module.exports = function loadConfig(siteDir, deleteCache = true) {
|
||||||
];
|
];
|
||||||
const optionalFields = [
|
const optionalFields = [
|
||||||
'customDocsPath',
|
'customDocsPath',
|
||||||
|
'defaultLanguage',
|
||||||
'highlight',
|
'highlight',
|
||||||
'markdownPlugins',
|
'markdownPlugins',
|
||||||
'configureWebpack',
|
'configureWebpack',
|
||||||
|
|
|
@ -5,14 +5,34 @@ module.exports = function loadEnv({siteDir, siteConfig}) {
|
||||||
// Translation
|
// Translation
|
||||||
const translation = {
|
const translation = {
|
||||||
enabled: false,
|
enabled: false,
|
||||||
enabledLanguages: []
|
enabledLanguages: [],
|
||||||
|
defaultLanguage: {}
|
||||||
};
|
};
|
||||||
|
|
||||||
const languagesFile = path.join(siteDir, 'languages.js');
|
const languagesFile = path.join(siteDir, 'languages.js');
|
||||||
if (fs.existsSync(languagesFile)) {
|
if (fs.existsSync(languagesFile)) {
|
||||||
translation.enabled = true;
|
|
||||||
const languages = require(languagesFile);
|
const languages = require(languagesFile);
|
||||||
translation.enabledLanguages = languages.filter(lang => lang.enabled);
|
|
||||||
|
/* Enabled languages */
|
||||||
|
const enabledLanguages = languages.filter(lang => lang.enabled);
|
||||||
|
if (!enabledLanguages || enabledLanguages.length === 0) {
|
||||||
|
throw new Error(`Please at least enable one language in 'languages.js'`);
|
||||||
|
}
|
||||||
|
translation.enabledLanguages = enabledLanguages;
|
||||||
|
|
||||||
|
/* Default Language */
|
||||||
|
const {defaultLanguage: defaultLanguageTag} = siteConfig;
|
||||||
|
const defaultLanguage = enabledLanguages.find(
|
||||||
|
lang => lang.tag === defaultLanguageTag
|
||||||
|
);
|
||||||
|
if (!defaultLanguage) {
|
||||||
|
throw new Error(
|
||||||
|
`Please set a default language in 'siteConfig.js' which is enabled in 'languages.js'`
|
||||||
|
);
|
||||||
|
}
|
||||||
|
translation.defaultLanguage = defaultLanguage;
|
||||||
|
|
||||||
|
translation.enabled = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Versioning
|
// Versioning
|
||||||
|
|
178
test/load/__fixtures__/bad-site/languages.js
Normal file
178
test/load/__fixtures__/bad-site/languages.js
Normal file
|
@ -0,0 +1,178 @@
|
||||||
|
const languages = [
|
||||||
|
{
|
||||||
|
enabled: false,
|
||||||
|
name: 'English',
|
||||||
|
tag: 'en',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
enabled: false,
|
||||||
|
name: '日本語',
|
||||||
|
tag: 'ja',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
enabled: false,
|
||||||
|
name: 'العربية',
|
||||||
|
tag: 'ar',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
enabled: false,
|
||||||
|
name: 'Bosanski',
|
||||||
|
tag: 'bs-BA',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
enabled: false,
|
||||||
|
name: 'Català',
|
||||||
|
tag: 'ca',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
enabled: false,
|
||||||
|
name: 'Čeština',
|
||||||
|
tag: 'cs',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
enabled: false,
|
||||||
|
name: 'Dansk',
|
||||||
|
tag: 'da',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
enabled: false,
|
||||||
|
name: 'Deutsch',
|
||||||
|
tag: 'de',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
enabled: false,
|
||||||
|
name: 'Ελληνικά',
|
||||||
|
tag: 'el',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
enabled: false,
|
||||||
|
name: 'Español',
|
||||||
|
tag: 'es-ES',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
enabled: false,
|
||||||
|
name: 'فارسی',
|
||||||
|
tag: 'fa-IR',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
enabled: false,
|
||||||
|
name: 'Suomi',
|
||||||
|
tag: 'fi',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
enabled: false,
|
||||||
|
name: 'Français',
|
||||||
|
tag: 'fr',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
enabled: false,
|
||||||
|
name: 'עִברִית',
|
||||||
|
tag: 'he',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
enabled: false,
|
||||||
|
name: 'Magyar',
|
||||||
|
tag: 'hu',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
enabled: false,
|
||||||
|
name: 'Bahasa Indonesia',
|
||||||
|
tag: 'id-ID',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
enabled: false,
|
||||||
|
name: 'Italiano',
|
||||||
|
tag: 'it',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
enabled: false,
|
||||||
|
name: 'Afrikaans',
|
||||||
|
tag: 'af',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
enabled: false,
|
||||||
|
name: '한국어',
|
||||||
|
tag: 'ko',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
enabled: false,
|
||||||
|
name: 'मराठी',
|
||||||
|
tag: 'mr-IN',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
enabled: false,
|
||||||
|
name: 'Nederlands',
|
||||||
|
tag: 'nl',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
enabled: false,
|
||||||
|
name: 'Norsk',
|
||||||
|
tag: 'no-NO',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
enabled: false,
|
||||||
|
name: 'Polskie',
|
||||||
|
tag: 'pl',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
enabled: false,
|
||||||
|
name: 'Português',
|
||||||
|
tag: 'pt-PT',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
enabled: false,
|
||||||
|
name: 'Português (Brasil)',
|
||||||
|
tag: 'pt-BR',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
enabled: false,
|
||||||
|
name: 'Română',
|
||||||
|
tag: 'ro',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
enabled: false,
|
||||||
|
name: 'Русский',
|
||||||
|
tag: 'ru',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
enabled: false,
|
||||||
|
name: 'Slovenský',
|
||||||
|
tag: 'sk-SK',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
enabled: false,
|
||||||
|
name: 'Српски језик (Ћирилица)',
|
||||||
|
tag: 'sr',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
enabled: false,
|
||||||
|
name: 'Svenska',
|
||||||
|
tag: 'sv-SE',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
enabled: false,
|
||||||
|
name: 'Türkçe',
|
||||||
|
tag: 'tr',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
enabled: false,
|
||||||
|
name: 'Українська',
|
||||||
|
tag: 'uk',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
enabled: false,
|
||||||
|
name: 'Tiếng Việt',
|
||||||
|
tag: 'vi',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
enabled: false,
|
||||||
|
name: '简体中文',
|
||||||
|
tag: 'zh-CN',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
enabled: false,
|
||||||
|
name: '繁體中文',
|
||||||
|
tag: 'zh-TW',
|
||||||
|
},
|
||||||
|
];
|
||||||
|
module.exports = languages;
|
10
test/load/__fixtures__/simple-site/sidebars.json
Normal file
10
test/load/__fixtures__/simple-site/sidebars.json
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
{
|
||||||
|
"docs": {
|
||||||
|
"Getting Started": [
|
||||||
|
"installation"
|
||||||
|
],
|
||||||
|
"Guides": [
|
||||||
|
"blog"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
|
@ -3,5 +3,6 @@ module.exports = {
|
||||||
tagline: 'Hello World',
|
tagline: 'Hello World',
|
||||||
organizationName: 'endiliey',
|
organizationName: 'endiliey',
|
||||||
projectName: 'hello',
|
projectName: 'hello',
|
||||||
baseUrl: '/'
|
baseUrl: '/',
|
||||||
|
defaultLanguage: 'en'
|
||||||
};
|
};
|
||||||
|
|
10
test/load/__fixtures__/transversioned-site/sidebars.json
Normal file
10
test/load/__fixtures__/transversioned-site/sidebars.json
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
{
|
||||||
|
"docs": {
|
||||||
|
"Getting Started": [
|
||||||
|
"installation"
|
||||||
|
],
|
||||||
|
"Guides": [
|
||||||
|
"blog"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
|
@ -3,5 +3,6 @@ module.exports = {
|
||||||
tagline: 'Hello World',
|
tagline: 'Hello World',
|
||||||
organizationName: 'endiliey',
|
organizationName: 'endiliey',
|
||||||
projectName: 'hello',
|
projectName: 'hello',
|
||||||
baseUrl: '/'
|
baseUrl: '/',
|
||||||
|
defaultLanguage: 'en'
|
||||||
};
|
};
|
||||||
|
|
|
@ -0,0 +1,10 @@
|
||||||
|
{
|
||||||
|
"version-1.0.0-docs": {
|
||||||
|
"Getting Started": [
|
||||||
|
"version-1.0.0-installation"
|
||||||
|
],
|
||||||
|
"Guides": [
|
||||||
|
"version-1.0.0-blog"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,10 @@
|
||||||
|
{
|
||||||
|
"version-1.0.1-docs": {
|
||||||
|
"Getting Started": [
|
||||||
|
"version-1.0.1-installation"
|
||||||
|
],
|
||||||
|
"Guides": [
|
||||||
|
"version-1.0.1-blog"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
10
test/load/__fixtures__/versioned-site/sidebars.json
Normal file
10
test/load/__fixtures__/versioned-site/sidebars.json
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
{
|
||||||
|
"docs": {
|
||||||
|
"Getting Started": [
|
||||||
|
"installation"
|
||||||
|
],
|
||||||
|
"Guides": [
|
||||||
|
"blog"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,10 @@
|
||||||
|
{
|
||||||
|
"version-1.0.0-docs": {
|
||||||
|
"Getting Started": [
|
||||||
|
"version-1.0.0-installation"
|
||||||
|
],
|
||||||
|
"Guides": [
|
||||||
|
"version-1.0.0-blog"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,10 @@
|
||||||
|
{
|
||||||
|
"version-1.0.1-docs": {
|
||||||
|
"Getting Started": [
|
||||||
|
"version-1.0.1-installation"
|
||||||
|
],
|
||||||
|
"Guides": [
|
||||||
|
"version-1.0.1-blog"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
|
@ -3,6 +3,7 @@
|
||||||
exports[`loadEnv website with both versioning & translation disabled 1`] = `
|
exports[`loadEnv website with both versioning & translation disabled 1`] = `
|
||||||
Object {
|
Object {
|
||||||
"translation": Object {
|
"translation": Object {
|
||||||
|
"defaultLanguage": Object {},
|
||||||
"enabled": false,
|
"enabled": false,
|
||||||
"enabledLanguages": Array [],
|
"enabledLanguages": Array [],
|
||||||
},
|
},
|
||||||
|
@ -18,6 +19,11 @@ Object {
|
||||||
exports[`loadEnv website with translation enabled 1`] = `
|
exports[`loadEnv website with translation enabled 1`] = `
|
||||||
Object {
|
Object {
|
||||||
"translation": Object {
|
"translation": Object {
|
||||||
|
"defaultLanguage": Object {
|
||||||
|
"enabled": true,
|
||||||
|
"name": "English",
|
||||||
|
"tag": "en",
|
||||||
|
},
|
||||||
"enabled": true,
|
"enabled": true,
|
||||||
"enabledLanguages": Array [
|
"enabledLanguages": Array [
|
||||||
Object {
|
Object {
|
||||||
|
@ -59,6 +65,11 @@ Object {
|
||||||
exports[`loadEnv website with versioning & translation enabled 1`] = `
|
exports[`loadEnv website with versioning & translation enabled 1`] = `
|
||||||
Object {
|
Object {
|
||||||
"translation": Object {
|
"translation": Object {
|
||||||
|
"defaultLanguage": Object {
|
||||||
|
"enabled": true,
|
||||||
|
"name": "English",
|
||||||
|
"tag": "en",
|
||||||
|
},
|
||||||
"enabled": true,
|
"enabled": true,
|
||||||
"enabledLanguages": Array [
|
"enabledLanguages": Array [
|
||||||
Object {
|
Object {
|
||||||
|
@ -103,6 +114,7 @@ Object {
|
||||||
exports[`loadEnv website with versioning enabled 1`] = `
|
exports[`loadEnv website with versioning enabled 1`] = `
|
||||||
Object {
|
Object {
|
||||||
"translation": Object {
|
"translation": Object {
|
||||||
|
"defaultLanguage": Object {},
|
||||||
"enabled": false,
|
"enabled": false,
|
||||||
"enabledLanguages": Array [],
|
"enabledLanguages": Array [],
|
||||||
},
|
},
|
||||||
|
|
|
@ -1,11 +1,16 @@
|
||||||
import path from 'path';
|
import path from 'path';
|
||||||
import loadEnv from '@lib/load/env';
|
import loadEnv from '@lib/load/env';
|
||||||
import loadConfig from '@lib/load/config';
|
|
||||||
|
|
||||||
describe('loadEnv', () => {
|
describe('loadEnv', () => {
|
||||||
test('website with both versioning & translation disabled', () => {
|
test('website with both versioning & translation disabled', () => {
|
||||||
const siteDir = path.join(__dirname, '__fixtures__', 'simple-site');
|
const siteDir = path.join(__dirname, '__fixtures__', 'simple-site');
|
||||||
const siteConfig = loadConfig(siteDir);
|
const siteConfig = {
|
||||||
|
baseUrl: '/',
|
||||||
|
organizationName: 'endiliey',
|
||||||
|
projectName: 'hello',
|
||||||
|
tagline: 'Hello World',
|
||||||
|
title: 'Hello'
|
||||||
|
};
|
||||||
const env = loadEnv({siteDir, siteConfig});
|
const env = loadEnv({siteDir, siteConfig});
|
||||||
expect(env.versioning.enabled).toBe(false);
|
expect(env.versioning.enabled).toBe(false);
|
||||||
expect(env.translation.enabled).toBe(false);
|
expect(env.translation.enabled).toBe(false);
|
||||||
|
@ -14,7 +19,13 @@ describe('loadEnv', () => {
|
||||||
|
|
||||||
test('website with versioning enabled', () => {
|
test('website with versioning enabled', () => {
|
||||||
const siteDir = path.join(__dirname, '__fixtures__', 'versioned-site');
|
const siteDir = path.join(__dirname, '__fixtures__', 'versioned-site');
|
||||||
const siteConfig = loadConfig(siteDir);
|
const siteConfig = {
|
||||||
|
baseUrl: '/',
|
||||||
|
organizationName: 'endiliey',
|
||||||
|
projectName: 'hello',
|
||||||
|
tagline: 'Hello World',
|
||||||
|
title: 'Hello'
|
||||||
|
};
|
||||||
const env = loadEnv({siteDir, siteConfig});
|
const env = loadEnv({siteDir, siteConfig});
|
||||||
expect(env.versioning.enabled).toBe(true);
|
expect(env.versioning.enabled).toBe(true);
|
||||||
expect(env.translation.enabled).toBe(false);
|
expect(env.translation.enabled).toBe(false);
|
||||||
|
@ -23,7 +34,14 @@ describe('loadEnv', () => {
|
||||||
|
|
||||||
test('website with translation enabled', () => {
|
test('website with translation enabled', () => {
|
||||||
const siteDir = path.join(__dirname, '__fixtures__', 'translated-site');
|
const siteDir = path.join(__dirname, '__fixtures__', 'translated-site');
|
||||||
const siteConfig = loadConfig(siteDir);
|
const siteConfig = {
|
||||||
|
baseUrl: '/',
|
||||||
|
organizationName: 'endiliey',
|
||||||
|
projectName: 'hello',
|
||||||
|
tagline: 'Hello World',
|
||||||
|
title: 'Hello',
|
||||||
|
defaultLanguage: 'en'
|
||||||
|
};
|
||||||
const env = loadEnv({siteDir, siteConfig});
|
const env = loadEnv({siteDir, siteConfig});
|
||||||
expect(env.versioning.enabled).toBe(false);
|
expect(env.versioning.enabled).toBe(false);
|
||||||
expect(env.translation.enabled).toBe(true);
|
expect(env.translation.enabled).toBe(true);
|
||||||
|
@ -32,10 +50,49 @@ describe('loadEnv', () => {
|
||||||
|
|
||||||
test('website with versioning & translation enabled', () => {
|
test('website with versioning & translation enabled', () => {
|
||||||
const siteDir = path.join(__dirname, '__fixtures__', 'transversioned-site');
|
const siteDir = path.join(__dirname, '__fixtures__', 'transversioned-site');
|
||||||
const siteConfig = loadConfig(siteDir);
|
const siteConfig = {
|
||||||
|
baseUrl: '/',
|
||||||
|
organizationName: 'endiliey',
|
||||||
|
projectName: 'hello',
|
||||||
|
tagline: 'Hello World',
|
||||||
|
title: 'Hello',
|
||||||
|
defaultLanguage: 'en'
|
||||||
|
};
|
||||||
const env = loadEnv({siteDir, siteConfig});
|
const env = loadEnv({siteDir, siteConfig});
|
||||||
expect(env.versioning.enabled).toBe(true);
|
expect(env.versioning.enabled).toBe(true);
|
||||||
expect(env.translation.enabled).toBe(true);
|
expect(env.translation.enabled).toBe(true);
|
||||||
expect(env).toMatchSnapshot();
|
expect(env).toMatchSnapshot();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
test('website with languages.js but no lang is enabled', () => {
|
||||||
|
const siteDir = path.join(__dirname, '__fixtures__', 'bad-site');
|
||||||
|
const siteConfig = {
|
||||||
|
baseUrl: '/',
|
||||||
|
organizationName: 'endiliey',
|
||||||
|
projectName: 'hello',
|
||||||
|
tagline: 'Hello World',
|
||||||
|
title: 'Hello'
|
||||||
|
};
|
||||||
|
expect(() => {
|
||||||
|
loadEnv({siteDir, siteConfig});
|
||||||
|
}).toThrowErrorMatchingInlineSnapshot(
|
||||||
|
`"Please at least enable one language in 'languages.js'"`
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
test('website with languages.js but no default language set', () => {
|
||||||
|
const siteDir = path.join(__dirname, '__fixtures__', 'translated-site');
|
||||||
|
const siteConfig = {
|
||||||
|
baseUrl: '/',
|
||||||
|
organizationName: 'endiliey',
|
||||||
|
projectName: 'hello',
|
||||||
|
tagline: 'Hello World',
|
||||||
|
title: 'Hello'
|
||||||
|
};
|
||||||
|
expect(() => {
|
||||||
|
loadEnv({siteDir, siteConfig});
|
||||||
|
}).toThrowErrorMatchingInlineSnapshot(
|
||||||
|
`"Please set a default language in 'siteConfig.js' which is enabled in 'languages.js'"`
|
||||||
|
);
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue