Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 10 additions & 0 deletions build/services/api/container.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ const mask_converter_1 = require("../../shared/mask/mask.converter");
const mask_input_1 = require("../../shared/mask/mask.input");
const chain_transformer_1 = require("../../shared/transformers/chain.transformer");
const flat_list_to_ios_strings_transformer_1 = require("../../shared/transformers/flat-list-to-ios-strings.transformer");
const flat_list_to_po_transformer_1 = require("../../shared/transformers/flat-list-to-po.transformer");
const flat_list_to_xlf_transformer_1 = require("../../shared/transformers/flat-list-to-xlf.transformer");
const flat_list_to_xml_transformer_1 = require("../../shared/transformers/flat-list-to-xml.transformer");
const json_to_flat_list_transformer_1 = require("../../shared/transformers/json-to-flat-list.transformer");
Expand All @@ -32,6 +33,7 @@ function createContainer(options) {
}),
flatListToXlfTransformer: awilix.asClass(flat_list_to_xlf_transformer_1.default, { lifetime: awilix.Lifetime.SINGLETON }),
flatListToXmlTransformer: awilix.asClass(flat_list_to_xml_transformer_1.default, { lifetime: awilix.Lifetime.SINGLETON }),
flatListToPoTransformer: awilix.asClass(flat_list_to_po_transformer_1.default, { lifetime: awilix.Lifetime.SINGLETON }),
jsonToJsonMaskedTransformer: awilix.asClass(json_to_json_masked_transformer_1.default, { lifetime: awilix.Lifetime.SINGLETON }),
jsonToFlatListTransformer: awilix.asClass(json_to_flat_list_transformer_1.default, { lifetime: awilix.Lifetime.SINGLETON }),
jsonToJsonTransformer: awilix.asClass(json_to_json_transformer_1.default, { lifetime: awilix.Lifetime.SINGLETON }),
Expand All @@ -56,13 +58,21 @@ function createContainer(options) {
container.resolve('flatListToXlfTransformer'),
],
})),
jsonToPoTransformer: awilix.asClass(chain_transformer_1.default, { lifetime: awilix.Lifetime.SINGLETON }).inject(() => ({
supportedType: 'json-po',
transformers: [
container.resolve('jsonToFlatListTransformer'),
container.resolve('flatListToPoTransformer'),
],
})),
jsonToYamlTransformer: awilix.asClass(json_to_yaml_transformer_1.default, { lifetime: awilix.Lifetime.SINGLETON }),
transformers: awilix.asClass(transformers_1.default, { lifetime: awilix.Lifetime.SINGLETON }).inject(() => ({
transformers: [
container.resolve('jsonToXmlTransformer'),
container.resolve('jsonToIosStringsTransformer'),
container.resolve('jsonToJsonTransformer'),
container.resolve('jsonToXlfTransformer'),
container.resolve('jsonToPoTransformer'),
container.resolve('jsonToYamlTransformer'),
],
})),
Expand Down
24 changes: 16 additions & 8 deletions build/shared/transformers/flat-list-to-po.transformer.js
Original file line number Diff line number Diff line change
Expand Up @@ -10,15 +10,23 @@ class FlatListToPoTransformer {
}
transform(source) {
if (source.meta.mergeLanguages) {
throw new Error('Not possible to create merge translations for po format');
const result = this.generatePo('', source.result.merged, source.meta.includeComments);
return {
...source,
result: {
merged: result,
},
};
}
else {
return {
...source,
result: source.result.map(({ lang, content }) => ({
lang,
content: this.generatePo(lang, content, source.meta.includeComments),
})),
};
}
return {
...source,
result: source.result.map(({ lang, content }) => ({
lang,
content: this.generatePo(lang, content, source.meta.includeComments),
})),
};
}
generatePo(lang, source, includeComments) {
const generatePoTranslate = (translations) => {
Expand Down
10 changes: 10 additions & 0 deletions src/services/api/container.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import MaskConverter from '../../shared/mask/mask.converter';
import MaskInput from '../../shared/mask/mask.input';
import ChainTransformer from '../../shared/transformers/chain.transformer';
import FlatListToIosStringsTransformer from '../../shared/transformers/flat-list-to-ios-strings.transformer';
import FlatListToPoTransformer from '../../shared/transformers/flat-list-to-po.transformer';
import FlatListToXlfTransformer from '../../shared/transformers/flat-list-to-xlf.transformer';
import FlatListToXmlTransformer from '../../shared/transformers/flat-list-to-xml.transformer';
import JsonToFlatListTransformer from '../../shared/transformers/json-to-flat-list.transformer';
Expand All @@ -33,6 +34,7 @@ export default function createContainer(options?: ContainerOptions): AwilixConta
}),
flatListToXlfTransformer: awilix.asClass(FlatListToXlfTransformer, { lifetime: awilix.Lifetime.SINGLETON }),
flatListToXmlTransformer: awilix.asClass(FlatListToXmlTransformer, { lifetime: awilix.Lifetime.SINGLETON }),
flatListToPoTransformer: awilix.asClass(FlatListToPoTransformer, { lifetime: awilix.Lifetime.SINGLETON }),
jsonToJsonMaskedTransformer: awilix.asClass(JsonToJsonMaskedTransformer, { lifetime: awilix.Lifetime.SINGLETON }),
jsonToFlatListTransformer: awilix.asClass(JsonToFlatListTransformer, { lifetime: awilix.Lifetime.SINGLETON }),
jsonToJsonTransformer: awilix.asClass(JsonToJsonTransformer, { lifetime: awilix.Lifetime.SINGLETON }),
Expand All @@ -57,13 +59,21 @@ export default function createContainer(options?: ContainerOptions): AwilixConta
container.resolve<FlatListToXlfTransformer>('flatListToXlfTransformer'),
],
})),
jsonToPoTransformer: awilix.asClass(ChainTransformer, { lifetime: awilix.Lifetime.SINGLETON }).inject(() => ({
supportedType: 'json-po',
transformers: [
container.resolve<JsonToFlatListTransformer>('jsonToFlatListTransformer'),
container.resolve<FlatListToPoTransformer>('flatListToPoTransformer'),
],
})),
jsonToYamlTransformer: awilix.asClass(JsonToYamlTransformer, { lifetime: awilix.Lifetime.SINGLETON }),
transformers: awilix.asClass(Transformers, { lifetime: awilix.Lifetime.SINGLETON }).inject(() => ({
transformers: [
container.resolve<ChainTransformer>('jsonToXmlTransformer'),
container.resolve<ChainTransformer>('jsonToIosStringsTransformer'),
container.resolve<JsonToJsonTransformer>('jsonToJsonTransformer'),
container.resolve<ChainTransformer>('jsonToXlfTransformer'),
container.resolve<ChainTransformer>('jsonToPoTransformer'),
container.resolve<JsonToYamlTransformer>('jsonToYamlTransformer'),
],
})),
Expand Down
44 changes: 39 additions & 5 deletions src/shared/transformers/flat-list-to-po.transformer.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,12 +16,46 @@ describe('FlatListToPoTransformer', () => {
expect(result).toBeFalsy();
});

it('throws error when generating merged flat list', async () => {
const object = { meta: { mergeLanguages: true }, result: null, translations: null };
it('does generate proper po from merged flat list', async () => {
const object = {
meta: { ...multiLocaleDataset.meta, mergeLanguages: true },
result: multiLocaleDataset.flatList.multiLanguageMergedWithComments,
translations: multiLocaleDataset.translations,
};

const result = flatListToPoTransformer.transform(object);
const expectedObject = {
...object,
result: {
merged: `msgid ""
msgstr ""
"Language: \\n"
"Content-Type: text/plain; charset=utf-8\\n"

msgid "en_us_core_labels_yes"
msgstr "yes"

msgid "en_us_core_labels_no"
msgstr "no"

msgid "en_us_core_labels_save"
msgstr "save"

msgid "en_us_core_labels_cancel"
msgstr "cancel"

msgid "pl_pl_core_labels_yes"
msgstr "tak"

expect(() => {
flatListToPoTransformer.transform(object);
}).toThrow('Not possible to create merge translations for po format');
msgid "pl_pl_core_labels_no"
msgstr "nie"

msgid "pl_pl_core_labels_save"
msgstr "zapisz"`,
},
};

expect(result).toEqual(expectedObject);
});

it('does generate proper po from flat list with comments', async () => {
Expand Down
24 changes: 15 additions & 9 deletions src/shared/transformers/flat-list-to-po.transformer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,16 +10,22 @@ export default class FlatListToPoTransformer implements ITransformer {

public transform(source: ITranslationsData): ITranslationsData {
if (source.meta.mergeLanguages) {
throw new Error('Not possible to create merge translations for po format');
const result = this.generatePo('', source.result.merged, source.meta.includeComments);
return {
...source,
result: {
merged: result,
},
};
} else {
return {
...source,
result: source.result.map(({ lang, content }: { lang: any; content: any }) => ({
lang,
content: this.generatePo(lang, content, source.meta.includeComments),
})),
};
}

return {
...source,
result: source.result.map(({ lang, content }: { lang: any; content: any }) => ({
lang,
content: this.generatePo(lang, content, source.meta.includeComments),
})),
};
}

private generatePo(
Expand Down