{"_id":"say-dictionary","_rev":"12-c92bee7d63e5772d585cb95efeef7267","name":"say-dictionary","dist-tags":{"latest":"1.3.0"},"versions":{"1.1.0":{"name":"say-dictionary","version":"1.1.0","keywords":["i18n","internationalization","translation","url-based","dictionary"],"author":"","license":"MIT","_id":"say-dictionary@1.1.0","maintainers":[{"name":"stackoverprof","email":"r.bintangbagus@gmail.com"}],"bin":{"say-dictionary":"dist/cli.js"},"dist":{"shasum":"43e39b3e97ad2dea27e43677dc6a382bfddffe13","tarball":"https://registry.npmjs.org/say-dictionary/-/say-dictionary-1.1.0.tgz","fileCount":14,"integrity":"sha512-Z/trgF2r90+01HE8h0GuQnwc51/3I9HcCc94qkiFaON4eqCSBhAQKppg0BHGHrVYb4CqTIBweJqKC5primJq+A==","signatures":[{"sig":"MEUCIQDr/d6qJA3sqFKrAaLNGmtY4QB4/lhWhGZCOHWJIUwdrgIgQaKkIBkzVooGF1VORoMA7owyuvrmPeuwYOpZqXvpIVo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":50381},"main":"./dist/index.cjs","type":"module","_from":"file:say-dictionary-1.1.0.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}}},"scripts":{"dev":"tsup --watch","build":"tsup"},"_npmUser":{"name":"stackoverprof","email":"r.bintangbagus@gmail.com"},"_resolved":"/private/var/folders/ps/m2sl28913nl0nmy7frsp5sch0000gn/T/a257eed0dc18b47671aee14df8f17ed1/say-dictionary-1.1.0.tgz","_integrity":"sha512-Z/trgF2r90+01HE8h0GuQnwc51/3I9HcCc94qkiFaON4eqCSBhAQKppg0BHGHrVYb4CqTIBweJqKC5primJq+A==","_npmVersion":"11.6.2","description":"URL-based i18n with configurable languages and CLI for extracting translation keys","directories":{},"_nodeVersion":"25.2.1","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","typescript":"^5.0.0","@types/node":"^25.2.0"},"_npmOperationalInternal":{"tmp":"tmp/say-dictionary_1.1.0_1770084067655_0.7099154746155389","host":"s3://npm-registry-packages-npm-production"}},"1.1.1":{"name":"say-dictionary","version":"1.1.1","keywords":["i18n","internationalization","translation","url-based","dictionary"],"author":"","license":"MIT","_id":"say-dictionary@1.1.1","maintainers":[{"name":"stackoverprof","email":"r.bintangbagus@gmail.com"}],"bin":{"say-dictionary":"dist/cli.js"},"dist":{"shasum":"94cfaf1afa8268398c4cb30ed0d6e7b171eb5ecf","tarball":"https://registry.npmjs.org/say-dictionary/-/say-dictionary-1.1.1.tgz","fileCount":14,"integrity":"sha512-LkfUm1byXtmEarz72Q7afJFplOOB7NnN/fjSYbizX2w/6SJCAhmOJh7r0A/ug8kE+OSdzYK1HFaGgP19wK+lcw==","signatures":[{"sig":"MEYCIQCQR069JiKsIIfVg8bh99NDhHO5CiUXRY7wjs39k0sqqQIhAKd0j7I1tX6PgBzhIpFdFVL6fn0qgVHJ2XgvPHaBWdKp","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":50605},"main":"./dist/index.cjs","type":"module","_from":"file:say-dictionary-1.1.1.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}}},"scripts":{"dev":"tsup --watch","build":"tsup"},"_npmUser":{"name":"stackoverprof","email":"r.bintangbagus@gmail.com"},"_resolved":"/private/var/folders/ps/m2sl28913nl0nmy7frsp5sch0000gn/T/0da5ef4781ce3425858580b690f15809/say-dictionary-1.1.1.tgz","_integrity":"sha512-LkfUm1byXtmEarz72Q7afJFplOOB7NnN/fjSYbizX2w/6SJCAhmOJh7r0A/ug8kE+OSdzYK1HFaGgP19wK+lcw==","_npmVersion":"11.6.2","description":"URL-based i18n with configurable languages and CLI for extracting translation keys","directories":{},"_nodeVersion":"25.2.1","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","typescript":"^5.0.0","@types/node":"^25.2.0"},"_npmOperationalInternal":{"tmp":"tmp/say-dictionary_1.1.1_1770084469284_0.755764799393541","host":"s3://npm-registry-packages-npm-production"}},"1.1.2":{"name":"say-dictionary","version":"1.1.2","keywords":["i18n","internationalization","translation","url-based","dictionary"],"author":"","license":"MIT","_id":"say-dictionary@1.1.2","maintainers":[{"name":"stackoverprof","email":"r.bintangbagus@gmail.com"}],"bin":{"say-dictionary":"dist/cli.js"},"dist":{"shasum":"1c3baa34d82b594ac9b4e2162d1d3afd5406c7b2","tarball":"https://registry.npmjs.org/say-dictionary/-/say-dictionary-1.1.2.tgz","fileCount":14,"integrity":"sha512-tXHRGLNpCS7c+eO+XKaIVuwLEp75i0K8e3j4znWtOp1A2g8lLBjCM9/390rbay0zIdeSwfJdxvvcPgYysF8avQ==","signatures":[{"sig":"MEUCIBNfrKu1hj6vmkLeFWLSdZGGGUOQNhLDBK+YHTggyWgBAiEA4vY7shtpG2Uwt9JjqQHz0HqIcuyb/e2qjdzCIUh/k6g=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":50869},"main":"./dist/index.cjs","type":"module","_from":"file:say-dictionary-1.1.2.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}}},"scripts":{"dev":"tsup --watch","build":"tsup"},"_npmUser":{"name":"stackoverprof","email":"r.bintangbagus@gmail.com"},"_resolved":"/private/var/folders/ps/m2sl28913nl0nmy7frsp5sch0000gn/T/83fb279b078f3cbbbcf3cec4e9e6880a/say-dictionary-1.1.2.tgz","_integrity":"sha512-tXHRGLNpCS7c+eO+XKaIVuwLEp75i0K8e3j4znWtOp1A2g8lLBjCM9/390rbay0zIdeSwfJdxvvcPgYysF8avQ==","_npmVersion":"11.6.2","description":"URL-based i18n with configurable languages and CLI for extracting translation keys","directories":{},"_nodeVersion":"25.2.1","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","typescript":"^5.0.0","@types/node":"^25.2.0"},"_npmOperationalInternal":{"tmp":"tmp/say-dictionary_1.1.2_1770084987966_0.9673329500272858","host":"s3://npm-registry-packages-npm-production"}},"1.1.3":{"name":"say-dictionary","version":"1.1.3","keywords":["i18n","internationalization","translation","url-based","dictionary"],"author":{"name":"stackoverprof"},"license":"MIT","_id":"say-dictionary@1.1.3","maintainers":[{"name":"stackoverprof","email":"r.bintangbagus@gmail.com"}],"homepage":"https://github.com/stackoverprof/say-dictionary#readme","bugs":{"url":"https://github.com/stackoverprof/say-dictionary/issues"},"bin":{"say-dictionary":"dist/cli.js"},"dist":{"shasum":"1307cd8dfe71f0719f472c9f95a6fd113e1aad26","tarball":"https://registry.npmjs.org/say-dictionary/-/say-dictionary-1.1.3.tgz","fileCount":14,"integrity":"sha512-rqgOetSE9VYArzOS4FE4nqmIPwyjp/o0nY3/I01yMnWfiY1ZEaL0WHyqO3APY7YKtjqv0daE9JKebYpDVVmZGg==","signatures":[{"sig":"MEUCIGGd+g3SOVh7tMk+eRvpBmcMhyqLb4Kzykl2GKJnIwVxAiEA9njbh8Wt0pLibMc3MBcaeaQpfALM/Z6JmVLcCAve3PI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":51146},"main":"./dist/index.cjs","type":"module","_from":"file:say-dictionary-1.1.3.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}}},"scripts":{"dev":"tsup --watch","build":"tsup"},"_npmUser":{"name":"stackoverprof","email":"r.bintangbagus@gmail.com"},"_resolved":"/private/var/folders/ps/m2sl28913nl0nmy7frsp5sch0000gn/T/bbdec445bf64a8f23c96d77971cd16c5/say-dictionary-1.1.3.tgz","_integrity":"sha512-rqgOetSE9VYArzOS4FE4nqmIPwyjp/o0nY3/I01yMnWfiY1ZEaL0WHyqO3APY7YKtjqv0daE9JKebYpDVVmZGg==","repository":{"url":"git+https://github.com/stackoverprof/say-dictionary.git","type":"git"},"_npmVersion":"11.6.2","description":"URL-based i18n with configurable languages and CLI for extracting translation keys","directories":{},"_nodeVersion":"25.2.1","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","typescript":"^5.0.0","@types/node":"^25.2.0"},"_npmOperationalInternal":{"tmp":"tmp/say-dictionary_1.1.3_1770085137466_0.7087002547520289","host":"s3://npm-registry-packages-npm-production"}},"1.1.4":{"name":"say-dictionary","version":"1.1.4","keywords":["i18n","internationalization","translation","url-based","dictionary"],"author":{"name":"stackoverprof"},"license":"MIT","_id":"say-dictionary@1.1.4","maintainers":[{"name":"stackoverprof","email":"r.bintangbagus@gmail.com"}],"homepage":"https://github.com/stackoverprof/say-dictionary#readme","bugs":{"url":"https://github.com/stackoverprof/say-dictionary/issues"},"bin":{"say-dictionary":"dist/cli.js"},"dist":{"shasum":"ad217223105005e2bbe9964346469b8f1967c8d6","tarball":"https://registry.npmjs.org/say-dictionary/-/say-dictionary-1.1.4.tgz","fileCount":14,"integrity":"sha512-jv/emcyX971FE+lbGTWDJ1GMG/4aUzG8rR5KaaHcb7pHJMjkhnfCTnMLhTniF5WRbCobzsvgLqLiSNvHDRqMow==","signatures":[{"sig":"MEYCIQCoCRXsCbOJS0SfiXbj46xuIg9Ef9Lgowq1R/O5KhvYSAIhANP+IVs48cpCw/23xjPoApNVVBqnr4FAD7kE5GzFgJHG","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":51230},"main":"./dist/index.cjs","type":"module","_from":"file:say-dictionary-1.1.4.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}}},"scripts":{"dev":"tsup --watch","build":"tsup"},"_npmUser":{"name":"stackoverprof","email":"r.bintangbagus@gmail.com"},"_resolved":"/private/var/folders/ps/m2sl28913nl0nmy7frsp5sch0000gn/T/32cd8a7c9183b3c1b58411da564a83f8/say-dictionary-1.1.4.tgz","_integrity":"sha512-jv/emcyX971FE+lbGTWDJ1GMG/4aUzG8rR5KaaHcb7pHJMjkhnfCTnMLhTniF5WRbCobzsvgLqLiSNvHDRqMow==","repository":{"url":"git+https://github.com/stackoverprof/say-dictionary.git","type":"git"},"_npmVersion":"11.6.2","description":"URL-based i18n with configurable languages and CLI for extracting translation keys","directories":{},"_nodeVersion":"25.2.1","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","typescript":"^5.0.0","@types/node":"^25.2.0"},"_npmOperationalInternal":{"tmp":"tmp/say-dictionary_1.1.4_1770086261482_0.5464182743874526","host":"s3://npm-registry-packages-npm-production"}},"1.1.5":{"name":"say-dictionary","version":"1.1.5","keywords":["i18n","internationalization","translation","url-based","dictionary"],"author":{"name":"stackoverprof"},"license":"MIT","_id":"say-dictionary@1.1.5","maintainers":[{"name":"stackoverprof","email":"r.bintangbagus@gmail.com"}],"homepage":"https://github.com/stackoverprof/say-dictionary#readme","bugs":{"url":"https://github.com/stackoverprof/say-dictionary/issues"},"bin":{"say-dictionary":"dist/cli.js"},"dist":{"shasum":"122584dddf4a22eebad0659cdc1cae8098f269e7","tarball":"https://registry.npmjs.org/say-dictionary/-/say-dictionary-1.1.5.tgz","fileCount":14,"integrity":"sha512-41NcSauX0u9k1Jz4dLFDBjkOc4JeLtpi242ot0WQgeMFz9rZzYVKeyBmbHaGTzt0IovB5b1Qq2XRcH84jGTh6w==","signatures":[{"sig":"MEUCIQCy93PPyo1Iyun3QPQvhjTnLubCubRIe0tbclBRi+0lUQIgDkIeikddQR5iAig6jUKzxUTJmv7FrsS1qIU+YXQ3l8w=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":46689},"main":"./dist/index.cjs","type":"module","_from":"file:say-dictionary-1.1.5.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}}},"scripts":{"dev":"tsup --watch","build":"tsup"},"_npmUser":{"name":"stackoverprof","email":"r.bintangbagus@gmail.com"},"_resolved":"/private/var/folders/ps/m2sl28913nl0nmy7frsp5sch0000gn/T/41d2a547024e6565060f1078f96f02a7/say-dictionary-1.1.5.tgz","_integrity":"sha512-41NcSauX0u9k1Jz4dLFDBjkOc4JeLtpi242ot0WQgeMFz9rZzYVKeyBmbHaGTzt0IovB5b1Qq2XRcH84jGTh6w==","repository":{"url":"git+https://github.com/stackoverprof/say-dictionary.git","type":"git"},"_npmVersion":"11.6.2","description":"URL-based i18n with configurable languages and CLI for extracting translation keys","directories":{},"_nodeVersion":"25.2.1","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","typescript":"^5.0.0","@types/node":"^25.2.0"},"_npmOperationalInternal":{"tmp":"tmp/say-dictionary_1.1.5_1770086391713_0.03474026174824463","host":"s3://npm-registry-packages-npm-production"}},"1.1.6":{"name":"say-dictionary","version":"1.1.6","keywords":["i18n","internationalization","translation","url-based","dictionary"],"author":{"name":"stackoverprof"},"license":"MIT","_id":"say-dictionary@1.1.6","maintainers":[{"name":"stackoverprof","email":"r.bintangbagus@gmail.com"}],"homepage":"https://github.com/stackoverprof/say-dictionary#readme","bugs":{"url":"https://github.com/stackoverprof/say-dictionary/issues"},"bin":{"say-dictionary":"dist/cli.js"},"dist":{"shasum":"17b3bf8f5a3c596afd400b49bbd3bb8698967658","tarball":"https://registry.npmjs.org/say-dictionary/-/say-dictionary-1.1.6.tgz","fileCount":14,"integrity":"sha512-9Qv2QlT/ttWu4CV2g7sXHY9sCuq4kKLiHzOgegTftFUUjM2OtrF/rVl74dnZBKVepsP7ixvz7kc/S6FAkEX/Lg==","signatures":[{"sig":"MEUCIQCSD5GFvgN9nYKgmVNcHRH2jmBdnE9aV3dqIAF8Vwys6QIgd8i3XIq+jOUZxapNRsZoHiIrU2hf0v8NhMk7W1oZRQs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":46379},"main":"./dist/index.cjs","type":"module","_from":"file:say-dictionary-1.1.6.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}}},"scripts":{"dev":"tsup --watch","build":"tsup"},"_npmUser":{"name":"stackoverprof","email":"r.bintangbagus@gmail.com"},"_resolved":"/private/var/folders/ps/m2sl28913nl0nmy7frsp5sch0000gn/T/14c4fdf17285ddf511924edf8df17e92/say-dictionary-1.1.6.tgz","_integrity":"sha512-9Qv2QlT/ttWu4CV2g7sXHY9sCuq4kKLiHzOgegTftFUUjM2OtrF/rVl74dnZBKVepsP7ixvz7kc/S6FAkEX/Lg==","repository":{"url":"git+https://github.com/stackoverprof/say-dictionary.git","type":"git"},"_npmVersion":"11.6.2","description":"URL-based i18n with configurable languages and CLI for extracting translation keys","directories":{},"_nodeVersion":"25.2.1","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","typescript":"^5.0.0","@types/node":"^25.2.0"},"_npmOperationalInternal":{"tmp":"tmp/say-dictionary_1.1.6_1770086652533_0.6790030988427156","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"say-dictionary","version":"1.2.0","keywords":["i18n","internationalization","translation","url-based","dictionary"],"author":{"name":"stackoverprof"},"license":"MIT","_id":"say-dictionary@1.2.0","maintainers":[{"name":"stackoverprof","email":"r.bintangbagus@gmail.com"}],"homepage":"https://github.com/stackoverprof/say-dictionary#readme","bugs":{"url":"https://github.com/stackoverprof/say-dictionary/issues"},"bin":{"say-dictionary":"dist/cli.js"},"dist":{"shasum":"a88e21ce3aa6555e419460b646fec6b7c22230f7","tarball":"https://registry.npmjs.org/say-dictionary/-/say-dictionary-1.2.0.tgz","fileCount":14,"integrity":"sha512-9Sc1Bi3LAHSU/fVqfO2r0ayveGtzzAZQqSnlVQjdIqFMNxyM4dSoKKBYqydJFFQqwYXg8TtxvFkx6IaPy7U9Lw==","signatures":[{"sig":"MEYCIQDQ3atrJEBpxTOnA5RRfDLcmqia2SoRH4OZcCOCW4lLhgIhAJzY5j1rWypgTXxrG4536OtWPvriD1AM7q+1f0aRDz4C","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":52948},"main":"./dist/index.cjs","type":"module","_from":"file:say-dictionary-1.2.0.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}}},"scripts":{"dev":"tsup --watch","lint":"eslint src","build":"tsup","format":"prettier --write src","lint:fix":"eslint src --fix","format:check":"prettier --check src"},"_npmUser":{"name":"stackoverprof","email":"r.bintangbagus@gmail.com"},"_resolved":"/private/var/folders/ps/m2sl28913nl0nmy7frsp5sch0000gn/T/a4b290f46fb2dfc2daa91ac5ba7913aa/say-dictionary-1.2.0.tgz","_integrity":"sha512-9Sc1Bi3LAHSU/fVqfO2r0ayveGtzzAZQqSnlVQjdIqFMNxyM4dSoKKBYqydJFFQqwYXg8TtxvFkx6IaPy7U9Lw==","repository":{"url":"git+https://github.com/stackoverprof/say-dictionary.git","type":"git"},"_npmVersion":"11.6.2","description":"URL-based i18n with configurable languages and CLI for extracting translation keys","directories":{},"_nodeVersion":"25.2.1","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","eslint":"^9.0.0","prettier":"^3.0.0","@eslint/js":"^9.0.0","typescript":"^5.0.0","@types/node":"^25.2.0","typescript-eslint":"^8.0.0"},"_npmOperationalInternal":{"tmp":"tmp/say-dictionary_1.2.0_1770087552966_0.5580846751467479","host":"s3://npm-registry-packages-npm-production"}},"1.2.1":{"name":"say-dictionary","version":"1.2.1","keywords":["i18n","internationalization","translation","url-based","dictionary"],"author":{"name":"stackoverprof"},"license":"MIT","_id":"say-dictionary@1.2.1","maintainers":[{"name":"stackoverprof","email":"r.bintangbagus@gmail.com"}],"homepage":"https://github.com/stackoverprof/say-dictionary#readme","bugs":{"url":"https://github.com/stackoverprof/say-dictionary/issues"},"bin":{"say-dictionary":"dist/cli.js"},"dist":{"shasum":"0134e780338af05520e5dc6dce817875f522fa5b","tarball":"https://registry.npmjs.org/say-dictionary/-/say-dictionary-1.2.1.tgz","fileCount":14,"integrity":"sha512-aqJFXu68s2j78ILkU8J7fSRxgZMI3Go5ipERteWWKYPuC2i+mGlecL4lJNqqjivStxbUs+bPRxOR4ofY3Vce3w==","signatures":[{"sig":"MEUCIQDOtfK22DGLHngtWphnxcOWKbSzyWZvaFl5zQ0bUBpmdQIgYzEZk3Z+WLfTE7+MxRTSKeZmH02+VgbCvx/9XoOI7ok=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":53055},"main":"./dist/index.cjs","pnpm":{"onlyBuiltDependencies":["esbuild"]},"type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}}},"gitHead":"898debbca731d6995a4d54de2aad703626216080","scripts":{"dev":"tsup --watch","lint":"eslint src","build":"tsup","format":"prettier --write src","lint:fix":"eslint src --fix","format:check":"prettier --check src","prepublishOnly":"pnpm build"},"_npmUser":{"name":"stackoverprof","email":"r.bintangbagus@gmail.com"},"repository":{"url":"git+https://github.com/stackoverprof/say-dictionary.git","type":"git"},"_npmVersion":"11.6.2","description":"URL-based i18n with configurable languages and CLI for extracting translation keys","directories":{},"_nodeVersion":"25.2.1","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","eslint":"^9.0.0","prettier":"^3.0.0","@eslint/js":"^9.0.0","typescript":"^5.0.0","@types/node":"^25.2.0","typescript-eslint":"^8.0.0"},"_npmOperationalInternal":{"tmp":"tmp/say-dictionary_1.2.1_1770087561876_0.5802619811342618","host":"s3://npm-registry-packages-npm-production"}},"1.2.2":{"name":"say-dictionary","version":"1.2.2","keywords":["i18n","internationalization","translation","url-based","dictionary"],"author":{"name":"stackoverprof"},"license":"MIT","_id":"say-dictionary@1.2.2","maintainers":[{"name":"stackoverprof","email":"r.bintangbagus@gmail.com"}],"homepage":"https://github.com/stackoverprof/say-dictionary#readme","bugs":{"url":"https://github.com/stackoverprof/say-dictionary/issues"},"bin":{"say-dictionary":"dist/cli.js"},"dist":{"shasum":"1ea392e554eeaf591f760bf95c539ad0a0cff202","tarball":"https://registry.npmjs.org/say-dictionary/-/say-dictionary-1.2.2.tgz","fileCount":14,"integrity":"sha512-sR6DDDblug/q/NDmzD0b3EF3hFgfBh28mLsF2rFF68mcR2FbxSGohvJS2iodMySEOxJqHPkj05QmI7O22SuAmA==","signatures":[{"sig":"MEUCIQCTxk7NNQUF/L1DRvfI/MQvCZ3EE2P+lRbZYCC97dg/MwIgL+TALS9ic5PI8GhIt/wEJ2eVwDSFDR1MIFNVItpngM4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":53486},"main":"./dist/index.cjs","type":"module","_from":"file:say-dictionary-1.2.2.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}}},"scripts":{"dev":"tsup --watch","lint":"eslint src","build":"tsup","format":"prettier --write src","lint:fix":"eslint src --fix","format:check":"prettier --check src"},"_npmUser":{"name":"stackoverprof","email":"r.bintangbagus@gmail.com"},"_resolved":"/private/var/folders/ps/m2sl28913nl0nmy7frsp5sch0000gn/T/45894f4847721b108e0c490922109498/say-dictionary-1.2.2.tgz","_integrity":"sha512-sR6DDDblug/q/NDmzD0b3EF3hFgfBh28mLsF2rFF68mcR2FbxSGohvJS2iodMySEOxJqHPkj05QmI7O22SuAmA==","repository":{"url":"git+https://github.com/stackoverprof/say-dictionary.git","type":"git"},"_npmVersion":"11.6.2","description":"URL-based i18n with configurable languages and CLI for extracting translation keys","directories":{},"_nodeVersion":"25.2.1","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","eslint":"^9.0.0","prettier":"^3.0.0","@eslint/js":"^9.0.0","typescript":"^5.0.0","@types/node":"^25.2.0","typescript-eslint":"^8.0.0"},"_npmOperationalInternal":{"tmp":"tmp/say-dictionary_1.2.2_1770087636497_0.932739494830255","host":"s3://npm-registry-packages-npm-production"}},"1.2.3":{"name":"say-dictionary","version":"1.2.3","keywords":["i18n","internationalization","translation","url-based","dictionary"],"author":{"name":"stackoverprof"},"license":"MIT","_id":"say-dictionary@1.2.3","maintainers":[{"name":"stackoverprof","email":"r.bintangbagus@gmail.com"}],"homepage":"https://stackoverprof.github.io/say-dictionary-site/","bugs":{"url":"https://github.com/stackoverprof/say-dictionary/issues"},"bin":{"say-dictionary":"dist/cli.js"},"dist":{"shasum":"e10de27e6b68b97d281374b0056cb404baadc4d8","tarball":"https://registry.npmjs.org/say-dictionary/-/say-dictionary-1.2.3.tgz","fileCount":14,"integrity":"sha512-s11Dc4mxkttHLKD41Xtbu9L9d4LsZ9OdbeDkzajZ6rbmfMXe8fiy/3A6oUqN6LlBxx17MiNeKnMvFWIa9z0YTg==","signatures":[{"sig":"MEUCIQC3Tp8DYrG0uvIoiPRZaaSXqXRIHTN21XBbokDWbRZqNgIgV+0aOffHbtKzuaZQ7gtuWa+ofy0AC284DEfLiDNzU00=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":53484},"main":"./dist/index.cjs","type":"module","_from":"file:say-dictionary-1.2.3.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}}},"scripts":{"dev":"tsup --watch","lint":"eslint src","build":"tsup","format":"prettier --write src","lint:fix":"eslint src --fix","format:check":"prettier --check src"},"_npmUser":{"name":"stackoverprof","email":"r.bintangbagus@gmail.com"},"_resolved":"/private/var/folders/ps/m2sl28913nl0nmy7frsp5sch0000gn/T/a48039cef502860b2a9570ce8630fb44/say-dictionary-1.2.3.tgz","_integrity":"sha512-s11Dc4mxkttHLKD41Xtbu9L9d4LsZ9OdbeDkzajZ6rbmfMXe8fiy/3A6oUqN6LlBxx17MiNeKnMvFWIa9z0YTg==","repository":{"url":"git+https://github.com/stackoverprof/say-dictionary.git","type":"git"},"_npmVersion":"11.6.2","description":"URL-based i18n with configurable languages and CLI for extracting translation keys","directories":{},"_nodeVersion":"25.2.1","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","eslint":"^9.0.0","prettier":"^3.0.0","@eslint/js":"^9.0.0","typescript":"^5.0.0","@types/node":"^25.2.0","typescript-eslint":"^8.0.0"},"_npmOperationalInternal":{"tmp":"tmp/say-dictionary_1.2.3_1770089288068_0.9165489588595692","host":"s3://npm-registry-packages-npm-production"}},"1.3.0":{"name":"say-dictionary","version":"1.3.0","description":"URL-based i18n with configurable languages and CLI for extracting translation keys","type":"module","main":"./dist/index.cjs","module":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}}},"bin":{"say-dictionary":"dist/cli.js"},"keywords":["i18n","internationalization","translation","url-based","dictionary"],"author":{"name":"stackoverprof"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/stackoverprof/say-dictionary.git"},"bugs":{"url":"https://github.com/stackoverprof/say-dictionary/issues"},"homepage":"https://stackoverprof.github.io/say-dictionary-site/","dependencies":{"intl-messageformat":"^10.5.0"},"devDependencies":{"@eslint/js":"^9.0.0","@types/node":"^25.2.0","eslint":"^9.0.0","prettier":"^3.0.0","tsup":"^8.0.0","typescript":"^5.0.0","typescript-eslint":"^8.0.0"},"scripts":{"build":"tsup","dev":"tsup --watch","lint":"eslint src","lint:fix":"eslint src --fix","format":"prettier --write src","format:check":"prettier --check src"},"_id":"say-dictionary@1.3.0","_integrity":"sha512-LC3QHwFVb+qVbqwpp5NgPFM5VbYfecKi4cEX/hr+fx6aHoOAE2bzOgVBEtG+J5thwJ8H+Pb2V64JJLTm1slJaw==","_resolved":"/private/var/folders/ps/m2sl28913nl0nmy7frsp5sch0000gn/T/a14966ed588c2c9707a83d920f3b37ed/say-dictionary-1.3.0.tgz","_from":"file:say-dictionary-1.3.0.tgz","_nodeVersion":"25.5.0","_npmVersion":"11.8.0","dist":{"integrity":"sha512-LC3QHwFVb+qVbqwpp5NgPFM5VbYfecKi4cEX/hr+fx6aHoOAE2bzOgVBEtG+J5thwJ8H+Pb2V64JJLTm1slJaw==","shasum":"20d64f30d2de5f2e5e3ac95127ceab66f92fca14","tarball":"https://registry.npmjs.org/say-dictionary/-/say-dictionary-1.3.0.tgz","fileCount":14,"unpackedSize":58974,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCICn4DJVfZXq+pT6Ueb9H6fwYw3pQapjv8CPQHUsJalIQAiAms5KwIkez4qXVDpyazPEwon9nakHcJCcfNvfiCtvp5A=="}]},"_npmUser":{"name":"stackoverprof","email":"r.bintangbagus@gmail.com"},"directories":{},"maintainers":[{"name":"stackoverprof","email":"r.bintangbagus@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/say-dictionary_1.3.0_1771021461391_0.06959148983156949"},"_hasShrinkwrap":false}},"time":{"created":"2026-02-03T02:01:07.502Z","modified":"2026-02-13T22:24:21.655Z","1.1.0":"2026-02-03T02:01:07.846Z","1.1.1":"2026-02-03T02:07:49.418Z","1.1.2":"2026-02-03T02:16:28.131Z","1.1.3":"2026-02-03T02:18:57.605Z","1.1.4":"2026-02-03T02:37:41.644Z","1.1.5":"2026-02-03T02:39:51.842Z","1.1.6":"2026-02-03T02:44:12.678Z","1.2.0":"2026-02-03T02:59:13.129Z","1.2.1":"2026-02-03T02:59:22.018Z","1.2.2":"2026-02-03T03:00:36.658Z","1.2.3":"2026-02-03T03:28:08.223Z","1.3.0":"2026-02-13T22:24:21.539Z"},"bugs":{"url":"https://github.com/stackoverprof/say-dictionary/issues"},"author":{"name":"stackoverprof"},"license":"MIT","homepage":"https://stackoverprof.github.io/say-dictionary-site/","keywords":["i18n","internationalization","translation","url-based","dictionary"],"repository":{"type":"git","url":"git+https://github.com/stackoverprof/say-dictionary.git"},"description":"URL-based i18n with configurable languages and CLI for extracting translation keys","maintainers":[{"name":"stackoverprof","email":"r.bintangbagus@gmail.com"}],"readme":"# say-dictionary\n\nURL-based i18n with configurable languages and a CLI for extracting translation keys.\n\n## Why?\n\nThe dictionary format is designed to be **LLM-friendly**. Just hand your `dictionary.json` to an AI and ask it to translate — done. No complex tooling, no translation service integrations, no manual key mapping.\n\n## Installation\n\n```bash\nnpm install say-dictionary\n# or\npnpm add say-dictionary\n```\n\n## Usage\n\n### 1. Initialize (once in your entry point)\n\n```ts\n// root.tsx or app entry\nimport { init } from 'say-dictionary';\nimport dictionary from './dictionary.json';\n\ninit(dictionary);\n```\n\n### 2. Use anywhere\n\n```ts\nimport { say, getLanguage, setLanguage } from 'say-dictionary';\n\n// Get translated text\nsay(\"Order Now\"); // Returns \"Order Now\" or \"Panta núna\" based on URL\n\n// ICU formatting (only when vars are provided)\nsay(\"You have {count, plural, one {# pizza} other {# pizzas}}\", {\n  count: 2,\n});\n\n// Get current language from URL (null if no language prefix)\ngetLanguage(); // \"is\" or null\n\n// Navigate to different language\nsetLanguage('is'); // Redirects to /is/current-path\n```\n\n## Dictionary Format\n\n```json\n{\n  \"Order Now\": { \"en\": \"Order Now\", \"is\": \"Panta núna\" },\n  \"Welcome\": { \"en\": \"Welcome\", \"is\": \"Velkomin\" },\n  \"You have {count, plural, one {# pizza} other {# pizzas}}\": {\n    \"is\": \"Þú átt {count, plural, one {# pizzur} other {# pizzur}}\"\n  }\n}\n```\n\nLanguages are automatically detected from the dictionary keys.\nICU message formatting is **opt-in** and only runs when you pass variables to\n`say(key, vars)`. If a translation is missing for the current language, the key\nitself is treated as the ICU message.\n\nExample:\n\n```ts\nsay(\n  \"Today is the {day, selectordinal, one {#st} two {#nd} few {#rd} other {#th}} of March\",\n  { day: 3 }\n);\n// \"Today is the 3rd of March\"\n\nsay(\"Event on {date, date, ::MMMM d}\", { date: new Date(\"2026-03-02\") });\n// \"Event on March 2\"\n```\n\n## URL Structure\n\nThe language is detected from the first path segment:\n\n- `/is/about` → Icelandic (`say()` returns translation)\n- `/about` → No language prefix (`say()` returns the key itself)\n\n## SSR (Next.js, Remix, etc.)\n\nFor SSR frameworks, use `ssrLang()` to prevent hydration mismatch:\n\n```tsx\n// app/[lang]/page.tsx\nexport default async function Page({ params }) {\n  const { lang } = await params;\n  return <Home lang={lang} />;\n}\n\n// app/page.tsx\n\"use client\";\nimport { ssrLang, say } from 'say-dictionary';\n\nexport default function Home({ lang }: { lang?: string }) {\n  ssrLang(lang ?? null);\n  return <h1>{say(\"Hello\")}</h1>;\n}\n```\n\nThis is optional — only needed for SSR. Client-side apps (Vite, CRA) work without it.\n\n## CLI\n\nExtract translation keys from your source files:\n\n```bash\nnpx say-dictionary extract -l en,is -i ./app -o ./dictionary.json\n```\n\nOptions:\n\n- `-l, --lang` - Comma-separated list of languages\n- `-i, --in` - Source directory to scan\n- `-o, --out` - Output dictionary file\n\nOutput `dictionary.json`:\n\n```json\n{\n  \"Order Now\": { \"en\": \"Order Now\", \"is\": \"\" },\n  \"Welcome\": { \"en\": \"Welcome\", \"is\": \"\" }\n}\n```\n\n**The first language (`en`) gets the key as its value.** Hand this to an LLM to fill in the translations.\n\n## License\n\nMIT\n","readmeFilename":"README.md"}