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
|
import { registerTSPaths } from '../../server/helpers/register-ts-paths'
registerTSPaths()
import * as xliff12ToJs from 'xliff/xliff12ToJs'
import { readFileSync, unlink, writeFile } from 'fs-extra'
import { join } from 'path'
import { buildFileLocale, I18N_LOCALES, isDefaultLocale } from '../../shared/models/i18n/i18n'
import { eachSeries } from 'async'
const sources: string[] = []
const availableLocales = Object.keys(I18N_LOCALES)
.filter(l => isDefaultLocale(l) === false)
.map(l => buildFileLocale(l))
for (const file of [ 'player', 'server', 'iso639' ]) {
for (const locale of availableLocales) {
sources.push(join(__dirname, '../../../client/src/locale/target/', `${file}_${locale}.xml`))
}
}
eachSeries(sources, (source, cb) => {
xliffFile2JSON(source, cb)
}, err => {
if (err) return handleError(err)
mergeISO639InServer(err => {
if (err) return handleError(err)
process.exit(0)
})
})
function handleError (err: any) {
console.error(err)
process.exit(-1)
}
function xliffFile2JSON (filePath: string, cb) {
const fileTarget = filePath.replace('.xml', '.json')
// Remove the two first lines our xliff module does not like
let fileContent = readFileSync(filePath).toString()
fileContent = removeFirstLine(fileContent)
fileContent = removeFirstLine(fileContent)
xliff12ToJs(fileContent, (err, res) => {
if (err) return cb(err)
const json = createJSONString(res)
writeFile(fileTarget, json, err => {
if (err) return cb(err)
return unlink(filePath, cb)
})
})
}
function mergeISO639InServer (cb) {
eachSeries(availableLocales, (locale, eachCallback) => {
const serverPath = join(__dirname, '../../../client/src/locale/target/', `server_${locale}.json`)
const iso639Path = join(__dirname, '../../../client/src/locale/target/', `iso639_${locale}.json`)
const resServer = readFileSync(serverPath).toString()
const resISO639 = readFileSync(iso639Path).toString()
const jsonServer = JSON.parse(resServer)
const jsonISO639 = JSON.parse(resISO639)
Object.assign(jsonServer, jsonISO639)
const serverString = JSON.stringify(jsonServer)
writeFile(serverPath, serverString, err => {
if (err) return eachCallback(err)
return unlink(iso639Path, eachCallback)
})
}, cb)
}
function removeFirstLine (str: string) {
return str.substring(str.indexOf('\n') + 1)
}
function createJSONString (obj: any) {
const res: any = {}
const strings = obj.resources['']
Object.keys(strings).forEach(k => res[k] = strings[k].target)
return JSON.stringify(res)
}
|