Files
ngx-translate-extract/src/compilers/po.compiler.ts
2016-12-10 03:29:03 +01:00

54 lines
1.3 KiB
TypeScript

import { CompilerInterface } from './compiler.interface';
import { TranslationCollection, TranslationType } from '../utils/translation.collection';
import * as gettext from 'gettext-parser';
export class PoCompiler implements CompilerInterface {
/**
* Translation domain
*/
public domain = '';
public compile(collection: TranslationCollection): string {
const data = {
charset: 'utf-8',
headers: {
'mime-version': '1.0',
'content-type': 'text/plain; charset=utf-8',
'content-transfer-encoding': '8bit'
},
translations: {
[this.domain]: Object.keys(collection.values).reduce((translations, key) => {
translations[key] = {
msgid: key,
msgstr: collection.get(key)
};
return translations;
}, <any>{})
}
};
return gettext.po.compile(data, 'utf-8');
}
public parse(contents: string): TranslationCollection {
const collection = new TranslationCollection();
const po = gettext.po.parse(contents, 'utf-8');
if (!po.translations.hasOwnProperty(this.domain)) {
return collection;
}
const values = Object.keys(po.translations[this.domain])
.filter(key => key.length > 0)
.reduce((values, key) => {
values[key] = po.translations[this.domain][key].msgstr.pop();
return values;
}, <TranslationType>{});
return new TranslationCollection(values);
}
}