wip: trans & versioning

This commit is contained in:
endiliey 2018-09-07 13:51:01 +08:00
parent d00864d222
commit 988232edd4
14 changed files with 350 additions and 10 deletions

View file

@ -20,6 +20,7 @@ module.exports = function loadConfig(siteDir, deleteCache = true) {
];
const optionalFields = [
'customDocsPath',
'defaultLanguage',
'highlight',
'markdownPlugins',
'configureWebpack',

View file

@ -5,14 +5,34 @@ module.exports = function loadEnv({siteDir, siteConfig}) {
// Translation
const translation = {
enabled: false,
enabledLanguages: []
enabledLanguages: [],
defaultLanguage: {}
};
const languagesFile = path.join(siteDir, 'languages.js');
if (fs.existsSync(languagesFile)) {
translation.enabled = true;
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

View 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;

View file

@ -0,0 +1,10 @@
{
"docs": {
"Getting Started": [
"installation"
],
"Guides": [
"blog"
]
}
}

View file

@ -3,5 +3,6 @@ module.exports = {
tagline: 'Hello World',
organizationName: 'endiliey',
projectName: 'hello',
baseUrl: '/'
baseUrl: '/',
defaultLanguage: 'en'
};

View file

@ -0,0 +1,10 @@
{
"docs": {
"Getting Started": [
"installation"
],
"Guides": [
"blog"
]
}
}

View file

@ -3,5 +3,6 @@ module.exports = {
tagline: 'Hello World',
organizationName: 'endiliey',
projectName: 'hello',
baseUrl: '/'
baseUrl: '/',
defaultLanguage: 'en'
};

View file

@ -0,0 +1,10 @@
{
"version-1.0.0-docs": {
"Getting Started": [
"version-1.0.0-installation"
],
"Guides": [
"version-1.0.0-blog"
]
}
}

View file

@ -0,0 +1,10 @@
{
"version-1.0.1-docs": {
"Getting Started": [
"version-1.0.1-installation"
],
"Guides": [
"version-1.0.1-blog"
]
}
}

View file

@ -0,0 +1,10 @@
{
"docs": {
"Getting Started": [
"installation"
],
"Guides": [
"blog"
]
}
}

View file

@ -0,0 +1,10 @@
{
"version-1.0.0-docs": {
"Getting Started": [
"version-1.0.0-installation"
],
"Guides": [
"version-1.0.0-blog"
]
}
}

View file

@ -0,0 +1,10 @@
{
"version-1.0.1-docs": {
"Getting Started": [
"version-1.0.1-installation"
],
"Guides": [
"version-1.0.1-blog"
]
}
}

View file

@ -3,6 +3,7 @@
exports[`loadEnv website with both versioning & translation disabled 1`] = `
Object {
"translation": Object {
"defaultLanguage": Object {},
"enabled": false,
"enabledLanguages": Array [],
},
@ -18,6 +19,11 @@ Object {
exports[`loadEnv website with translation enabled 1`] = `
Object {
"translation": Object {
"defaultLanguage": Object {
"enabled": true,
"name": "English",
"tag": "en",
},
"enabled": true,
"enabledLanguages": Array [
Object {
@ -59,6 +65,11 @@ Object {
exports[`loadEnv website with versioning & translation enabled 1`] = `
Object {
"translation": Object {
"defaultLanguage": Object {
"enabled": true,
"name": "English",
"tag": "en",
},
"enabled": true,
"enabledLanguages": Array [
Object {
@ -103,6 +114,7 @@ Object {
exports[`loadEnv website with versioning enabled 1`] = `
Object {
"translation": Object {
"defaultLanguage": Object {},
"enabled": false,
"enabledLanguages": Array [],
},

View file

@ -1,11 +1,16 @@
import path from 'path';
import loadEnv from '@lib/load/env';
import loadConfig from '@lib/load/config';
describe('loadEnv', () => {
test('website with both versioning & translation disabled', () => {
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});
expect(env.versioning.enabled).toBe(false);
expect(env.translation.enabled).toBe(false);
@ -14,7 +19,13 @@ describe('loadEnv', () => {
test('website with versioning enabled', () => {
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});
expect(env.versioning.enabled).toBe(true);
expect(env.translation.enabled).toBe(false);
@ -23,7 +34,14 @@ describe('loadEnv', () => {
test('website with translation enabled', () => {
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});
expect(env.versioning.enabled).toBe(false);
expect(env.translation.enabled).toBe(true);
@ -32,10 +50,49 @@ describe('loadEnv', () => {
test('website with versioning & translation enabled', () => {
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});
expect(env.versioning.enabled).toBe(true);
expect(env.translation.enabled).toBe(true);
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'"`
);
});
});