This repository has been archived by the owner on Jan 2, 2024. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
/
fill-sv-localization.js
94 lines (88 loc) · 2.08 KB
/
fill-sv-localization.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
const fs = require('fs');
const path = require('path');
const R = require('ramda');
const prettier = require('prettier');
const flattenKeys = (path, obj) =>
R.compose(
R.flatten,
R.reduce(
(acc, key) => [
...acc,
...(R.type(obj[key]) === 'String'
? [`${path}${path.length ? '.' : ''}${key}`]
: flattenKeys(`${path}${path.length ? '.' : ''}${key}`, obj[key]))
],
[]
),
R.keys
)(obj);
const diff = (fi, sv) => {
const fiKeys = flattenKeys('', fi);
const svKeys = flattenKeys('', sv);
return [R.difference(fiKeys, svKeys), R.difference(svKeys, fiKeys)];
};
const cleanSv = R.curry((svDiff, sv) =>
R.reduce(
(acc, key) => R.compose(R.dissocPath(R.__, acc), R.split('.'))(key),
sv,
svDiff
)
);
const fillFromFi = R.curry((fi, fiDiff, sv) =>
R.reduce(
(acc, key) =>
R.compose(
R.converge(R.assocPath(R.__, R.__, acc), [
R.identity,
R.compose(R.concat(R.__, ' SV?'), R.path(R.__, fi))
]),
R.split('.')
)(key),
sv,
fiDiff
)
);
Promise.all([
new Promise((resolve, reject) =>
fs.readFile(
path.resolve(__dirname, 'src/language/fi.json'),
'utf8',
(err, data) => {
if (err) {
return reject(err);
}
return resolve(data);
}
)
).then(JSON.parse),
new Promise((resolve, reject) =>
fs.readFile(
path.resolve(__dirname, 'src/language/sv.json'),
'utf8',
(err, data) => {
if (err) {
return reject(err);
}
return resolve(data);
}
)
).then(JSON.parse)
])
.then(([fi, sv]) => {
const [fiDiff, svDiff] = diff(fi, sv);
return R.compose(fillFromFi(fi, fiDiff), cleanSv(svDiff))(sv);
})
.then(sv => {
return new Promise((resolve, reject) =>
fs.writeFile(
path.resolve(__dirname, 'src/language/sv.json'),
prettier.format(JSON.stringify(sv), { parser: 'json' }),
err => {
if (err) {
return reject(err);
}
return resolve('ok');
}
)
);
});