Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit d6f13a6

Browse files
committed
wip
1 parent 8858c5e commit d6f13a6

File tree

3 files changed

+58
-0
lines changed

3 files changed

+58
-0
lines changed

build/index.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ const link_index = require('./plugins/link_index');
1818
const categories = require('./plugins/categories');
1919
const changeExt = require('./plugins/change-ext');
2020
const markdown = require('./plugins/markdown');
21+
const locales = require('./plugins/locales');
2122
const layouts = require('./plugins/layouts');
2223
const order = require('./plugins/order');
2324
const toc = require('./plugins/toc');
@@ -51,6 +52,10 @@ Metalsmith(cwd)
5152
"layouts/**/*": '**/*.md',
5253
}
5354
})))
55+
.use(locales({
56+
defaultLocale: 'en',
57+
locales: ['en', 'hu']
58+
}))
5459
.use(order())
5560
.use(categories())
5661
// group certain files into collections

build/plugins/locales.js

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
const path = require('path');
2+
const mkdirp = require('mkdirp');
3+
const fs = require('fs');
4+
5+
function plugin(opts) {
6+
7+
return function (files, metalsmith, done) {
8+
const meta = metalsmith.metadata();
9+
const sourcePath = metalsmith.source();
10+
11+
// set global information about the available locales
12+
const defaultLocale = meta.defaultLocale = opts.defaultLocale;
13+
const locales = meta.locales = opts.locales;
14+
const pattern = (locales) => {
15+
if (!Array.isArray(locales)) {
16+
locales = [locales]
17+
}
18+
19+
return new RegExp(`.*\\/(?:${locales.join('|')})\\/(.+)(\\..+)`)
20+
};
21+
22+
const requiredFiles = Object.keys(files)
23+
.filter(file => file.match(pattern(defaultLocale)))
24+
.map(file => {
25+
return file.replace(`${path.sep}${defaultLocale}${path.sep}`, `${path.sep}{LOCALE}${path.sep}`);
26+
});
27+
const otherLocales = locales.filter(l => l !== defaultLocale);
28+
29+
otherLocales.forEach((locale) => {
30+
requiredFiles.forEach((file) => {
31+
const new_file = file.replace('{LOCALE}', locale);
32+
const dir = path.dirname(file);
33+
mkdirp(dir, (err) => {
34+
if (err) throw err;
35+
const exists = fs.existsSync(new_file);
36+
if (!exists) {
37+
fs.writeFileSync(new_file, files[file.replace('{LOCALE}', defaultLocale)].contents, () => {
38+
console.log('Written new file at ', new_file)
39+
})
40+
}
41+
})
42+
})
43+
});
44+
console.log(otherLocales, requiredFiles)
45+
// console.log(path.resolve(sourcePath, defaultLocale));
46+
47+
48+
// done();
49+
}
50+
}
51+
52+
module.exports = plugin;

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
"metalsmith-multi-language": "^0.3.0",
3030
"metalsmith-permalinks": "^0.5.0",
3131
"metalsmith-watch": "^1.0.3",
32+
"mkdirp": "^0.5.1",
3233
"moment": "^2.20.1",
3334
"multimatch": "^2.1.0",
3435
"table-of-contents-json": "^1.2.0",

0 commit comments

Comments
 (0)