{"_id":"zombiebox-extension-i18n","_rev":"30-ed80c808098443c18871dfae57db3bbd","name":"zombiebox-extension-i18n","description":"ZombieBox extension for i18n and l10n","dist-tags":{"latest":"2.1.1","dev":"2.0.0-alpha.2"},"versions":{"0.1.0":{"name":"zombiebox-extension-i18n","version":"0.1.0","main":"zombiebox-extension.js","scripts":{"test":"node_modules/karma/bin/karma start test/config.js --single-run"},"devDependencies":{"zombiebox":"0.0.199","karma":"0.12.23","mocha":"2.4.5","chai":"3.5.0","sinon":"1.10.3","sinon-chai":"2.8.0","zombiebox-karma":"0.2.0","karma-chai":"0.1.0","karma-mocha":"0.1.10","karma-mocha-reporter":"1.1.5","karma-phantomjs-launcher":"0.1.4","karma-closure":"0.1.0","karma-junit-reporter":"0.2.2","karma-sinon":"1.0.4","karma-chai-sinon":"0.1.5","karma-coverage":"0.5.3"},"description":"```JavaScript goog.require('zb.i18n.Service');","_id":"zombiebox-extension-i18n@0.1.0","_shasum":"ebb309256d72969858cb54a1eb0fde3c696c68f9","_from":".","_npmVersion":"2.14.7","_nodeVersion":"4.2.1","_npmUser":{"name":"interfaced","email":"developer@interfaced.ru"},"maintainers":[{"name":"interfaced","email":"developer@interfaced.ru"}],"dist":{"shasum":"ebb309256d72969858cb54a1eb0fde3c696c68f9","tarball":"https://registry.npmjs.org/zombiebox-extension-i18n/-/zombiebox-extension-i18n-0.1.0.tgz","integrity":"sha512-ZqYs5VAft+MhDPtmXmNmXzSis6YzBAXWDJXRe4e0cGWPbW+pnGQMpSElJeCRhNpeIZ0EkuwoiLUknxoVaqAhDA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBkwUtc8eUhSwbXQk1c2DDYXWMTMADPjiAbQ4jGdj051AiA/QWrLMZ3erNTYf9TR4geH6IxrkKz1YeFUEoI7VaP60w=="}]},"_npmOperationalInternal":{"host":"packages-5-east.internal.npmjs.com","tmp":"tmp/zombiebox-extension-i18n-0.1.0.tgz_1456844915347_0.7798106851987541"},"directories":{}},"0.1.1":{"name":"zombiebox-extension-i18n","version":"0.1.1","main":"zombiebox-extension.js","scripts":{"test":"node_modules/karma/bin/karma start test/config.js --single-run"},"devDependencies":{"zombiebox":"0.0.199","karma":"0.12.23","mocha":"2.4.5","chai":"3.5.0","sinon":"1.10.3","sinon-chai":"2.8.0","zombiebox-karma":"0.2.0","karma-chai":"0.1.0","karma-mocha":"0.1.10","karma-mocha-reporter":"1.1.5","karma-phantomjs-launcher":"0.1.4","karma-closure":"0.1.0","karma-junit-reporter":"0.2.2","karma-sinon":"1.0.4","karma-chai-sinon":"0.1.5","karma-coverage":"0.5.3"},"description":"```JavaScript goog.require('zb.i18n.Service'); goog.require('zb.i18n.Pack');","_id":"zombiebox-extension-i18n@0.1.1","_shasum":"243b93e5fdedf714f603cbd666333a58cf565ae3","_from":".","_npmVersion":"2.14.7","_nodeVersion":"4.2.1","_npmUser":{"name":"interfaced","email":"developer@interfaced.ru"},"maintainers":[{"name":"interfaced","email":"developer@interfaced.tv"}],"dist":{"shasum":"243b93e5fdedf714f603cbd666333a58cf565ae3","tarball":"https://registry.npmjs.org/zombiebox-extension-i18n/-/zombiebox-extension-i18n-0.1.1.tgz","integrity":"sha512-sU5qB/ZcHWW5Ap2JBrgWTEx9/WzBbwMDYP5pnnCMqrOwoWKEzTb628oOVj6znKMpfuComixxJf8mbkPnkab5Dg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDbtxvBNJT0hwMIPFTfdXCvHwU+sDDnozn3TtjxLpB3bwIhAPMY0bQNISuCZCp7/dYex35LxOO5COpUtszNWZDOOwPk"}]},"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/zombiebox-extension-i18n-0.1.1.tgz_1457592594674_0.4292784093413502"},"directories":{}},"0.1.2":{"name":"zombiebox-extension-i18n","version":"0.1.2","main":"zombiebox-extension.js","scripts":{"test":"node_modules/karma/bin/karma start test/config.js --single-run"},"devDependencies":{"zombiebox":"0.0.199","karma":"0.12.23","mocha":"2.4.5","chai":"3.5.0","sinon":"1.10.3","sinon-chai":"2.8.0","zombiebox-karma":"0.2.0","karma-chai":"0.1.0","karma-mocha":"0.1.10","karma-mocha-reporter":"1.1.5","karma-phantomjs-launcher":"0.1.4","karma-closure":"0.1.0","karma-junit-reporter":"0.2.2","karma-sinon":"1.0.4","karma-chai-sinon":"0.1.5","karma-coverage":"0.5.3"},"description":"```JavaScript goog.require('zb.i18n.Service'); goog.require('zb.i18n.Pack');","_id":"zombiebox-extension-i18n@0.1.2","_shasum":"2419b970c1e9668c866fd735263c045db63d0a5a","_from":".","_npmVersion":"2.14.7","_nodeVersion":"4.2.1","_npmUser":{"name":"interfaced","email":"developer@interfaced.ru"},"maintainers":[{"name":"interfaced","email":"developer@interfaced.tv"}],"dist":{"shasum":"2419b970c1e9668c866fd735263c045db63d0a5a","tarball":"https://registry.npmjs.org/zombiebox-extension-i18n/-/zombiebox-extension-i18n-0.1.2.tgz","integrity":"sha512-HZ0xbsaJETPtnXWhbfVwXyge0cIp6Y44rSg9mGnGlQ61viI3iZ812uGBK1jL+v5M8XD6Apn9LJRFBEXxlxDz+g==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIC75YgUzPePhvzdarLfg3XxvdfWqHQl/s5cyN1rzv5K5AiEA87e6Lkq1HnJGs3BhSur/W7igVDwyFcpspadUZd7KNyU="}]},"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/zombiebox-extension-i18n-0.1.2.tgz_1458045378256_0.5211907387711108"},"directories":{}},"0.1.3":{"name":"zombiebox-extension-i18n","version":"0.1.3","main":"zombiebox-extension.js","scripts":{"test":"node_modules/karma/bin/karma start test/config.js --single-run"},"devDependencies":{"zombiebox":"0.0.199","karma":"0.12.23","mocha":"2.4.5","chai":"3.5.0","sinon":"1.10.3","sinon-chai":"2.8.0","zombiebox-karma":"0.2.0","karma-chai":"0.1.0","karma-mocha":"0.1.10","karma-mocha-reporter":"1.1.5","karma-phantomjs-launcher":"0.1.4","karma-closure":"0.1.0","karma-junit-reporter":"0.2.2","karma-sinon":"1.0.4","karma-chai-sinon":"0.1.5","karma-coverage":"0.5.3"},"description":"```JavaScript goog.require('zb.i18n.Service'); goog.require('zb.i18n.Pack');","_id":"zombiebox-extension-i18n@0.1.3","_shasum":"5f65be03b20a361e16646bbc5d35eafda35e60af","_from":".","_npmVersion":"2.14.7","_nodeVersion":"4.2.1","_npmUser":{"name":"interfaced","email":"developer@interfaced.ru"},"maintainers":[{"name":"interfaced","email":"developer@interfaced.tv"}],"dist":{"shasum":"5f65be03b20a361e16646bbc5d35eafda35e60af","tarball":"https://registry.npmjs.org/zombiebox-extension-i18n/-/zombiebox-extension-i18n-0.1.3.tgz","integrity":"sha512-jYOJCQjBecw6r6ED9+rpGGGNZYnOCbq2qcv0PRJLq2euJ7eq6w4+HEPVJsOjl7R66XbX1omTezx1lPByVkn74A==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIC3S3uqdUFMe7jWsn6JQlj8ql8Zh5EuO5I7rjSH60WgwAiBQ57ledoOBWhbxvsbOEeKRpDY8QBT0zK3Dlx0xei3teA=="}]},"_npmOperationalInternal":{"host":"packages-16-east.internal.npmjs.com","tmp":"tmp/zombiebox-extension-i18n-0.1.3.tgz_1460962444795_0.6791607623454183"},"directories":{}},"0.2.0":{"name":"zombiebox-extension-i18n","version":"0.2.0","main":"zombiebox-extension.js","scripts":{"test":"node_modules/karma/bin/karma start test/config.js --single-run","postinstall":"echo $null >> node_modules/cldr-core/index.js && echo $null >> node_modules/cldr-dates-modern/index.js && echo $null >> node_modules/cldr-numbers-modern/index.js","extract-data":"node scripts/extract-locale-time-data.js"},"devDependencies":{"zombiebox":"0.0.199","karma":"0.12.23","mocha":"2.4.5","chai":"3.5.0","sinon":"1.10.3","sinon-chai":"2.8.0","zombiebox-karma":"0.2.0","karma-chai":"0.1.0","karma-mocha":"0.1.10","karma-mocha-reporter":"1.1.5","karma-phantomjs-launcher":"0.1.4","karma-closure":"git+https://github.com/Medium/karma-closure.git#nick-multipleprovides","karma-junit-reporter":"0.2.2","karma-sinon":"1.0.4","karma-chai-sinon":"0.1.5","karma-coverage":"0.5.3","cldr-core":">=29","cldr-dates-modern":">=29","cldr-numbers-modern":">=29"},"description":"```JavaScript goog.require('zb.i18n.Service'); goog.require('zb.i18n.Pack');","_id":"zombiebox-extension-i18n@0.2.0","_shasum":"84e5be77ecac9251b6337e71f3a2dfacfce3b24c","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.0.0","_npmUser":{"name":"interfaced","email":"developer@interfaced.ru"},"maintainers":[{"name":"interfaced","email":"developer@interfaced.tv"}],"dist":{"shasum":"84e5be77ecac9251b6337e71f3a2dfacfce3b24c","tarball":"https://registry.npmjs.org/zombiebox-extension-i18n/-/zombiebox-extension-i18n-0.2.0.tgz","integrity":"sha512-4oU+kN2eefrAkmNsbsi2bknRMahPIBSvyRREBBl5+kxE52WYVU8as60qrFeg70IKLNYH8IblbVvvOSqVaUmHEw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAC+8RtjoIVoEJLEKs0AOw2bQEvKEqkJIb7cqWKdBt1oAiBbNMKVhPMJmy0Rd32zjq47T1uYvSxTVVp/VzNl7COHng=="}]},"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/zombiebox-extension-i18n-0.2.0.tgz_1464786490503_0.5237252051010728"},"directories":{}},"0.3.0":{"name":"zombiebox-extension-i18n","version":"0.3.0","main":"zombiebox-extension.js","scripts":{"test":"node_modules/karma/bin/karma start test/config.js --single-run","postinstall":"echo $null >> node_modules/cldr-core/index.js && echo $null >> node_modules/cldr-dates-modern/index.js && echo $null >> node_modules/cldr-numbers-modern/index.js","extract-data":"node scripts/extract-locale-data.js"},"devDependencies":{"zombiebox":"0.0.199","karma":"0.12.23","mocha":"2.4.5","chai":"3.5.0","sinon":"1.10.3","sinon-chai":"2.8.0","zombiebox-karma":"0.2.0","karma-chai":"0.1.0","karma-mocha":"0.1.10","karma-mocha-reporter":"1.1.5","karma-phantomjs-launcher":"0.1.4","karma-closure":"git+https://github.com/Medium/karma-closure.git#nick-multipleprovides","karma-junit-reporter":"0.2.2","karma-sinon":"1.0.4","karma-chai-sinon":"0.1.5","karma-coverage":"0.5.3","cldr-core":">=29","cldr-dates-modern":">=29","cldr-numbers-modern":">=29"},"description":"```JavaScript goog.require('zb.i18n.Service'); goog.require('zb.i18n.Pack');","_id":"zombiebox-extension-i18n@0.3.0","_shasum":"69343990d88067bd144a96b387494c1f293411f6","_from":".","_npmVersion":"3.9.3","_nodeVersion":"6.2.1","_npmUser":{"name":"interfaced","email":"developer@interfaced.ru"},"maintainers":[{"name":"interfaced","email":"developer@interfaced.tv"}],"dist":{"shasum":"69343990d88067bd144a96b387494c1f293411f6","tarball":"https://registry.npmjs.org/zombiebox-extension-i18n/-/zombiebox-extension-i18n-0.3.0.tgz","integrity":"sha512-yQ0xPTVReB05yRdPSo/ksJ58+oZeQH6l48ph9awo566sqN1UsgLtrUAuxi0sLPGw7dU++kNJ8UlUzcJvwp+6hg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIA+suOySv9tl/ETKzxN6ENp7cuS0mO8jPJYQ0MGM5X3yAiAZt3gWenSOF9JCHmBfc6eeaEaFEV2Eu+oiQNCQzkklgA=="}]},"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/zombiebox-extension-i18n-0.3.0.tgz_1465388181763_0.8315523655619472"},"directories":{}},"0.3.1":{"name":"zombiebox-extension-i18n","version":"0.3.1","main":"zombiebox-extension.js","scripts":{"test":"node_modules/karma/bin/karma start test/config.js --single-run","postinstall":"node scripts/postinstall.js","extract-data":"node scripts/extract-locale-data.js"},"devDependencies":{"zombiebox":"0.0.199","karma":"0.12.23","mocha":"2.4.5","chai":"3.5.0","sinon":"1.10.3","sinon-chai":"2.8.0","zombiebox-karma":"0.2.0","karma-chai":"0.1.0","karma-mocha":"0.1.10","karma-mocha-reporter":"1.1.5","karma-phantomjs-launcher":"0.1.4","karma-closure":"git+https://github.com/Medium/karma-closure.git#nick-multipleprovides","karma-junit-reporter":"0.2.2","karma-sinon":"1.0.4","karma-chai-sinon":"0.1.5","karma-coverage":"0.5.3","cldr-core":">=29","cldr-dates-modern":">=29","cldr-numbers-modern":">=29"},"description":"```JavaScript goog.require('zb.i18n.Service'); goog.require('zb.i18n.Pack');","_id":"zombiebox-extension-i18n@0.3.1","_shasum":"e76d2f0930ef3882cec74d4c6f9155d4151c1c81","_from":".","_npmVersion":"3.9.3","_nodeVersion":"6.2.1","_npmUser":{"name":"interfaced","email":"developer@interfaced.ru"},"maintainers":[{"name":"interfaced","email":"developer@interfaced.tv"}],"dist":{"shasum":"e76d2f0930ef3882cec74d4c6f9155d4151c1c81","tarball":"https://registry.npmjs.org/zombiebox-extension-i18n/-/zombiebox-extension-i18n-0.3.1.tgz","integrity":"sha512-MrOnAvOQkNkA8vzBNeXoGWUoNP0goMK8Ob7xkdcrhfsxpuKiPHyXPj/pRjEQvIUG1emKKfO8upvSCfu3nl7s9w==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDTTR3UQGPSsyIzwf7HphsaapQdmbzZ6Vz+djeos0gpvAIhANEJZcfzbNaaOHdpKYpsgpAiNJe+gIki8PfwKTZRA9gz"}]},"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/zombiebox-extension-i18n-0.3.1.tgz_1465457484466_0.1648937575519085"},"directories":{}},"0.4.0-beta.1":{"name":"zombiebox-extension-i18n","version":"0.4.0-beta.1","description":"ZombieBox extension for i18n and l10n","license":"MIT","author":{"name":"Interfaced","url":"http://interfaced.tv"},"contributors":[{"name":"Kirill Dronkin","email":"kirilldronkin@gmail.com"},{"name":"Ilya Kalashnikov","email":"npm@kalashnikov.ir"}],"keywords":["zombiebox","extension","internalization","i18n","localization","l10n"],"files":["lib","generators","scripts","index.js","package.json","CHANGELOG.md","README.md","LICENSE"],"engines":{"node":">=6","npm":">=5"},"scripts":{"test":"karma start test/config.js --single-run","lint":"eslint index.js lib scripts test generators","postinstall":"node scripts/postinstall.js"},"devDependencies":{"chai":"3.5.0","eslint":"4.16.0","eslint-config-interfaced":"0.6.2","eslint-plugin-goog":"0.4.0","eslint-plugin-interfaced":"0.5.0","karma":"0.13.22","karma-chai":"0.1.0","karma-chai-sinon":"0.1.5","karma-chrome-launcher":"2.2.0","karma-closure":"github:ifaced/karma-closure","karma-coverage":"0.5.3","karma-mocha":"0.1.10","karma-mocha-reporter":"1.1.5","karma-sinon":"1.0.4","mocha":"2.4.5","sinon":"1.10.3","sinon-chai":"2.8.0","zombiebox":"1.0.0-alpha10"},"dependencies":{"ast-types":"0.9.12","cldr-core":"^32.0.0","cldr-dates-modern":"^32.0.0","cldr-numbers-modern":"^32.0.0","escodegen":"1.9.0","jison":"0.4.17"},"gitHead":"647fe4ef48f3ff99657fc9efc4a00b4c0030cdc4","_id":"zombiebox-extension-i18n@0.4.0-beta.1","_npmVersion":"5.5.1","_nodeVersion":"6.7.0","_npmUser":{"name":"kirilldronkin","email":"kirilldronkin@gmail.com"},"dist":{"integrity":"sha512-jB3qciL+U5eiMeI9FWgcLav2/78L7LFv01KCvM/bHZPm189LQomss9jzkYXBNGoozXZ3zoonXxCTjR3oxX4sNg==","shasum":"ed07b7e8c7a6030e4dcb7efe812dd66a7493b74b","tarball":"https://registry.npmjs.org/zombiebox-extension-i18n/-/zombiebox-extension-i18n-0.4.0-beta.1.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBphjvsbVVRfV8R51tJtK3MdBLPqYuROQlYk8kYHe+FqAiEAzOPn/CRD2ZBPQeOTosrQ1/u2BnoF/M0xqXIuRC48uV4="}]},"maintainers":[{"email":"kirilldronkin@gmail.com","name":"kirilldronkin"},{"email":"developer@interfaced.tv","name":"interfaced"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/zombiebox-extension-i18n-0.4.0-beta.1.tgz_1517481919849_0.4295902932062745"},"directories":{}},"0.5.0-beta.1":{"name":"zombiebox-extension-i18n","version":"0.5.0-beta.1","description":"ZombieBox extension for i18n and l10n","license":"MIT","author":{"name":"Interfaced","url":"http://interfaced.tv"},"contributors":[{"name":"Kirill Dronkin","email":"kirilldronkin@gmail.com"},{"name":"Ilya Kalashnikov","email":"npm@kalashnikov.ir"}],"keywords":["zombiebox","extension","internationalization","i18n","localization","l10n"],"files":["lib","generators","scripts","index.js","package.json","CHANGELOG.md","README.md","LICENSE"],"engines":{"node":">=6","npm":">=5"},"scripts":{"test":"node scripts/generate-test-fixtures.js && karma start test/config.js --single-run","lint":"eslint index.js lib test generators scripts"},"devDependencies":{"chai":"3.5.0","eslint":"4.16.0","eslint-config-interfaced":"0.6.2","eslint-plugin-goog":"0.4.0","eslint-plugin-interfaced":"0.5.0","karma":"0.13.22","karma-chai":"0.1.0","karma-chai-sinon":"0.1.5","karma-chrome-launcher":"2.2.0","karma-closure":"github:ifaced/karma-closure","karma-coverage":"0.5.3","karma-mocha":"0.1.10","karma-mocha-reporter":"1.1.5","karma-sinon":"1.0.4","mocha":"2.4.5","sinon":"1.10.3","sinon-chai":"2.8.0","zombiebox":"1.0.0-alpha10"},"dependencies":{"ast-types":"0.9.12","cldr-core":"^32.0.0","cldr-dates-modern":"^32.0.0","cldr-numbers-modern":"^32.0.0","escodegen":"1.9.0","jison":"0.4.17"},"gitHead":"08904ee79c42d711bc9483750799fbc69de1f978","_id":"zombiebox-extension-i18n@0.5.0-beta.1","_npmVersion":"5.8.0","_nodeVersion":"6.7.0","_npmUser":{"name":"kirilldronkin","email":"kirilldronkin@gmail.com"},"dist":{"integrity":"sha512-r29FzwFViZK8eFG8AFn7XbbYVSA4mAHiQ/zEqUzu3pT33gIuS43RpvG7M5JUTpfuQSA6JRf6GYUuz7q/Jyn+5A==","shasum":"f8984574cd43b27591faf88943b843d99d64764b","tarball":"https://registry.npmjs.org/zombiebox-extension-i18n/-/zombiebox-extension-i18n-0.5.0-beta.1.tgz","fileCount":30,"unpackedSize":85426,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCT9w87HWVzpj9FbawSFnCKvKoXTyuOfNlj4BIjwfkoCQIgcEUUvtkwdrTvHO7x+N7oADAn0YuFEyQnAowvamOeA9M="}]},"maintainers":[{"email":"developer@interfaced.tv","name":"interfaced"},{"email":"kirilldronkin@gmail.com","name":"kirilldronkin"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/zombiebox-extension-i18n_0.5.0-beta.1_1523533098757_0.34234956498583924"},"_hasShrinkwrap":false},"0.5.0-beta.2":{"name":"zombiebox-extension-i18n","version":"0.5.0-beta.2","description":"ZombieBox extension for i18n and l10n","license":"MIT","author":{"name":"Interfaced","url":"http://interfaced.tv"},"contributors":[{"name":"Kirill Dronkin","email":"kirilldronkin@gmail.com"},{"name":"Ilya Kalashnikov","email":"npm@kalashnikov.ir"}],"keywords":["zombiebox","extension","internationalization","i18n","localization","l10n"],"files":["lib","generators","index.js","package.json","CHANGELOG.md","README.md","LICENSE"],"engines":{"node":">=6","npm":">=5"},"scripts":{"test":"node scripts/generate-test-fixtures.js && karma start test/config.js --single-run","lint":"eslint index.js lib test generators scripts"},"devDependencies":{"chai":"3.5.0","eslint":"4.16.0","eslint-config-interfaced":"0.6.2","eslint-plugin-goog":"0.4.0","eslint-plugin-interfaced":"0.5.0","karma":"0.13.22","karma-chai":"0.1.0","karma-chai-sinon":"0.1.5","karma-chrome-launcher":"2.2.0","karma-closure":"github:ifaced/karma-closure","karma-coverage":"0.5.3","karma-mocha":"0.1.10","karma-mocha-reporter":"1.1.5","karma-sinon":"1.0.4","mocha":"2.4.5","sinon":"1.10.3","sinon-chai":"2.8.0","zombiebox":"1.0.0-alpha10"},"dependencies":{"ast-types":"0.9.12","cldr-core":"^32.0.0","cldr-dates-modern":"^32.0.0","cldr-numbers-modern":"^32.0.0","escodegen":"1.9.0","jison":"0.4.17"},"gitHead":"bc6c3a9db27bd193784d45e1f1052c2ed3458242","_id":"zombiebox-extension-i18n@0.5.0-beta.2","_npmVersion":"5.8.0","_nodeVersion":"6.7.0","_npmUser":{"name":"kirilldronkin","email":"kirilldronkin@gmail.com"},"dist":{"integrity":"sha512-jwd99p5mn1wDUTAKIGRlxGpnGXI7iMtXSlelztxP6esOlWMFe/ITA4JgxPn5NdlRj4XG30nAlt0lWh4Lr7LI2Q==","shasum":"f913a98757905fc8727795923729b1a1d5d98210","tarball":"https://registry.npmjs.org/zombiebox-extension-i18n/-/zombiebox-extension-i18n-0.5.0-beta.2.tgz","fileCount":28,"unpackedSize":84356,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIG7lpiIhTQQCSkNtYfAqk5jAREKpZjUpdh3oW4ghtQCMAiEAzJbltvMOX+TQP1uUrd/6LCr0DXc2cDtEK+nE1ChhbbU="}]},"maintainers":[{"email":"developer@interfaced.tv","name":"interfaced"},{"email":"kirilldronkin@gmail.com","name":"kirilldronkin"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/zombiebox-extension-i18n_0.5.0-beta.2_1523611341811_0.7077419566704142"},"_hasShrinkwrap":false},"0.5.0":{"name":"zombiebox-extension-i18n","version":"0.5.0","description":"ZombieBox extension for i18n and l10n","license":"MIT","author":{"name":"Interfaced","url":"http://interfaced.tv"},"contributors":[{"name":"Kirill Dronkin","email":"kirilldronkin@gmail.com"},{"name":"Ilya Kalashnikov","email":"npm@kalashnikov.ir"}],"keywords":["zombiebox","extension","internationalization","i18n","localization","l10n"],"files":["lib","generators","index.js","package.json","CHANGELOG.md","README.md","LICENSE"],"engines":{"node":">=6","npm":">=5"},"scripts":{"test":"node scripts/generate-test-fixtures.js && karma start test/config.js --single-run","lint":"eslint index.js lib test generators scripts"},"devDependencies":{"chai":"4.1.2","eslint":"5.0.1","eslint-config-interfaced":"1.0.0","eslint-plugin-goog":"1.0.0","eslint-plugin-interfaced":"1.0.0","karma":"0.13.22","karma-chai":"0.1.0","karma-chai-sinon":"0.1.5","karma-chrome-launcher":"2.2.0","karma-closure":"github:ifaced/karma-closure","karma-coverage":"0.5.3","karma-mocha":"0.1.10","karma-mocha-reporter":"1.1.5","karma-sinon":"1.0.4","mocha":"5.2.0","sinon":"6.1.0","sinon-chai":"3.2.0","zombiebox":"1.0.0-beta3"},"dependencies":{"ast-types":"0.11.5","cldr-core":"^33.0.0","cldr-dates-modern":"^33.0.0","cldr-numbers-modern":"^33.0.0","escodegen":"1.10.0","jison":"0.4.18"},"gitHead":"e8c3af4351c9ab11840446097a989fedda9fd19b","_id":"zombiebox-extension-i18n@0.5.0","_npmVersion":"6.1.0","_nodeVersion":"6.7.0","_npmUser":{"name":"kirilldronkin","email":"kirilldronkin@gmail.com"},"dist":{"integrity":"sha512-38lwly5YtvZz8HqSnSiggUTBlyQSPpB2faUNa2HYtDiwWQPO0lUhaA7l1gP3oH639vL9h/UfVuSr0esutjiGKg==","shasum":"78d0b4711bf17cc0d199638939b4e7bbb26f3770","tarball":"https://registry.npmjs.org/zombiebox-extension-i18n/-/zombiebox-extension-i18n-0.5.0.tgz","fileCount":28,"unpackedSize":89390,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbaWOZCRA9TVsSAnZWagAAlD4P/0/aWtl8ZDXWY3uAmlO9\nUKjp/j+LYd8BB2DGTzmWY2EUQNY0ChGXycIY8wmaHegAvXAQTFCOdAL2ECuX\nQvY3aDKocFaeM7KWw754P2D7TyWM4QQA9SGoS+plg0lMEr6s3DjX1lT1kWr0\nmuT/NBLgzDlAGUeB1HEgSEuYtFnGrKPb/8ihvXYqPf1sRcINmgeRwgX0vKdm\n+LsPVYZMkugupkfDUyrgcBc23O2Xmj9Nj51wdXKV+OBctw2jkzTY4ev3zbG/\nCLak07/trVlH7Dt3iDr27A8K+tN4hZD6ZRuHddVbvjDUgd9CxkWUg0ep7T/Q\nO+QAP63KXjHzA5LuqezHHBGhtNeAbj596lbRmrRA5P2nmQa5N5CQKfwYF5F2\n+x3SYI9b3TfRPoF3mkEfgMrMkstQfrS4/UKGvtAj6PbVS9PY9u4QBG5wp+BB\nsXZ6bgPk/kRjz4hRbQNYOZuPPkuCtu6XnfhSOMd1kXTh/g7d3Dbc6noVUHTw\nqNrL5r1WZ+pTgbJnKYJoDvn1cCV0vjan+hdmPKoQpuXeDrXNqnwYz6YO9L3k\nGLKfIppJEJvF3/duue0GM6nn4m3QxjubpMQStlX5YHIw78PXU4vgZ9ai90m0\nlovzNqfv81tNu8pmJW85/Xcj7debUBId0auzwfacIHA/iY1SUOJtRZ/AFPtN\nU6C7\r\n=5Hiq\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIB2GUSz3AOdeGE9xAmA0mUQIyPZerlpZf1gROmyKWEmUAiAQUHectPbp0WtPLQOh5mzxF0Gx5axil6cv591ymBP/WQ=="}]},"maintainers":[{"email":"developer@interfaced.tv","name":"interfaced"},{"email":"kirilldronkin@gmail.com","name":"kirilldronkin"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/zombiebox-extension-i18n_0.5.0_1533633433354_0.7637090066556305"},"_hasShrinkwrap":false},"0.6.0":{"name":"zombiebox-extension-i18n","version":"0.6.0","description":"ZombieBox extension for i18n and l10n","license":"MIT","author":{"name":"Interfaced","url":"http://interfaced.tv"},"contributors":[{"name":"Kirill Dronkin","email":"kirilldronkin@gmail.com"},{"name":"Ilya Kalashnikov","email":"npm@kalashnikov.ir"}],"keywords":["zombiebox","extension","internationalization","i18n","localization","l10n"],"engines":{"node":">=6","npm":">=5"},"scripts":{"test":"node scripts/generate-test-fixtures.js && karma start test/config.js --single-run","lint":"eslint index.js lib test generators scripts"},"devDependencies":{"chai":"4.1.2","eslint":"5.0.1","eslint-config-interfaced":"1.0.0","eslint-plugin-goog":"1.0.0","eslint-plugin-interfaced":"1.0.0","karma":"0.13.22","karma-chai":"0.1.0","karma-chai-sinon":"0.1.5","karma-chrome-launcher":"2.2.0","karma-closure":"github:ifaced/karma-closure","karma-coverage":"0.5.3","karma-mocha":"0.1.10","karma-mocha-reporter":"1.1.5","karma-sinon":"1.0.4","mocha":"5.2.0","sinon":"6.1.0","sinon-chai":"3.2.0","zombiebox":"1.0.0-beta3"},"dependencies":{"ast-types":"0.11.5","cldr-core":"^34.0.0","cldr-dates-modern":"^34.0.0","cldr-numbers-modern":"^34.0.0","escodegen":"1.10.0","jison":"0.4.18"},"gitHead":"af66671e12769f67229cb861cdfe44dc9de58d29","_id":"zombiebox-extension-i18n@0.6.0","_npmVersion":"6.4.1","_nodeVersion":"8.12.0","_npmUser":{"name":"kirilldronkin","email":"kirilldronkin@gmail.com"},"dist":{"integrity":"sha512-A45xH7Kq7TP3c2M2sqZ9U8A6hjHgsBjUWX9K4pswSpzT5xby0EvnTpOtxi8Wm33smcKk3DRh0RvYQaKy+vLTWg==","shasum":"395db7c73bd3b947736ed5421dea8bb455a234d9","tarball":"https://registry.npmjs.org/zombiebox-extension-i18n/-/zombiebox-extension-i18n-0.6.0.tgz","fileCount":28,"unpackedSize":90064,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcRs5oCRA9TVsSAnZWagAA4AoP/itCJkqFbNDBniLUJ6cJ\nezcKA+J0+iadD87T6X7Ugz39oDfS+ZC5zmeGKxFnk9hP39zR4x568j/nidNY\nHWFr9lJAMM8dsoyotNz9CmgsvW9gqNln6jAGf+WF166jKRbVjH74XXz6pQWK\nWNwF5J5IyPltgleml1kdwdQh5EIHy1z+XqjVpfcEYV1XthdJ7cX6FoKQnsgQ\nXBl23EWA7NpcPOG7EUh6A3HRrCg93bus81I5pzdNw8z7CBp8altPTlNCSsZu\nZZa6u3wqGoR4TWwk4McMfBwNr8EEeXftSNwwYsHZhvAEmOJQj7k9WvkMRVMq\nR6c0C4foiHGTklZtD/K0Q2PwGZczxirTgfBpSgbqQ9x7Fzsw/mZZHQ0f0I8s\n9NaAMRF60HvkMXU54VGJwkXWguJY7wRk+0HCnx6hhYxsx0pFGUqUGrmayEGK\nMEIWEPZlfd9hb/KnMCwRjppA7eJFCJ/LJ47GDvSCNC5dDLuGlLXt4MLzvI9O\nOwT8Ln3IDkQlkTMyJIze/nDG+h3bTIKYHPcRqvtIzRSZDpkafNn3sIGUwLU+\naR8E4ostCIo59Zd+gArbaCnnsTKwvG2xEon1AMz2ZudQ3nrBdvvIEMxWmNgu\n9nDo32TJwvnZbebvY8MdXfvgpB4tUVyo5khB0Lxgm/4JdN54D0gOrB4ILGb3\nUaZy\r\n=AoFq\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEgMSqUi4CBYUEMmxNBhBQvy99E1eIzPgcVwjyeTAF+CAiEA1HeC2nbV3+j0TOZYoe9ozgVcw+vRxykUAFPCOrMuqMQ="}]},"maintainers":[{"email":"andrew@htmlhero.ru","name":"htmlhero"},{"email":"kirilldronkin@gmail.com","name":"kirilldronkin"},{"email":"npm@kalashnikov.ir","name":"l1bbcsg"},{"email":"vyatcheslav.lacki@gmail.com","name":"lacki"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/zombiebox-extension-i18n_0.6.0_1548144231707_0.43314464273867515"},"_hasShrinkwrap":false},"1.0.0":{"name":"zombiebox-extension-i18n","version":"1.0.0","description":"ZombieBox extension for i18n and l10n","license":"MIT","author":{"name":"Interfaced","url":"http://interfaced.tv"},"contributors":[{"name":"Kirill Dronkin","email":"kirilldronkin@gmail.com"},{"name":"Ilya Kalashnikov","email":"npm@kalashnikov.ir"}],"keywords":["zombiebox","extension","internationalization","i18n","localization","l10n"],"engines":{"node":">=6","npm":">=5"},"scripts":{"test":"node scripts/generate-test-fixtures.js && karma start test/config.js --single-run","lint":"eslint index.js lib test generators scripts"},"devDependencies":{"chai":"4.1.2","eslint":"5.12.1","eslint-config-interfaced":"1.5.0","eslint-plugin-goog":"1.0.0","eslint-plugin-interfaced":"1.6.1","eslint-plugin-node":"^8.0.1","karma":"0.13.22","karma-chai":"0.1.0","karma-chai-sinon":"0.1.5","karma-chrome-launcher":"2.2.0","karma-closure":"github:ifaced/karma-closure","karma-coverage":"0.5.3","karma-mocha":"0.1.10","karma-mocha-reporter":"1.1.5","karma-sinon":"1.0.4","mocha":"5.2.0","sinon":"6.1.0","sinon-chai":"3.2.0","zombiebox":"^1.0.0"},"dependencies":{"ast-types":"0.11.7","cldr-core":"^34.0.0","cldr-dates-modern":"^34.0.0","cldr-numbers-modern":"^34.0.0","escodegen":"1.11.0","jison":"0.4.18"},"peerDependencies":{"zombiebox":"^1.0.0"},"gitHead":"856ad49f6636e3471285f826ffa265a1a3170e1e","_id":"zombiebox-extension-i18n@1.0.0","_npmVersion":"6.4.1","_nodeVersion":"10.12.0","_npmUser":{"name":"l1bbcsg","email":"npm@kalashnikov.ir"},"dist":{"integrity":"sha512-FjoRNNDkVnJCiF9SL/N/rfatyyAzVEIXKDxKrHvueNWks86H/afMVtszh+T9wLRpb5vRV+Bh2XEBy/S0wSRrvA==","shasum":"afe870588fc2b410ea5c305eef759d2ed40862e8","tarball":"https://registry.npmjs.org/zombiebox-extension-i18n/-/zombiebox-extension-i18n-1.0.0.tgz","fileCount":27,"unpackedSize":90204,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcVEBUCRA9TVsSAnZWagAAOs4P+wQJbPRQ4pIfGMUGZTLf\n7/L9m5/2VORJ36FeRlfv8p3tjHS2aOxJcH+5MB/1qBvcWXOdS3aQnJUZTwaj\nseQDkfxW00fX60c3O7Z+cEuQ7o5akr5BtJlAkBLtjOf/Olomr6YJuNFxciMb\neR5Nji392Nz2+oHn9G1VMlIqpwwxHlzfhZHyQqqVMIu+IX+UeHm0gOk0gM30\nkokDIHrZR/r03qe+iXVceR8A8Lf5t9771PxNqzASWpdiMnGax1+kiyBQtNlm\ncBEfc2PPtPmkRdFwAVPoCV7H0PI/C0KVDAHWjTq9loyTylfthdWh+WHoi9w2\n2dtei4Bk9+5q/nT2l13z+7kbCqkySmYaIp5pfJf5Y3f5MR7Rc8i8GQ5FEUc2\nvWhoU68mSgEGCPQSgO2Q9dDq+hYPbwoT9S/34KeC7RxbedcwPc/sIpPBq8Qz\naIouFOFy1hsE+xUwtKU7IrnJjyu2URro4kdKtPByPg8fwAdUujsEo1eNOq9v\nGrhYoB1mxKO7EPVCXP9BkEELquHw0CVTTnn9Y8Xobifx7WB14XxipOu35NI+\n/DIWMQ53xO1TWZSR12GD3KantDP/7+5GZqKs8vFkrUL+fS1eeP0WF38vIM9w\nLfMp0CPg6/EYBZltYSCIGhuHMwNUOap2OnN2A8VSMAZvRtPkMH3REcyjueSl\nbmG1\r\n=4mxe\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEz/5TDzagh2vcfk0dq58UI1u/9IQhmQjo0faVq8tCTrAiEA988rheigOuSQRW5DGKtYmkTQNEY29b6g4atFXsyEazs="}]},"maintainers":[{"email":"andrew@htmlhero.ru","name":"htmlhero"},{"email":"kirilldronkin@gmail.com","name":"kirilldronkin"},{"email":"npm@kalashnikov.ir","name":"l1bbcsg"},{"email":"vyatcheslav.lacki@gmail.com","name":"lacki"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/zombiebox-extension-i18n_1.0.0_1549025364326_0.6872849042527533"},"_hasShrinkwrap":false},"2.0.0-alpha.1":{"name":"zombiebox-extension-i18n","version":"2.0.0-alpha.1","description":"ZombieBox extension for i18n and l10n","license":"MIT","author":{"name":"Interfaced","url":"http://interfaced.tv"},"contributors":[{"name":"Kirill Dronkin","email":"kirilldronkin@gmail.com"},{"name":"Ilya Kalashnikov","email":"npm@kalashnikov.ir"}],"keywords":["zombiebox","extension","internationalization","i18n","localization","l10n"],"engines":{"node":">=6","npm":">=5"},"module":"lib","scripts":{"test.generate":"node scripts/generate-test-data.js","test.run":"karma start test/config.js","test":"npm run test.generate && npm run test.run","lint":"eslint index.js lib test generators scripts"},"devDependencies":{"chai":"4.2.0","cutejs":"^2.0.0-alpha.1","eslint":"5.13.0","eslint-config-interfaced":"1.5.0","eslint-import-resolver-alias":"^1.1.2","eslint-plugin-import":"^2.16.0","eslint-plugin-interfaced":"1.6.1","eslint-plugin-node":"^8.0.1","fs-extra":"^7.0.1","karma":"^4.0.0","karma-chai":"0.1.0","karma-chrome-launcher":"2.2.0","karma-mocha":"1.3.0","karma-mocha-reporter":"2.2.5","karma-module-resolver-preprocessor":"^1.1.1","mocha":"5.2.0","zombiebox":"^2.0.0-alpha.1"},"dependencies":{"ast-types":"0.12.2","cldr-core":"^34.0.0","cldr-dates-modern":"^34.0.0","cldr-numbers-modern":"^34.0.0","escodegen":"1.11.0","jison":"0.4.18"},"peerDependencies":{"zombiebox":"^2.0.0-alpha.1"},"gitHead":"b26d05a7ba5485033d20e24f06c9fbda4d0e97f4","readme":"# zombiebox-extension-i18n\n\n[ZombieBox](https://zombiebox.tv) extension for internationalization (i18n) and localization (l10n).\n\n# Usage\n\nThe extension generates pluralization and formats data for necessary locales on the fly during build process. Provide the list of locales you want to support in projects's config file:\n\n```js\nmodule.exports = () => ({\n\ti18n: {\n\t\tlocales: ['ru-RU', 'en-US']\n\t}\n});\n```\n\nInstantiate the service and add some language packs:\n\n```js\nimport Service from 'i18n/service';\nimport Pack from 'i18n/pack';\n\nconst enUsData = {\n    'home': {\n        'title': 'Home'\n    }\n};\n\nconst i18n = Service();\ni18n.addPack('en-US', Pack(enUsData));\ni18n.setLocale('en-US');\n\ni18n.trans('home.title'); // \"Home\"\n```\n\n# Locales\n\nLocales are defined by [BCP 47](https://tools.ietf.org/html/bcp47). A cleaner explanation is [available from W3C](https://www.w3.org/International/articles/language-tags/).\n\nThe extension is built upon [Unicode CLDR](http://cldr.unicode.org/) project and supports all locales available there.\n\n# Features\n\n- [Date and time](lib/datetime/README.md)\n- [Numbers and currencies formatting](lib/numbers/README.md)\n- Fallback locale\n- Interpolation\n- Pluralization\n- Pack keys forwarding\n- Custom pack keys separator\n\n## Fallback locale\n\nDefault fallback locale is `en-US`, but it can be changed with `setFallbackLocale`.\n\n```js\ni18n.addPack('en-US', new Pack({\n\t'home': {\n\t\t'title': 'Home'\n\t}\n}));\n\ni18n.addPack('ru-RU', new Pack({\n\t'player': 'Плеер',\n\t'home': {\n\t\t'title': 'Главная'\n\t}\n}));\n\ni18n.setFallbackLocale('ru-RU');\n\ni18n.trans('player'); // \"Плеер\", because pack en-US has no key \"player\" and ru-RU is its fallback locale\n```\n\n## Interpolation\n\n```js\ni18n.addPack('en-US', new zb.i18n.Pack({\n\t'video-views': 'This video was viewed [views] time(s)'\n}));\n\ni18n.trans('video-views', {'views': 3}); // \"This video was viewed 3 time(s)\"\n```\n\nValues for pluralization should be ether `string` or `number`. Numbers will be automatically formatted (see [numbers plugin documentation](numbers/README.md) for details).\nIf you wish to preformat a number, supply it as a `string`.\n\n## Pluralization\n\n```js\ni18n.addPack('en-US', new zb.i18n.Pack({\n\t'video-views-plural': 'This video was viewed [views] [viewsPlural:time|times]'\n}));\n\ni18n.trans('video-views-plural', {'views': 1}); // \"This video was viewed 1 time\"\ni18n.trans('video-views-plural', {'views': 3}); // \"This video was viewed 3 times\"\n```\n\nPlural forms separator can be customized with `pluralization.setFormsSeparator`.\n\n```js\ni18n.addPack('en-US', new zb.i18n.Pack({\n\t'video-views-plural': 'This video was viewed [views] [viewsPlural:time*times]'\n}));\n\ni18n.pluralization.setFormsSeparator('*');\n\ni18n.trans('video-views-plural', {'views': 1}); // \"This video was viewed 1 time\"\n```\n\nWhen pluralization fails the value will be stubbed with string \"`???`\" by default, but it can be customized with `pluralization.setValueStub`.\n\n```js\ni18n.addPack('en-US', new zb.i18n.Pack({\n\t'video-views-plural': 'This video was viewed [views] [viewsPlural:time]'\n}));\n\ni18n.pluralization.setValueStub('---');\n\ni18n.trans('video-views-plural', {'views': 3}); //  \"This video was viewed 1 ---\"\n```\n\n## Pack keys forwarding\n\nSometimes pack keys cannot be modified (e.g. if the pack was fetched from external API). For such cases packs have `forwardKeys` method that maps keys to their new values.\n\n```js\nconst enPack = new zb.i18n.Pack({\n\t'hom': 'Home'\n});\n\nenPack.forwardKeys({\n\t'hom': 'home'\n});\n\ni18n.addPack('en-US', enPack);\n\ni18n.trans('home'); // \"Home\"\n```\n\n## Custom pack keys separator\n\nSeparator can be customized with `pluralization.setKeySeparator`.\n\n```js\nconst enPack = new zb.i18n.Pack({\n\t'home': {\n\t\t'title': 'Home'\n\t}\n});\n\nenPack.setKeySeparator(':');\n\ni18n.addPack('en-US', enPack);\n\ni18n.trans('home:title'); // \"Home\"\n```\n\n# Conventions\n\n- Chunks of the pack key should be separated by \"`-`\" (e.g. `'red-button-title': '...'`)\n- Values that include raw html should be named with `-html` postfix (e.g. `'title-html': 'My<br/>Title'`)\n- Values for pluralization should be named with `-plural` postfix (e.g. `'views-plural': '[views] [viewsPlural:time|times]'`)\n\n# Caveats\n\nThe extension sometimes makes some assumptions and simplifications about data or localisation:\n\n * All operations with date and time are done in local timezone. All `Date` objects and scalar time segments and intervals are treated as local. The extension will not attempt to normalize them or simulate time zones.\n\n * Numbers formatting always separates digits by thousands (splitting into groups of three), i.e. `10,000,000` ignoring other systems such as Indian (i.e. `1,000,00,00`).\n\n * Trailing zeroes are essential for number formatting in some very rare cases (i.e. `1.3` supposed to be formatted differently from `1.3000`), however since JavaScript numbers do not preserve trailing zeroes they are ignored by numbers formatting functions.\n\n * Internally, the extension uses its own translation system to store and retrieve various formats. It's possible to interfere with it for better or worse, but care should be taken.\n\n * Timezone names are not supported in time formatting.\n \nContext object (the second argument of `trans` method) keys must be quoted according to the restrictions imposed by the Closure Compiler (see [Implications of global variable, function, and property renaming](https://developers.google.com/closure/compiler/docs/limitations#implications-of-global-variable-function-and-property-renaming)):\n\n```js\ni18n.trans('video-views', {views: 3}); // Bad\ni18n.trans('video-views', {'views': 3}); // Good\n```\n\nContext object (the second argument of `trans` method) keys must be quoted according to the restrictions imposed by the Closure Compiler (see [Implications of global variable, function, and property renaming](https://developers.google.com/closure/compiler/docs/limitations#implications-of-global-variable-function-and-property-renaming)):\n\n```js\ni18n.trans('video-views', {views: 3}); // Bad\ni18n.trans('video-views', {'views': 3}); // Good\n```\n\n# Tests\n\nThe extension has extensive unit tests coverage. \n\nUse `npm run test` to run them.\n","readmeFilename":"README.md","_id":"zombiebox-extension-i18n@2.0.0-alpha.1","_npmVersion":"6.4.1","_nodeVersion":"10.12.0","_npmUser":{"name":"l1bbcsg","email":"npm@kalashnikov.ir"},"dist":{"integrity":"sha512-GREZIVJG06FFDACHz/eHBrJsQs+h0+8Qzvoczli34w0PG2dDc+zFIbgqnW4cYqZqVrKLaVKhd/xSw+lUSB+ydg==","shasum":"3f74e6a9a215b64290ed70a343f0bae312e822dd","tarball":"https://registry.npmjs.org/zombiebox-extension-i18n/-/zombiebox-extension-i18n-2.0.0-alpha.1.tgz","fileCount":27,"unpackedSize":86912,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcZAXaCRA9TVsSAnZWagAAATUP/iAHQ9AaUxdRAiEqQ4Z/\nuODTQ8eCLWEgIcYwBcgwxftYHCV0/8mgd7pF7QUKXXKQnShbL7SXqCuJ2kSh\n3R32NVqWn11/1yoeDl8vja9k+CAj1VL8pnMFUFYVbEFFrlns+SV3KnoiKPB0\nP+U1w3vUQlv4JxbKD06cKsJVSYViv+GwlvdB6zgGkFt6h5smJ2vqhH3oRh4a\nKk0tVQLenH48P/s71eUHZBVtzeZRpegJm2GARfMIUSmOWDLrwxwL4A2e1G/l\nWmyWZridRa6drV/GXAeXzvnlb9kttZ55D8oeLUlB1MtXJCQG2HKcgrQiWvpT\nZUyJ5GX4Qlpjv7ueGzhsmU+tmk4yZyI3xJ1/WDi37W2qLW6t0XbRDOvRiXC3\nX52uMDXHi6HZq61eV0wEtYDv5uYCI4y2+9MLDIl8Qyi9PGcG7Zu3sqDOZQnB\nGVKolz+CDx93TgwveWSnH7QAm5hvW5jgtYmGpsCDcYNaw3WXKV4DI9UbXT+2\nzxNFy8SAGMD15TeGiUSJXP1rgLVSDtvXjfMiHJcjFkm7LCLOLVKmVLx7GFfp\nHS3K+hgSPhRwPk2y2eD61lpNETv/wuoiYtrAWWoc34Xp15zfhkiraZaK/oaF\n15I/4b+FOLll6rWRAsBdntdrocWXfix3BWOEFe6qZ8wEUIGedZAAxYP9W5uJ\nJs19\r\n=QeIQ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCeBshekEKNWsc3e2ekhnotspZFNw60u436hhYSVYAN+AIhAMI8FnmEi+WSrl5cuduxp9FsnF/IRZdptbNJAUPLN5oP"}]},"maintainers":[{"email":"andrew@htmlhero.ru","name":"htmlhero"},{"email":"kirilldronkin@gmail.com","name":"kirilldronkin"},{"email":"npm@kalashnikov.ir","name":"l1bbcsg"},{"email":"vyatcheslav.lacki@gmail.com","name":"lacki"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/zombiebox-extension-i18n_2.0.0-alpha.1_1550058969683_0.20007183232083148"},"_hasShrinkwrap":false},"2.0.0-alpha.2":{"name":"zombiebox-extension-i18n","version":"2.0.0-alpha.2","description":"ZombieBox extension for i18n and l10n","license":"MIT","author":{"name":"Interfaced","url":"https://interfaced.tv"},"contributors":[{"name":"Kirill Dronkin","email":"kirilldronkin@gmail.com"},{"name":"Ilya Kalashnikov","email":"npm@kalashnikov.ir"}],"keywords":["zombiebox","extension","internationalization","i18n","localization","l10n"],"engines":{"node":">=8.9","npm":">=5"},"module":"lib","scripts":{"test.generate":"node scripts/generate-test-data.js","test.run":"karma start test/config.js","test":"npm run test.generate && npm run test.run","lint":"eslint index.js lib test generators scripts"},"devDependencies":{"chai":"^4.2.0","cutejs":"^2.0.0-alpha.1","eslint":"^5.16.0","eslint-config-interfaced":"^1.5.0","eslint-import-resolver-alias":"^1.1.2","eslint-plugin-import":"^2.17.2","eslint-plugin-interfaced":"^1.6.1","eslint-plugin-node":"^9.1.0","fs-extra":"^8.0.1","karma":"^4.1.0","karma-chai":"^0.1.0","karma-chrome-launcher":"^2.2.0","karma-mocha":"^1.3.0","karma-mocha-reporter":"^2.2.5","karma-module-resolver-preprocessor":"^1.1.1","mocha":"^6.1.4","zombiebox":"^2.0.0-alpha.8"},"dependencies":{"ast-types":"~0.13.1","cldr-core":"^35.1.0","cldr-dates-modern":"^35.1.0","cldr-numbers-modern":"^35.1.0","escodegen":"^1.11.1","jison":"~0.4.18"},"peerDependencies":{"zombiebox":"^2.0.0-alpha.8"},"gitHead":"62cd5ec34ebd76a3068427a64e5e614b18dc720a","readme":"# zombiebox-extension-i18n\n\n[ZombieBox](https://zombiebox.tv) extension for internationalization (i18n) and localization (l10n).\n\n# Usage\n\nThe extension generates pluralization and formats data for necessary locales on the fly during build process. Provide the list of locales you want to support in projects's config file:\n\n```js\nmodule.exports = () => ({\n\ti18n: {\n\t\tlocales: ['ru-RU', 'en-US']\n\t}\n});\n```\n\nInstantiate the service and add some language packs:\n\n```js\nimport Service from 'i18n/service';\nimport Pack from 'i18n/pack';\n\nconst enUsData = {\n    'home': {\n        'title': 'Home'\n    }\n};\n\nconst i18n = Service();\ni18n.addPack('en-US', Pack(enUsData));\ni18n.setLocale('en-US');\n\ni18n.trans('home.title'); // \"Home\"\n```\n\n# Locales\n\nLocales are defined by [BCP 47](https://tools.ietf.org/html/bcp47). A cleaner explanation is [available from W3C](https://www.w3.org/International/articles/language-tags/).\n\nThe extension is built upon [Unicode CLDR](http://cldr.unicode.org/) project and supports all locales available there.\n\n# Features\n\n- [Date and time](lib/datetime/README.md)\n- [Numbers and currencies formatting](lib/numbers/README.md)\n- Fallback locale\n- Interpolation\n- Pluralization\n- Pack keys forwarding\n- Custom pack keys separator\n\n## Fallback locale\n\nDefault fallback locale is `en-US`, but it can be changed with `setFallbackLocale`.\n\n```js\ni18n.addPack('en-US', new Pack({\n\t'home': {\n\t\t'title': 'Home'\n\t}\n}));\n\ni18n.addPack('ru-RU', new Pack({\n\t'player': 'Плеер',\n\t'home': {\n\t\t'title': 'Главная'\n\t}\n}));\n\ni18n.setFallbackLocale('ru-RU');\n\ni18n.trans('player'); // \"Плеер\", because pack en-US has no key \"player\" and ru-RU is its fallback locale\n```\n\n## Interpolation\n\n```js\ni18n.addPack('en-US', new zb.i18n.Pack({\n\t'video-views': 'This video was viewed [views] time(s)'\n}));\n\ni18n.trans('video-views', {'views': 3}); // \"This video was viewed 3 time(s)\"\n```\n\nValues for pluralization should be ether `string` or `number`. Numbers will be automatically formatted (see [numbers plugin documentation](numbers/README.md) for details).\nIf you wish to preformat a number, supply it as a `string`.\n\n## Pluralization\n\n```js\ni18n.addPack('en-US', new zb.i18n.Pack({\n\t'video-views-plural': 'This video was viewed [views] [viewsPlural:time|times]'\n}));\n\ni18n.trans('video-views-plural', {'views': 1}); // \"This video was viewed 1 time\"\ni18n.trans('video-views-plural', {'views': 3}); // \"This video was viewed 3 times\"\n```\n\nPlural forms separator can be customized with `pluralization.setFormsSeparator`.\n\n```js\ni18n.addPack('en-US', new zb.i18n.Pack({\n\t'video-views-plural': 'This video was viewed [views] [viewsPlural:time*times]'\n}));\n\ni18n.pluralization.setFormsSeparator('*');\n\ni18n.trans('video-views-plural', {'views': 1}); // \"This video was viewed 1 time\"\n```\n\nWhen pluralization fails the value will be stubbed with string \"`???`\" by default, but it can be customized with `pluralization.setValueStub`.\n\n```js\ni18n.addPack('en-US', new zb.i18n.Pack({\n\t'video-views-plural': 'This video was viewed [views] [viewsPlural:time]'\n}));\n\ni18n.pluralization.setValueStub('---');\n\ni18n.trans('video-views-plural', {'views': 3}); //  \"This video was viewed 1 ---\"\n```\n\n## Pack keys forwarding\n\nSometimes pack keys cannot be modified (e.g. if the pack was fetched from external API). For such cases packs have `forwardKeys` method that maps keys to their new values.\n\n```js\nconst enPack = new zb.i18n.Pack({\n\t'hom': 'Home'\n});\n\nenPack.forwardKeys({\n\t'hom': 'home'\n});\n\ni18n.addPack('en-US', enPack);\n\ni18n.trans('home'); // \"Home\"\n```\n\n## Custom pack keys separator\n\nSeparator can be customized with `pluralization.setKeySeparator`.\n\n```js\nconst enPack = new zb.i18n.Pack({\n\t'home': {\n\t\t'title': 'Home'\n\t}\n});\n\nenPack.setKeySeparator(':');\n\ni18n.addPack('en-US', enPack);\n\ni18n.trans('home:title'); // \"Home\"\n```\n\n# Conventions\n\n- Chunks of the pack key should be separated by \"`-`\" (e.g. `'red-button-title': '...'`)\n- Values that include raw html should be named with `-html` postfix (e.g. `'title-html': 'My<br/>Title'`)\n- Values for pluralization should be named with `-plural` postfix (e.g. `'views-plural': '[views] [viewsPlural:time|times]'`)\n\n# Caveats\n\nThe extension sometimes makes some assumptions and simplifications about data or localisation:\n\n * All operations with date and time are done in local timezone. All `Date` objects and scalar time segments and intervals are treated as local. The extension will not attempt to normalize them or simulate time zones.\n\n * Numbers formatting always separates digits by thousands (splitting into groups of three), i.e. `10,000,000` ignoring other systems such as Indian (i.e. `1,000,00,00`).\n\n * Trailing zeroes are essential for number formatting in some very rare cases (i.e. `1.3` supposed to be formatted differently from `1.3000`), however since JavaScript numbers do not preserve trailing zeroes they are ignored by numbers formatting functions.\n\n * Internally, the extension uses its own translation system to store and retrieve various formats. It's possible to interfere with it for better or worse, but care should be taken.\n\n * Timezone names are not supported in time formatting.\n \nContext object (the second argument of `trans` method) keys must be quoted according to the restrictions imposed by the Closure Compiler (see [Implications of global variable, function, and property renaming](https://developers.google.com/closure/compiler/docs/limitations#implications-of-global-variable-function-and-property-renaming)):\n\n```js\ni18n.trans('video-views', {views: 3}); // Bad\ni18n.trans('video-views', {'views': 3}); // Good\n```\n\nContext object (the second argument of `trans` method) keys must be quoted according to the restrictions imposed by the Closure Compiler (see [Implications of global variable, function, and property renaming](https://developers.google.com/closure/compiler/docs/limitations#implications-of-global-variable-function-and-property-renaming)):\n\n```js\ni18n.trans('video-views', {views: 3}); // Bad\ni18n.trans('video-views', {'views': 3}); // Good\n```\n\n# Tests\n\nThe extension has extensive unit tests coverage. \n\nUse `npm run test` to run them.\n","readmeFilename":"README.md","_id":"zombiebox-extension-i18n@2.0.0-alpha.2","_npmVersion":"6.4.1","_nodeVersion":"10.15.3","_npmUser":{"name":"l1bbcsg","email":"npm@kalashnikov.ir"},"dist":{"integrity":"sha512-ZQjXpLhuxhxulg9lTCzSi1QTEpq1G6Pnx4eQLRQMfA4+WhiiUSlT3f6DEX16GZGe88HSU2QLmXDaA2oUrDjMKw==","shasum":"c85480cd0ec3f274d7726e3b7f2eaff868b51d6b","tarball":"https://registry.npmjs.org/zombiebox-extension-i18n/-/zombiebox-extension-i18n-2.0.0-alpha.2.tgz","fileCount":27,"unpackedSize":87116,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc5nx8CRA9TVsSAnZWagAAcaEP/1q4U+lqwOnLRnBx4pfA\nZWKMIRH55OMrz7T+P4RskZVvnglwR7/cnXvpOk33LZ+8FbjRCdi0GxK3yHrj\nAQs15ZqCZZMQo9NVKET68+tMfJb8Ta+/xqQl+e5vyVtULv97mljdaIGNgw15\nZvx5+007fwb6keAhSpZ5eKHVYfQ20qd9m4jFN0tXY5O0qsPN4t68E+ioQytw\nat2VPRE1a6+TMJ6QqSveUn+BZaqOwCaGl2R2mADK/VPkN9efM7IQ3GoC3S3S\nk0V4Vs2fwKgFnF6eiCEJbcTqXC8ma+fLnmb8vy9YyYjdYjou/s/J2qZ8ASd1\nqj07eVvNHVlo0TBHDB4Cku4igtRz5yHwn5nLvON31ctRiqapU0mZaLoLkeF6\n3Ge6hTa3HFZnIHKWpR+q+eUqXSaWPRIa7TuKQ8TAu5DdnZJVwCjMSM1k2hch\navqS0qMZFXCG70s9lzo+O+qitjGpgLyXphhbyK3OBPZtiIUc/BXT3j2UP21G\n/2SxCshmH3hUhzkLvXVITJQzTlhNLuw5cylVkyEQH+NidWhBtw/adEMMjyEi\n9xtAKKpPxjlsokK9/aizDNGCD7HmWoBYaChk+0dziOsN+A5oeYmQR/sUIGsS\nDxf6Cc+bdCa/yqxyJGm2HQkV/sAu6b76NrPqxsnAUhfOXXxhUihzBXnaVVeN\nJw+x\r\n=l7vL\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGAQUp2wDtIGYcg7HZThiuwcPtuwsbc3zEWVfGCFq+wEAiEAp+PHXWnH1aRqeKbNiArHr7QD/klw/xFWzGeDFT3ZTcQ="}]},"maintainers":[{"email":"andrew@htmlhero.ru","name":"htmlhero"},{"email":"kirilldronkin@gmail.com","name":"kirilldronkin"},{"email":"npm@kalashnikov.ir","name":"l1bbcsg"},{"email":"vyatcheslav.lacki@gmail.com","name":"lacki"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/zombiebox-extension-i18n_2.0.0-alpha.2_1558609019905_0.07971389836033382"},"_hasShrinkwrap":false},"2.0.0":{"name":"zombiebox-extension-i18n","version":"2.0.0","description":"ZombieBox extension for i18n and l10n","license":"MIT","author":{"name":"Interfaced","url":"https://interfaced.tv"},"contributors":[{"name":"Kirill Dronkin","email":"kirilldronkin@gmail.com"},{"name":"Ilya Kalashnikov","email":"npm@kalashnikov.ir"}],"repository":{"type":"git","url":"git+ssh://git@github.com/interfaced/zombiebox-extension-i18n.git"},"keywords":["zombiebox","extension","smart-tv","internationalization","i18n","localization","l10n"],"engines":{"node":">=8.9","npm":">=5"},"module":"lib","scripts":{"test.generate":"node scripts/generate-test-data.js","test.run":"karma start test/config.js","test":"npm run test.generate && npm run test.run","lint":"eslint ."},"devDependencies":{"chai":"^4.2.0","cutejs":"^2.0.0-alpha.1","eslint":"^5.16.0","eslint-config-interfaced":"^1.5.0","eslint-import-resolver-alias":"^1.1.2","eslint-plugin-import":"^2.17.2","eslint-plugin-interfaced":"^1.6.1","eslint-plugin-node":"^9.1.0","fs-extra":"^8.0.1","karma":"^4.1.0","karma-chai":"^0.1.0","karma-chrome-launcher":"^2.2.0","karma-mocha":"^1.3.0","karma-mocha-reporter":"^2.2.5","karma-module-resolver-preprocessor":"^1.1.1","mocha":"^6.1.4","zombiebox":"^2.0.0-alpha.8"},"dependencies":{"ast-types":"~0.13.1","cldr-core":"^35.1.0","cldr-dates-modern":"^35.1.0","cldr-numbers-modern":"^35.1.0","escodegen":"^1.11.1","jison":"~0.4.18"},"peerDependencies":{"zombiebox":"^2.0.0-alpha.8"},"gitHead":"bf6e15ba2732d94a6d4329cab2d00184fc7831a7","bugs":{"url":"https://github.com/interfaced/zombiebox-extension-i18n/issues"},"homepage":"https://github.com/interfaced/zombiebox-extension-i18n#readme","_id":"zombiebox-extension-i18n@2.0.0","_npmVersion":"6.4.1","_nodeVersion":"10.15.3","_npmUser":{"name":"l1bbcsg","email":"npm@kalashnikov.ir"},"dist":{"integrity":"sha512-GVbG4oO8G4ohxqLTzyA1H/xWeBhhIyTa4YiMfgcz8O1JwQcTrpMpCxBLx9FnhHEcorVYzb8hC2EuX/zzAmq4pA==","shasum":"6b804055dd98c7f8af7b08969b92592f521e86eb","tarball":"https://registry.npmjs.org/zombiebox-extension-i18n/-/zombiebox-extension-i18n-2.0.0.tgz","fileCount":27,"unpackedSize":87155,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdAilmCRA9TVsSAnZWagAAMgsQAIjd0NwO4zopQZSsgtSm\nIhMPzWy/mZ93RSdtN1IQLa9MFfCd9caRasjDUHbgHUlMzqNrWRRWDIw4ERIk\ng7J5rGFb8AQnDc+Qp9GxyikF3K+KY1ZBKlcCN2Y8BBr6Hwzt1zm1vn7npl7w\nc1A2tpP6LXHa3wV0BYpZkNdDR1swmUCdhNZujwuNKU6XD73AZzd9PZIi8/GT\nJzPwtN0IWMpysXCzazUcPLiShZJT8+fJc6XHfu8EUvG7QC2ev4qIh188VbFU\nBa/hopcLmNpyXbzwezVoZIKihtjQTfjkTIjKqNDwtu5BZqgLkIfXpvpO4MzO\nm2sNrHpxixQSfpSzS2MTpZOpJdLO1YDXelcHOqNz0aPdyDEpJgI78YLT7Eq9\nPJZ2lMeB+q7EXDnBC1GEepI0VtzG9Y+QEKr0HeoJlEuCCmYMmRB5Ynfg8jaK\nAHvRRbRTp48FizXW5L7BFyF0ND6M6oX/RRNIkeCpM7Hm0Bwei7a1XIOF7Ijv\nnNGXzLXpc/SM0izI1MPEvIQVZVX3w5DiGKJE0/7wX9F9KcW45nfJi6PFFqNV\nssBtlDL4Y5wlVxF0/n7rO5PZS/g2KoF8pq1SgkLBUuQleB07Yo//UJ7qnKF4\nqf5i2nw8i/A4CkgaATxKVWrsmrPmOAvFaRCy+hTXDD3LA95xDU9c2ClNr093\nlYVZ\r\n=M3Q0\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICb+9LsPgKufiBhz/1ZYGMsxLvvmiuKG65fh1y2VNYhGAiBhKS7OpRePRwrRr6ea3i0z0TBkmsPCRcpeA5TR5JsARw=="}]},"maintainers":[{"email":"andrew@htmlhero.ru","name":"htmlhero"},{"email":"kirilldronkin@gmail.com","name":"kirilldronkin"},{"email":"npm@kalashnikov.ir","name":"l1bbcsg"},{"email":"vyatcheslav.lacki@gmail.com","name":"lacki"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/zombiebox-extension-i18n_2.0.0_1560422757176_0.7692725129347813"},"_hasShrinkwrap":false},"2.1.0":{"name":"zombiebox-extension-i18n","version":"2.1.0","description":"ZombieBox extension for i18n and l10n","license":"MIT","author":{"name":"Interfaced","url":"https://interfaced.tv"},"contributors":[{"name":"Kirill Dronkin","email":"kirilldronkin@gmail.com"},{"name":"Ilya Kalashnikov","email":"npm@kalashnikov.ir"}],"repository":{"type":"git","url":"git+ssh://git@github.com/interfaced/zombiebox-extension-i18n.git"},"keywords":["zombiebox","extension","smart-tv","internationalization","i18n","localization","l10n"],"engines":{"node":">=8.9","npm":">=5"},"module":"lib","scripts":{"test.generate":"node scripts/generate-test-data.js","test.run":"karma start test/config.js","test":"npm run test.generate && npm run test.run","lint":"eslint ."},"devDependencies":{"chai":"^4.2.0","cutejs":"^2.0.0","eslint":"^6.8.0","eslint-config-interfaced":"^2.0.0","eslint-import-resolver-alias":"^1.1.2","eslint-import-resolver-zombiebox":"git+ssh://git@bitbucket.org/interfaced/eslint-import-resolver-zombiebox.git#0.1.0","eslint-plugin-header":"^3.0.0","eslint-plugin-import":"^2.20.0","eslint-plugin-interfaced":"^2.0.0","eslint-plugin-jsdoc":"^20.3.1","eslint-plugin-node":"^11.0.0","fs-extra":"^8.1.0","karma":"^4.4.1","karma-chai":"^0.1.0","karma-chrome-launcher":"^3.1.0","karma-mocha":"^1.3.0","karma-mocha-reporter":"^2.2.5","karma-module-resolver-preprocessor":"^1.1.1","mocha":"^7.0.0","zombiebox":"^2.5.0"},"dependencies":{"ast-types":"~0.13.2","cldr-core":"^36.0.0","cldr-dates-modern":"^36.0.0","cldr-numbers-modern":"^36.0.0","escodegen":"^1.13.0","jison":"~0.4.18"},"peerDependencies":{"zombiebox":"^2.5.0"},"gitHead":"34eefdd197141cf8b1e94bb9a0443de26e81c901","bugs":{"url":"https://github.com/interfaced/zombiebox-extension-i18n/issues"},"homepage":"https://github.com/interfaced/zombiebox-extension-i18n#readme","_id":"zombiebox-extension-i18n@2.1.0","_nodeVersion":"12.10.0","_npmVersion":"6.10.3","dist":{"integrity":"sha512-xTXSFa2wsr4Df6EwVSlhI6s0FMFngwVUvodI6/dWR5KPuD+4I3ZRZX6x37Ogo2x+mrDW/KAcoVY8YItPZ6ZoXw==","shasum":"9e8b6ee13b9e3cbb903d742096dbb30a0b69a5d9","tarball":"https://registry.npmjs.org/zombiebox-extension-i18n/-/zombiebox-extension-i18n-2.1.0.tgz","fileCount":27,"unpackedSize":88108,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeKZrnCRA9TVsSAnZWagAA4pQP/2Q7k8B1qcij5oza85j/\n3J297W6p2KHagt7AcUYZQCB6d/go7TkNpSq0AB1rlMwUdYpRLIqTrBTTObpy\nEGmKdJsf8z164HLVK/lcc86a0pDRpw6XqcOPXv2vCbCR5gKJTwm5vPNbaMzd\nsv1R87GDP6K9ISywpHGpOljQDJNOpjXHbVYHKVTncpwqo00N5AbGWsLwN8n6\nGHSP0BDH+1y3ItQRTYrV6DOV3N7kNeWHaf0RQRLQfWgnFEj+lfsh1D5z0zMw\nh4WzE7foKnkKDc5QZppKOn7nimYkYHjC+c83QzCfjdWnHhPb7NmaW//FrF8C\ntcAfktPYFmGOtl+tYmMJFxqd1k9K/oCPkVTpMiUheyZGTQDkvJD5BNpWMaxC\nNgWNvgjNPg81sTaikChtmI0Hv2VBDC5pvKG8PQNRhMKPTx7oESiEecX5OzPe\ncgU1dWNAWBOcyvEJxfiGYpzljBQeJe0T/YGn+n/9S4LxAhxBsulxd5sg0P0k\nEb53zpRGzA5cLtX9fBWLCnPkK6CYhpKqRbECmT82DkBnpG0HF2OG5xXl0JRk\njQlzowqn1utmefU5QyiF0i8GN9muk46vig/U9moxlacDzEGwrUU1dqQh0x+Z\nVu5qyrMnHDdXqVlcRAsFV55JwY1S4T69brFxK4pOvqBzTDxLI8Bej5+p3Aaa\nCL4f\r\n=4Qj1\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC9MAm5bbjwcRwcJNQpw/fspD9MnZ/q8cnjlOW+iuUefQIgJK+puzHFcanNE7dwimstnFyN9N3QMy0w2c8OcTF0ZnY="}]},"maintainers":[{"email":"kirilldronkin@gmail.com","name":"kirilldronkin"},{"email":"npm@kalashnikov.ir","name":"l1bbcsg"},{"email":"vyatcheslav.lacki@gmail.com","name":"lacki"}],"_npmUser":{"name":"l1bbcsg","email":"npm@kalashnikov.ir"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/zombiebox-extension-i18n_2.1.0_1579784934838_0.6852097426937804"},"_hasShrinkwrap":false},"2.1.1":{"name":"zombiebox-extension-i18n","version":"2.1.1","description":"ZombieBox extension for i18n and l10n","license":"MIT","author":{"name":"Interfaced","url":"https://interfaced.tv"},"contributors":[{"name":"Kirill Dronkin","email":"kirilldronkin@gmail.com"},{"name":"Ilya Kalashnikov","email":"npm@kalashnikov.ir"}],"repository":{"type":"git","url":"git+ssh://git@github.com/interfaced/zombiebox-extension-i18n.git"},"keywords":["zombiebox","extension","smart-tv","internationalization","i18n","localization","l10n"],"engines":{"node":">=8.9","npm":">=5"},"module":"lib","scripts":{"test.generate":"node scripts/generate-test-data.js","test.run":"karma start test/config.js","test":"npm run test.generate && npm run test.run","lint":"eslint ."},"devDependencies":{"chai":"^4.2.0","cutejs":"^2.0.0","eslint":"^6.8.0","eslint-config-interfaced":"^2.0.0","eslint-import-resolver-alias":"^1.1.2","eslint-import-resolver-zombiebox":"git+ssh://git@bitbucket.org/interfaced/eslint-import-resolver-zombiebox.git#0.1.0","eslint-plugin-header":"^3.0.0","eslint-plugin-import":"^2.20.1","eslint-plugin-interfaced":"^2.0.0","eslint-plugin-jsdoc":"^21.0.0","eslint-plugin-node":"^11.0.0","fs-extra":"^8.1.0","karma":"^4.4.1","karma-chai":"^0.1.0","karma-chrome-launcher":"^3.1.0","karma-mocha":"^1.3.0","karma-mocha-reporter":"^2.2.5","karma-module-resolver-preprocessor":"^1.1.1","mocha":"^7.0.1","zombiebox":"^2.6.1"},"dependencies":{"ast-types":"~0.13.2","cldr-core":"^36.0.0","cldr-dates-modern":"^36.0.0","cldr-numbers-modern":"^36.0.0","escodegen":"^1.14.1","jison":"~0.4.18"},"peerDependencies":{"zombiebox":"^2.6.1"},"gitHead":"d6cc69da55a472f902711d6a87029df6d26d2aba","bugs":{"url":"https://github.com/interfaced/zombiebox-extension-i18n/issues"},"homepage":"https://github.com/interfaced/zombiebox-extension-i18n#readme","_id":"zombiebox-extension-i18n@2.1.1","_nodeVersion":"12.10.0","_npmVersion":"6.10.3","dist":{"integrity":"sha512-+hVtFwArApzri7rX9Oo32xPj1W9nOZcrVCGaVmxyyJsgJD1+3Ds4AsKvMXoXTzt5aZFntpVR4wYykN+twDBPqA==","shasum":"c02b8e900b0e3aeb65209f607c745fc0b72f8081","tarball":"https://registry.npmjs.org/zombiebox-extension-i18n/-/zombiebox-extension-i18n-2.1.1.tgz","fileCount":28,"unpackedSize":89814,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJePAyQCRA9TVsSAnZWagAA8ooP/iogk5lLMpppQd/xkH4k\nYh2sf/yXR+2FkkHIM0JrCSZ2Ypujd/3v2RhJShr45HTndQTS3aVwNoBzlPHP\nxYSQ30Gf5xSyO8C4U+VTza+6TMQmjhqmMEFzQla7Rkl277YRzS4+YVoPUQgp\nwn713OT98wAz0rt7wlzJBO2LQrFLzu0YE/3gSzjF3/oYa7q8SpGvhlF9lSXO\n7dGQx6iCwH8PbNI/FgYeO8hhPXY+cBJrZVRqcMHIaWrLMlh905p83k7s9pAW\n8Ajf91+GbDNcE6HIlsPnR09lq8ebwKjZ9ttLt4c8ESMG12AsuLiaA/rswcEn\nXSEdeLCUn62a5IZPvq9TINdjo1BtqdEByGLtdoXGqG6+RWLDEPitIfruaibK\nAW4P6aoRKsVs+MM+ZfDgiLra8NWTb2YecgDiCX/24S0AAyX24IZHmzXQZLRa\nxqPGTOKeNiuVZz4P3up0G9MW/zuwDHEF8eKlKyi693b6ZxAV0wu9WZd2h0n0\nwg1PJgXl3TNf1DHyO7ONNuousDdI/ctdcylXZwE2Sly5zfit0qsCAPQfKFf+\nFrRjV8hGNhNFeO+bPv1ksG3xWt8NnLPUrTIe7wGPGk67GwKAYMe581vBgkL+\n7gVaDvzBMN5k/wlhGSyAsRiKG/KqOtXDbd4LxGpsu2E94OTai9y1ROFej0AJ\nHTBb\r\n=05ee\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBtdGtofEnhExAXZWD7QIMzUm4hns/rDY9EgVYISAOOBAiAKhOnQJoGLatSjh03E2ijxfFhAAXyJH2zHiUyOf3mJlA=="}]},"maintainers":[{"email":"kirilldronkin@gmail.com","name":"kirilldronkin"},{"email":"npm@kalashnikov.ir","name":"l1bbcsg"},{"email":"vyatcheslav.lacki@gmail.com","name":"lacki"}],"_npmUser":{"name":"l1bbcsg","email":"npm@kalashnikov.ir"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/zombiebox-extension-i18n_2.1.1_1580993680399_0.8761343960548431"},"_hasShrinkwrap":false}},"readme":"# zombiebox-extension-i18n\n\n[ZombieBox](https://zombiebox.tv) extension for internationalization (i18n) and localization (l10n).\n\n# Usage\n\nThe extension generates pluralization and formats data for necessary locales on the fly during build process. Provide the list of locales you want to support in projects's config file:\n\n```js\nmodule.exports = () => ({\n\ti18n: {\n\t\tlocales: ['ru', 'en', 'es-BR']\n\t}\n});\n```\n\nInstantiate the service and add some language packs:\n\n```js\nimport Service from 'i18n/service';\nimport Pack from 'i18n/pack';\n\nconst enUsData = {\n    'home': {\n        'title': 'Home'\n    }\n};\n\nconst i18n = new Service();\ni18n.addPack('en-US', Pack(enUsData));\ni18n.setLocale('en-US');\n\ni18n.trans('home.title'); // \"Home\"\n```\n\n# Locales\n\nLocales are defined by [BCP 47](https://tools.ietf.org/html/bcp47). A cleaner explanation is [available from W3C](https://www.w3.org/International/articles/language-tags/).\n\nThe extension is built upon [Unicode CLDR](http://cldr.unicode.org/) project and supports all locales available there.\n\n# Features\n\n- [Date and time](lib/datetime/README.md)\n- [Numbers and currencies formatting](lib/numbers/README.md)\n- Fallback locale\n- Interpolation\n- Pluralization\n- Pack keys forwarding\n- Custom pack keys separator\n\n## Fallback locale\n\nDefault fallback locale is `en-US`, but it can be changed with `setFallbackLocale`.\n\n```js\ni18n.addPack('en-US', new Pack({\n\t'home': {\n\t\t'title': 'Home'\n\t}\n}));\n\ni18n.addPack('ru-RU', new Pack({\n\t'player': 'Плеер',\n\t'home': {\n\t\t'title': 'Главная'\n\t}\n}));\n\ni18n.setFallbackLocale('ru-RU');\n\ni18n.trans('player'); // \"Плеер\", because pack en-US has no key \"player\" and ru-RU is its fallback locale\n```\n\n## Interpolation\n\n```js\ni18n.addPack('en-US', new Pack({\n\t'video-views': 'This video was viewed [views] time(s)'\n}));\n\ni18n.trans('video-views', {'views': 3}); // \"This video was viewed 3 time(s)\"\n```\n\nValues for pluralization should be ether `string` or `number`. Numbers will be automatically formatted (see [numbers plugin documentation](numbers/README.md) for details).\nIf you wish to preformat a number, supply it as a `string`.\n\n## Pluralization\n\n```js\ni18n.addPack('en-US', new Pack({\n\t'video-views-plural': 'This video was viewed [views] [viewsPlural:time|times]'\n}));\n\ni18n.trans('video-views-plural', {'views': 1}); // \"This video was viewed 1 time\"\ni18n.trans('video-views-plural', {'views': 3}); // \"This video was viewed 3 times\"\n```\n\nPlural forms separator can be customized with `pluralization.setFormsSeparator`.\n\n```js\ni18n.addPack('en-US', new Pack({\n\t'video-views-plural': 'This video was viewed [views] [viewsPlural:time*times]'\n}));\n\ni18n.pluralization.setFormsSeparator('*');\n\ni18n.trans('video-views-plural', {'views': 1}); // \"This video was viewed 1 time\"\n```\n\nWhen pluralization fails the value will be stubbed with string \"`???`\" by default, but it can be customized with `pluralization.setValueStub`.\n\n```js\ni18n.addPack('en-US', new Pack({\n\t'video-views-plural': 'This video was viewed [views] [viewsPlural:time]'\n}));\n\ni18n.pluralization.setValueStub('---');\n\ni18n.trans('video-views-plural', {'views': 3}); //  \"This video was viewed 1 ---\"\n```\n\n## Pack keys forwarding\n\nSometimes pack keys cannot be modified (e.g. if the pack was fetched from external API). For such cases packs have `forwardKeys` method that maps keys to their new values.\n\n```js\nconst enPack = new Pack({\n\t'hom': 'Home'\n});\n\nenPack.forwardKeys({\n\t'hom': 'home'\n});\n\ni18n.addPack('en-US', enPack);\n\ni18n.trans('home'); // \"Home\"\n```\n\n## Custom pack keys separator\n\nSeparator can be customized with `pluralization.setKeySeparator`.\n\n```js\nconst enPack = new Pack({\n\t'home': {\n\t\t'title': 'Home'\n\t}\n});\n\nenPack.setKeySeparator(':');\n\ni18n.addPack('en-US', enPack);\n\ni18n.trans('home:title'); // \"Home\"\n```\n\n# Conventions\n\n- Chunks of the pack key should be separated by \"`-`\" (e.g. `'red-button-title': '...'`)\n- Values that include raw html should be named with `-html` postfix (e.g. `'title-html': 'My<br/>Title'`)\n- Values for pluralization should be named with `-plural` postfix (e.g. `'views-plural': '[views] [viewsPlural:time|times]'`)\n\n# Caveats\n\nThe extension sometimes makes some assumptions and simplifications about data or localisation:\n\n * All operations with date and time are done in local timezone. All `Date` objects and scalar time segments and intervals are treated as local. The extension will not attempt to normalize them or simulate time zones.\n\n * Numbers formatting always separates digits by thousands (splitting into groups of three), i.e. `10,000,000` ignoring other systems such as Indian (i.e. `1,000,00,00`).\n\n * Trailing zeroes are essential for number formatting in some very rare cases (i.e. `1.3` supposed to be formatted differently from `1.3000`), however since JavaScript numbers do not preserve trailing zeroes they are ignored by numbers formatting functions.\n\n * Internally, the extension uses its own translation system to store and retrieve various formats. It's possible to interfere with it for better or worse, but care should be taken.\n\n * Timezone names are not supported in time formatting.\n \nContext object (the second argument of `trans` method) keys must be quoted according to the restrictions imposed by the Closure Compiler (see [Implications of global variable, function, and property renaming](https://developers.google.com/closure/compiler/docs/limitations#implications-of-global-variable-function-and-property-renaming)):\n\n```js\ni18n.trans('video-views', {views: 3}); // Bad\ni18n.trans('video-views', {'views': 3}); // Good\n```\n\nContext object (the second argument of `trans` method) keys must be quoted according to the restrictions imposed by the Closure Compiler (see [Implications of global variable, function, and property renaming](https://developers.google.com/closure/compiler/docs/limitations#implications-of-global-variable-function-and-property-renaming)):\n\n```js\ni18n.trans('video-views', {views: 3}); // Bad\ni18n.trans('video-views', {'views': 3}); // Good\n```\n\n# Tests\n\nThe extension has extensive unit tests coverage. \n\nUse `npm run test` to run them.\n","maintainers":[{"email":"reefridgerator@gmail.com","name":"reefridge"},{"email":"vyatcheslav.lacki@gmail.com","name":"lacki"},{"email":"kirilldronkin@gmail.com","name":"kirilldronkin"}],"time":{"modified":"2022-06-29T17:47:43.613Z","created":"2016-03-01T15:08:37.435Z","0.1.0":"2016-03-01T15:08:37.435Z","0.1.1":"2016-03-10T06:49:57.552Z","0.1.2":"2016-03-15T12:36:20.918Z","0.1.3":"2016-04-18T06:54:05.751Z","0.2.0":"2016-06-01T13:08:14.252Z","0.3.0":"2016-06-08T12:16:24.205Z","0.3.1":"2016-06-09T07:31:27.013Z","0.4.0-beta.1":"2018-02-01T10:45:21.335Z","0.5.0-beta.1":"2018-04-12T11:38:18.871Z","0.5.0-beta.2":"2018-04-13T09:22:23.668Z","0.5.0":"2018-08-07T09:17:13.393Z","0.6.0":"2019-01-22T08:03:51.921Z","1.0.0":"2019-02-01T12:49:24.444Z","2.0.0-alpha.1":"2019-02-13T11:56:09.820Z","2.0.0-alpha.2":"2019-05-23T10:57:00.001Z","2.0.0":"2019-06-13T10:45:57.369Z","2.1.0":"2020-01-23T13:08:55.064Z","2.1.1":"2020-02-06T12:54:40.542Z"},"readmeFilename":"README.md","keywords":["zombiebox","extension","smart-tv","internationalization","i18n","localization","l10n"],"contributors":[{"name":"Kirill Dronkin","email":"kirilldronkin@gmail.com"},{"name":"Ilya Kalashnikov","email":"npm@kalashnikov.ir"}],"author":{"name":"Interfaced","url":"https://interfaced.tv"},"license":"MIT","homepage":"https://github.com/interfaced/zombiebox-extension-i18n#readme","repository":{"type":"git","url":"git+ssh://git@github.com/interfaced/zombiebox-extension-i18n.git"},"bugs":{"url":"https://github.com/interfaced/zombiebox-extension-i18n/issues"}}