Add CLI option to enable alphabetical sorting of extracted keys
This commit is contained in:
		
				
					committed by
					
						 Kim Biesbjerg
						Kim Biesbjerg
					
				
			
			
				
	
			
			
			
						parent
						
							94e6416c76
						
					
				
				
					commit
					c18b7dc9c7
				
			| @@ -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) { | ||||||
|   | |||||||
| @@ -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; | ||||||
|  | 	} | ||||||
| } | } | ||||||
|   | |||||||
| @@ -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']); | ||||||
|  | 	}); | ||||||
|  |  | ||||||
| }); | }); | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user