Add CLI option to enable alphabetical sorting of extracted keys

This commit is contained in:
Gustav Gahm 2017-01-13 06:05:52 +01:00 committed by Kim Biesbjerg
parent 94e6416c76
commit c18b7dc9c7
3 changed files with 24 additions and 0 deletions

View File

@ -16,6 +16,7 @@ const options = cli.parse({
output: ['o', 'Path you would like to save extracted strings to', 'dir', process.env.PWD], output: ['o', 'Path you would like to save extracted strings to', 'dir', process.env.PWD],
format: ['f', 'Output format', ['json', 'pot'], 'json'], format: ['f', 'Output format', ['json', 'pot'], 'json'],
replace: ['r', 'Replace the contents of output file if it exists (Merges by default)', 'boolean', false], replace: ['r', 'Replace the contents of output file if it exists (Merges by default)', 'boolean', false],
sort: ['s', 'Sort translations in the output file in alphabetical order', 'boolean', false],
clean: ['c', 'Remove obsolete strings when merging', 'boolean', false] clean: ['c', 'Remove obsolete strings when merging', 'boolean', false]
}); });
@ -77,6 +78,10 @@ try {
} }
} }
if (options.sort) {
collection = collection.sort();
}
fs.writeFileSync(outputPath, compiler.compile(collection)); fs.writeFileSync(outputPath, compiler.compile(collection));
cli.ok(`* Saved to '${outputPath}'`); cli.ok(`* Saved to '${outputPath}'`);
} catch (e) { } catch (e) {

View File

@ -75,4 +75,17 @@ export class TranslationCollection {
return Object.keys(this.values).length === 0; return Object.keys(this.values).length === 0;
} }
public sort(compareFn?: (a: string, b: string) => number): TranslationCollection {
if (!compareFn) {
// if no compare functions is provided use a case insensitive sorting function
compareFn = (a, b) => a.toLowerCase().localeCompare(b.toLowerCase());
}
let collection = new TranslationCollection();
let sortedKeys = this.keys().sort(compareFn);
sortedKeys.forEach((key) => {
collection = collection.add(key, this.get(key));
});
return collection;
}
} }

View File

@ -79,4 +79,10 @@ describe('StringCollection', () => {
expect(collection.intersect(newCollection).values).to.deep.equal({ red: 'rød', blue: 'blå' }); expect(collection.intersect(newCollection).values).to.deep.equal({ red: 'rød', blue: 'blå' });
}); });
it('should sort translations in alphabetical order', () => {
collection = new TranslationCollection({ red: 'rød', green: 'grøn', blue: 'blå' });
collection = collection.sort();
expect(collection.keys()).deep.equal(['blue', 'green', 'red']);
});
}); });