-
-
Notifications
You must be signed in to change notification settings - Fork 0
/
gatsby-node.js
97 lines (85 loc) · 2.31 KB
/
gatsby-node.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
const dotenv = require('dotenv');
const csv2json = require('csvtojson');
const crypto = require('crypto');
const _ = require('lodash');
const fs = require('fs');
// Load the .env file if exists
dotenv.config();
exports.sourceNodes = async ({ actions, cache }) => {
const { createNode } = actions;
const data = await fs.readFileSync(`locale.csv`).toString();
const records = await csv2json().fromString(data);
const languages = Object.keys(_.omit(records[0], 'key'));
const translations = {};
languages.forEach((lang) => {
translations[lang] = {};
});
records.forEach((r) => {
languages.forEach((lang) => {
translations[lang][r.key] = r[lang];
});
});
createNode({
key: 'languages',
value: languages,
id: `config-lang`,
parent: null,
children: [],
internal: {
type: 'Config',
contentDigest: crypto
.createHash('md5')
.update(JSON.stringify(translations))
.digest('hex'),
},
});
createNode({
...translations,
id: `translations`,
parent: null,
children: [],
internal: {
type: 'Translation',
contentDigest: crypto
.createHash('md5')
.update(JSON.stringify(translations))
.digest('hex'),
},
});
languages.forEach((lang) => {
fs.mkdirSync(`locales/${lang}`, { recursive: true });
fs.writeFileSync(
`locales/${lang}/translation.json`,
JSON.stringify(translations[lang])
);
});
// do all my sourceNode-y stuff.
await cache.set('languages', languages);
};
exports.onCreatePage = async ({ cache, page, actions }) => {
const languages = await cache.get('languages');
const { createPage, createRedirect, deletePage } = actions;
return new Promise((resolve) => {
//
deletePage(page);
languages.forEach((lang, index) => {
const isDefaultLang = index === 0;
const path = isDefaultLang ? page.path : `/${lang}${page.path}`;
createPage({
...page,
path,
context: {
...page.context,
locale: lang,
},
});
if (isDefaultLang) {
createRedirect({
fromPath: `/${lang}${page.path}`,
toPath: page.path,
});
}
});
resolve();
});
};