Skip to content

Commit

Permalink
Empty translations are no longer ignored
Browse files Browse the repository at this point in the history
  • Loading branch information
ravi-nextbit committed Apr 2, 2016
1 parent 4088a3c commit db4342a
Show file tree
Hide file tree
Showing 6 changed files with 67 additions and 7 deletions.
3 changes: 1 addition & 2 deletions index.js
Original file line number Diff line number Diff line change
Expand Up @@ -219,12 +219,11 @@ function translate(options, contents, copied, filePath) {
token = tail.substr(0, length);
key = token.substr(options.delimiter.prefix.length);
}

var next = contents.indexOf(options.delimiter.prefix, i + length + 1);

for (var lang in processed) {
processed[lang] += contents.substring(copied, i);
if (dictionaries[lang][key]) {
if (dictionaries[lang][key] !== undefined) {
processed[lang] += dictionaries[lang][key];
} else if(options.warn) {
gutil.log('Missing translation of language', lang, 'for key', key, 'in file', filePath);
Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "gulp-international",
"version": "1.0.2",
"version": "1.0.3",
"description": "A gulp plugin that creates multi language versions of your source files",
"license": "Apache-2.0",
"homepage": "http://github.com/mallocator/gulp-international",
Expand Down
43 changes: 43 additions & 0 deletions readme.md
Original file line number Diff line number Diff line change
Expand Up @@ -259,6 +259,49 @@ token3=translation3



## Tips and Tricks

### Dynamic scripts based on language

Sometimes you have dynamic scripts that you generate where you want to react differently based on the language that is being used. For
example let's say that you have a javascript file and need the language to be available from a variable. Simply set up the plugin to run
before the script is being executed on the script itself and include a line such as ```var lang = 'R.lang'```. All you have to do to
make this working is have a key in your definition with the name "lang".


### Placeholder formatting

Again if you replace the string that is already there it is east to integrate with existing formatting functions. Run the plugin before
the script is being executed and you can make use of formatters such as sprintf, util.format, console.log and others. Since it's common
to use gulp for browser projects here's a simple formatting function you can make use of (taken from
[StackOverflow](http://stackoverflow.com/questions/1038746/equivalent-of-string-format-in-jquery):

```
/**
* Add formating function to string objects.
* @returns {string}
*/
String.prototype.format = function () {
var args = arguments;
return this.replace(/\{\{|\}\}|\{(\d+)\}/g, function (m, n) {
if (m == "{{") { return "{"; }
if (m == "}}") { return "}"; }
return args[n];
});
};
```

With a function like this you can create smarter translations such as:

```
token1={0} is {1}, isn't it?
"R.token1".format('JS', 'awesome');
=> "JS is awesome, isn't it?"
```


## Feature Ideas for the future

Maybe I'll implement these one day, maybe not.
Expand Down
17 changes: 17 additions & 0 deletions test/index.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -201,6 +201,23 @@ describe('gulp-international', () => {
});


it('should not ignore translation values that are empty', done => {
var content = '<html><body><h1>R.emptyToken</h1></body></html>';
var options = {
locales: 'test/locales',
whitelist: 'en_US'
};
gently.expect(gutil, 'log', 1, function() {
expect.fail("Token shouldn't have been logged as missing");
});
helper(options, content , files => {
expect(files[0].contents.toString('utf8')).to.equal('<html><body><h1></h1></body></html>');
try { gutil.log() } catch(e) {/* ignore gently cleanup */}
done();
});
});


it('should throw an error if no dictionaries have been found', done => {
var options = {
locales: 'test/notlocales',
Expand Down
3 changes: 2 additions & 1 deletion test/locales/en_US.json
Original file line number Diff line number Diff line change
Expand Up @@ -5,5 +5,6 @@
"subsection2": {
"token3": "content3"
}
}
},
"emptyToken": ""
}
6 changes: 3 additions & 3 deletions test/locales/lorem.ipsum
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras vitae convallis nunc. Curabitur consequat eros eget sodales feugiat. Donec et orci convallis, viverra arcu sed, mollis eros. In suscipit turpis erat, id pharetra dui mollis nec. Cum sociis natoque penatibus et R.token1 magnis dis parturient montes, nascetur ridiculus mus. Nam sollicitudin, dui euismod vestibulum porttitor, eros elit laoreet nibh, ut auctor leo massa ut tortor. Vestibulum eget viverra justo. Sed aliquet libero sit amet sem tristique, quis egestas lorem dictum. Integer enim leo, volutpat at erat non, molestie lobortis nibh. Nunc vestibulum iaculis eros, vel sodales diam iaculis sed. Fusce lacinia ac elit in cursus. Suspendisse potenti. R.token1 Donec porta, felis id volutpat ullamcorper, urna urna laoreet ligula, in pulvinar est diam et metus. R.token1 Donec tristique commodo est, vitae viverra urna. Pellentesque mauris mi, pellentesque vel pharetra ut, sodales ornare ex. R.token1 Donec blandit in orci vel gravida.
Suspendisse risus nisi, scelerisque a sem sed, ullamcorper porta ligula. Morbi leo nunc, placerat eu ultrices sit amet, egestas sit amet ligula. Pellentesque sed odio neque. Etiam in maximus erat, porttitor luctus dui. Sed blandit ultrices sodales. Quisque dui urna, commodo non nibh at, consequat fringilla purus. Vestibulum sollicitudin mollis varius. R.token1 Vestibulum efficitur commodo nulla in ullamcorper. Donec R.token1 eu bibendum sem. Pellentesque pretium nunc in orci suscipit aliquam. Pellentesque accumsan justo sit amet lobortis convallis.
Morbi luctus eros nec R.token1 lectus dictum, a ullamcorper dui ultricies. Nulla faucibus velit in ex euismod blandit. Quisque id ipsum semper, dictum sem ut, eleifend justo. Pellentesque vel interdum ipsum. Suspendisse placerat lorem erat, interdum luctus purus consectetur nec. R.token1 Suspendisse ultrices felis lobortis nibh volutpat dictum. Quisque aliquam facilisis finibus. Class aptent taciti sociosqu R.token1 ad litora torquent per conubia nostra R.token1, per inceptos himenaeos. Aliquam diam magna, consequat sed interdum ac, pellentesque R.token1 id odio R.token1.
Morbi luctus eros nec R.token1 lectus dictum, a ullamcorper dui ultricies. Nulla faucibus velit in ex euismod blandit. Quisque id ipsum semper, dictum sem ut, eleifend justo. Pellentesque vel interdum ipsum. Suspendisse placerat lorem erat, interdum luctus purus consectetur nec. R.token1 Suspendisse ultrices felis lobortis nibh volutpat dictum. Quisque aliquam facilisis finibus. Class aptent taciti sociosqu R.token1 ad litora torquent per conubia nostra R.token1, per inceptos himenaeos. Aliquam diam magna, consequat sed interdum ac, pellentesque R.token1 id R.token1 odio.
Duis tincidunt R.token1 odio in efficitur auctor. R.token1 Proin vitae aliquet risus. In tristique eu diam nec cursus. Etiam venenatis ligula sed ipsum tincidunt ornare. Nulla tincidunt lorem at malesuada efficitur. Donec ac ex quis justo commodo scelerisque eget in metus. Donec eleifend efficitur turpis eget convallis. Aenean ultrices lorem in condimentum maximus. In pellentesque purus felis, eu fermentum nisi vehicula dapibus. Ut egestas lectus enim. Quisque consequat turpis risus, vestibulum efficitur erat dictum et.
Fusce placerat commodo risus. R.token1 Maecenas sodales consequat ante, lobortis sodales nunc accumsan non. Nullam dictum facilisis libero, vel tincidunt enim. Pellentesque eleifend pretium nisi. Cras sollicitudin neque sem. Donec at nulla neque. Mauris et felis pharetra, malesuada neque sit amet, egestas enim. R.token1 Aliquam vehicula ante et urna rhoncus, R.token1 lacinia viverra sapien aliquam. Aliquam rutrum quam sed feugiat aliquam. In R.token1 varius dictum libero. Curabitur ultrices dui dolor, non tincidunt tortor pulvinar molestie. In et lorem id sapien elementum molestie ut vel turpis. R.token1 Ut vel porttitor massa. Curabitur dictum leo id accumsan porttitor.
Vivamus odio odio, R.token1 sollicitudin aliquam diam et, congue maximus velit. R.token1 Donec tempus, justo non rutrum condimentum, arcu tortor faucibus augue, in lobortis ex nisi id sapien. Duis in massa eget justo feugiat vehicula et sit amet dui. Donec tristique viverra diam sit amet faucibus. R.token1 Praesent vitae viverra turpis. Aenean gravida libero porta, maximus ante id, vestibulum elit. Curabitur lobortis, diam vel vulputate auctor, lorem velit porta odio, eget scelerisque augue ex in augue. Duis rhoncus urna dictum, interdum justo vel, rhoncus neque. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Praesent ac magna lorem. Nam viverra tristique risus vitae ultricies. Integer eu nisi a augue consectetur sodales. Nulla congue elit cursus enim venenatis aliquet.
Expand Down Expand Up @@ -120,7 +120,7 @@ Cras feugiat arcu lectus. Nam pretium justo ac purus imperdiet laoreet. Maecenas
Ut nec nunc velit. R.token1 Proin gravida nec nibh at semper. Duis cursus, nibh non suscipit fringilla, leo enim consectetur purus, nec facilisis tellus diam et enim. Donec id ipsum in dui porttitor condimentum id non est. Quisque et euismod mi. Fusce nec blandit orci, vel imperdiet nibh. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Aenean at tortor molestie, scelerisque nunc vel, sagittis massa. Curabitur dapibus laoreet vulputate. Ut quis orci ut lacus posuere venenatis quis ac nisl. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac cras amet.
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras vitae convallis nunc. Curabitur consequat eros eget sodales feugiat. Donec et orci convallis, viverra arcu sed, mollis eros. In suscipit turpis erat, id pharetra dui mollis nec. Cum sociis natoque penatibus et R.token1 magnis dis parturient montes, nascetur ridiculus mus. Nam sollicitudin, dui euismod vestibulum porttitor, eros elit laoreet nibh, ut auctor leo massa ut tortor. Vestibulum eget viverra justo. Sed aliquet libero sit amet sem tristique, quis egestas lorem dictum. Integer enim leo, volutpat at erat non, molestie lobortis nibh. Nunc vestibulum iaculis eros, vel sodales diam iaculis sed. Fusce lacinia ac elit in cursus. Suspendisse potenti. R.token1 Donec porta, felis id volutpat ullamcorper, urna urna laoreet ligula, in pulvinar est diam et metus. R.token1 Donec tristique commodo est, vitae viverra urna. Pellentesque mauris mi, pellentesque vel pharetra ut, sodales ornare ex. R.token1 Donec blandit in orci vel gravida.
Suspendisse risus nisi, scelerisque a sem sed, ullamcorper porta ligula. Morbi leo nunc, placerat eu ultrices sit amet, egestas sit amet ligula. Pellentesque sed odio neque. Etiam in maximus erat, porttitor luctus dui. Sed blandit ultrices sodales. Quisque dui urna, commodo non nibh at, consequat fringilla purus. Vestibulum sollicitudin mollis varius. R.token1 Vestibulum efficitur commodo nulla in ullamcorper. Donec R.token1 eu bibendum sem. Pellentesque pretium nunc in orci suscipit aliquam. Pellentesque accumsan justo sit amet lobortis convallis.
Morbi luctus eros nec R.token1 lectus dictum, a ullamcorper dui ultricies. Nulla faucibus velit in ex euismod blandit. Quisque id ipsum semper, dictum sem ut, eleifend justo. Pellentesque vel interdum ipsum. Suspendisse placerat lorem erat, interdum luctus purus consectetur nec. R.token1 Suspendisse ultrices felis lobortis nibh volutpat dictum. Quisque aliquam facilisis finibus. Class aptent taciti sociosqu R.token1 ad litora torquent per conubia nostra R.token1, per inceptos himenaeos. Aliquam diam magna, consequat sed interdum ac, pellentesque R.token1 id odio R.token1.
Morbi luctus eros nec R.token1 lectus dictum, a ullamcorper dui ultricies. Nulla faucibus velit in ex euismod blandit. Quisque id ipsum semper, dictum sem ut, eleifend justo. Pellentesque vel interdum ipsum. Suspendisse placerat lorem erat, interdum luctus purus consectetur nec. R.token1 Suspendisse ultrices felis lobortis nibh volutpat dictum. Quisque aliquam facilisis finibus. Class aptent taciti sociosqu R.token1 ad litora torquent per conubia nostra R.token1, per inceptos himenaeos. Aliquam diam magna, consequat sed interdum ac, pellentesque R.token1 id R.token1 odio.
Duis tincidunt R.token1 odio in efficitur auctor. R.token1 Proin vitae aliquet risus. In tristique eu diam nec cursus. Etiam venenatis ligula sed ipsum tincidunt ornare. Nulla tincidunt lorem at malesuada efficitur. Donec ac ex quis justo commodo scelerisque eget in metus. Donec eleifend efficitur turpis eget convallis. Aenean ultrices lorem in condimentum maximus. In pellentesque purus felis, eu fermentum nisi vehicula dapibus. Ut egestas lectus enim. Quisque consequat turpis risus, vestibulum efficitur erat dictum et.
Fusce placerat commodo risus. R.token1 Maecenas sodales consequat ante, lobortis sodales nunc accumsan non. Nullam dictum facilisis libero, vel tincidunt enim. Pellentesque eleifend pretium nisi. Cras sollicitudin neque sem. Donec at nulla neque. Mauris et felis pharetra, malesuada neque sit amet, egestas enim. R.token1 Aliquam vehicula ante et urna rhoncus, R.token1 lacinia viverra sapien aliquam. Aliquam rutrum quam sed feugiat aliquam. In R.token1 varius dictum libero. Curabitur ultrices dui dolor, non tincidunt tortor pulvinar molestie. In et lorem id sapien elementum molestie ut vel turpis. R.token1 Ut vel porttitor massa. Curabitur dictum leo id accumsan porttitor.
Vivamus odio odio, R.token1 sollicitudin aliquam diam et, congue maximus velit. R.token1 Donec tempus, justo non rutrum condimentum, arcu tortor faucibus augue, in lobortis ex nisi id sapien. Duis in massa eget justo feugiat vehicula et sit amet dui. Donec tristique viverra diam sit amet faucibus. R.token1 Praesent vitae viverra turpis. Aenean gravida libero porta, maximus ante id, vestibulum elit. Curabitur lobortis, diam vel vulputate auctor, lorem velit porta odio, eget scelerisque augue ex in augue. Duis rhoncus urna dictum, interdum justo vel, rhoncus neque. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Praesent ac magna lorem. Nam viverra tristique risus vitae ultricies. Integer eu nisi a augue consectetur sodales. Nulla congue elit cursus enim venenatis aliquet.
Expand Down Expand Up @@ -240,7 +240,7 @@ Cras feugiat arcu lectus. Nam pretium justo ac purus imperdiet laoreet. Maecenas
Ut nec nunc velit. R.token1 Proin gravida nec nibh at semper. Duis cursus, nibh non suscipit fringilla, leo enim consectetur purus, nec facilisis tellus diam et enim. Donec id ipsum in dui porttitor condimentum id non est. Quisque et euismod mi. Fusce nec blandit orci, vel imperdiet nibh. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Aenean at tortor molestie, scelerisque nunc vel, sagittis massa. Curabitur dapibus laoreet vulputate. Ut quis orci ut lacus posuere venenatis quis ac nisl. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac cras amet.
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras vitae convallis nunc. Curabitur consequat eros eget sodales feugiat. Donec et orci convallis, viverra arcu sed, mollis eros. In suscipit turpis erat, id pharetra dui mollis nec. Cum sociis natoque penatibus et R.token1 magnis dis parturient montes, nascetur ridiculus mus. Nam sollicitudin, dui euismod vestibulum porttitor, eros elit laoreet nibh, ut auctor leo massa ut tortor. Vestibulum eget viverra justo. Sed aliquet libero sit amet sem tristique, quis egestas lorem dictum. Integer enim leo, volutpat at erat non, molestie lobortis nibh. Nunc vestibulum iaculis eros, vel sodales diam iaculis sed. Fusce lacinia ac elit in cursus. Suspendisse potenti. R.token1 Donec porta, felis id volutpat ullamcorper, urna urna laoreet ligula, in pulvinar est diam et metus. R.token1 Donec tristique commodo est, vitae viverra urna. Pellentesque mauris mi, pellentesque vel pharetra ut, sodales ornare ex. R.token1 Donec blandit in orci vel gravida.
Suspendisse risus nisi, scelerisque a sem sed, ullamcorper porta ligula. Morbi leo nunc, placerat eu ultrices sit amet, egestas sit amet ligula. Pellentesque sed odio neque. Etiam in maximus erat, porttitor luctus dui. Sed blandit ultrices sodales. Quisque dui urna, commodo non nibh at, consequat fringilla purus. Vestibulum sollicitudin mollis varius. R.token1 Vestibulum efficitur commodo nulla in ullamcorper. Donec R.token1 eu bibendum sem. Pellentesque pretium nunc in orci suscipit aliquam. Pellentesque accumsan justo sit amet lobortis convallis.
Morbi luctus eros nec R.token1 lectus dictum, a ullamcorper dui ultricies. Nulla faucibus velit in ex euismod blandit. Quisque id ipsum semper, dictum sem ut, eleifend justo. Pellentesque vel interdum ipsum. Suspendisse placerat lorem erat, interdum luctus purus consectetur nec. R.token1 Suspendisse ultrices felis lobortis nibh volutpat dictum. Quisque aliquam facilisis finibus. Class aptent taciti sociosqu R.token1 ad litora torquent per conubia nostra R.token1, per inceptos himenaeos. Aliquam diam magna, consequat sed interdum ac, pellentesque R.token1 id odio R.token1.
Morbi luctus eros nec R.token1 lectus dictum, a ullamcorper dui ultricies. Nulla faucibus velit in ex euismod blandit. Quisque id ipsum semper, dictum sem ut, eleifend justo. Pellentesque vel interdum ipsum. Suspendisse placerat lorem erat, interdum luctus purus consectetur nec. R.token1 Suspendisse ultrices felis lobortis nibh volutpat dictum. Quisque aliquam facilisis finibus. Class aptent taciti sociosqu R.token1 ad litora torquent per conubia nostra R.token1, per inceptos himenaeos. Aliquam diam magna, consequat sed interdum ac, pellentesque R.token1 id R.token1 odio.
Duis tincidunt R.token1 odio in efficitur auctor. R.token1 Proin vitae aliquet risus. In tristique eu diam nec cursus. Etiam venenatis ligula sed ipsum tincidunt ornare. Nulla tincidunt lorem at malesuada efficitur. Donec ac ex quis justo commodo scelerisque eget in metus. Donec eleifend efficitur turpis eget convallis. Aenean ultrices lorem in condimentum maximus. In pellentesque purus felis, eu fermentum nisi vehicula dapibus. Ut egestas lectus enim. Quisque consequat turpis risus, vestibulum efficitur erat dictum et.
Fusce placerat commodo risus. R.token1 Maecenas sodales consequat ante, lobortis sodales nunc accumsan non. Nullam dictum facilisis libero, vel tincidunt enim. Pellentesque eleifend pretium nisi. Cras sollicitudin neque sem. Donec at nulla neque. Mauris et felis pharetra, malesuada neque sit amet, egestas enim. R.token1 Aliquam vehicula ante et urna rhoncus, R.token1 lacinia viverra sapien aliquam. Aliquam rutrum quam sed feugiat aliquam. In R.token1 varius dictum libero. Curabitur ultrices dui dolor, non tincidunt tortor pulvinar molestie. In et lorem id sapien elementum molestie ut vel turpis. R.token1 Ut vel porttitor massa. Curabitur dictum leo id accumsan porttitor.
Vivamus odio odio, R.token1 sollicitudin aliquam diam et, congue maximus velit. R.token1 Donec tempus, justo non rutrum condimentum, arcu tortor faucibus augue, in lobortis ex nisi id sapien. Duis in massa eget justo feugiat vehicula et sit amet dui. Donec tristique viverra diam sit amet faucibus. R.token1 Praesent vitae viverra turpis. Aenean gravida libero porta, maximus ante id, vestibulum elit. Curabitur lobortis, diam vel vulputate auctor, lorem velit porta odio, eget scelerisque augue ex in augue. Duis rhoncus urna dictum, interdum justo vel, rhoncus neque. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Praesent ac magna lorem. Nam viverra tristique risus vitae ultricies. Integer eu nisi a augue consectetur sodales. Nulla congue elit cursus enim venenatis aliquet.
Expand Down

0 comments on commit db4342a

Please sign in to comment.