UNPKG

2.02 kBJavaScriptView Raw
1/*
2 * output of messages
3 *
4 * all output functions take an internal format of:
5 *
6 * {message: [{item}...]}
7 *
8 * Where each item is in the format:
9 * {sourceFile, line, node}
10 */
11
12
13import PO from 'pofile';
14
15import version from './version';
16
17
18const defaultHeaders = {
19 "Project-Id-Version": "PROJECT VERSION",
20 "Report-Msgid-Bugs-To": "EMAIL@ADDRESS",
21 "POT-Creation-Date": "2016-02-25 13:15-0800",
22 "PO-Revision-Date": "YEAR-MO-DA HO:MI+ZONE",
23 "Last-Translator": "FULL NAME <EMAIL@ADDRESS>",
24 "Language-Team": "LANGUAGE <LL@li.org>",
25 "MIME-Version": "1.0",
26 "Content-Type": "text/plain; charset=utf-8",
27 "Content-Transfer-Encoding": "8bit",
28 "Generated-By": `jsxlate ${version()}`,
29};
30
31
32export default {
33 json: {
34 out(messages) {
35 return JSON.stringify(
36 Object.keys(messages).reduce((json, msg) => {
37 json[msg] = msg;
38 return json;
39 }, {})
40 );
41 },
42
43 in(json) {
44 return JSON.parse(json);
45 }
46 },
47
48 po: {
49 out(messages, {root = process.cwd(), headers = defaultHeaders} = {}) {
50 const po = new PO();
51 Object.assign(po.headers, headers);
52 Object.keys(messages).forEach(message => {
53 const items = messages[message];
54 const item = new PO.Item();
55 item.msgid = message;
56 item.references = items.map(
57 ({sourceFile, line,}) => `${sourceFile.replace(root || '', '')}:${line}`
58 );
59 po.items.push(item);
60 });
61 return po.toString();
62 },
63
64 in(poFile) {
65 return PO.parse(poFile).items.reduce((messages, message) => {
66 messages[message.msgid] = message.msgstr[0];
67 return messages;
68 }, {});
69 }
70 },
71
72 // simple passthru for tests
73 js: {
74 out: messages => messages,
75 in: messages => messages
76 },
77};