{"_id":"grunt-locales","_rev":"58-64a6605c204c2d75cbaeae8fac968616","name":"grunt-locales","description":"Update, build, import and export locales using grunt.","dist-tags":{"latest":"7.1.0"},"versions":{"1.0.0":{"name":"grunt-locales","version":"1.0.0","title":"grunt locales","description":"Update, build, import and export locales using grunt.","keywords":["grunt","gruntplugin","locales","messageformat","translation","localization","internationalization","i18n","L10n"],"homepage":"https://github.com/blueimp/grunt-locales","author":{"name":"Sebastian Tschan","url":"https://blueimp.net"},"repository":{"type":"git","url":"git://github.com/blueimp/grunt-locales.git"},"bugs":{"url":"https://github.com/blueimp/grunt-locales/issues"},"licenses":[{"type":"MIT","url":"http://www.opensource.org/licenses/MIT"}],"main":"Gruntfile.js","engines":{"node":">= 0.8.0"},"scripts":{"test":"grunt test"},"devDependencies":{"grunt-contrib-jshint":"~0.6.0","grunt-contrib-clean":"~0.4.0","grunt-contrib-copy":"~0.4.1","grunt-contrib-nodeunit":"~0.2.0","grunt":"~0.4.1"},"peerDependencies":{"grunt":"~0.4.1"},"dependencies":{"apricot":"0.0.6","htmlparser":"~1.7.6","messageformat":"~0.1.6","sanitizer":"~0.1.1","csv":"~0.3.6"},"_id":"grunt-locales@1.0.0","dist":{"shasum":"01fec727eeb53239aac44ce65f9f4975370dd1ab","tarball":"https://registry.npmjs.org/grunt-locales/-/grunt-locales-1.0.0.tgz","integrity":"sha512-vxWYtv3ktvePrstunAt3CnUmz8b6417tYKTHf8XA6FDmEPtFi1IR6/3L6aaBI/o1BeoX5mrq/Y+5Zm+0Q8xeDw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHwNCZ6CUNalqOBYp3KwvD5nrnj6TXIiBIecwntNtBtnAiAMENnIzhlvq2hF6ve7hhPGik1Wm4cWwgVMV7h6wfrY9Q=="}]},"_from":".","_npmVersion":"1.3.11","_npmUser":{"name":"blueimp","email":"sebastian.tschan@gmail.com"},"maintainers":[{"name":"blueimp","email":"sebastian.tschan@gmail.com"}]},"1.1.0":{"name":"grunt-locales","version":"1.1.0","title":"grunt locales","description":"Update, build, import and export locales using grunt.","keywords":["grunt","gruntplugin","locales","messageformat","translation","localization","internationalization","i18n","L10n"],"homepage":"https://github.com/blueimp/grunt-locales","author":{"name":"Sebastian Tschan","url":"https://blueimp.net"},"repository":{"type":"git","url":"git://github.com/blueimp/grunt-locales.git"},"bugs":{"url":"https://github.com/blueimp/grunt-locales/issues"},"licenses":[{"type":"MIT","url":"http://www.opensource.org/licenses/MIT"}],"main":"Gruntfile.js","engines":{"node":">= 0.8.0"},"scripts":{"test":"grunt test"},"devDependencies":{"grunt-contrib-jshint":"~0.6.0","grunt-contrib-clean":"~0.4.0","grunt-contrib-copy":"~0.4.1","grunt-contrib-nodeunit":"~0.2.0","grunt":"~0.4.1"},"peerDependencies":{"grunt":"~0.4.1"},"dependencies":{"apricot":"0.0.6","htmlparser":"~1.7.6","messageformat":"~0.1.6","sanitizer":"~0.1.1","csv":"~0.3.6"},"_id":"grunt-locales@1.1.0","dist":{"shasum":"874f9f1d30e9c334d5377cf4499605a15d384413","tarball":"https://registry.npmjs.org/grunt-locales/-/grunt-locales-1.1.0.tgz","integrity":"sha512-G/+nh2ldfiK10fy2Y5LmWYY4iIU3cZAywgIUtOGdBaV0icXJYGhlbg1BjOauUct8CpQJTcFWZIBigpGMtL2WeA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDb7gRRHqTDo0G9SKy52Q0jX4PmkVHJM07pxdEo1U8UXwIgJFV68XC4JapFnE4rnGVv9xJgwzw2zGpLiWy0813X0ug="}]},"_from":".","_npmVersion":"1.3.11","_npmUser":{"name":"blueimp","email":"sebastian.tschan@gmail.com"},"maintainers":[{"name":"blueimp","email":"sebastian.tschan@gmail.com"}]},"1.2.0":{"name":"grunt-locales","version":"1.2.0","title":"grunt locales","description":"Update, build, import and export locales using grunt.","keywords":["grunt","gruntplugin","locales","messageformat","translation","localization","internationalization","i18n","L10n"],"homepage":"https://github.com/blueimp/grunt-locales","author":{"name":"Sebastian Tschan","url":"https://blueimp.net"},"repository":{"type":"git","url":"git://github.com/blueimp/grunt-locales.git"},"bugs":{"url":"https://github.com/blueimp/grunt-locales/issues"},"licenses":[{"type":"MIT","url":"http://www.opensource.org/licenses/MIT"}],"main":"Gruntfile.js","engines":{"node":">= 0.8.0"},"scripts":{"test":"grunt test"},"devDependencies":{"grunt":"~0.4.1","grunt-contrib-jshint":"~0.6.0","grunt-contrib-clean":"~0.4.0","grunt-contrib-copy":"~0.4.1","grunt-contrib-nodeunit":"~0.2.0","grunt-bump-build-git":"~1.0.0"},"peerDependencies":{"grunt":"~0.4.1"},"dependencies":{"apricot":"0.0.6","htmlparser":"~1.7.6","messageformat":"~0.1.6","sanitizer":"~0.1.1","csv":"~0.3.6"},"_id":"grunt-locales@1.2.0","dist":{"shasum":"e644c780b2746c667148d876360de1e094ff6e8c","tarball":"https://registry.npmjs.org/grunt-locales/-/grunt-locales-1.2.0.tgz","integrity":"sha512-EgmqifLLWPbuE+n9KjbJBRfzkcjAlK5SoS/fXwkq9rWV+RP5zjKuZgeK7+RU9d4ybGOfvDFUGQ5tpWXStCVlPA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCO4AZcByDmHwf0aAkII2ii3RzWfpOQiyFTlyq6BIx7swIgG9YKjDQxOQRbgEONo8DqYiyvAU0J9AJ/zYSujCoCPsA="}]},"_from":".","_npmVersion":"1.3.11","_npmUser":{"name":"blueimp","email":"sebastian.tschan@gmail.com"},"maintainers":[{"name":"blueimp","email":"sebastian.tschan@gmail.com"}]},"2.0.0":{"name":"grunt-locales","version":"2.0.0","title":"grunt locales","description":"Update, build, import and export locales using grunt.","keywords":["grunt","gruntplugin","locales","messageformat","translation","localization","internationalization","i18n","L10n"],"homepage":"https://github.com/blueimp/grunt-locales","author":{"name":"Sebastian Tschan","url":"https://blueimp.net"},"repository":{"type":"git","url":"git://github.com/blueimp/grunt-locales.git"},"bugs":{"url":"https://github.com/blueimp/grunt-locales/issues"},"licenses":[{"type":"MIT","url":"http://www.opensource.org/licenses/MIT"}],"main":"Gruntfile.js","engines":{"node":">= 0.8.0"},"scripts":{"test":"grunt test"},"devDependencies":{"grunt":"~0.4.1","grunt-contrib-jshint":"~0.6.0","grunt-contrib-clean":"~0.4.0","grunt-contrib-copy":"~0.4.1","grunt-contrib-nodeunit":"~0.2.0","grunt-bump-build-git":"~1.0.0"},"peerDependencies":{"grunt":"~0.4.1"},"dependencies":{"apricot":"0.0.6","htmlparser":"~1.7.6","html-minifier":"~0.5.4","messageformat":"~0.1.6","sanitizer":"~0.1.1","csv":"~0.3.6"},"_id":"grunt-locales@2.0.0","dist":{"shasum":"8dde786c08e23adfff9f9eb629cb515fa356a5e2","tarball":"https://registry.npmjs.org/grunt-locales/-/grunt-locales-2.0.0.tgz","integrity":"sha512-JPHmnfdw71Spp/gDNV3mnyCYyt//pzVuK+mMxM8bPP8RFaZ25t4ntEksolIYViO2rH4HIlMAsLUokXl2BDebGw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCtGUPzosXEei8G/ctH2D/jMRP973QUkZSk4KZUEuAmYwIgPFi0oLG32NgifDPSYCnqXcq2PzgEKRyqR3ZxyAaHjgY="}]},"_from":".","_npmVersion":"1.3.11","_npmUser":{"name":"blueimp","email":"sebastian.tschan@gmail.com"},"maintainers":[{"name":"blueimp","email":"sebastian.tschan@gmail.com"}]},"3.0.0":{"name":"grunt-locales","version":"3.0.0","title":"grunt locales","description":"Update, build, import and export locales using grunt.","keywords":["grunt","gruntplugin","locales","messageformat","translation","localization","internationalization","i18n","L10n"],"homepage":"https://github.com/blueimp/grunt-locales","author":{"name":"Sebastian Tschan","url":"https://blueimp.net"},"repository":{"type":"git","url":"git://github.com/blueimp/grunt-locales.git"},"bugs":{"url":"https://github.com/blueimp/grunt-locales/issues"},"licenses":[{"type":"MIT","url":"http://www.opensource.org/licenses/MIT"}],"main":"Gruntfile.js","engines":{"node":">= 0.8.0"},"scripts":{"test":"grunt test"},"devDependencies":{"grunt":"~0.4.1","grunt-contrib-jshint":"~0.7.2","grunt-contrib-clean":"~0.5.0","grunt-contrib-copy":"~0.4.1","grunt-contrib-nodeunit":"~0.2.2","grunt-bump-build-git":"~1.0.0"},"peerDependencies":{"grunt":"~0.4.1"},"dependencies":{"apricot":"0.0.6","htmlparser":"~1.7.6","html-minifier":"~0.5.4","messageformat":"~0.1.6","sanitizer":"~0.1.1","csv":"~0.3.6"},"_id":"grunt-locales@3.0.0","dist":{"shasum":"3afba8629009135bac2e9354a4c4fd34289202bf","tarball":"https://registry.npmjs.org/grunt-locales/-/grunt-locales-3.0.0.tgz","integrity":"sha512-f8HjV4oKUiab5rilciEu2c5yYqJK0gSrDDBj2Xhi8/WSfv95LMBE1NwQX8NYjLebR8MWKIhQTueWW4jTpkpYZQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEkrb2Ip5Q77jRuPB4HYXDIU452xzsEh6B9xJN0XosDgAiEApPxFFyMlo9DE/t/WJsP381gQ0CHQRrVBLxL5ec7+H0k="}]},"_from":".","_npmVersion":"1.3.11","_npmUser":{"name":"blueimp","email":"sebastian.tschan@gmail.com"},"maintainers":[{"name":"blueimp","email":"sebastian.tschan@gmail.com"}]},"4.0.0":{"name":"grunt-locales","version":"4.0.0","title":"grunt locales","description":"Update, build, import and export locales using grunt.","keywords":["grunt","gruntplugin","locales","messageformat","translation","localization","internationalization","i18n","L10n"],"homepage":"https://github.com/blueimp/grunt-locales","author":{"name":"Sebastian Tschan","url":"https://blueimp.net"},"repository":{"type":"git","url":"git://github.com/blueimp/grunt-locales.git"},"bugs":{"url":"https://github.com/blueimp/grunt-locales/issues"},"licenses":[{"type":"MIT","url":"http://www.opensource.org/licenses/MIT"}],"main":"Gruntfile.js","engines":{"node":">= 0.8.0"},"scripts":{"test":"grunt test"},"devDependencies":{"grunt":"~0.4.2","grunt-contrib-jshint":"~0.8.0","grunt-contrib-clean":"~0.5.0","grunt-contrib-copy":"~0.5.0","grunt-contrib-nodeunit":"~0.3.2","grunt-bump-build-git":"~1.1.1"},"peerDependencies":{"grunt":"~0.4.2"},"dependencies":{"apricot":"0.0.6","htmlparser":"1.7.7","html-minifier":"0.5.5","messageformat":"0.1.8","sanitizer":"0.1.1","csv":"0.3.7"},"_id":"grunt-locales@4.0.0","dist":{"shasum":"0dba3aef5467b47c8c5d6046c73ccb573ad9f7a4","tarball":"https://registry.npmjs.org/grunt-locales/-/grunt-locales-4.0.0.tgz","integrity":"sha512-egPhri1WFXUYJbUJevK4ukNTQHcQjeAPnshl58fbmQ8SiFx9bNJelFj2foBDVCw0Oahbvbnt2q/h6/CpJ1kZwg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBQiU+FkHTBNGlNSdXL6lMOA8TadyzQZmAlJDBicTT7VAiEA96v9SK1F7cx7koR850X4/goIyqC4YYSdyvmmE7UIX3w="}]},"_from":".","_npmVersion":"1.3.11","_npmUser":{"name":"blueimp","email":"sebastian.tschan@gmail.com"},"maintainers":[{"name":"blueimp","email":"sebastian.tschan@gmail.com"}]},"5.0.0":{"name":"grunt-locales","version":"5.0.0","title":"grunt locales","description":"Update, build, import and export locales using grunt.","keywords":["grunt","gruntplugin","locales","messageformat","translation","localization","localisation","internationalization","internationalisation","i18n","L10n"],"homepage":"https://github.com/blueimp/grunt-locales","author":{"name":"Sebastian Tschan","url":"https://blueimp.net"},"repository":{"type":"git","url":"git://github.com/blueimp/grunt-locales.git"},"bugs":{"url":"https://github.com/blueimp/grunt-locales/issues"},"licenses":[{"type":"MIT","url":"http://www.opensource.org/licenses/MIT"}],"main":"Gruntfile.js","engines":{"node":">= 0.8.0"},"scripts":{"test":"grunt test"},"devDependencies":{"grunt":"~0.4.4","grunt-contrib-jshint":"~0.9.2","grunt-contrib-clean":"~0.5.0","grunt-contrib-copy":"~0.5.0","grunt-contrib-nodeunit":"~0.3.3","grunt-bump-build-git":"~1.1.1"},"peerDependencies":{"grunt":"~0.4.4"},"dependencies":{"apricot":"0.0.6","htmlparser":"1.7.7","html-minifier":"0.5.6","messageformat":"0.1.8","sanitizer":"0.1.1","csv":"0.3.7"},"_id":"grunt-locales@5.0.0","dist":{"shasum":"f82754d1abe5b037428c032a39e2fcd2ca8bdae7","tarball":"https://registry.npmjs.org/grunt-locales/-/grunt-locales-5.0.0.tgz","integrity":"sha512-rHTeWqdYqRd85T+XKUeGmHk8nTjohFnSigK5SQPrxJIcYNrC9OUbajeVLtdce4DDDqq4SDlBun6MQddZQhf4lw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDLR3CkQC0PC6TVmbp6sYfJ+N2aATWiualKCGTXVu9hWwIhAKiQ9wiSXaShEBdNcL7Lf2nVtMZfNfoTZ/l74Y6kfxVf"}]},"_from":".","_npmVersion":"1.3.11","_npmUser":{"name":"blueimp","email":"sebastian.tschan@gmail.com"},"maintainers":[{"name":"blueimp","email":"sebastian.tschan@gmail.com"}]},"5.0.1":{"name":"grunt-locales","version":"5.0.1","title":"grunt locales","description":"Update, build, import and export locales using grunt.","keywords":["grunt","gruntplugin","locales","messageformat","translation","localization","localisation","internationalization","internationalisation","i18n","L10n"],"homepage":"https://github.com/blueimp/grunt-locales","author":{"name":"Sebastian Tschan","url":"https://blueimp.net"},"repository":{"type":"git","url":"git://github.com/blueimp/grunt-locales.git"},"bugs":{"url":"https://github.com/blueimp/grunt-locales/issues"},"licenses":[{"type":"MIT","url":"http://www.opensource.org/licenses/MIT"}],"main":"Gruntfile.js","engines":{"node":">= 0.8.0"},"scripts":{"test":"grunt test"},"devDependencies":{"grunt":"~0.4.4","grunt-contrib-jshint":"~0.9.2","grunt-contrib-clean":"~0.5.0","grunt-contrib-copy":"~0.5.0","grunt-contrib-nodeunit":"~0.3.3","grunt-bump-build-git":"~1.1.1"},"peerDependencies":{"grunt":"~0.4.4"},"dependencies":{"apricot":"0.0.6","htmlparser":"1.7.7","html-minifier":"0.5.6","messageformat":"0.1.8","sanitizer":"0.1.1","csv":"0.3.7"},"_id":"grunt-locales@5.0.1","dist":{"shasum":"fae724dca225be5c085723ed042412dbea529cec","tarball":"https://registry.npmjs.org/grunt-locales/-/grunt-locales-5.0.1.tgz","integrity":"sha512-zyL90S7e++/CB5lHhFLLrr7+1Etl5sZ99Z1WvF/jHkrhXtmVHGXH3VPwLj/NkiyrRF5Mug+SHYJUJi66hT+rZw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC19Y4WIBZUCPXGWzjzNBUlhjt3fBbPaKXd51DmC/cnOAIgD8qr8DyHgxDu0CFAE4gbo1Ds5F5++ArUPiSJvJAwA/A="}]},"_from":".","_npmVersion":"1.3.11","_npmUser":{"name":"blueimp","email":"sebastian.tschan@gmail.com"},"maintainers":[{"name":"blueimp","email":"sebastian.tschan@gmail.com"}]},"6.0.0":{"name":"grunt-locales","version":"6.0.0","title":"grunt locales","description":"Update, build, import and export locales using grunt.","keywords":["grunt","gruntplugin","locales","messageformat","translation","localization","localisation","internationalization","internationalisation","i18n","L10n"],"homepage":"https://github.com/blueimp/grunt-locales","author":{"name":"Sebastian Tschan","url":"https://blueimp.net"},"repository":{"type":"git","url":"git://github.com/blueimp/grunt-locales.git"},"bugs":{"url":"https://github.com/blueimp/grunt-locales/issues"},"licenses":[{"type":"MIT","url":"http://www.opensource.org/licenses/MIT"}],"main":"Gruntfile.js","engines":{"node":">= 0.8.0"},"scripts":{"test":"grunt test"},"devDependencies":{"grunt":"~0.4.4","grunt-contrib-jshint":"~0.9.2","grunt-contrib-clean":"~0.5.0","grunt-contrib-copy":"~0.5.0","grunt-contrib-nodeunit":"~0.3.3","grunt-bump-build-git":"~1.1.1"},"peerDependencies":{"grunt":"~0.4.4"},"dependencies":{"apricot":"0.0.6","htmlparser":"1.7.7","html-minifier":"0.5.6","esprima":"1.1.1","messageformat":"0.1.8","sanitizer":"0.1.1","csv":"0.3.7"},"_id":"grunt-locales@6.0.0","dist":{"shasum":"f10f60bba57a0cf70a8a416714b41f1b75b66a60","tarball":"https://registry.npmjs.org/grunt-locales/-/grunt-locales-6.0.0.tgz","integrity":"sha512-o1+hUwvwZVFNzvUSnyYXMs1cKwmNpc5xRdo3hqj0Jq53nd5x8S7d4128q/L5jOlsn6Fo5XxidXOd0miKiEhfbQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIA5Krmeuh6so22xnLnXTQbKTrHrl2kmonFgRX7i486pTAiAR4uc/THmGqZtYXRB1VC78pvpCRFxK9XsOSQhlFw+qUw=="}]},"_from":".","_npmVersion":"1.3.11","_npmUser":{"name":"blueimp","email":"sebastian.tschan@gmail.com"},"maintainers":[{"name":"blueimp","email":"sebastian.tschan@gmail.com"}]},"6.0.1":{"name":"grunt-locales","version":"6.0.1","title":"grunt locales","description":"Update, build, import and export locales using grunt.","keywords":["grunt","gruntplugin","locales","messageformat","translation","localization","localisation","internationalization","internationalisation","i18n","L10n"],"homepage":"https://github.com/blueimp/grunt-locales","author":{"name":"Sebastian Tschan","url":"https://blueimp.net"},"repository":{"type":"git","url":"git://github.com/blueimp/grunt-locales.git"},"bugs":{"url":"https://github.com/blueimp/grunt-locales/issues"},"licenses":[{"type":"MIT","url":"http://www.opensource.org/licenses/MIT"}],"main":"Gruntfile.js","engines":{"node":">= 0.8.0"},"scripts":{"test":"grunt test"},"devDependencies":{"grunt":"~0.4.4","grunt-contrib-jshint":"~0.9.2","grunt-contrib-clean":"~0.5.0","grunt-contrib-copy":"~0.5.0","grunt-contrib-nodeunit":"~0.3.3","grunt-bump-build-git":"~1.1.1"},"peerDependencies":{"grunt":"~0.4.4"},"dependencies":{"apricot":"0.0.6","htmlparser":"1.7.7","html-minifier":"0.5.6","esprima":"1.1.1","messageformat":"0.1.8","sanitizer":"0.1.1","csv":"0.3.7"},"_id":"grunt-locales@6.0.1","dist":{"shasum":"fbbe674f343a7d4e3c6e35d14721af7bb5d9e049","tarball":"https://registry.npmjs.org/grunt-locales/-/grunt-locales-6.0.1.tgz","integrity":"sha512-WcKDEjogYAgowrpqrfs+bTwFiz9IqRAXaloljRNmVoQkB2hCJNw8Xhu6j3Vgn2quEJaIQoek9Zn5CZLgsaRP1A==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBh2y5puJRzBxCr16+brXECOCp58Y4nm5AhtlptjsprZAiATjbITwBt9ANitqjkBMMAP/L2e9pvmsRo7Q4uxLV59lQ=="}]},"_from":".","_npmVersion":"1.3.11","_npmUser":{"name":"blueimp","email":"sebastian.tschan@gmail.com"},"maintainers":[{"name":"blueimp","email":"sebastian.tschan@gmail.com"}]},"6.1.0":{"name":"grunt-locales","version":"6.1.0","title":"grunt locales","description":"Update, build, import and export locales using grunt.","keywords":["grunt","gruntplugin","locales","messageformat","translation","localization","localisation","internationalization","internationalisation","i18n","L10n"],"homepage":"https://github.com/blueimp/grunt-locales","author":{"name":"Sebastian Tschan","url":"https://blueimp.net"},"repository":{"type":"git","url":"git://github.com/blueimp/grunt-locales.git"},"bugs":{"url":"https://github.com/blueimp/grunt-locales/issues"},"licenses":[{"type":"MIT","url":"http://www.opensource.org/licenses/MIT"}],"main":"Gruntfile.js","engines":{"node":">= 0.10.0"},"scripts":{"test":"grunt test"},"devDependencies":{"grunt":"~0.4.5","grunt-contrib-jshint":"~0.10.0","grunt-contrib-clean":"~0.6.0","grunt-contrib-copy":"~0.5.0","grunt-contrib-nodeunit":"~0.4.1","grunt-bump-build-git":"~1.1.1"},"peerDependencies":{"grunt":"~0.4.5"},"dependencies":{"cheerio":"0.17.0","html-minifier":"0.6.8","esprima":"1.2.2","messageformat":"0.1.8","sanitizer":"0.1.2","csv":"0.3.7"},"_id":"grunt-locales@6.1.0","dist":{"shasum":"83670c042b9e29d275257eddae18eb4c3f62ce94","tarball":"https://registry.npmjs.org/grunt-locales/-/grunt-locales-6.1.0.tgz","integrity":"sha512-iLPil2rWWyoDizpQrnfD2l/1U0Dp/RmKzhHGt3l7osnjGuJic9qNl0+b/LYp7sB/ewE/y/+LRTSdKwVWmgaznw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDdey2f9RfIt+zJNTyFsJshWSlgclUrkM+5UBZA1ojxKgIgSpht6MNDNigDQkJFTWfSIeOD1lvzrAKzgNA2f1s0lUE="}]},"_from":".","_npmVersion":"1.3.11","_npmUser":{"name":"blueimp","email":"sebastian.tschan@gmail.com"},"maintainers":[{"name":"blueimp","email":"sebastian.tschan@gmail.com"}]},"6.1.1":{"name":"grunt-locales","version":"6.1.1","title":"grunt locales","description":"Update, build, import and export locales using grunt.","keywords":["grunt","gruntplugin","locales","messageformat","translation","localization","localisation","internationalization","internationalisation","i18n","L10n"],"homepage":"https://github.com/blueimp/grunt-locales","author":{"name":"Sebastian Tschan","url":"https://blueimp.net"},"repository":{"type":"git","url":"git://github.com/blueimp/grunt-locales.git"},"bugs":{"url":"https://github.com/blueimp/grunt-locales/issues"},"licenses":[{"type":"MIT","url":"http://www.opensource.org/licenses/MIT"}],"main":"Gruntfile.js","engines":{"node":">= 0.10.0"},"scripts":{"test":"grunt test"},"devDependencies":{"grunt":"~0.4.5","grunt-contrib-jshint":"~0.10.0","grunt-contrib-clean":"~0.6.0","grunt-contrib-copy":"~0.5.0","grunt-contrib-nodeunit":"~0.4.1","grunt-bump-build-git":"~1.1.1"},"peerDependencies":{"grunt":"~0.4.5"},"dependencies":{"cheerio":"0.17.0","html-minifier":"0.6.8","esprima":"1.2.2","messageformat":"0.1.8","sanitizer":"0.1.2","csv":"0.3.7"},"_id":"grunt-locales@6.1.1","dist":{"shasum":"8381693adb2d85f7703b4a3f6800001780ea1fa8","tarball":"https://registry.npmjs.org/grunt-locales/-/grunt-locales-6.1.1.tgz","integrity":"sha512-S9ZhWcpz3kQzH6ZGWetQRadl3jirVg4Wn08vsqmRbiXJAxsiaSGKqzgnnbiW0WJcdtn/pgyW+lvoWHSQcoDiFg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCeaNkbXN9DwlbpucpE4uRsXcPRfLZFxPPGjLgt1YVOrgIhAJ2JCfKLEcPokDBd/3Z3jlaG0YD0x5F0UJ7F5fAecSMm"}]},"_from":".","_npmVersion":"1.3.11","_npmUser":{"name":"blueimp","email":"sebastian.tschan@gmail.com"},"maintainers":[{"name":"blueimp","email":"sebastian.tschan@gmail.com"}]},"6.2.0":{"name":"grunt-locales","version":"6.2.0","title":"grunt locales","description":"Update, build, import and export locales using grunt.","keywords":["grunt","gruntplugin","locales","messageformat","translation","localization","localisation","internationalization","internationalisation","i18n","L10n"],"homepage":"https://github.com/blueimp/grunt-locales","author":{"name":"Sebastian Tschan","url":"https://blueimp.net"},"repository":{"type":"git","url":"git://github.com/blueimp/grunt-locales.git"},"bugs":{"url":"https://github.com/blueimp/grunt-locales/issues"},"licenses":[{"type":"MIT","url":"http://www.opensource.org/licenses/MIT"}],"main":"Gruntfile.js","engines":{"node":">= 0.10.0"},"scripts":{"test":"grunt test"},"devDependencies":{"grunt":"~0.4.5","grunt-contrib-jshint":"~0.10.0","grunt-contrib-clean":"~0.6.0","grunt-contrib-copy":"~0.5.0","grunt-contrib-nodeunit":"~0.4.1","grunt-bump-build-git":"~1.1.1"},"peerDependencies":{"grunt":"~0.4.5"},"dependencies":{"cheerio":"0.17.0","html-minifier":"0.6.8","esprima":"1.2.2","messageformat":"0.1.8","sanitizer":"0.1.2","csv":"0.3.7"},"_id":"grunt-locales@6.2.0","dist":{"shasum":"6cda7eb78ac9609692676950f1386e2e8297e714","tarball":"https://registry.npmjs.org/grunt-locales/-/grunt-locales-6.2.0.tgz","integrity":"sha512-Bj/4SzC5MPFqKbvzRBSRlGPDaF4d8Uy+QQjMhSU1WFkIlkbIoGSLGAnea1owCIwDB4fEa5QgE2OwraQ3dK2QPw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC8tMmIEnGPn2BCmoIXbqAuUlPpo3GTtWHJBPoaNdSpDgIhANpm7NtXkmdhv+grTuqDPMsnNpWqqAtaApuuwB/alVj7"}]},"_from":".","_npmVersion":"1.3.11","_npmUser":{"name":"blueimp","email":"sebastian.tschan@gmail.com"},"maintainers":[{"name":"blueimp","email":"sebastian.tschan@gmail.com"}]},"7.0.0":{"name":"grunt-locales","version":"7.0.0","title":"grunt locales","description":"Update, build, import and export locales using grunt.","keywords":["grunt","gruntplugin","locales","messageformat","translation","localization","localisation","internationalization","internationalisation","i18n","L10n"],"homepage":"https://github.com/blueimp/grunt-locales","author":{"name":"Sebastian Tschan","url":"https://blueimp.net"},"repository":{"type":"git","url":"git://github.com/blueimp/grunt-locales.git"},"bugs":{"url":"https://github.com/blueimp/grunt-locales/issues"},"licenses":[{"type":"MIT","url":"http://www.opensource.org/licenses/MIT"}],"main":"Gruntfile.js","engines":{"node":">= 0.10.0"},"scripts":{"test":"grunt test"},"devDependencies":{"grunt":"~0.4.5","grunt-contrib-jshint":"~0.10.0","grunt-contrib-clean":"~0.6.0","grunt-contrib-copy":"~0.5.0","grunt-contrib-nodeunit":"~0.4.1","grunt-bump-build-git":"~1.1.1"},"peerDependencies":{"grunt":"~0.4.5"},"dependencies":{"cheerio":"0.17.0","html-minifier":"0.6.8","esprima":"1.2.2","messageformat":"0.1.8","sanitizer":"0.1.2","csv":"0.3.7"},"_id":"grunt-locales@7.0.0","dist":{"shasum":"e05382da5d899787e9b5791db684fa0863a0a1a3","tarball":"https://registry.npmjs.org/grunt-locales/-/grunt-locales-7.0.0.tgz","integrity":"sha512-ZeYjXrnp2QOQTgA4cDT14RDWnRZo3jvPhhudBxEqPj2do2zY7na+/WH6H2YqJNhnXAlJUS0DXPhnrgsCGjge3A==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFEV5BBw1l/wJQxPPHna9oxNXsV9T0yD9riSx0W9q3RzAiEAij7Ia6vDaux8m+QIfVb6PBylEV1WXO6s3OvY8MjKrGo="}]},"_from":".","_npmVersion":"1.3.11","_npmUser":{"name":"blueimp","email":"sebastian.tschan@gmail.com"},"maintainers":[{"name":"blueimp","email":"sebastian.tschan@gmail.com"}]},"7.0.1":{"name":"grunt-locales","version":"7.0.1","title":"grunt locales","description":"Update, build, import and export locales using grunt.","keywords":["grunt","gruntplugin","locales","messageformat","translation","localization","localisation","internationalization","internationalisation","i18n","L10n"],"homepage":"https://github.com/blueimp/grunt-locales","author":{"name":"Sebastian Tschan","url":"https://blueimp.net"},"repository":{"type":"git","url":"git://github.com/blueimp/grunt-locales.git"},"bugs":{"url":"https://github.com/blueimp/grunt-locales/issues"},"license":"MIT","main":"Gruntfile.js","engines":{"node":">= 0.10.0"},"scripts":{"test":"grunt test"},"devDependencies":{"grunt":"~0.4.5","grunt-contrib-jshint":"~0.10.0","grunt-contrib-clean":"~0.6.0","grunt-contrib-copy":"~0.5.0","grunt-contrib-nodeunit":"~0.4.1","grunt-bump-build-git":"~1.1.1"},"peerDependencies":{"grunt":"~0.4.5"},"dependencies":{"cheerio":"0.17.0","html-minifier":"0.6.8","esprima":"1.2.2","messageformat":"0.1.8","sanitizer":"0.1.2","csv":"0.3.7"},"gitHead":"17079a10a38a4ef9aeda2632b1317177be85029a","_id":"grunt-locales@7.0.1","_shasum":"20fdb52dbb00132af3a79d79f418f7dcb79d2c2f","_from":".","_npmVersion":"2.12.1","_nodeVersion":"0.12.7","_npmUser":{"name":"blueimp","email":"sebastian.tschan@gmail.com"},"dist":{"shasum":"20fdb52dbb00132af3a79d79f418f7dcb79d2c2f","tarball":"https://registry.npmjs.org/grunt-locales/-/grunt-locales-7.0.1.tgz","integrity":"sha512-/Uun4ltvcfFfT5uUbtPeREHTQVZ7YA+Xzpbn8cl+BiBryKSIJl8l7NS30DKJZewNoSWhNrdd+59CBRxwW0bpcg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCOHy/Dt3fvaaDXJsWuxZ464iuOgrI5BbbQ68PA7Pe2/AIhAPaK73WhagemPDmywjxqIeJC5Le1+wB/GJkqo+FoqUl0"}]},"maintainers":[{"name":"blueimp","email":"sebastian.tschan@gmail.com"}]},"7.0.2":{"name":"grunt-locales","version":"7.0.2","title":"grunt locales","description":"Update, build, import and export locales using grunt.","keywords":["grunt","gruntplugin","locales","messageformat","translation","localization","localisation","internationalization","internationalisation","i18n","L10n"],"homepage":"https://github.com/blueimp/grunt-locales","author":{"name":"Sebastian Tschan","url":"https://blueimp.net"},"repository":{"type":"git","url":"git://github.com/blueimp/grunt-locales.git"},"bugs":{"url":"https://github.com/blueimp/grunt-locales/issues"},"license":"MIT","main":"Gruntfile.js","engines":{"node":">= 0.10.0"},"scripts":{"test":"grunt test"},"devDependencies":{"grunt":"~0.4.5","grunt-contrib-jshint":"~0.10.0","grunt-contrib-clean":"~0.6.0","grunt-contrib-copy":"~0.5.0","grunt-contrib-nodeunit":"~0.4.1","grunt-bump-build-git":"~1.1.1"},"peerDependencies":{"grunt":"0.4.x"},"dependencies":{"cheerio":"0.17.0","html-minifier":"0.6.8","esprima":"1.2.2","messageformat":"0.1.8","sanitizer":"0.1.2","csv":"0.3.7"},"gitHead":"7176e267d978ceb4429e2cb83b58b3369fcde4ac","_id":"grunt-locales@7.0.2","_shasum":"5245af062c470a5c02febd24391a5f5f4b1db286","_from":".","_npmVersion":"2.12.1","_nodeVersion":"0.12.7","_npmUser":{"name":"blueimp","email":"sebastian.tschan@gmail.com"},"dist":{"shasum":"5245af062c470a5c02febd24391a5f5f4b1db286","tarball":"https://registry.npmjs.org/grunt-locales/-/grunt-locales-7.0.2.tgz","integrity":"sha512-CVjk72cDiyTyEKrWvWOdQ+F/D7+Ck/WZx8PcUzMF9jG5+NI9nOVOji5yY3iQ6azkAbcSm7gKl2zusCPjRNq+KQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDnomeW87KE+P8x7ley2FY+gV2UytMEemrY35znPbqRBAIgSv25RI5ZyBsrLmB1mUua1IjzG4znsvei+goh1U939no="}]},"maintainers":[{"name":"blueimp","email":"sebastian.tschan@gmail.com"}]},"7.0.3":{"name":"grunt-locales","version":"7.0.3","title":"grunt locales","description":"Update, build, import and export locales using grunt.","keywords":["grunt","gruntplugin","locales","messageformat","translation","localization","localisation","internationalization","internationalisation","i18n","L10n"],"homepage":"https://github.com/blueimp/grunt-locales","author":{"name":"Sebastian Tschan","url":"https://blueimp.net"},"repository":{"type":"git","url":"git://github.com/blueimp/grunt-locales.git"},"bugs":{"url":"https://github.com/blueimp/grunt-locales/issues"},"license":"MIT","main":"Gruntfile.js","engines":{"node":">= 0.10.0"},"scripts":{"test":"grunt test"},"devDependencies":{"grunt":"0.4.x","grunt-contrib-jshint":"0.11.2","grunt-contrib-clean":"0.6.0","grunt-contrib-copy":"0.8.0","grunt-contrib-nodeunit":"0.4.1","grunt-bump-build-git":"1.1.2"},"peerDependencies":{"grunt":"0.4.x"},"dependencies":{"cheerio":"0.19.0","html-minifier":"0.7.2","esprima":"2.4.0","messageformat":"0.1.8","sanitizer":"0.1.2","csv":"0.3.7"},"gitHead":"34f3189441e751db262173df56361eb27faa84e6","_id":"grunt-locales@7.0.3","_shasum":"8ea8d0caffb7f5528c0a78a442e808537a1feabe","_from":".","_npmVersion":"2.12.1","_nodeVersion":"0.12.7","_npmUser":{"name":"blueimp","email":"sebastian.tschan@gmail.com"},"dist":{"shasum":"8ea8d0caffb7f5528c0a78a442e808537a1feabe","tarball":"https://registry.npmjs.org/grunt-locales/-/grunt-locales-7.0.3.tgz","integrity":"sha512-sYA+HNQud4amHQttPWlx5m+cJ2aEsWO3sMELO076F2+3vKsqBAiAh8NOJgT1x3rwdTpSpmVb8vAzyLulpOoDtA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGm+w1LsCxQ2NJn/fk7qmCQu0q1Rb93QF3XrP2dkUOrCAiAvPUwzYEEruoruGMlbaTfgP7GAZ7VFH+PQ586OoTU43A=="}]},"maintainers":[{"name":"blueimp","email":"sebastian.tschan@gmail.com"}]},"7.0.4":{"name":"grunt-locales","version":"7.0.4","title":"grunt locales","description":"Update, build, import and export locales using grunt.","keywords":["grunt","gruntplugin","locales","messageformat","translation","localization","localisation","internationalization","internationalisation","i18n","L10n"],"homepage":"https://github.com/blueimp/grunt-locales","author":{"name":"Sebastian Tschan","url":"https://blueimp.net"},"repository":{"type":"git","url":"git://github.com/blueimp/grunt-locales.git"},"bugs":{"url":"https://github.com/blueimp/grunt-locales/issues"},"license":"MIT","main":"Gruntfile.js","engines":{"node":">= 0.10.0"},"scripts":{"test":"grunt test"},"devDependencies":{"grunt":"0.4.x","grunt-contrib-jshint":"0.11.2","grunt-contrib-clean":"0.6.0","grunt-contrib-copy":"0.8.0","grunt-contrib-nodeunit":"0.4.1","grunt-bump-build-git":"1.1.2"},"peerDependencies":{"grunt":"0.4.x"},"dependencies":{"cheerio":"0.19.0","html-minifier":"0.7.2","esprima":"2.4.0","messageformat":"0.1.8","sanitizer":"0.1.2","csv":"0.3.7"},"gitHead":"f6a999014312d84bd646f3692f4cc11c103921fd","_id":"grunt-locales@7.0.4","_shasum":"b5649639f7f2f88573c881d7714963670ac45129","_from":".","_npmVersion":"2.14.7","_nodeVersion":"4.2.1","_npmUser":{"name":"blueimp","email":"mail@blueimp.net"},"dist":{"shasum":"b5649639f7f2f88573c881d7714963670ac45129","tarball":"https://registry.npmjs.org/grunt-locales/-/grunt-locales-7.0.4.tgz","integrity":"sha512-BvRpq4bz0tTpt3csLGHX0NIMSsCrgRxxBeLeKzvQ+Jlx59vmYcCWeBQrV+YEi3hKjC0J5AnxKBMOdQ+gcw2Rlg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEg471YcyfLspI4XYSryo0CwbHinHs/h+dD4nddWgm0CAiB8Ji3NCu3J3BpQlVhHo7OD5Wx4J0gce5FjRNsTs4LmKg=="}]},"maintainers":[{"name":"blueimp","email":"sebastian.tschan@gmail.com"}]},"7.0.5":{"name":"grunt-locales","version":"7.0.5","title":"grunt locales","description":"Update, build, import and export locales using grunt.","keywords":["grunt","gruntplugin","locales","messageformat","translation","localization","localisation","internationalization","internationalisation","i18n","L10n"],"homepage":"https://github.com/blueimp/grunt-locales","author":{"name":"Sebastian Tschan","url":"https://blueimp.net"},"repository":{"type":"git","url":"git://github.com/blueimp/grunt-locales.git"},"bugs":{"url":"https://github.com/blueimp/grunt-locales/issues"},"license":"MIT","main":"Gruntfile.js","engines":{"node":">= 0.10.0"},"scripts":{"test":"grunt test"},"devDependencies":{"grunt":"0.4.x","grunt-contrib-jshint":"0.11.2","grunt-contrib-clean":"0.6.0","grunt-contrib-copy":"0.8.0","grunt-contrib-nodeunit":"0.4.1","grunt-bump-build-git":"1.1.2"},"peerDependencies":{"grunt":">=0.4.0"},"dependencies":{"cheerio":"0.19.0","html-minifier":"0.7.2","esprima":"2.4.0","messageformat":"0.1.8","sanitizer":"0.1.2","csv":"0.3.7"},"gitHead":"f2e5b5ff60c27d77b0206d0f3f6509433d1b6434","_id":"grunt-locales@7.0.5","_shasum":"03c435956862775bd26119543215a176b5eada04","_from":".","_npmVersion":"2.14.12","_nodeVersion":"4.2.6","_npmUser":{"name":"blueimp","email":"mail@blueimp.net"},"dist":{"shasum":"03c435956862775bd26119543215a176b5eada04","tarball":"https://registry.npmjs.org/grunt-locales/-/grunt-locales-7.0.5.tgz","integrity":"sha512-FnRuTQNY1p38oKNU5rHvsbhu7YPnVi9hfT0+KAjGQ+1f4XCvV+psOBDwPgnRlag9zYWCULxZ/iSm6c8loIk18g==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHC7oG7qg9TbdBt19Un6lpoNjldOTTYi8RYHn0hzEzfQAiAJtkMl78FkOjcYouIZLrc+AO+Jn7E9/ugQfwJHl2xCfQ=="}]},"maintainers":[{"name":"blueimp","email":"sebastian.tschan@gmail.com"}],"_npmOperationalInternal":{"host":"packages-5-east.internal.npmjs.com","tmp":"tmp/grunt-locales-7.0.5.tgz_1456065578388_0.5941623197868466"}},"7.1.0":{"name":"grunt-locales","version":"7.1.0","title":"grunt locales","description":"Update, build, import and export locales using grunt.","keywords":["grunt","gruntplugin","locales","messageformat","translation","localization","localisation","internationalization","internationalisation","i18n","L10n"],"homepage":"https://github.com/blueimp/grunt-locales","author":{"name":"Sebastian Tschan","url":"https://blueimp.net"},"repository":{"type":"git","url":"git://github.com/blueimp/grunt-locales.git"},"bugs":{"url":"https://github.com/blueimp/grunt-locales/issues"},"license":"MIT","main":"Gruntfile.js","engines":{"node":">= 0.10.0"},"scripts":{"test":"grunt test"},"devDependencies":{"grunt":"0.4.x","grunt-contrib-jshint":"0.11.2","grunt-contrib-clean":"0.6.0","grunt-contrib-copy":"0.8.0","grunt-contrib-nodeunit":"0.4.1","grunt-bump-build-git":"1.1.2"},"peerDependencies":{"grunt":">=0.4.0"},"dependencies":{"cheerio":"0.19.0","html-minifier":"0.7.2","esprima":"2.4.0","messageformat":"0.1.8","sanitizer":"0.1.2","csv":"0.3.7"},"gitHead":"18cca1436bfe1e56da5d7f342b996c97e5d2c50f","_id":"grunt-locales@7.1.0","_shasum":"90ca7781a63d2e83a53bcfc878cd8ba2361ee583","_from":".","_npmVersion":"2.15.1","_nodeVersion":"4.4.3","_npmUser":{"name":"blueimp","email":"mail@blueimp.net"},"dist":{"shasum":"90ca7781a63d2e83a53bcfc878cd8ba2361ee583","tarball":"https://registry.npmjs.org/grunt-locales/-/grunt-locales-7.1.0.tgz","integrity":"sha512-toac4MLGyXiuAWosLxiesOg0m7l91UFaBBChc878SVUvmGhYwTkyLwTx6+X0+X/r5jU+cZvYGXb+B0nTf1lnmA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICOtZ8bGW9PGHaO+Pj6drBOPaa8RCZ+4FkdOOALkcxDvAiAdYKQY8qQxfzhOQB++LlTqaySWetfCxDbzkxWxlGpmmA=="}]},"maintainers":[{"name":"blueimp","email":"sebastian.tschan@gmail.com"}],"_npmOperationalInternal":{"host":"packages-16-east.internal.npmjs.com","tmp":"tmp/grunt-locales-7.1.0.tgz_1461059818141_0.3454954174812883"}}},"readme":"# grunt locales\n\n> Update, build, import and export locales using grunt.\n\n## Table of contents\n\n- [Getting Started](#getting-started)\n- [The locales task](#the-locales-task)\n    - [Overview](#overview)\n    - [Usage Examples](#usage-examples)\n        - [Setup](#setup)\n        - [Locales update](#locales-update)\n        - [Locales build](#locales-build)\n        - [Locales export](#locales-export)\n        - [Locales import](#locales-import)\n        - [Watch tasks](#watch-tasks)\n    - [Options](#options)\n        - [options.locales](#optionslocales)\n        - [options.localizeAttributes](#optionslocalizeattributes)\n        - [options.localizeMethodIdentifiers](#optionslocalizemethodidentifiers)\n        - [options.htmlFileRegExp](#optionshtmlfileregexp)\n        - [options.jsFileRegExp](#optionsjsfileregexp)\n        - [options.localeRegExp](#optionslocaleregexp)\n        - [options.localePlaceholder](#optionslocaleplaceholder)\n        - [options.localeName](#optionslocalename)\n        - [options.wrapStaticTranslations](#optionswrapstatictranslations)\n        - [options.purgeLocales](#optionspurgelocales)\n        - [options.defaultMessagesSource](#optionsdefaultmessagessource)\n        - [options.messageFormatLocaleFile](#optionsmessageformatlocalefile)\n        - [options.messageFormatSharedFile](#optionsmessageformatsharedfile)\n        - [options.localeTemplate](#optionslocaletemplate)\n        - [options.urlRegExp](#optionsurlregexp)\n        - [options.htmlmin](#optionshtmlmin)\n        - [options.htmlminKeys](#optionshtmlminkeys)\n        - [options.jsonSpace](#optionsjsonspace)\n        - [options.jsonReplacer](#optionsjsonreplacer)\n        - [options.csvEncapsulator](#optionscsvencapsulator)\n        - [options.csvDelimiter](#optionscsvdelimiter)\n        - [options.csvLineEnd](#optionscsvlineend)\n        - [options.csvEscape](#optionscsvescape)\n        - [options.csvKeyLabel](#optionscsvkeylabel)\n        - [options.csvExtraFields](#optionscsvextrafields)\n- [HTML templates format](#html-templates-format)\n    - [HTML template examples](#html-template-examples)\n- [JavaScript source files format](#javascript-source-files-format)\n    - [JavaScript source file examples](#javascript-source-file-examples)\n- [Translation mappings](#translation-mappings)\n    - [DOM replacement](#dom-replacement)\n    - [AngularJS directive](#angularjs-directive)\n- [Contributing](#contributing)\n- [Release History](#release-history)\n\n## Getting Started\nThis plugin requires Grunt `0.4.x`\n\nIf you haven't used [Grunt](http://gruntjs.com/) before, be sure to check out the [Getting Started](http://gruntjs.com/getting-started) guide, as it explains how to create a [Gruntfile](http://gruntjs.com/sample-gruntfile) as well as install and use Grunt plugins. Once you're familiar with that process, you may install this plugin with this command:\n\n```shell\nnpm install grunt-locales --save-dev\n```\n\nOnce the plugin has been installed, it may be enabled inside your Gruntfile with this line of JavaScript:\n\n```js\ngrunt.loadNpmTasks('grunt-locales');\n```\n\n## The locales task\n\n### Overview\nThe goal of this grunt task is to automate the localization of HTML templates and JavaScript source files.\n\ngrunt-locales parses `localize` attributes in HTML files as well as `localize` method calls in JS files and collects the parsed locale strings in JSON files for translation.  \nThe translated JSON locale files are then compiled into JavaScript files containing an object with translation mappings.\n\nThe JSON locale files can also be exported and imported to and from CSV locale files to ease the translation process.\n\nTo support translation features like pluralization and gender selection, this project relies on Alex Sexton's [MessageFormat](https://github.com/SlexAxton/messageformat.js) library to parse the locale strings and compile the dynamic translation functions.\n\n### Usage Examples\n\n#### Setup\nIn your project's Gruntfile, add a section named `locales` to the data object passed into `grunt.initConfig()`:\n\n```js\ngrunt.initConfig({\n    locales: {\n        options: {\n            locales: ['en_US', 'de_DE']\n        },\n        update: {\n            src: [\n                'templates/**/*.html',\n                'js/app/**/*.js'\n            ],\n            dest: 'js/locales/{locale}/i18n.json'\n        },\n        build: {\n            src: 'js/locales/**/i18n.json',\n            dest: 'js/locales/{locale}/i18n.js'\n        },\n        'export': {\n            src: 'js/locales/**/i18n.json',\n            dest: 'js/locales/{locale}/i18n.csv'\n        },\n        'import': {\n            src: 'js/locales/**/i18n.csv',\n            dest: 'js/locales/{locale}/i18n.json'\n        }\n    }\n});\n```\n\nEdit the `src` and `dest` paths according to the paths in your application.\n\n#### Locales update\nParse the HTML template files and JS source files and update the JSON locale files:\n\n```sh\ngrunt locales:update\n```\n\n#### Locales build\nParse the JSON locale files and build the JS locale files:\n\n```sh\ngrunt locales:build\n```\n\n#### Locales export\nExport the JSON locale files into CSV export files:\n\n```sh\ngrunt locales:export\n```\n\n#### Locales import\nCreate (and overwrite) the JSON locale files from the CSV locale files:\n\n```sh\ngrunt locales:import\n```\n\n#### Watch tasks\nInstall [grunt-contrib-watch](https://github.com/gruntjs/grunt-contrib-watch) to automatically update and build locales on file changes.\n\nIn your project's Gruntfile, add the following to your watch task configuration:\n\n```js\ngrunt.initConfig({\n    // ...\n    watch: {\n        templates: {\n            files: [\n                'templates/**/*.html',\n                'js/app/**/*.js'\n            ],\n            tasks: ['locales:update'],\n            options: {\n                spawn: false\n            }\n        },\n        locales: {\n            files: 'js/locales/**/i18n.json',\n            tasks: ['locales:build']\n        }\n    }\n});\n```\n\nAdd the following section to only parse updated HTML templates and JS source files:\n\n```js\ngrunt.event.on('watch', function (action, file) {\n    grunt.config('locales.update.options.purgeLocales', false);\n    grunt.config('locales.update.src', file);\n});\n```\n\n### Options\n\n#### options.locales\nType: `Array`  \nDefault value: `['en_US']`\n\nThe list of locales you are using for your translation framework.\n\n#### options.localizeAttributes\nType: `Array`  \nDefault value: `['localize']`\n\nA list of attributes that are parsed for locale strings in the HTML templates.  \nAll attributes in this list will also match with attributes of the same name with `data-` prefix.\n\nIf the attribute value is empty and the attribute key matches the default localize attribute (which is the **first** item in the list of `localizeAttributes`) or the equivalent with `data-` prefix, the parser takes the element HTML content as locale string:\n\n```html\n<p localize><strong>Bananas</strong></p>\n```\n\nThe above example will match `<strong>Bananas</strong>` as locale string.\n\n#### options.localizeMethodIdentifiers\nType: `Array`  \nDefault value: `['localize']`\n\nA list of method identifiers to identify the locale strings of localization calls in the JS source files. The default setting will match `Bananas` as locale string in the following code snippet:\n\n```js\nvar localizedText = localize('Bananas');\n```\n\n#### options.htmlFileRegExp\nType `RegExp`  \nDefault value: `/\\.html$/`\n\nSource files matching this expression will be parsed as HTML files for `localize` attributes.\n\n#### options.jsFileRegExp\nType `RegExp`  \nDefault value: `/\\.js$/`\n\nSource files matching this expression will be parsed as JS files for `localize` method calls.\n\n#### options.localeRegExp\nType `RegExp`  \nDefault value: `/\\w+(?=\\/[^\\/]+$)/`\n\nMatches the locale name in a file path, e.g. `en_US` in `js/locale/en_US/i18n.json`.  \nThis is used to automatically extract the locale name for the build and export tasks.\n\n#### options.localePlaceholder\nType: `String`  \nDefault value: `'{locale}'`\n\nThe placeholder for the locale name used to create the destination file paths.\n\n#### options.localeName\nType: `String`  \nDefault value: `'i18n'`\n\nThe name of the variable added to the `window` object in the created locale scripts.  \nThis variable holds the object of translation mappings.\n\n#### options.wrapStaticTranslations\nType: `Boolean`  \nDefault value: `false`\n\nIf enabled, wraps static translation strings with a function.  \nBy default, the translation keys are mapped to static strings, unless the translation changes depending on user data, in which case the key maps to a dynamic translation function.  \nThis option ensures that the translation mappings all use functions as values.\n\n#### options.purgeLocales\nType: `Boolean`  \nDefault value: `true`\n\nIf enabled, removes obsolete locale strings from the JSON files.  \nThis excludes strings parsed from the HTML templates, JS source files and the default messages.\n\n#### options.defaultMessagesSource\nType: `String|Array`  \nDefault value: `undefined`\n\nThe source filepath(s) to the JSON file(s) with default locale strings not found in the HTML templates or JS source files.  \nSupports filename expansion via [globbing patterns](http://gruntjs.com/configuring-tasks#globbing-patterns).\n\n#### options.messageFormatLocaleFile\nType: `String`  \nDefault value: `__dirname + '/../node_modules/messageformat/locale/{locale}.js'`\n\nThe location of the [MessageFormat](https://github.com/SlexAxton/messageformat.js) locale file.  \nThis locale specific file will be included in the build output.\n\n#### options.messageFormatSharedFile\nType: `String`  \nDefault value: `__dirname + '/../node_modules/messageformat/lib/messageformat.include.js'`\n\nThe location of the [MessageFormat](https://github.com/SlexAxton/messageformat.js) shared file.  \nThis file will be included in the build output.\n\n#### options.localeTemplate\nType: `String`  \nDefault value: `__dirname + '/../i18n.js.tmpl'`\n\nThe location of the template file used to render the JS locale files.\n\n#### options.urlRegExp\nType `RegExp`  \nDefault value: `/^((ftp|https?):\\/\\/|mailto:|#|\\{\\w+\\})/`\n\nThe allowed URL formats for sanitized HTML output.\n\n#### options.htmlmin\nType: `Object`  \nDefault value: `{removeComments: true, collapseWhitespace: true}`\n\nMinifies locale strings containing HTML with [html-minifier](https://github.com/kangax/html-minifier), using the given options object.  \nSet to `false` to disable HTML minification.\n\n#### options.htmlminKeys\nType: `Boolean`  \nDefault value: `false`\n\nIf enabled, also minifies the parsed keys containing HTML markup.  \nThis option can be useful if the locales are parsed from the unminified templates, but the templates are later minified e.g. using [grunt-contrib-htmlmin](https://github.com/gruntjs/grunt-contrib-htmlmin).\n\n#### options.jsonSpace\nType: `Integer`  \nDefault value: `2`\n\nThe `space` parameter to [JSON.stringify](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify) used to render the JSON locale files.\n\n#### options.jsonReplacer\nType: `function|Array`  \nDefault value: `undefined`\n\nThe `replacer` parameter to [JSON.stringify](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify) used to render the JSON locale files.\n\n#### options.csvEncapsulator\nType: `String`  \nDefault value: `'\"'`\n\nThe string encapsulator character(s) used for the CSV export.\n\n#### options.csvDelimiter\nType: `String`  \nDefault value: `','`\n\nThe table cell delimiter character(s) used for the CSV export.\n\n#### options.csvLineEnd\nType: `String`  \nDefault value: `'\\r\\n'`\n\nThe line end character(s) used for the CSV export.\n\n#### options.csvEscape\nType: `Function`  \nDefault value:\n\n```js\nfunction (str) {\n  return str.replace(/\"/g, '\"\"');\n}\n```\n\nThe string escape function used for the CSV export.\n\n#### options.csvKeyLabel\nType: `String`  \nDefault value: `'ID'`\n\nThe label for the header cell for the locale keys created in the CSV export.\n\n#### options.csvExtraFields\nType: `Array`  \nDefault value: `['files']`\n\nExtra fields from the JSON translation objects which are added to each CSV export row as additional information.\n\n## HTML templates format\nThe templates should contain HTML content which can be parsed by [node-htmlparser](https://github.com/tautologistics/node-htmlparser).\n\nBy default, the `locales:update` task parses all elements with `localize` attributes, as well as the same attributes with `-data` prefix. So elements with `data-localize` attribute will also be parsed, which allows strict HTML conformity.\n\nThe localization string is taken from the attribute value. For the attributes `localize` and `data-localize`, the string will be taken from the content of the element if the attribute value is empty.\n\n### HTML template examples\n\n```html\n<div data-name=\"Grunt\" data-localize>Hello {name}!</div>\n```\n\n```html\n<div data-num=\"{{results.length}}\" localize>There {num, plural, one{is <strong>one</strong> result} other{are <strong>#</strong> results}}.</div>\n```\n\n## JavaScript source files format\nThe JavaScript source files should contain JavaScript code which can be parsed by [Esprima](http://esprima.org/).\n\nThe parser will match all `localize` function calls with a String as first argument.  \nThe String must be static and cannot be passed as a variable or concatenation expression.  \nThe `localize` function can be invoked as an object method, but has to be written in dot notation and cannot be accessed as a String literal.\n\n### JavaScript source file examples\nBy default, the parser will match the following example method calls:\n\n```js\nvar result = localize(\n    'Hello {name}!',\n    {name: user.name}\n);\n```\n\n```js\nvar result = obj.localize('Save the Orangutans!');\n```\n\nIt will __not__ match the following:\n\n```js\nvar result = localize(\n    'Hello ' + '{name}!', // Concatenation expression\n    {name: user.name}\n);\n```\n\n```js\nvar result = obj.localize(str); // String passed as variable\n```\n\n```js\nvar result = obj['localize']('Save the Orangutans!'); // not written in dot notation.\n```\n\n## Translation mappings\nThe compiled translation mappings can be used the following way:\n\n```js\nfunction localize(key, data) {\n    var translation = window.i18n[key];\n    if (translation) {\n        if (!translation.call) {\n            // Translation is not a function, assume a static string:\n            return translation;\n        }\n        return translation(data);\n    }\n    // No mapping found, the translation value is the translation key:\n    return key;\n}\nvar result = localize('Hello {name}!', {name: 'Grunt'});\n```\n\n### DOM replacement\nAn example replacing the content of all HTML nodes of the current document with `data-localize` attribute with their translation result:\n\n```js\n[].forEach.call(document.querySelectorAll('[data-localize]'), function (node) {\n    var dataset = node.dataset,\n        data = {},\n        attr = dataset.localize,\n        translation = window.i18n[attr || node.innerHTML],\n        key;\n    if (translation) {\n        if (attr) {\n            node.textContent = (translation.call && translation(dataset)) || translation;\n        } else {\n            if (translation.call) {\n                for (key in dataset) {\n                    if (dataset.hasOwnProperty(key) && key !== 'localize') {\n                        data[key] = escapeHTML(dataset[key]);\n                    }\n                }\n                node.innerHTML = translation(data);\n            } else {\n                node.innerHTML = translation;\n            }\n        }\n    } else if (attr) {\n        node.textContent = attr;\n    }\n});\n```\nPlease note that when you are dynamically updating HTML content, you have to safeguard against [Cross-site scripting](http://en.wikipedia.org/wiki/Cross-site_scripting) attacks.\n\nA safe way is to filter all arguments passed to the translation functions, based on the context where the translation result will be inserted.\n\nArguments for translation functions which will be inserted as HTML element content can be safely escaped by replacing unsafe characters with their HTML entity equivalents, e.g. with the following function:\n\n```js\nfunction escapeHTML(str) {\n    return str.replace(/[<>&\"]/g, function (c) {\n        return {\n            '<' : '&lt;',\n            '>' : '&gt;',\n            '&' : '&amp;',\n            '\"' : '&quot;'\n        }[c];\n    });\n}\n```\n\n### AngularJS directive\n[angular-localize](https://github.com/blueimp/angular-localize) is a `localize` module for [AngularJS](http://angularjs.org/), which uses the translation mappings generated by grunt-locales.\n\n## Contributing\nIn lieu of a formal styleguide, take care to maintain the existing coding style. Add unit tests for any new or changed functionality. Lint and test your code using [Grunt](http://gruntjs.com/).\n","maintainers":[{"name":"blueimp","email":"sebastian.tschan@gmail.com"}],"time":{"modified":"2022-06-18T15:26:10.373Z","created":"2013-10-30T01:39:59.601Z","1.0.0":"2013-10-30T01:40:01.368Z","1.1.0":"2013-10-30T16:08:18.056Z","1.2.0":"2013-10-31T17:39:53.045Z","2.0.0":"2013-11-01T00:06:44.000Z","3.0.0":"2013-11-20T12:09:32.796Z","4.0.0":"2014-02-26T18:00:21.511Z","5.0.0":"2014-03-26T23:02:58.719Z","5.0.1":"2014-03-27T17:04:57.688Z","6.0.0":"2014-03-29T13:39:10.370Z","6.0.1":"2014-04-01T09:41:05.283Z","6.1.0":"2014-09-08T22:22:20.739Z","6.1.1":"2014-11-28T00:00:02.610Z","6.2.0":"2014-12-02T23:03:24.455Z","7.0.0":"2015-02-05T11:27:33.827Z","7.0.1":"2015-07-24T16:02:38.954Z","7.0.2":"2015-07-30T13:49:07.112Z","7.0.3":"2015-07-31T09:35:14.407Z","7.0.4":"2015-11-16T13:08:37.091Z","7.0.5":"2016-02-21T14:39:41.441Z","7.1.0":"2016-04-19T09:56:59.610Z"},"author":{"name":"Sebastian Tschan","url":"https://blueimp.net"},"repository":{"type":"git","url":"git://github.com/blueimp/grunt-locales.git"},"homepage":"https://github.com/blueimp/grunt-locales","keywords":["grunt","gruntplugin","locales","messageformat","translation","localization","localisation","internationalization","internationalisation","i18n","L10n"],"bugs":{"url":"https://github.com/blueimp/grunt-locales/issues"},"readmeFilename":"README.md","license":"MIT"}