-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathindex.js
37 lines (31 loc) · 995 Bytes
/
index.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
const { parse, TYPE } = require('@formatjs/icu-messageformat-parser');
const { printAST } = require('@formatjs/icu-messageformat-parser/printer');
const { pseudoLetterMap } = require('./lib/pseudoLetterMap');
function translateText(text) {
return (text || '').split('').map(char => pseudoLetterMap.get(char) || char).join('');
}
function transform(elements) {
for (const el of elements) {
if (el.type === TYPE.literal) {
el.value = translateText(el.value);
};
if (el.options) {
for (const [key, option] of Object.entries(el.options)) {
el.options[key].value = transform(option.value);
}
}
if (el.children) {
el.children = transform(el.children);
}
}
return elements;
}
function pseudoTranslate(msg) {
const ast = parse(msg);
const translated = transform(ast);
return printAST(translated);
}
module.exports = {
transform,
pseudoTranslate,
};