{"_id":"@cepharum/vue3-i18n","_rev":"19-72f0add75dbbc82a28be04a0fb06a9e0","name":"@cepharum/vue3-i18n","dist-tags":{"latest":"2.0.0"},"versions":{"0.1.0":{"name":"@cepharum/vue3-i18n","version":"0.1.0","keywords":[],"author":{"name":"cepharum GmbH"},"license":"MIT","_id":"@cepharum/vue3-i18n@0.1.0","maintainers":[{"name":"soletan","email":"thomas.urban@cepharum.de"},{"name":"simon.friedo","email":"friedosimon@aol.com"}],"dist":{"shasum":"1fe523304dc980459628f5e659c3697c7d61a604","tarball":"https://registry.npmjs.org/@cepharum/vue3-i18n/-/vue3-i18n-0.1.0.tgz","fileCount":6,"integrity":"sha512-C2qLREDsIO5dafJVOei8M7EKItjaWqh/fGf9S/wUs1Rk1/TKBYLCi6NFgQ2D+ksRcUGW8jyunVbBxP8mLs7lYg==","signatures":[{"sig":"MEUCIFzPFJ6EJ1JzoxGaKkQRRDGzA6XlWg/owkndP4j61q70AiEAjqGossG4EjJlbbd7WOyq0BcjZ6nOMa1HfOw+SbU8ixs=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":117068},"main":"./dist/vue3-i18n.umd.cjs","type":"module","module":"./dist/vue3-i18n.js","exports":{".":{"import":"./dist/vue3-i18n.js","require":"./dist/vue3-i18n.umd.cjs"}},"gitHead":"d754656033ff76d162f18dc793a2c9148ca0ac5d","scripts":{"lint":"eslint","test":"vitest run --coverage","test:dev":"vitest","prepublish":"vite build"},"_npmUser":{"name":"soletan","email":"thomas.urban@cepharum.de"},"_npmVersion":"8.18.0","description":"a simple i18n library for Vue3 applications","directories":{},"_nodeVersion":"16.20.0","_hasShrinkwrap":false,"devDependencies":{"vue":"^3.3.4","vite":"^4.3.9","pinia":"^2.1.3","eslint":"^8.42.0","should":"^13.2.3","vitest":"^0.31.4","webdriverio":"^8.10.7","@vitest/browser":"^0.31.4","@vue/test-utils":"^2.3.2","eslint-plugin-vue":"^9.14.1","@vitejs/plugin-vue":"^4.2.3","eslint-plugin-promise":"^6.1.1","eslint-config-cepharum":"^1.0.13","@rushstack/eslint-patch":"^1.3.0","@vitest/coverage-istanbul":"^0.31.4","@vue/eslint-config-prettier":"^7.1.0"},"peerDependencies":{"vue":"^3.3.4","pinia":"^2.1.3"},"_npmOperationalInternal":{"tmp":"tmp/vue3-i18n_0.1.0_1685824452304_0.4387837224393698","host":"s3://npm-registry-packages"}},"0.1.1":{"name":"@cepharum/vue3-i18n","version":"0.1.1","keywords":[],"author":{"name":"cepharum GmbH"},"license":"MIT","_id":"@cepharum/vue3-i18n@0.1.1","maintainers":[{"name":"soletan","email":"thomas.urban@cepharum.de"},{"name":"simon.friedo","email":"friedosimon@aol.com"}],"dist":{"shasum":"e32cd2a2798adc75c760f6cd320c8255574c4b7a","tarball":"https://registry.npmjs.org/@cepharum/vue3-i18n/-/vue3-i18n-0.1.1.tgz","fileCount":6,"integrity":"sha512-F05cXK5gBReDpGyIqfm5QFQEFbk3zXenCqR/cTlXsPJhgA5xob0Puodrwj8Mgj0/VCIUJRg8kVwJDtQCcLWPaQ==","signatures":[{"sig":"MEYCIQCt1XzEEQibpmoe7AX8Tm5x4TWMtYFjEtPCfO7O/ViKrwIhAKBY4ZvjLGyAReep5IqJNmv5URIwBXd2/tS89WAuPUN4","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":119728},"main":"./dist/vue3-i18n.umd.cjs","type":"module","module":"./dist/vue3-i18n.js","exports":{".":{"import":"./dist/vue3-i18n.js","require":"./dist/vue3-i18n.umd.cjs"}},"gitHead":"1c60db14d34aa308da446c5623189b517503b03c","scripts":{"lint":"eslint","test":"vitest run --coverage","test:dev":"vitest","prepublish":"vite build"},"_npmUser":{"name":"soletan","email":"thomas.urban@cepharum.de"},"_npmVersion":"8.18.0","description":"a simple i18n library for Vue3 applications","directories":{},"_nodeVersion":"16.20.0","_hasShrinkwrap":false,"devDependencies":{"vue":"^3.3.4","vite":"^4.3.9","jsdom":"^22.1.0","pinia":"^2.1.3","eslint":"^8.42.0","should":"^13.2.3","vitest":"^0.31.4","@vue/test-utils":"^2.3.2","eslint-plugin-vue":"^9.14.1","@vitejs/plugin-vue":"^4.2.3","@vitest/coverage-c8":"^0.31.4","eslint-plugin-promise":"^6.1.1","eslint-config-cepharum":"^1.0.13","@rushstack/eslint-patch":"^1.3.0","@vue/eslint-config-prettier":"^7.1.0"},"peerDependencies":{"vue":"^3.3.4","pinia":"^2.1.3"},"_npmOperationalInternal":{"tmp":"tmp/vue3-i18n_0.1.1_1685829756437_0.48156688506416034","host":"s3://npm-registry-packages"}},"0.1.2":{"name":"@cepharum/vue3-i18n","version":"0.1.2","keywords":[],"author":{"name":"cepharum GmbH"},"license":"MIT","_id":"@cepharum/vue3-i18n@0.1.2","maintainers":[{"name":"soletan","email":"thomas.urban@cepharum.de"},{"name":"simon.friedo","email":"friedosimon@aol.com"}],"dist":{"shasum":"4b6fe2c1c75a0f0db62d0dd76e34f55788a26293","tarball":"https://registry.npmjs.org/@cepharum/vue3-i18n/-/vue3-i18n-0.1.2.tgz","fileCount":6,"integrity":"sha512-7VGx45P23ZOnb/N5lvjF7tJYPX2EYrP4rAChennQYyWGBR4S9r5K5n8EDe5LRbBDXGg0I6VfYjwjmi2xiHJGQg==","signatures":[{"sig":"MEUCIQDBdisLS0GgL4njjDZTcWXqi6ONpAUMkMEnCU6lFptE7wIgSSckzCqlVtZmGPLp5vVPZBI5TaCo+AdI+f/p8taGGqg=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":16516},"main":"./dist/vue3-i18n.umd.cjs","type":"module","module":"./dist/vue3-i18n.js","exports":{".":{"import":"./dist/vue3-i18n.js","require":"./dist/vue3-i18n.umd.cjs"}},"gitHead":"0be534fe380b408bd32cf87d2a1f2b2590619c80","scripts":{"lint":"eslint","test":"vitest run --coverage","test:dev":"vitest","prepublish":"vite build"},"_npmUser":{"name":"soletan","email":"thomas.urban@cepharum.de"},"_npmVersion":"8.18.0","description":"a simple i18n library for Vue3 applications","directories":{},"_nodeVersion":"16.20.0","_hasShrinkwrap":false,"devDependencies":{"vue":"^3.3.4","vite":"^4.3.9","jsdom":"^22.1.0","pinia":"^2.1.3","eslint":"^8.42.0","should":"^13.2.3","vitest":"^0.31.4","@vue/test-utils":"^2.3.2","eslint-plugin-vue":"^9.14.1","@vitejs/plugin-vue":"^4.2.3","@vitest/coverage-c8":"^0.31.4","eslint-plugin-promise":"^6.1.1","eslint-config-cepharum":"^1.0.13","@rushstack/eslint-patch":"^1.3.0","@vue/eslint-config-prettier":"^7.1.0"},"peerDependencies":{"vue":"^3.3.4","pinia":"^2.1.3"},"_npmOperationalInternal":{"tmp":"tmp/vue3-i18n_0.1.2_1685835045487_0.8614487001012618","host":"s3://npm-registry-packages"}},"0.2.0":{"name":"@cepharum/vue3-i18n","version":"0.2.0","keywords":[],"author":{"name":"cepharum GmbH"},"license":"MIT","_id":"@cepharum/vue3-i18n@0.2.0","maintainers":[{"name":"soletan","email":"thomas.urban@cepharum.de"},{"name":"simon.friedo","email":"friedosimon@aol.com"}],"dist":{"shasum":"25f15e33cf949e76d36c4f8ccf9bb78984b1e041","tarball":"https://registry.npmjs.org/@cepharum/vue3-i18n/-/vue3-i18n-0.2.0.tgz","fileCount":6,"integrity":"sha512-wXk4uMyUdwWYs1Z+mHdQPaOakgmY/v1bVQHJoLsHgOtDDzRwHzJ0iW4rIA53Ip6/XBGVbSPNUL5ZSGIOe4FHtA==","signatures":[{"sig":"MEYCIQD1tAQDvIDpNZaUbNNO5xn4wCL+Vb3LepgGmUvyj9oiEgIhAJj0Vi50XnUSADfsRB6Z9SPLYf6pqaxiSFMMOdLJSllA","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":16517},"main":"./dist/vue3-i18n.umd.cjs","type":"module","module":"./dist/vue3-i18n.js","exports":{".":{"import":"./dist/vue3-i18n.js","require":"./dist/vue3-i18n.umd.cjs"}},"gitHead":"0b16114644e2d6d8bfb46106742480e1ba2211b2","scripts":{"lint":"eslint","test":"vitest run --coverage","test:dev":"vitest","prepublish":"vite build"},"_npmUser":{"name":"soletan","email":"thomas.urban@cepharum.de"},"_npmVersion":"8.18.0","description":"a simple i18n library for Vue3 applications","directories":{},"_nodeVersion":"16.20.0","_hasShrinkwrap":false,"devDependencies":{"vue":"^3.3.4","vite":"^4.3.9","jsdom":"^22.1.0","pinia":"^2.1.3","eslint":"^8.42.0","should":"^13.2.3","vitest":"^0.31.4","@vue/test-utils":"^2.3.2","eslint-plugin-vue":"^9.14.1","@vitejs/plugin-vue":"^4.2.3","@vitest/coverage-c8":"^0.31.4","eslint-plugin-promise":"^6.1.1","eslint-config-cepharum":"^1.0.13","@rushstack/eslint-patch":"^1.3.0","@vue/eslint-config-prettier":"^7.1.0"},"peerDependencies":{"vue":"^3.3.4","pinia":"^2.1.3"},"_npmOperationalInternal":{"tmp":"tmp/vue3-i18n_0.2.0_1685859047122_0.8698110995781847","host":"s3://npm-registry-packages"}},"0.2.1":{"name":"@cepharum/vue3-i18n","version":"0.2.1","keywords":[],"author":{"name":"cepharum GmbH"},"license":"MIT","_id":"@cepharum/vue3-i18n@0.2.1","maintainers":[{"name":"soletan","email":"thomas.urban@cepharum.de"},{"name":"simon.friedo","email":"friedosimon@aol.com"}],"dist":{"shasum":"418c4a94ccd581f3c394821c80a058add1e72b2e","tarball":"https://registry.npmjs.org/@cepharum/vue3-i18n/-/vue3-i18n-0.2.1.tgz","fileCount":6,"integrity":"sha512-2HuA9247hDY0S+wcreRUjOsMocDuFvkvKZx9E9f+ou0pDer9SrHw61YADl4929G/VN0BsVjO5IRITSnkgIo0zQ==","signatures":[{"sig":"MEYCIQDCUB/rM0/bBL6QUjETB97xFgQuQrdA/twAJjY/vXcMFQIhANycCYze5BVqjKjQb2a1KufQbzutPRIyRSAS4ysDPEJA","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":16628},"main":"./dist/vue3-i18n.umd.cjs","type":"module","module":"./dist/vue3-i18n.js","exports":{".":{"import":"./dist/vue3-i18n.js","require":"./dist/vue3-i18n.umd.cjs"}},"gitHead":"b1332b45fa470316996bcdb3ee41b7f2dcfcdf25","scripts":{"lint":"eslint","test":"vitest run --coverage","prepare":"vite build","test:dev":"vitest"},"_npmUser":{"name":"soletan","email":"thomas.urban@cepharum.de"},"_npmVersion":"8.18.0","description":"a simple i18n library for Vue3 applications","directories":{},"_nodeVersion":"16.20.0","_hasShrinkwrap":false,"devDependencies":{"vue":"^3.3.4","vite":"^4.3.9","jsdom":"^22.1.0","pinia":"^2.1.3","eslint":"^8.42.0","should":"^13.2.3","vitest":"^0.31.4","@vue/test-utils":"^2.3.2","eslint-plugin-vue":"^9.14.1","@vitejs/plugin-vue":"^4.2.3","@vitest/coverage-c8":"^0.31.4","eslint-plugin-promise":"^6.1.1","eslint-config-cepharum":"^1.0.13","@rushstack/eslint-patch":"^1.3.0","@vue/eslint-config-prettier":"^7.1.0"},"peerDependencies":{"vue":"^3.3.4","pinia":"^2.1.3"},"_npmOperationalInternal":{"tmp":"tmp/vue3-i18n_0.2.1_1685864551246_0.02743816929952514","host":"s3://npm-registry-packages"}},"0.3.0":{"name":"@cepharum/vue3-i18n","version":"0.3.0","keywords":[],"author":{"name":"cepharum GmbH"},"license":"MIT","_id":"@cepharum/vue3-i18n@0.3.0","maintainers":[{"name":"soletan","email":"thomas.urban@cepharum.de"},{"name":"simon.friedo","email":"friedosimon@aol.com"}],"dist":{"shasum":"15434050a7a4443a3f4c0484c167c713270202f2","tarball":"https://registry.npmjs.org/@cepharum/vue3-i18n/-/vue3-i18n-0.3.0.tgz","fileCount":6,"integrity":"sha512-Lzbgy9L4FVKedlmkLJm6oNduUqjqgFU6ZyACM6DvyuvAd5OPmbMhchLHcAT/tuohqXDffeJQepx+TY1cEldNUg==","signatures":[{"sig":"MEYCIQCW+hbCKgsHd+hY3588D/hJCYjrQ3/Ju91f0PEdOhRR6wIhAJXY77VL2aSy+1/d30iF2CMZxuN5yN5Wmkrp75ULNxXf","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":19270},"main":"./dist/vue3-i18n.umd.cjs","type":"module","module":"./dist/vue3-i18n.js","exports":{".":{"import":"./dist/vue3-i18n.js","require":"./dist/vue3-i18n.umd.cjs"}},"gitHead":"754e339a942026a13d5540af91196c178eb6b563","scripts":{"lint":"eslint","test":"vitest run --coverage","prepare":"vite build","test:dev":"vitest"},"_npmUser":{"name":"soletan","email":"thomas.urban@cepharum.de"},"_npmVersion":"8.18.0","description":"a simple i18n library for Vue3 applications","directories":{},"_nodeVersion":"16.20.0","_hasShrinkwrap":false,"devDependencies":{"vue":"^3.3.4","vite":"^4.3.9","jsdom":"^22.1.0","pinia":"^2.1.3","eslint":"^8.42.0","should":"^13.2.3","vitest":"^0.31.4","@vue/test-utils":"^2.3.2","eslint-plugin-vue":"^9.14.1","@vitejs/plugin-vue":"^4.2.3","@vitest/coverage-c8":"^0.31.4","eslint-plugin-promise":"^6.1.1","eslint-config-cepharum":"^1.0.13","@rushstack/eslint-patch":"^1.3.0","@vue/eslint-config-prettier":"^7.1.0"},"peerDependencies":{"vue":"^3.3.4","pinia":"^2.1.3"},"_npmOperationalInternal":{"tmp":"tmp/vue3-i18n_0.3.0_1685881297496_0.2299930151193157","host":"s3://npm-registry-packages"}},"0.3.1":{"name":"@cepharum/vue3-i18n","version":"0.3.1","keywords":[],"author":{"name":"cepharum GmbH"},"license":"MIT","_id":"@cepharum/vue3-i18n@0.3.1","maintainers":[{"name":"soletan","email":"thomas.urban@cepharum.de"},{"name":"simon.friedo","email":"friedosimon@aol.com"}],"dist":{"shasum":"7763ce691380f12241788b6fb163cba0abc7fa5f","tarball":"https://registry.npmjs.org/@cepharum/vue3-i18n/-/vue3-i18n-0.3.1.tgz","fileCount":6,"integrity":"sha512-SA8N1D0uqD/XybPP9nmxEsfMMxgJm4LjvZKbe3UOvEJpMAyr8O4r4bo4fyShFZOxrst597IamQMiFsmx2hN95w==","signatures":[{"sig":"MEQCIC0darpMCa0xxj4uEqlD1C37LJQURe1dZoVNImS1Nn/oAiAFiIUXr/m2Rp4DUEXVwUMfQIYJ9cum9J/URvHvAECA2Q==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":19211},"main":"./dist/vue3-i18n.umd.cjs","type":"module","module":"./dist/vue3-i18n.js","exports":{".":{"import":"./dist/vue3-i18n.js","require":"./dist/vue3-i18n.umd.cjs"}},"gitHead":"4a3b1c2bd4b56e98d5f4a4524f8de8f412bf3d7d","scripts":{"lint":"eslint","test":"vitest run --coverage","prepare":"vite build","test:dev":"vitest"},"_npmUser":{"name":"soletan","email":"thomas.urban@cepharum.de"},"_npmVersion":"8.18.0","description":"a simple i18n library for Vue3 applications","directories":{},"_nodeVersion":"16.20.0","_hasShrinkwrap":false,"devDependencies":{"vue":"^3.3.4","vite":"^4.3.9","jsdom":"^22.1.0","pinia":"^2.1.3","eslint":"^8.42.0","should":"^13.2.3","vitest":"^0.31.4","@vue/test-utils":"^2.3.2","eslint-plugin-vue":"^9.14.1","@vitejs/plugin-vue":"^4.2.3","@vitest/coverage-c8":"^0.31.4","eslint-plugin-promise":"^6.1.1","eslint-config-cepharum":"^1.0.13","@rushstack/eslint-patch":"^1.3.0","@vue/eslint-config-prettier":"^7.1.0"},"peerDependencies":{"vue":"^3.3.4","pinia":"^2.1.3"},"_npmOperationalInternal":{"tmp":"tmp/vue3-i18n_0.3.1_1685881920648_0.8826406761585408","host":"s3://npm-registry-packages"}},"0.3.2":{"name":"@cepharum/vue3-i18n","version":"0.3.2","keywords":[],"author":{"name":"cepharum GmbH"},"license":"MIT","_id":"@cepharum/vue3-i18n@0.3.2","maintainers":[{"name":"soletan","email":"thomas.urban@cepharum.de"},{"name":"simon.friedo","email":"friedosimon@aol.com"}],"dist":{"shasum":"4d8dfafecae6831e00b003145111b9a7178250d1","tarball":"https://registry.npmjs.org/@cepharum/vue3-i18n/-/vue3-i18n-0.3.2.tgz","fileCount":6,"integrity":"sha512-3HhEhoJ4pAw+bhPmMUebGAKF+2YztHvIGb051ZFXM6U3v9eV4qg4R4Xj3pSjOV4YQQ5tB6riWZGqvFD6m3k8Vg==","signatures":[{"sig":"MEUCIQCKTiTJQ8vnW2tCeY1Xh8QPuiyFh/2uEtDBpmxaykaYYgIgVR1w5z1f4ObYMkdQJXYnzBqDbcoYsb2+SDd9R6V3+xY=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":19248},"main":"./dist/vue3-i18n.umd.cjs","type":"module","module":"./dist/vue3-i18n.js","exports":{".":{"import":"./dist/vue3-i18n.js","require":"./dist/vue3-i18n.umd.cjs"}},"gitHead":"3c27601d3d9ee4bb504e82ee6c4db11b8ac88714","scripts":{"lint":"eslint","test":"vitest run --coverage","prepare":"vite build","test:dev":"vitest"},"_npmUser":{"name":"soletan","email":"thomas.urban@cepharum.de"},"overrides":{"vue":"$vue"},"_npmVersion":"8.18.0","description":"a simple i18n library for Vue3 applications","directories":{},"_nodeVersion":"16.20.0","_hasShrinkwrap":false,"devDependencies":{"vue":"^3.3.4","vite":"^4.4.11","jsdom":"^22.1.0","pinia":"^2.1.6","eslint":"^8.51.0","should":"^13.2.3","vitest":"^0.34.6","@vue/test-utils":"^2.4.1","eslint-plugin-vue":"^9.17.0","@vitejs/plugin-vue":"^4.4.0","@vitest/coverage-v8":"^0.34.6","eslint-plugin-promise":"^6.1.1","eslint-config-cepharum":"^1.0.14","@rushstack/eslint-patch":"^1.5.1","@vue/eslint-config-prettier":"^8.0.0"},"peerDependencies":{"vue":"^3.3.4","pinia":"^2.1.6"},"_npmOperationalInternal":{"tmp":"tmp/vue3-i18n_0.3.2_1696781246332_0.9537253798922543","host":"s3://npm-registry-packages"}},"0.4.0":{"name":"@cepharum/vue3-i18n","version":"0.4.0","keywords":[],"author":{"name":"cepharum GmbH"},"license":"MIT","_id":"@cepharum/vue3-i18n@0.4.0","maintainers":[{"name":"soletan","email":"thomas.urban@cepharum.de"},{"name":"simon.friedo","email":"friedosimon@aol.com"}],"dist":{"shasum":"47b55bf3509de0fa7149c58a8e6b8e9d59a0a446","tarball":"https://registry.npmjs.org/@cepharum/vue3-i18n/-/vue3-i18n-0.4.0.tgz","fileCount":6,"integrity":"sha512-vHdGB6ltO9BEiW0h20OpR+b68SyDPP6uKLDie6LUGB6CK+5i8e2jCBqNOlnejJhft/4MQv4VtDftCsuk5hPdXw==","signatures":[{"sig":"MEYCIQCQQeag3yCOaMfVGRZCvAsYuqytVoOu0iOTTr+nE02iXAIhAOGMJMHvqmftc4NX729J0OYGiDqHZpXLqDKoVz3sy+Dz","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":27004},"main":"./dist/vue3-i18n.umd.cjs","type":"module","module":"./dist/vue3-i18n.js","exports":{".":{"import":"./dist/vue3-i18n.js","require":"./dist/vue3-i18n.umd.cjs"}},"gitHead":"500f0c1fff984e279722e617a43e8d6f2bcc5d72","scripts":{"lint":"eslint","test":"vitest run --coverage","prepare":"vite build","test:dev":"vitest"},"_npmUser":{"name":"soletan","email":"thomas.urban@cepharum.de"},"_npmVersion":"8.18.0","description":"a simple i18n library for Vue3 applications","directories":{},"_nodeVersion":"16.20.0","_hasShrinkwrap":false,"devDependencies":{"vue":"^3.3.4","vite":"^4.4.11","jsdom":"^22.1.0","eslint":"^8.51.0","should":"^13.2.3","vitest":"^0.34.6","@vue/test-utils":"^2.4.1","eslint-plugin-vue":"^9.17.0","@vitejs/plugin-vue":"^4.4.0","@vitest/coverage-v8":"^0.34.6","eslint-plugin-promise":"^6.1.1","eslint-config-cepharum":"^1.0.14","@rushstack/eslint-patch":"^1.5.1","@vue/eslint-config-prettier":"^8.0.0"},"peerDependencies":{"vue":"^3.3.4"},"_npmOperationalInternal":{"tmp":"tmp/vue3-i18n_0.4.0_1697109215296_0.7723223428331103","host":"s3://npm-registry-packages"}},"0.4.1":{"name":"@cepharum/vue3-i18n","version":"0.4.1","keywords":[],"author":{"name":"cepharum GmbH"},"license":"MIT","_id":"@cepharum/vue3-i18n@0.4.1","maintainers":[{"name":"soletan","email":"thomas.urban@cepharum.de"},{"name":"simon.friedo","email":"friedosimon@aol.com"}],"dist":{"shasum":"7f5c20bd1c6caedbc1ec7515e03b792d0a09a725","tarball":"https://registry.npmjs.org/@cepharum/vue3-i18n/-/vue3-i18n-0.4.1.tgz","fileCount":6,"integrity":"sha512-kkd/xHjaNArES1Tb6zefZyndQwThYQD3mMV2Xe5mi6tD/GE8kOc+6cExV9QI8BkTl1F/5tJjdjv6UYIaYasdGw==","signatures":[{"sig":"MEUCIQCzR2TAF8Tu31WkH+J3ERIwWGu19+DUZmwDfW9tnsm6JQIgKVBFqLcRqUgFKsk2b6NE5GFGLHrxzA0MVvPaGVPj4+E=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":30756},"main":"./dist/vue3-i18n.umd.cjs","type":"module","module":"./dist/vue3-i18n.js","exports":{".":{"import":"./dist/vue3-i18n.js","require":"./dist/vue3-i18n.umd.cjs"}},"gitHead":"8eb40f36765bdb172f0894593a0ff3469045913a","scripts":{"lint":"eslint","test":"vitest run --coverage","prepare":"vite build","test:dev":"vitest"},"_npmUser":{"name":"soletan","email":"thomas.urban@cepharum.de"},"_npmVersion":"8.19.4","description":"a simple i18n library for Vue3 applications","directories":{},"_nodeVersion":"16.20.2","_hasShrinkwrap":false,"devDependencies":{"vue":"^3.3.4","vite":"^4.4.11","jsdom":"^22.1.0","eslint":"^8.51.0","should":"^13.2.3","vitest":"^0.34.6","@vue/test-utils":"^2.4.1","eslint-plugin-vue":"^9.17.0","@vitejs/plugin-vue":"^4.4.0","@vitest/coverage-v8":"^0.34.6","eslint-plugin-promise":"^6.1.1","eslint-config-cepharum":"^1.0.14","@rushstack/eslint-patch":"^1.5.1","@vue/eslint-config-prettier":"^8.0.0"},"peerDependencies":{"vue":"^3.3.4"},"_npmOperationalInternal":{"tmp":"tmp/vue3-i18n_0.4.1_1699701953994_0.13346949347640624","host":"s3://npm-registry-packages"}},"0.4.2":{"name":"@cepharum/vue3-i18n","version":"0.4.2","keywords":[],"author":{"name":"cepharum GmbH"},"license":"MIT","_id":"@cepharum/vue3-i18n@0.4.2","maintainers":[{"name":"soletan","email":"thomas.urban@cepharum.de"},{"name":"simon.friedo","email":"friedosimon@aol.com"}],"dist":{"shasum":"8168cf8e9cecaa4ca0988bf6159b97cdc092a5ae","tarball":"https://registry.npmjs.org/@cepharum/vue3-i18n/-/vue3-i18n-0.4.2.tgz","fileCount":6,"integrity":"sha512-CbTBornkJ9DbSwur8AJZxU+5N3cIpl/crkEBmqE6+F+kq9zD6DxoxSu1Gm6L+WpPSe+aPXQXVIuVeFqlJCKm8A==","signatures":[{"sig":"MEQCIHbaWR5WPta5aR5+SSYHPaDKrRgKTY1RzTPgvrI1LSpPAiBw/2iVWNXXaE8QrocNPAW8oz3asaYRkAzLJORBjtsaZQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":30814},"main":"./dist/vue3-i18n.umd.cjs","type":"module","module":"./dist/vue3-i18n.js","exports":{".":{"import":"./dist/vue3-i18n.js","require":"./dist/vue3-i18n.umd.cjs"}},"gitHead":"c29b661f2d6f0de7a7153b97f78285212a4e4e10","scripts":{"lint":"eslint","test":"vitest run --coverage","prepare":"vite build","test:dev":"vitest"},"_npmUser":{"name":"soletan","email":"thomas.urban@cepharum.de"},"_npmVersion":"8.19.4","description":"a simple i18n library for Vue3 applications","directories":{},"_nodeVersion":"16.20.2","_hasShrinkwrap":false,"devDependencies":{"vue":"^3.3.4","vite":"^4.4.11","jsdom":"^22.1.0","eslint":"^8.51.0","should":"^13.2.3","vitest":"^0.34.6","@vue/test-utils":"^2.4.1","eslint-plugin-vue":"^9.17.0","@vitejs/plugin-vue":"^4.4.0","@vitest/coverage-v8":"^0.34.6","eslint-plugin-promise":"^6.1.1","eslint-config-cepharum":"^1.0.14","@rushstack/eslint-patch":"^1.5.1","@vue/eslint-config-prettier":"^8.0.0"},"peerDependencies":{"vue":"^3.3.4"},"_npmOperationalInternal":{"tmp":"tmp/vue3-i18n_0.4.2_1699747700628_0.44014858560892733","host":"s3://npm-registry-packages"}},"0.4.3":{"name":"@cepharum/vue3-i18n","version":"0.4.3","keywords":[],"author":{"name":"cepharum GmbH"},"license":"MIT","_id":"@cepharum/vue3-i18n@0.4.3","maintainers":[{"name":"soletan","email":"thomas.urban@cepharum.de"},{"name":"simon.friedo","email":"friedosimon@aol.com"}],"dist":{"shasum":"0b2c5ed9c8b7ec3f374af097f9c7b3715354c374","tarball":"https://registry.npmjs.org/@cepharum/vue3-i18n/-/vue3-i18n-0.4.3.tgz","fileCount":6,"integrity":"sha512-JzBTySeO1SpZ3LbY7aw9Rf3EIab52mlmxS/Rq07KtPVZY1D0euIecmK5Te4VVnSWp7EZl1LT2rEBROhb4rPCpg==","signatures":[{"sig":"MEUCIQD0vwv47bAZNwIVtp6geU1czAbynmDnd+mo9vaSEn9+awIgKqGr+4W8Ido3pQiCFeniz2PijXhx+V4JTXH8Hpw7nYw=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":30804},"main":"./dist/vue3-i18n.umd.cjs","type":"module","module":"./dist/vue3-i18n.js","exports":{".":{"import":"./dist/vue3-i18n.js","require":"./dist/vue3-i18n.umd.cjs"}},"gitHead":"c27a9e314f98cce61a38e732875bfc6a9db63c00","scripts":{"lint":"eslint","test":"vitest run --coverage","prepare":"vite build","test:dev":"vitest"},"_npmUser":{"name":"soletan","email":"thomas.urban@cepharum.de"},"_npmVersion":"8.19.4","description":"a simple i18n library for Vue3 applications","directories":{},"_nodeVersion":"16.20.2","_hasShrinkwrap":false,"devDependencies":{"vue":"3","vite":"^4.4.11","jsdom":"^22.1.0","eslint":"^8.51.0","should":"^13.2.3","vitest":"^0.34.6","@vue/test-utils":"^2.4.1","eslint-plugin-vue":"^9.17.0","@vitejs/plugin-vue":"^4.4.0","@vitest/coverage-v8":"^0.34.6","eslint-plugin-promise":"^6.1.1","eslint-config-cepharum":"^1.0.14","@rushstack/eslint-patch":"^1.5.1","@vue/eslint-config-prettier":"^8.0.0"},"peerDependencies":{"vue":"3"},"_npmOperationalInternal":{"tmp":"tmp/vue3-i18n_0.4.3_1700781041285_0.3293214160439457","host":"s3://npm-registry-packages"}},"0.5.0":{"name":"@cepharum/vue3-i18n","version":"0.5.0","keywords":[],"author":{"name":"cepharum GmbH"},"license":"MIT","_id":"@cepharum/vue3-i18n@0.5.0","maintainers":[{"name":"soletan","email":"thomas.urban@cepharum.de"},{"name":"simon.friedo","email":"friedosimon@aol.com"}],"dist":{"shasum":"306d196c33fd2315d8e80959aff223f7923f7a1d","tarball":"https://registry.npmjs.org/@cepharum/vue3-i18n/-/vue3-i18n-0.5.0.tgz","fileCount":6,"integrity":"sha512-VtqCMMX4qKj2/Z2tnAvQuipEGC9ZUktlnX7KOHXN2oLhZ0VkeoEo3YXAfmDeAwYV2DKtq6gdPulfjXXIS1ed7g==","signatures":[{"sig":"MEUCIHseVquUlz74ItTzdnsEhm6QS2iLGSwCYXaFjac8YsCmAiEAuf8Uc4e31wEd5jAEV4Fk2T+f0wMyvECRjjyLTS/rWTk=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":35137},"main":"./dist/vue3-i18n.umd.cjs","type":"module","module":"./dist/vue3-i18n.js","exports":{".":{"import":"./dist/vue3-i18n.js","require":"./dist/vue3-i18n.umd.cjs"}},"gitHead":"d750b738ba828fb6e53683d625f721969522f2f2","scripts":{"lint":"eslint","test":"vitest run --coverage","prepare":"vite build","test:dev":"vitest"},"_npmUser":{"name":"soletan","email":"thomas.urban@cepharum.de"},"_npmVersion":"10.2.3","description":"a simple i18n library for Vue3 applications","directories":{},"_nodeVersion":"20.10.0","_hasShrinkwrap":false,"devDependencies":{"vue":"3","vite":"^4.4.11","jsdom":"^22.1.0","eslint":"^8.51.0","should":"^13.2.3","vitest":"^0.34.6","@vue/test-utils":"^2.4.1","eslint-plugin-vue":"^9.17.0","@vitejs/plugin-vue":"^4.4.0","@vitest/coverage-v8":"^0.34.6","eslint-plugin-promise":"^6.1.1","eslint-config-cepharum":"^1.0.14","@rushstack/eslint-patch":"^1.5.1","@vue/eslint-config-prettier":"^8.0.0"},"peerDependencies":{"vue":"3"},"_npmOperationalInternal":{"tmp":"tmp/vue3-i18n_0.5.0_1702332926577_0.33396840896817714","host":"s3://npm-registry-packages"}},"0.5.1":{"name":"@cepharum/vue3-i18n","version":"0.5.1","keywords":[],"author":{"name":"cepharum GmbH"},"license":"MIT","_id":"@cepharum/vue3-i18n@0.5.1","maintainers":[{"name":"soletan","email":"thomas.urban@cepharum.de"},{"name":"simon.friedo","email":"friedosimon@aol.com"}],"dist":{"shasum":"415072fc3d89f5017afae85b46a3706f5530d15c","tarball":"https://registry.npmjs.org/@cepharum/vue3-i18n/-/vue3-i18n-0.5.1.tgz","fileCount":34,"integrity":"sha512-5oAmJInrbUni7Umr16fhB14wCExqnRuv26Q+J2a0KgXO1o+2wYCH+APu188iCVZre+Mq6Z0kWrZbX/TJDqZXbQ==","signatures":[{"sig":"MEYCIQCVtEjsGT9of/XaOjIXc9RAOmwR0+X6flJIPSkXdIiE/QIhAO7fsShcQbD0W5j14dfMFIIftrFBq7CqR88Wz0unnk1J","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":732185},"main":"./dist/vue3-i18n.umd.cjs","type":"module","module":"./dist/vue3-i18n.js","exports":{".":{"import":"./dist/vue3-i18n.js","require":"./dist/vue3-i18n.umd.cjs"}},"gitHead":"dde0f6a0a562ce527d4f7f04f0b5002fb943ee5b","scripts":{"lint":"eslint","test":"vitest run --coverage","prepare":"vite build","test:dev":"vitest","docs:build":"vitepress build docs","docs:serve":"vitepress dev docs","docs:preview":"vitepress preview docs"},"_npmUser":{"name":"soletan","email":"thomas.urban@cepharum.de"},"_npmVersion":"10.5.2","description":"a simple i18n library for Vue3 applications","directories":{},"_nodeVersion":"20.13.1","_hasShrinkwrap":false,"devDependencies":{"vue":"3","vite":"^5.2.11","jsdom":"^24.0.0","eslint":"^8.57.0","should":"^13.2.3","vitest":"^1.6.0","vitepress":"^1.1.4","@vue/test-utils":"^2.4.6","eslint-plugin-vue":"^9.26.0","@vitejs/plugin-vue":"^5.0.4","@vitest/coverage-v8":"^1.6.0","eslint-plugin-promise":"^6.1.1","eslint-config-cepharum":"^1.0.14","@rushstack/eslint-patch":"^1.10.2","@vue/eslint-config-prettier":"^9.0.0"},"peerDependencies":{"vue":"3"},"_npmOperationalInternal":{"tmp":"tmp/vue3-i18n_0.5.1_1715594982417_0.42835691603569415","host":"s3://npm-registry-packages"}},"0.5.2":{"name":"@cepharum/vue3-i18n","version":"0.5.2","keywords":[],"author":{"name":"cepharum GmbH"},"license":"MIT","_id":"@cepharum/vue3-i18n@0.5.2","maintainers":[{"name":"soletan","email":"thomas.urban@cepharum.de"},{"name":"simon.friedo","email":"friedosimon@aol.com"}],"dist":{"shasum":"bcfb75f1a79da17cec5371e4461cf0003c9542e3","tarball":"https://registry.npmjs.org/@cepharum/vue3-i18n/-/vue3-i18n-0.5.2.tgz","fileCount":34,"integrity":"sha512-JUGNLbjNUHi1+GIbYZu3RnVr+jodxR/sCY1dnqFAGRUTkNihga5uChpfDxTf6nm5MjDQv4Kgpr1cbtRzpKy9JQ==","signatures":[{"sig":"MEUCICc1xaLJT5xgsA3BkbVjIfmkvbfubwpvDjjsh/2tJ0FzAiEA3j2nBfbKjbwhxsfmgsZ9oiUW/KTPX9YQvgnme5eHYHE=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":983445},"main":"./dist/vue3-i18n.umd.cjs","type":"module","module":"./dist/vue3-i18n.js","exports":{".":{"import":"./dist/vue3-i18n.js","require":"./dist/vue3-i18n.umd.cjs"}},"gitHead":"828229ea471e9b6dcb5d39e6f244264fd13ae0f7","scripts":{"dev":"vite build --watch","lint":"eslint","test":"vitest run --coverage","prepare":"vite build","test:dev":"vitest","docs:build":"vitepress build docs","docs:serve":"vitepress dev docs","docs:preview":"vitepress preview docs"},"_npmUser":{"name":"soletan","email":"thomas.urban@cepharum.de"},"_npmVersion":"10.5.2","description":"a simple i18n library for Vue3 applications","directories":{},"_nodeVersion":"20.13.1","_hasShrinkwrap":false,"devDependencies":{"vue":"3","vite":"^5.2.11","jsdom":"^24.0.0","eslint":"^8.57.0","should":"^13.2.3","vitest":"^1.6.0","vitepress":"^1.1.4","@vue/test-utils":"^2.4.6","eslint-plugin-vue":"^9.26.0","@vitejs/plugin-vue":"^5.0.4","@vitest/coverage-v8":"^1.6.0","eslint-plugin-promise":"^6.1.1","eslint-config-cepharum":"^1.0.14","@rushstack/eslint-patch":"^1.10.2","@vue/eslint-config-prettier":"^9.0.0"},"peerDependencies":{"vue":"3"},"_npmOperationalInternal":{"tmp":"tmp/vue3-i18n_0.5.2_1717872680632_0.8637411914134965","host":"s3://npm-registry-packages"}},"0.5.3":{"name":"@cepharum/vue3-i18n","version":"0.5.3","keywords":[],"author":{"name":"cepharum GmbH"},"license":"MIT","_id":"@cepharum/vue3-i18n@0.5.3","dist":{"shasum":"4afdf47ead8c31ca3d9100da0dd7eb1859d2ddb6","tarball":"https://registry.npmjs.org/@cepharum/vue3-i18n/-/vue3-i18n-0.5.3.tgz","fileCount":34,"integrity":"sha512-0qKZV6hgozC5Jq94QtX73u/EA+5oFdssAGmmXGUk0/uFbHSHME36r2fssQdYSTv8Yuy6MdyZcbhjdQy8G0Hx3A==","signatures":[{"sig":"MEUCIG0awDUM/IhhHQz8YVegYRkfPE09M3Y8mE1UcDnApSZrAiEA/xnxyrUboe7AsC6PhjeXlt9KicPlsmcDIdmXsiRmRro=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":983547},"main":"./dist/vue3-i18n.umd.cjs","type":"module","module":"./dist/vue3-i18n.js","exports":{".":{"import":"./dist/vue3-i18n.js","require":"./dist/vue3-i18n.umd.cjs"}},"gitHead":"901063817672ac28dcf93cafdce0bd0f97c60c9d","scripts":{"dev":"vite build --watch","lint":"eslint","test":"vitest run --coverage","prepare":"vite build","test:dev":"vitest","docs:build":"vitepress build docs","docs:serve":"vitepress dev docs","docs:preview":"vitepress preview docs"},"_npmUser":{"name":"soletan","email":"thomas.urban@cepharum.de"},"_npmVersion":"10.5.2","description":"a simple i18n library for Vue3 applications","directories":{},"_nodeVersion":"20.13.1","_hasShrinkwrap":false,"devDependencies":{"vue":"3","vite":"^5.2.11","jsdom":"^24.0.0","eslint":"^8.57.0","should":"^13.2.3","vitest":"^1.6.0","vitepress":"^1.1.4","@vue/test-utils":"^2.4.6","eslint-plugin-vue":"^9.26.0","@vitejs/plugin-vue":"^5.0.4","@vitest/coverage-v8":"^1.6.0","eslint-plugin-promise":"^6.1.1","eslint-config-cepharum":"^1.0.14","@rushstack/eslint-patch":"^1.10.2","@vue/eslint-config-prettier":"^9.0.0"},"peerDependencies":{"vue":"3"},"_npmOperationalInternal":{"tmp":"tmp/vue3-i18n_0.5.3_1719676499235_0.3018760341771358","host":"s3://npm-registry-packages"}},"0.5.4":{"name":"@cepharum/vue3-i18n","version":"0.5.4","keywords":[],"author":{"name":"cepharum GmbH"},"license":"MIT","_id":"@cepharum/vue3-i18n@0.5.4","dist":{"shasum":"56dfd865264082993afa18fb479f29f2dfc4d3c5","tarball":"https://registry.npmjs.org/@cepharum/vue3-i18n/-/vue3-i18n-0.5.4.tgz","fileCount":34,"integrity":"sha512-TO2DgbeHO3JBJPfQtnHuxtxxidg3tRiBXn1U5WqIX1mrTGKErhfeZpTjEOzoF7hpbc1mOYttRJ3itNQRgEfM7w==","signatures":[{"sig":"MEUCICQf0Ujlf/svQwrat0mRKgH3Amwznj3qyg3TNZO1fMRCAiEAzpZ4Zsig9SnfqIvaUTxPVoNPkGSlX0gMc8R250c0yuo=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":983778},"main":"./dist/vue3-i18n.umd.cjs","type":"module","module":"./dist/vue3-i18n.js","exports":{".":{"import":"./dist/vue3-i18n.js","require":"./dist/vue3-i18n.umd.cjs"}},"gitHead":"9090772252aed3ed607a9bc4ebe1f6270597bbe8","scripts":{"dev":"vite build --watch","lint":"eslint","test":"vitest run --coverage","prepare":"vite build","test:dev":"vitest","docs:build":"vitepress build docs","docs:serve":"vitepress dev docs","docs:preview":"vitepress preview docs"},"_npmUser":{"name":"soletan","email":"thomas.urban@cepharum.de"},"_npmVersion":"10.5.2","description":"a simple i18n library for Vue3 applications","directories":{},"_nodeVersion":"20.13.1","_hasShrinkwrap":false,"devDependencies":{"vue":"3","vite":"^5.2.11","jsdom":"^24.0.0","eslint":"^8.57.0","should":"^13.2.3","vitest":"^1.6.0","vitepress":"^1.1.4","@vue/test-utils":"^2.4.6","eslint-plugin-vue":"^9.26.0","@vitejs/plugin-vue":"^5.0.4","@vitest/coverage-v8":"^1.6.0","eslint-plugin-promise":"^6.1.1","eslint-config-cepharum":"^1.0.14","@rushstack/eslint-patch":"^1.10.2","@vue/eslint-config-prettier":"^9.0.0"},"peerDependencies":{"vue":"3"},"_npmOperationalInternal":{"tmp":"tmp/vue3-i18n_0.5.4_1719683857268_0.8469758118720137","host":"s3://npm-registry-packages"}},"1.0.0":{"name":"@cepharum/vue3-i18n","version":"1.0.0","keywords":[],"author":{"name":"cepharum GmbH"},"license":"MIT","_id":"@cepharum/vue3-i18n@1.0.0","maintainers":[{"name":"soletan","email":"thomas.urban@cepharum.de"},{"name":"simon.friedo","email":"friedosimon@aol.com"}],"dist":{"shasum":"8246342e5f03359600ba8f29f9a2950bc83d1447","tarball":"https://registry.npmjs.org/@cepharum/vue3-i18n/-/vue3-i18n-1.0.0.tgz","fileCount":8,"integrity":"sha512-ToH6FKKjj5XMdhPv1NRkRoCGwXautdSGZmfsir8vpeQS2Wx1Ec3wrQQQlniKt4Jnqp9tnLs9c+tt84a21zLFQA==","signatures":[{"sig":"MEUCIHgpE4ZBJSndHBjNGTlSRleyt/41Y8uqcnVq/cr7AqHRAiEAphlmLszZv3TXvo0+hMyLc2IE2RQayfuXESz0EvPTdK8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":56475},"main":"./dist/vue3-i18n.umd.cjs","type":"module","module":"./dist/vue3-i18n.js","exports":{".":{"import":"./dist/vue3-i18n.js","require":"./dist/vue3-i18n.umd.cjs"}},"gitHead":"bdf150b3473962c319a0b97902671f0d25706050","scripts":{"dev":"vite build --watch","lint":"eslint","test":"vitest run --coverage","prepare":"vite build","test:dev":"vitest","docs:build":"vitepress build docs","docs:serve":"vitepress dev docs","docs:preview":"vitepress preview docs"},"_npmUser":{"name":"soletan","email":"thomas.urban@cepharum.de"},"_npmVersion":"10.9.8","description":"a simple i18n library for Vue3 applications","directories":{},"_nodeVersion":"22.22.3","_hasShrinkwrap":false,"devDependencies":{"vue":"3","vite":"^7.3.5","jsdom":"^24.1.3","eslint":"^9.39.4","should":"^13.2.3","vitest":"^4.1.9","vitepress":"^1.6.4","@vue/test-utils":"^2.4.11","eslint-plugin-vue":"^9.33.0","vue-eslint-parser":"^10.4.1","@vitejs/plugin-vue":"^6.0.7","@vitest/coverage-v8":"^4.1.9","eslint-plugin-promise":"^7.3.0","eslint-config-cepharum":"^2.0.2","@rushstack/eslint-patch":"^1.16.1","@vue/eslint-config-prettier":"^9.0.0"},"peerDependencies":{"vue":"3"},"_npmOperationalInternal":{"tmp":"tmp/vue3-i18n_1.0.0_1781993215497_0.7541612944897276","host":"s3://npm-registry-packages-npm-production"}},"2.0.0":{"name":"@cepharum/vue3-i18n","version":"2.0.0","description":"a simple i18n library for Vue3 applications","type":"module","main":"./dist/vue3-i18n.umd.cjs","module":"./dist/vue3-i18n.js","types":"./types/index.d.ts","exports":{".":{"types":"./types/index.d.ts","require":"./dist/vue3-i18n.umd.cjs","import":"./dist/vue3-i18n.js"}},"publishConfig":{"access":"public"},"scripts":{"dev":"vite build --watch","prepare":"vite build && (test -n \"$CI\" || lefthook install)","test":"vitest run --coverage","test:dev":"vitest","lint":"eslint","docs:serve":"vitepress dev docs","docs:preview":"vitepress preview docs","docs:build":"vitepress build docs"},"keywords":[],"author":{"name":"cepharum GmbH"},"license":"MIT","peerDependencies":{"vue":"3"},"overrides":{"vite":"^6.4.3"},"devDependencies":{"@commitlint/cli":"^21.2.2","@commitlint/config-conventional":"^21.2.2","@rushstack/eslint-patch":"^1.16.1","@vitejs/plugin-vue":"^6.0.8","@vitest/coverage-v8":"^4.1.11","@vue/eslint-config-prettier":"^9.0.0","@vue/test-utils":"^2.4.11","eslint":"^9.39.4","eslint-config-cepharum":"^2.1.2","eslint-plugin-promise":"^7.3.0","eslint-plugin-vue":"^9.33.0","jsdom":"^24.1.3","lefthook":"^2.1.12","should":"^13.2.3","vite":"^6.4.3","vitepress":"^1.6.4","vitest":"^4.1.11","vue":"3","vue-eslint-parser":"^10.4.1"},"engines":{"node":">=18.13"},"_id":"@cepharum/vue3-i18n@2.0.0","gitHead":"6d36efae3e21602c4fff2f07cd840529da4222d0","_nodeVersion":"22.22.3","_npmVersion":"10.9.8","dist":{"integrity":"sha512-u2tnOcA/++fxLZYlle4kkYScZEFsAg4lFMUTJ4OI7VvMuAr/59Sdda4UxPiLtD27rX3fOvU7a4NyWgsP+n5MIw==","shasum":"145c293a0b6a881e422e526c94a21a14b966f00f","tarball":"https://registry.npmjs.org/@cepharum/vue3-i18n/-/vue3-i18n-2.0.0.tgz","fileCount":10,"unpackedSize":126687,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQCvc5wuZaEiefFwy/s70hIrCnrMxsoplfucKrCV0r2oFwIhAOi02kJRa8ew0J1GDG4ZksiA+bTOYH2W4b8kpvZoG5eE"}]},"_npmUser":{"name":"soletan","email":"thomas.urban@cepharum.de"},"directories":{},"maintainers":[{"name":"soletan","email":"thomas.urban@cepharum.de"},{"name":"simon.friedo","email":"friedosimon@aol.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/vue3-i18n_2.0.0_1788389365873_0.780244767062837"},"_hasShrinkwrap":false}},"time":{"created":"2023-06-03T20:34:12.214Z","modified":"2026-09-02T22:49:26.171Z","0.1.0":"2023-06-03T20:34:12.504Z","0.1.1":"2023-06-03T22:02:36.654Z","0.1.2":"2023-06-03T23:30:45.664Z","0.2.0":"2023-06-04T06:10:47.284Z","0.2.1":"2023-06-04T07:42:31.412Z","0.3.0":"2023-06-04T12:21:37.664Z","0.3.1":"2023-06-04T12:32:00.801Z","0.3.2":"2023-10-08T16:07:26.493Z","0.4.0":"2023-10-12T11:13:35.549Z","0.4.1":"2023-11-11T11:25:54.250Z","0.4.2":"2023-11-12T00:08:20.846Z","0.4.3":"2023-11-23T23:10:41.415Z","0.5.0":"2023-12-11T22:15:26.786Z","0.5.1":"2024-05-13T10:09:42.612Z","0.5.2":"2024-06-08T18:51:20.847Z","0.5.3":"2024-06-29T15:54:59.397Z","0.5.4":"2024-06-29T17:57:37.526Z","1.0.0":"2026-06-20T22:06:55.644Z","2.0.0":"2026-09-02T22:49:26.021Z"},"author":{"name":"cepharum GmbH"},"license":"MIT","keywords":[],"description":"a simple i18n library for Vue3 applications","maintainers":[{"name":"soletan","email":"thomas.urban@cepharum.de"},{"name":"simon.friedo","email":"friedosimon@aol.com"}],"readme":"# @cepharum/vue3-i18n\n\na simple i18n library for Vue3 applications\n\n## License\n\n[MIT](LICENSE)\n\n## Security\n\nReport suspected vulnerabilities to security@cepharum.de rather than in a public\nissue. See [SECURITY.md](SECURITY.md) for the policy, the supported versions and\nnotes on the library's attack surface.\n\n## For LLMs and AI Agents\n\nThis repository includes comprehensive documentation designed for AI assistants:\n\n- **[AGENT.md](./AGENT.md)** - Detailed technical documentation covering the full API, architecture, and usage patterns\n- **[QUICK_START.md](./QUICK_START.md)** - Quick reference guide with tables and concise examples\n\nThese files are specifically structured to help LLMs understand how this library works and how to use it in consuming applications.\n\n## About\n\nThis library implements a component and helper functions for reactively mapping internationalized keys into localized strings based on hierarchical trees of translations per locale, each implemented as regular Javascript objects e.g. read from JSON files.\n\nIt supports data interpolation and some limited Markdown syntax for styling translations.\n\nDue to its reactive approach, all translations get updated automatically e.g. on switching the locale and fetching its set of translations. The locale to use is read from current document or browser automatically. A custom locale can be selected explicitly to override locale read from document or browser.\n\n## Requirements\n\nNode 18.13+ or an evergreen browser. The library builds on the runtime's `Intl`\nAPI — `PluralRules` including `selectRange`, `NumberFormat`, `DateTimeFormat`,\n`RelativeTimeFormat`, `ListFormat` and `Locale` — and ships **no runtime\ndependencies** of its own. Vue 3 is a peer dependency.\n\n## Install\n\nIn a consuming Vue3 project, this library is installed using npm like this:\n\n```bash\nnpm install @cepharum/vue3-i18n\n```\n\n## Usage\n\nA loader for your translations must be provided. It should be set up as early as possible, e.g. on mounting your project's root view in **src/App.vue** component.\n\n```vue\n<script setup>\nimport { useL10n } from \"@cepharum/vue3-i18n\";\n\nuseL10n().setLoader( locale => import(`./l10n/${locale}.json`) );\n</script>\n```\n\nCreate a folder **src/l10n** in your project and put a file name **en.json** there. It is going to provide all the translations like this:\n\n```json\n{\n  \"COMMON\": {\n    \"confirm\": \"Okay\",\n    \"cancel\": \"Cancel\"\n  },\n  \"FEATURE\": {\n    \"title\": \"Info\",\n    \"text\": \"This is the feature!\"\n  }\n}\n```\n\nUse this library's component `<L10n>` to render text:\n\n```vue\n<script setup>\nimport { L10n } from \"@cepharum/vue3-i18n\";\n</script>\n\n<template>\n  <h1><L10n i18n=\"FEATURE.title\" /></h1>\n  <p><L10n i18n=\"FEATURE.text\" /></p>\n  <button><L10n i18n=\"COMMON.confirm\" /></button>\n</template>\n```\n\n### VitePress\n\nIn VitePress, the [default theme must be extended](https://vitepress.dev/guide/extending-default-theme#registering-global-components) or a [custom theme must be set up](https://vitepress.dev/guide/extending-default-theme#registering-global-components) for registering **vue3-i18n**. In file **.vitepress/theme/index.js**, the method enhanceApp must be extended:\n\n```javascript\nimport { L10n, useL10n } from \"@cepharum/vue3-i18n\";\n\nenhanceApp( ctx ) {\n    const l10n = useL10n();\n\n    // set up loader for fetching translations per locale\n    l10n.setLoader( locale => import( ( `./l10n/${locale}.json` ) ) );\n    \n    // globally register L10n component for use in content pages\n    ctx.app.component( \"L10n\", L10n );\n}\n```\n\nTranslation files per locale are expected to reside in folder **.vitepress/theme/l10n** here.\n\n> In versions prior to v0.5.0, an observer for the document's locale had to be set up explicitly. Starting with v0.5.0, the observer is set up automatically.  \n\n### For More Information\n\nFor detailed documentation on how this library works, see:\n- **[AGENT.md](./AGENT.md)** - Complete technical documentation\n- **[QUICK_START.md](./QUICK_START.md)** - Quick reference guide\n\n### Plugins\n\nStarting with v0.4.1, separate loaders can be registered to provide translations for dedicated namespaces. This enables internationalized plugins for a Vue3-based application providing their own subset of translations.\n\n```javascript\n// in a plugin's setup code:\nimport { L10n, useL10n } from \"@cepharum/vue3-i18n\";\n\nconst l10n = useL10n();\n\n// set up loader for fetching plugin's translations per locale\nl10n.setNamespaceLoader( \"@my-plugin\", locale => import( ( `./l10n/${locale}.json` ) ) );\n```\n\nIn this, a namespace is a non-empty string of non-whitespace characters prefixed with `@`. Keys of all translations fetched by a namespace's loader are automatically prefixed with that namespace. For the example given above, a translation file could look like this:\n\n```json\n{\n  \"FOO\": {\n    \"bar\": \"translated\"\n  }\n}\n```\n\nFor looking it up, the namespace must be prepended in plugin's code:\n\n```javascript\nconst translation = useL10n().lookup( \"@my-plugin.FOO.bar\" );\n```\n\nThe regular loader selected via `setLoader()` isn't affected by this automatic prefixing. Thus, it is capable of providing custom translations for either namespace, too. For that, the regular loader is always processed last on compiling a locale's set of translations.\n\n### Interpolation\n\nYou can use additional markup in your translations to be replaced with values extracted from an additionally provided data object. Translations can look like this:\n\n```json\n{\n  \"COMMON\": {\n    \"confirm\": \"Okay\",\n    \"cancel\": \"Cancel\"\n  },\n  \"FEATURE\": {\n    \"title\": \"About {mode.label}\",\n    \"text\": \"This is the feature!\"\n  }\n}\n```\n\n`<L10n>` component supports another property `data` accepting some object with properties matching names wrapped in curly braces above:\n\n```vue\n<script setup>\nimport { ref } from \"vue\";\nimport { L10n } from \"@cepharum/vue3-i18n\";\n\nconst data = ref({\n\tmode: {\n\t\tlabel: \"Interpolation\",\n\t},\n});\n</script>\n\n<template>\n  <h1><L10n i18n=\"FEATURE.title\" :data=\"data\" /></h1>\n  <p><L10n i18n=\"FEATURE.text\" /></p>\n  <button><L10n i18n=\"COMMON.confirm\" /></button>\n</template>\n```\n\n`data` of `<L10n>` accepts a function, too, which gets invoked on every update to fetch actual data:\n\n```vue\n<script setup>\nimport { L10n } from \"@cepharum/vue3-i18n\";\n\nconst data = () => ({\n  mode: {\n    label: \"Interpolation\",\n  },\n});\n</script>\n\n<template>\n  <h1><L10n i18n=\"FEATURE.title\" :data=\"data\" /></h1>\n  <p><L10n i18n=\"FEATURE.text\" /></p>\n  <button><L10n i18n=\"COMMON.confirm\" /></button>\n</template>\n```\n\nThe component renders the resulting translation without any HTML element unless [markdown support has been enabled](#markdown). By setting optional property `tag` to the name of an HTML element, the translation is _always_ wrapped in an element with that name. The following example results in same output as the previous one:\n\n```vue\n<script setup>\nimport { L10n } from \"@cepharum/vue3-i18n\";\n\nconst data = () => ({\n  mode: {\n    label: \"Interpolation\",\n  },\n});\n</script>\n\n<template>\n  <L10n i18n=\"FEATURE.title\" :data=\"data\" tag=\"h1\" />\n  <L10n i18n=\"FEATURE.text\" tag=\"p\"/>\n  <L10n i18n=\"COMMON.confirm\" tag=\"button\" />\n</template>\n```\n\n### Selections: plural, gender and beyond\n\nA translation does not have to be a single string. It may be a **selecting\nnode** picking one out of several branches depending on the interpolated data.\nThis is how translations stay correct in languages whose grammar does not\nfollow the germanic pattern.\n\n#### Plural\n\nWrite the branches, and the matching one is picked according to the CLDR rules\nof the current locale:\n\n```json\n{\n  \"FILES\": {\n    \"removed\": {\n      \"one\": \"{count} file removed\",\n      \"other\": \"{count} files removed\"\n    }\n  }\n}\n```\n\n```vue\n<L10n i18n=\"FILES.removed\" :data=\"{ count: numFiles }\" />\n```\n\nNo control key is required: a node is taken for a plural selection if all its\nkeys are CLDR plural categories (`zero`, `one`, `two`, `few`, `many`, `other`)\nor the default branch `*`, and at least one of them is beyond `one`. The\nselecting value is property `count` of the interpolated data by default.\n\n**The set of branches belongs to the target language, not to the source\nlanguage.** The very same key and the very same call may be two branches in\nEnglish, four in Polish and a plain string in Japanese:\n\n```json\n{\n  \"FILES\": {\n    \"removed\": {\n      \"one\": \"Usunięto {count} plik\",\n      \"few\": \"Usunięto {count} pliki\",\n      \"many\": \"Usunięto {count} plików\",\n      \"other\": \"Usunięto {count} pliku\"\n    }\n  }\n}\n```\n\n```json\n{ \"FILES\": { \"removed\": \"{count}件のファイルを削除しました\" } }\n```\n\nUse `$plural` for selecting by another property, and `$ordinal` for ordinal\nnumbers, which many languages inflect by rules of their own:\n\n```json\n{\n  \"CART\": { \"$plural\": \"amount\", \"one\": \"{amount} item\", \"other\": \"{amount} items\" },\n  \"RANK\": { \"$ordinal\": \"rank\", \"one\": \"{rank}st\", \"two\": \"{rank}nd\", \"few\": \"{rank}rd\", \"other\": \"{rank}th\" }\n}\n```\n\n`$range` selects by the category of a range of numbers, e.g. for \"1–5 days\":\n\n```json\n{ \"DAYS\": { \"$range\": [ \"from\", \"to\" ], \"one\": \"{from}–{to} day\", \"other\": \"{from}–{to} days\" } }\n```\n\n#### Gender and any other distinction\n\n`$select` picks a branch by an arbitrary value, such as the gender of a person,\nthe grammatical gender of an inserted noun, its animacy or its noun class:\n\n```json\n{\n  \"INVITE\": {\n    \"$select\": \"actor.gender\",\n    \"f\": \"{actor.name} invited you to her project.\",\n    \"m\": \"{actor.name} invited you to his project.\",\n    \"*\": \"{actor.name} invited you to their project.\"\n  }\n}\n```\n\nBranch `*` is used whenever no other branch matches, including the case of a\nmissing or unknown value, and should therefore carry a formulation that works\nwithout the distinction. A language that does not make the distinction at all\njust writes a plain string instead.\n\n#### Nesting\n\nBranches may be selecting nodes themselves. This covers e.g. slavic languages,\nin which animacy governs which plural forms apply:\n\n```json\n{\n  \"SELECTED\": {\n    \"$select\": \"item.animacy\",\n    \"personal\": { \"one\": \"…\", \"few\": \"…\", \"many\": \"…\", \"other\": \"…\" },\n    \"*\":        { \"one\": \"…\", \"few\": \"…\", \"many\": \"…\", \"other\": \"…\" }\n  }\n}\n```\n\n#### Fallbacks and opting out\n\nIf no branch matches, `other` is tried, then `*` (the other way round for\n`$select`), and eventually the key itself is returned just like for a missing\ntranslation.\n\nKeys starting with `$` are reserved. A regular thread of keys that would be\nmistaken for a selection — one actually named `one`, `few`, `other`, … — is\nmarked with `$literal`:\n\n```json\n{ \"ROUND\": { \"$literal\": true, \"one\": \"First round\", \"other\": \"Any other round\" } }\n```\n\n> **Note:** Numbers are interpolated as they are. Wrap them in\n> `Intl.NumberFormat` yourself if you need grouping separators, or pass the\n> formatted string as data.\n\n### Terms: inserting inflected words\n\nSelecting a branch is not enough where the **inserted word itself** has to\nchange its form — german needs four cases, polish seven, finnish fifteen. Since\nthis library never inflects a word on its own, a translation file provides the\nforms, and the placeholder requests one.\n\nA term is an entry providing `forms`, plus any grammatical features you want to\nbranch on. By convention terms live under `TERMS`:\n\n```json\n{\n  \"TERMS\": {\n    \"file\": {\n      \"gender\": \"f\",\n      \"forms\": { \"nom\": \"Datei\", \"gen\": \"Datei\", \"dat\": \"Datei\", \"acc\": \"Datei\", \"nom.pl\": \"Dateien\" }\n    },\n    \"folder\": {\n      \"gender\": \"m\",\n      \"forms\": { \"nom\": \"Ordner\", \"gen\": \"Ordners\", \"dat\": \"Ordner\", \"acc\": \"Ordner\" }\n    }\n  },\n  \"MOVE\": \"{file:acc} nach {folder:dat} verschieben\"\n}\n```\n\n```javascript\nimport { term, useL10n } from \"@cepharum/vue3-i18n\";\n\nuseL10n().translate( \"MOVE\", { file: term( \"file\" ), folder: term( \"folder\" ) } );\n// \"Datei nach Ordner verschieben\"\n```\n\nThe form names are yours: a finnish file provides `nom`, `gen`, `part`,\n`iness`, … and a polish one `nom`, `gen`, `dat`, `acc`, `instr`, `loc`, `voc`\nplus their plurals. `{file}` without a form inserts the term's default form,\nwhich is `nom` unless the term names another one in `default`.\n\nBecause a term carries its features, selections can branch on them — this is\nhow article and participle agree with whatever noun is inserted:\n\n```json\n{\n  \"DELETED\": {\n    \"$select\": \"obj.gender\",\n    \"m\": \"Der {obj:nom} wurde gelöscht.\",\n    \"f\": \"Die {obj:nom} wurde gelöscht.\",\n    \"n\": \"Das {obj:nom} wurde gelöscht.\"\n  }\n}\n```\n\nTurkish writes a single branch here, spanish two, and a bantu language as many\nas its noun classes require — the calling code stays the same in every case.\n\nTerms may also be passed inline, without any lexicon, which suits records your\napplication already holds:\n\n```javascript\ntranslate( \"DELETED\", { obj: { gender: \"n\", forms: { nom: \"Bild\" } } } );\n```\n\nNotes:\n\n* A plain string keeps working as interpolation data. A form requested of it is\n  simply ignored.\n* An unresolvable term is inserted as its key, just like a missing translation.\n* `configure( { terms: \"WORDS\" } )` moves the lexicon to another key.\n* Formatter names take precedence over form names, so avoid naming a form\n  `number`, `date`, `time`, `datetime`, `relative` or `list`.\n\n#### The slavic reference case\n\nCase, number and animacy at once — and again with unchanged calling code:\n\n```json\n{\n  \"TERMS\": {\n    \"plik\": {\n      \"gender\": \"m\", \"animacy\": \"inanimate\",\n      \"forms\": { \"nom\": \"plik\", \"acc\": \"plik\", \"nom.pl\": \"pliki\", \"gen.pl\": \"plików\" }\n    }\n  },\n  \"REMOVED\": {\n    \"one\":   \"Usunięto {count} {item:acc}\",\n    \"few\":   \"Usunięto {count} {item:nom.pl}\",\n    \"many\":  \"Usunięto {count} {item:gen.pl}\",\n    \"other\": \"Usunięto {count} {item:gen.pl}\"\n  }\n}\n```\n\n```javascript\ntranslate( \"REMOVED\", { count, item: term( \"plik\" ) } );\n// 1 → \"Usunięto 1 plik\"      2 → \"Usunięto 2 pliki\"\n// 5 → \"Usunięto 5 plików\"   22 → \"Usunięto 22 pliki\"\n```\n\n### Formatting values\n\nNumbers, dates and lists follow conventions of their own in every locale, so\nplaceholders may name a formatter:\n\n```json\n{\n  \"CART\": {\n    \"total\": \"{count:number} items, {sum:number(currency=EUR)}\",\n    \"due\": \"due {when:date(long)}, updated {ago:relative(hour)}\",\n    \"who\": \"shared with {names:list}\"\n  }\n}\n```\n\n```javascript\ntranslate( \"CART.total\", { count: 12345, sum: 79.9 } );\n// en: \"12,345 items, €79.90\"\n// de: \"12.345 items, 79,90 €\"\n```\n\nFormatters are backed by `Intl` and resolve by the **full** language tag, so\n`de-CH` groups thousands differently from `de-DE`.\n\n| Formatter | Arguments | Backed by |\n|---|---|---|\n| `number` | `currency=EUR`, `unit=kilometer`, `percent`, `compact`, `min=`, `max=` | `Intl.NumberFormat` |\n| `date`, `time`, `datetime` | `full`, `long`, `medium`, `short` | `Intl.DateTimeFormat` |\n| `relative` | unit (`day`, `hour`, …), `always` | `Intl.RelativeTimeFormat` |\n| `list` | `or`, `unit`, `long`, `short`, `narrow` | `Intl.ListFormat` |\n\nA value that does not suit its formatter — or a formatter that does not exist —\nis inserted unformatted, so a translation never breaks over it.\n\nRegister formatters of your own with `registerFormatter()`, and use the name in\nplaceholders afterwards:\n\n```javascript\nuseL10n().registerFormatter( \"file\", ( value, { locale } ) => prettyBytes( value, locale ) );\n```\n\n### Options instead of positional arguments\n\n`translate()` accepts a set of options as its second argument:\n\n```javascript\ntranslate( \"CART.total\", { data, markdown: true, locale: \"de-AT\", bidi: \"auto\" } );\n```\n\nThe compact form `translate( key, data, markdown, locale )` remains supported\nand is the more convenient one for the common case. An object is taken for\noptions only if **all** of its properties are option names, so\n`translate( key, { data: x, name: y } )` still passes interpolation data.\n\n### Isolating interpolated values\n\nInserting a latin name into an arabic sentence — or the other way round —\nrearranges the punctuation around it unless the value is isolated. Enable\nisolation per context or per translation:\n\n```javascript\nuseL10n().configure( { bidi: \"auto\" } );\n```\n\nValues whose direction conflicts with the direction of the locale are then\nwrapped in `U+2068`/`U+2069`. Values matching the direction are left alone, so\nnothing changes for latin text. Default is `\"off\"` to keep existing output\nuntouched.\n\n### Regional locales\n\nLocales are handled as full BCP-47 language tags, and translations are looked\nup along a chain from the bare language to the most specific variant:\n\n```\nde-AT       →  de\nzh-Hant-TW  →  zh-Hant  →  zh\n```\n\nThe loader is invoked for every link of that chain, starting with the bare\nlanguage, and each result **overlays** the previous one. A regional file\ntherefore holds the deviations, only:\n\n```json\n// l10n/de.json\n{ \"COMMON\": { \"ok\": \"Okay\", \"cancel\": \"Abbrechen\" } }\n```\n\n```json\n// l10n/de-AT.json\n{ \"COMMON\": { \"cancel\": \"Zurück\" } }\n```\n\n```javascript\nuseL10n().setLoader( locale => import( `./l10n/${locale}.json` ) );\nuseL10n().setLocale( \"de-AT\" );\n```\n\n**Providing those files is optional.** A loader failing on any link that is more\nspecific than the bare language is ignored silently — the example above works\njust as well in an application shipping `de.json`, only. Only a loader failing\non the bare language is an error, just like before.\n\nA locale without region or script does not cause additional lookups at all:\nselecting `de` invokes the loader once, exactly as in previous versions.\n\nThe distinction matters beyond wording, for `pt` and `pt-PT` differ in their\nplural rules, and `zh-Hans` and `zh-Hant` are different scripts. Selections are\ntherefore resolved by the full tag.\n\nRelated properties of the context:\n\n* `locale` keeps providing the **language**, e.g. `de`, as it always did.\n* `tag` provides the full canonical tag, e.g. `de-AT`.\n* `script` and `region` provide either part, or `null`.\n* `defaultTag` provides the full tag of the default locale.\n\nSet `configure( { regional: false } )` to disable the extra lookups and address\nthe bare language, only:\n\n```javascript\nuseL10n().configure( { regional: false } );\n```\n\n> **Note:** Deprecated language codes are preserved rather than replaced, so\n> selecting `iw` keeps fetching `iw`, not `he`.\n\n### Validating translations\n\nA russian file missing its `few` branch does not fail — it silently falls back\nto `other` and reads wrong for 2, 3 and 4. `validateTranslations()` finds that:\n\n```javascript\nimport { validateTranslations } from \"@cepharum/vue3-i18n\";\n\nvalidateTranslations( await import( \"./l10n/ru.json\" ), \"ru\", {\n\treference: await import( \"./l10n/en.json\" ),\n} );\n// [ { path: \"FILES.removed\", severity: \"error\", code: \"missing-category\",\n//     message: \"selection at FILES.removed lacks few, many required for locale ru\" } ]\n```\n\nChecked per locale:\n\n| Code | Severity | Meaning |\n|---|---|---|\n| `missing-category` | error | a plural selection lacks a category the locale uses |\n| `unused-category` | warning | a plural selection provides a category the locale does not use |\n| `missing-default-branch` | error | a `$select` node lacks its `*` branch |\n| `missing-form` | warning | a placeholder requests a form the term does not provide |\n| `empty-term` / `missing-default-form` | error | a term provides no forms, or not the one it names as default |\n| `missing-translation` | warning | a key of the reference tree is missing (only with `reference`) |\n\nThe required categories come from\n`Intl.PluralRules( locale ).resolvedOptions().pluralCategories`, so no rules are\nmaintained anywhere — adding a locale needs no change to this library.\n\nUse it as a test, so an incomplete translation fails the build:\n\n```javascript\nimport { describe, it } from \"vitest\";\nimport { validateTranslations } from \"@cepharum/vue3-i18n\";\n\ndescribe( \"translations\", () => {\n\tfor ( const locale of [ \"de\", \"ru\", \"pl\" ] ) {\n\t\tit( `are complete for ${locale}`, async() => {\n\t\t\tconst findings = validateTranslations(\n\t\t\t\t( await import( `./l10n/${locale}.json` ) ).default, locale,\n\t\t\t\t{ reference: ( await import( \"./l10n/en.json\" ) ).default } );\n\n\t\t\tfindings.filter( finding => finding.severity === \"error\" ).should.be.empty();\n\t\t} );\n\t}\n} );\n```\n\nIn development mode, translations are validated as they are loaded and findings\nare reported on the console. Switch that off with\n`configure( { validate: false } )`. The context also exposes\n`validate( locale?, options? )` for the translations it has loaded.\n\n### Markdown\n\nThere is support for some basic Markdown in translations.\n\n```json\n{\n  \"COMMON\": {\n    \"confirm\": \"Okay\",\n    \"cancel\": \"Cancel\"\n  },\n  \"FEATURE\": {\n    \"title\": \"About\",\n    \"text\": \"This is **the** feature!\"\n  }\n}\n```\n\n`<L10n>` ignores any Markdown by default. By setting `markdown` property, supported Markdown is converted to HTML, though. But any HTML additionally found in translations is escaped.\n\n```vue\n<script setup>\nimport { L10n } from \"@cepharum/vue3-i18n\";\n</script>\n\n<template>\n  <h1><L10n i18n=\"FEATURE.title\" markdown /></h1>\n  <p><L10n i18n=\"FEATURE.text\" /></p>\n  <button><L10n i18n=\"COMMON.confirm\" /></button>\n</template>\n```\n\n### Additional API features\n\nThe context fetched with `useL10n()` exposes additional properties and actions:\n\n* `locale` reactively provides current locale's language as string, e.g. `en` or `de`, with `tag` providing the full language tag, e.g. `en-US`. Both are derived from browser's locale by default.\n  * The locale of current `document` is preferred. \n  * If locale of `document` is missing or if there is no `document`, the locale of current browser as exposed in `navigator.language` is used.\n  * If locale of browser is missing or there is no browser, a default locale is used as fallback which is `en` initially.\n\n* Method `setLocale( locale )` selects a custom locale to prefer as current locale over any locale read from other sources as described above. It causes that locale's translations to be fetched and all currently used `<L10n>` components to be updated.\n\n  ```vue\n  <script setup>\n  import { useL10n } from \"@cepharum/vue3-i18n\";\n    \n  useL10n().setLocale( \"fr\" );\n  </script>\n  ```\n  \n  The method `setLocale()` can be used to drop any previously selected custom locale and to reinstate the discovery of current locale as described above.\n\n  ```vue\n  <script setup>\n  import { useL10n } from \"@cepharum/vue3-i18n\";\n    \n  useL10n().setLocale();\n  </script>\n  ```\n\n* `defaultLocale` reactively exposes the fallback locale used in last step described above. The method `setDefaultLocale()` can be used to adjust it.\n\n  ```vue\n  <script setup>\n  import { useL10n } from \"@cepharum/vue3-i18n\";\n  \n  useL10n().setDefaultLocale( \"de\" );\n  </script>\n  ```\n\n* In addition to serving as a fallback on discovering a current locale, this default locale is considered on looking up a translation for an i18n key when there is no translation provided for the current locale.\n\n* You can fetch reactive translations using method `lookup()`.\n\n  ```vue\n  <script setup>\n  import { useL10n } from \"@cepharum/vue3-i18n\";\n  \n  const translation = useL10n().lookup( \"SOME.KEY.FOR.firstField\" );\n  </script>\n  ```\n    \n  The resulting translation isn't interpolated, but extracted from fetched translations as-is. Provided key may address a whole thread of translations, too.\n\n* Moreover, you can fetch multiple reactive translations using method `translate()` with optional interpolation and Markdown support.\n\n  ```vue\n  <script setup>\n  import { ref } from \"@vue/reactivity\";\n  import { useL10n } from \"@cepharum/vue3-i18n\";\n  \n  const { translate } = useL10n();\n  \n  const data = ref( { count: 23, foo: \"test\" } );\n  \n  // translates and interpolates single string supporting Markdown, too\n  const single = translate( \"SOME.KEY.FOR.firstField\", data, true );\n  \n  // translates multiple strings at once and returns object with\n  // same properties each providing related key's translation\n  const multi = translate( {\n    first: \"SOME.KEY.FOR.firstField\",\n    second: \"SOME.KEY.FOR.secondField\",\n  }, data );\n  </script>\n  ```\n\n* By default, translations are looked up for current locale selected as described above. However, a custom locale can be chosen explicitly to look up translations for that particular locale with `lookup()` and `translate()`.\n\n  ```vue\n  <script setup>\n  import { ref } from \"@vue/reactivity\";\n  import { useL10n } from \"@cepharum/vue3-i18n\";\n  \n  const { translate, lookup } = useL10n();\n  \n  const data = ref( { count: 23, foo: \"test\" } );\n  \n  // translates single string to French explicitly\n  const translation = lookup( \"SOME.KEY.FOR.firstField\", null, \"fr\" );\n  \n  // translates multiple strings at once to French\n  const multi = translate( {\n    first: \"SOME.KEY.FOR.firstField\",\n    second: \"SOME.KEY.FOR.secondField\",\n  }, data, false, \"fr\" );\n  </script>\n  ```\n  \n  Same works with `locale` property of `L10n` component.\n\n* Considering a document's language can be disabled. _(Prior to v0.5.0, this has been the default and discovery of current local has been working in a simpler way.)_\n\n  ```javascript\n  import { useL10n } from \"@cepharum/vue3-i18n\";\n  \n  useL10n().unobserveDocument();\n  </script>\n  ```\n\n  Considering document's language can be re-enabled later: \n\n  ```javascript\n  import { useL10n } from \"@cepharum/vue3-i18n\";\n  \n  useL10n().observeDocument();\n  </script>\n  ```\n\n  Additional documents can be observed, too. However, it is controlling custom locale usually selected with \n\n  ```javascript\n  import { useL10n } from \"@cepharum/vue3-i18n\";\n  \n  useL10n().observeDocument( customDocument );\n  </script>\n  ```\n  \n  However, this isn't replacing the monitoring of current document's locale, but selects given document's locale as custom locale just like invoking `setLocale( locale )` method every time that given document's locale is changing. Thus, observing multiple additional documents is possible, but does not make much sense.\n\n  Stopping observation of an additional document works accordingly:\n\n  ```javascript\n  import { useL10n } from \"@cepharum/vue3-i18n\";\n  \n  useL10n().unobserveDocument( customDocument );\n  </script>\n  ```\n\n  This will reinstate the process of discovering current locale as described in first item above. Any selected custom locale gets dropped. \n","readmeFilename":"readme.md"}