{"_id":"@_apparatus_/intl-tools","_rev":"8-c7a14157882caa8dd5f41c5be89dc2fb","name":"@_apparatus_/intl-tools","dist-tags":{"latest":"3.0.2"},"versions":{"1.0.0":{"name":"@_apparatus_/intl-tools","version":"1.0.0","keywords":["localization","internationalization","intl","localize","translation","i18n","l10n"],"author":{"name":"Pedro Henrique","email":"pedro00dk@gmail.com"},"license":"MIT","_id":"@_apparatus_/intl-tools@1.0.0","maintainers":[{"name":"pedro00dk","email":"pedro00dk@gmail.com"}],"homepage":"https://github.com/pedro00dk/apparatus-intl-tools#readme","bugs":{"url":"https://github.com/pedro00dk/apparatus-intl-tools/issues"},"dist":{"shasum":"643c2361b283645fb1fea942f327eeaf6d9cd5f9","tarball":"https://registry.npmjs.org/@_apparatus_/intl-tools/-/intl-tools-1.0.0.tgz","fileCount":11,"integrity":"sha512-//yK6CyeRXt8DTlVbprbX4gAT57UvXlJJS1suFgRo8W0PLWgnNGnxO9d02PQiwpOZoHk4mq3StfpO0G7ukULng==","signatures":[{"sig":"MEUCIQDKqU8PAU9XDDv1MjIkMtB8cYGI1fV5Sf/UcBdglD8MuQIgGgcSJTBmrXLcBBuu9KoMbvuOWF7pF2/ykMQlAhAHXns=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":24827},"type":"module","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"9f5ddaf4439755e5ecb2ad7c4c6852ee7c86a241","scripts":{"test":"node --test ./**/*.test.*","build":"vite build && tsc"},"_npmUser":{"name":"pedro00dk","email":"pedro00dk@gmail.com"},"repository":{"url":"git+https://github.com/pedro00dk/apparatus-intl-tools.git","type":"git"},"_npmVersion":"11.4.2","description":"A small set of tools to support application internationalization.","directories":{},"_nodeVersion":"24.3.0","_hasShrinkwrap":false,"devDependencies":{"vite":"7.0.5","typescript":"5.8.3","@types/node":"24.0.15"},"_npmOperationalInternal":{"tmp":"tmp/intl-tools_1.0.0_1753460005477_0.6103735860627757","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@_apparatus_/intl-tools","version":"1.0.1","keywords":["localization","internationalization","intl","localize","translation","i18n","l10n"],"author":{"name":"Pedro Henrique","email":"pedro00dk@gmail.com"},"license":"MIT","_id":"@_apparatus_/intl-tools@1.0.1","maintainers":[{"name":"pedro00dk","email":"pedro00dk@gmail.com"}],"homepage":"https://github.com/pedro00dk/apparatus-intl-tools#readme","bugs":{"url":"https://github.com/pedro00dk/apparatus-intl-tools/issues"},"dist":{"shasum":"d3512826d701fde87469f351e851882814cf244c","tarball":"https://registry.npmjs.org/@_apparatus_/intl-tools/-/intl-tools-1.0.1.tgz","fileCount":11,"integrity":"sha512-pOfi229wzAOofk50Zj84uEkSBmf+SJNgQoOhKqgiHw2fS5/lfs7HEtpdomnWSzwnnlUWvKVHTgcZuPcYnvZzUA==","signatures":[{"sig":"MEUCIEnWviergja6JAfnhJWQw73CE1HlVI+FXi3GZq3ZXzfPAiEAlpIvTK2QfEktExawKYeW9cyz2/EDaap9CuDVtOTkMKU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@_apparatus_%2fintl-tools@1.0.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":24826},"type":"module","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"2934259c403255acc8b43e327d8f3cbe33593ab8","scripts":{"test":"node --test ./**/*.test.*","build":"vite build && tsc"},"_npmUser":{"name":"pedro00dk","email":"pedro00dk@gmail.com"},"repository":{"url":"git+https://github.com/pedro00dk/apparatus-intl-tools.git","type":"git"},"_npmVersion":"11.4.2","description":"A small set of tools to support application internationalization.","directories":{},"_nodeVersion":"24.4.1","_hasShrinkwrap":false,"devDependencies":{"vite":"7.0.6","typescript":"5.8.3","@types/node":"24.1.0"},"_npmOperationalInternal":{"tmp":"tmp/intl-tools_1.0.1_1753460237972_0.36019932522117837","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"@_apparatus_/intl-tools","version":"1.0.2","keywords":["localization","internationalization","intl","localize","translation","i18n","l10n"],"author":{"name":"Pedro Henrique","email":"pedro00dk@gmail.com"},"license":"MIT","_id":"@_apparatus_/intl-tools@1.0.2","maintainers":[{"name":"pedro00dk","email":"pedro00dk@gmail.com"}],"homepage":"https://github.com/pedro00dk/apparatus-intl-tools#readme","bugs":{"url":"https://github.com/pedro00dk/apparatus-intl-tools/issues"},"dist":{"shasum":"54945d2575fab9acae1b225971a0f0834d09fc0b","tarball":"https://registry.npmjs.org/@_apparatus_/intl-tools/-/intl-tools-1.0.2.tgz","fileCount":11,"integrity":"sha512-ffiPDJHi03fFM6sQD5KrYEg921/lWfUeoBkIr8FHrpyLgIvUPHCC+mmb8XwdevrR3yyekwa3D7siEg27EjtaDw==","signatures":[{"sig":"MEQCIEbLaOmoefvHR0uevM1xgytkUdyT5Zq+pIUgFUHKZ0KCAiBqqa3GrhTE9LM8QlxCrJAcTx0OQiKlRuMCKo0w1p5zpg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@_apparatus_%2fintl-tools@1.0.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":24906},"type":"module","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"d0e2bc4f0f263a7f14512484409332ee56a1bcfc","scripts":{"test":"node --test ./**/*.test.*","build":"vite build && tsc"},"_npmUser":{"name":"pedro00dk","email":"pedro00dk@gmail.com"},"repository":{"url":"git+https://github.com/pedro00dk/apparatus-intl-tools.git","type":"git"},"_npmVersion":"11.4.2","description":"A small set of tools to support application internationalization.","directories":{},"_nodeVersion":"24.4.1","_hasShrinkwrap":false,"devDependencies":{"vite":"7.0.6","typescript":"5.8.3","@types/node":"24.1.0"},"_npmOperationalInternal":{"tmp":"tmp/intl-tools_1.0.2_1753537485887_0.37362432558968584","host":"s3://npm-registry-packages-npm-production"}},"2.0.0":{"name":"@_apparatus_/intl-tools","version":"2.0.0","keywords":["localization","internationalization","intl","localize","translation","i18n","l10n"],"author":{"name":"Pedro Henrique","email":"pedro00dk@gmail.com"},"license":"MIT","_id":"@_apparatus_/intl-tools@2.0.0","maintainers":[{"name":"pedro00dk","email":"pedro00dk@gmail.com"}],"homepage":"https://github.com/pedro00dk/apparatus-intl-tools#readme","bugs":{"url":"https://github.com/pedro00dk/apparatus-intl-tools/issues"},"dist":{"shasum":"fcb0c8c645512284de3ba445d98cbdb568d8ec1f","tarball":"https://registry.npmjs.org/@_apparatus_/intl-tools/-/intl-tools-2.0.0.tgz","fileCount":11,"integrity":"sha512-jDITjvVUpEXtUZb+DwrJoJTIRvsvWSgVgzfWGLtT61gf5EjvYsFUln8Zg5bVu9nnhLDs7kuKI7ztkrte7poG9w==","signatures":[{"sig":"MEYCIQCKJIzsz6nZMbxmNdnd+Bw1ex528C/BJ9OHshd4dc55NgIhAO9ROhmSBpfMzx5AYGIMbOzL6Nv2bsdMcqS6iD9ZHtpD","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@_apparatus_%2fintl-tools@2.0.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":30313},"type":"module","_from":"file:_apparatus_-intl-tools-2.0.0.tgz","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"test":"node --test ./**/*.test.*","build":"vite build && tsc"},"_npmUser":{"name":"pedro00dk","email":"pedro00dk@gmail.com"},"_resolved":"/tmp/fed701d017e5cc22b0d16702907b5dd1/_apparatus_-intl-tools-2.0.0.tgz","_integrity":"sha512-jDITjvVUpEXtUZb+DwrJoJTIRvsvWSgVgzfWGLtT61gf5EjvYsFUln8Zg5bVu9nnhLDs7kuKI7ztkrte7poG9w==","repository":{"url":"git+https://github.com/pedro00dk/apparatus-intl-tools.git","type":"git"},"_npmVersion":"11.6.1","description":"A small set of tools to support application internationalization.","directories":{},"_nodeVersion":"24.11.0","_hasShrinkwrap":false,"devDependencies":{"vite":"7.2.2","typescript":"5.9.3","@types/node":"24.10.0"},"_npmOperationalInternal":{"tmp":"tmp/intl-tools_2.0.0_1762680496256_0.9241533653713396","host":"s3://npm-registry-packages-npm-production"}},"2.0.1":{"name":"@_apparatus_/intl-tools","version":"2.0.1","keywords":["localization","internationalization","intl","localize","translation","i18n","l10n"],"author":{"name":"Pedro Henrique","email":"pedro00dk@gmail.com"},"license":"MIT","_id":"@_apparatus_/intl-tools@2.0.1","maintainers":[{"name":"pedro00dk","email":"pedro00dk@gmail.com"}],"homepage":"https://github.com/pedro00dk/apparatus-intl-tools#readme","bugs":{"url":"https://github.com/pedro00dk/apparatus-intl-tools/issues"},"dist":{"shasum":"f349e59f8bf1990b0cef1286729270277be96116","tarball":"https://registry.npmjs.org/@_apparatus_/intl-tools/-/intl-tools-2.0.1.tgz","fileCount":11,"integrity":"sha512-xU5BnDqFd+vvXC35QQaep+9+4kuHIcfGDOJkHh38xnXdLM/WZ6w2HVlT52bGCWgqfacYHtrrSasuCciIaa7HTQ==","signatures":[{"sig":"MEUCIHSIZZ3Gh/qgdEdwVcgQ42e75I5/QwIFVu6T27giFvLPAiEAqGHFFqAvCxgFNOBBOGlHJm2Vf1rG8znAHG/ms0BCe04=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@_apparatus_%2fintl-tools@2.0.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":29164},"type":"module","_from":"file:_apparatus_-intl-tools-2.0.1.tgz","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"test":"node --test ./**/*.test.*","build":"vite build && tsc"},"_npmUser":{"name":"pedro00dk","email":"pedro00dk@gmail.com"},"_resolved":"/tmp/4f531a56302e022026b8992292e3a788/_apparatus_-intl-tools-2.0.1.tgz","_integrity":"sha512-xU5BnDqFd+vvXC35QQaep+9+4kuHIcfGDOJkHh38xnXdLM/WZ6w2HVlT52bGCWgqfacYHtrrSasuCciIaa7HTQ==","repository":{"url":"git+https://github.com/pedro00dk/apparatus-intl-tools.git","type":"git"},"_npmVersion":"11.6.1","description":"A small set of tools to support application internationalization.","directories":{},"_nodeVersion":"24.11.0","_hasShrinkwrap":false,"devDependencies":{"vite":"7.2.2","typescript":"5.9.3","@types/node":"24.10.0"},"_npmOperationalInternal":{"tmp":"tmp/intl-tools_2.0.1_1762749846478_0.7203443431378795","host":"s3://npm-registry-packages-npm-production"}},"3.0.0":{"name":"@_apparatus_/intl-tools","version":"3.0.0","keywords":["localization","internationalization","intl","localize","translation","i18n","l10n"],"author":{"name":"Pedro Henrique","email":"pedro00dk@gmail.com"},"license":"MIT","_id":"@_apparatus_/intl-tools@3.0.0","maintainers":[{"name":"pedro00dk","email":"pedro00dk@gmail.com"}],"homepage":"https://github.com/pedro00dk/apparatus-intl-tools#readme","bugs":{"url":"https://github.com/pedro00dk/apparatus-intl-tools/issues"},"dist":{"shasum":"afd58f32ff818533a83eb4079e0942f656a50910","tarball":"https://registry.npmjs.org/@_apparatus_/intl-tools/-/intl-tools-3.0.0.tgz","fileCount":11,"integrity":"sha512-/1DWqp1Ws7EqMBwpZR3Ra/5RQF5CAuyDCLKymITUzcDImb0nuK8kce/hsin2nuF3VDjCOEyYvC38cZ/lkXTWYg==","signatures":[{"sig":"MEYCIQD2OHsCnSxXTJUPJl+4XboTU2SNoZ4VVLBpBPGhXGej7gIhAOWVCLolHwX3QP05LKrf48oTjyV7YYbOdpxIlQRJAXNR","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@_apparatus_%2fintl-tools@3.0.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":42849},"type":"module","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"b1b5972c23b6a2ebd5e4d1882bec8d8152a9a82e","scripts":{"test":"bun test","build":"tsc && bun build --outdir ./dist/ ./src/index.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:cb1f368d-1608-4f0e-bc52-9297549146d1"}},"repository":{"url":"git+https://github.com/pedro00dk/apparatus-intl-tools.git","type":"git"},"_npmVersion":"11.11.0","description":"A small set of tools to support application internationalization.","directories":{},"_nodeVersion":"20.20.0","_hasShrinkwrap":false,"devDependencies":{"vite":"7.3.1","@types/bun":"1.3.10","typescript":"5.9.3"},"_npmOperationalInternal":{"tmp":"tmp/intl-tools_3.0.0_1772838125023_0.17201144930456858","host":"s3://npm-registry-packages-npm-production"}},"3.0.1":{"name":"@_apparatus_/intl-tools","version":"3.0.1","keywords":["localization","internationalization","intl","localize","translation","i18n","l10n"],"author":{"name":"Pedro Henrique","email":"pedro00dk@gmail.com"},"license":"MIT","_id":"@_apparatus_/intl-tools@3.0.1","maintainers":[{"name":"pedro00dk","email":"pedro00dk@gmail.com"}],"homepage":"https://github.com/pedro00dk/apparatus-intl-tools#readme","bugs":{"url":"https://github.com/pedro00dk/apparatus-intl-tools/issues"},"dist":{"shasum":"c14e522fc8302ff148a9795dcaa2108affa14881","tarball":"https://registry.npmjs.org/@_apparatus_/intl-tools/-/intl-tools-3.0.1.tgz","fileCount":11,"integrity":"sha512-wEqdu4jiQdNYf4lbQJ+fsy4A4Ps+WlR6wgrsnLGqLX17uD7aepamA4foEejhRFev9Rz3dnC/jT6BGY3mN4uMbg==","signatures":[{"sig":"MEYCIQDX1lJ/S/AJcQWbEsFvFRusbN7VqW+ZKXFdZM689llAOAIhAJZ6l55Uzi3uemZTca1MGmpph5HBUb0ToJm4Dhstdtrk","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@_apparatus_%2fintl-tools@3.0.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":42860},"type":"module","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"9a21f703eb28de4692e4bfc89f146cabfdcf12e5","scripts":{"test":"bun test","build":"tsc && bun build --outdir ./dist/ ./src/index.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:cb1f368d-1608-4f0e-bc52-9297549146d1"}},"repository":{"url":"git+https://github.com/pedro00dk/apparatus-intl-tools.git","type":"git"},"_npmVersion":"11.11.0","description":"A small set of tools to support application internationalization.","directories":{},"_nodeVersion":"20.20.0","_hasShrinkwrap":false,"devDependencies":{"vite":"7.3.1","@types/bun":"1.3.10","typescript":"5.9.3"},"_npmOperationalInternal":{"tmp":"tmp/intl-tools_3.0.1_1772849508452_0.9120371528225395","host":"s3://npm-registry-packages-npm-production"}},"3.0.2":{"name":"@_apparatus_/intl-tools","description":"A small set of tools to support application internationalization.","version":"3.0.2","type":"module","license":"MIT","repository":{"type":"git","url":"git+https://github.com/pedro00dk/apparatus-intl-tools.git"},"author":{"name":"Pedro Henrique","email":"pedro00dk@gmail.com"},"types":"dist/index.d.ts","exports":{".":{"import":"./dist/index.js","types":"./dist/index.d.ts"}},"keywords":["localization","internationalization","intl","localize","translation","i18n","l10n"],"scripts":{"build":"tsc && bun build --outdir ./dist/ ./src/index.ts","test":"bun test"},"devDependencies":{"@types/bun":"1.3.10","typescript":"5.9.3","vite":"7.3.1"},"gitHead":"1f7911bae2ef36153d45a97d7c1564d9bd6ad98f","_id":"@_apparatus_/intl-tools@3.0.2","bugs":{"url":"https://github.com/pedro00dk/apparatus-intl-tools/issues"},"homepage":"https://github.com/pedro00dk/apparatus-intl-tools#readme","_nodeVersion":"20.20.0","_npmVersion":"11.11.1","dist":{"integrity":"sha512-O1WFevATdQaw8azgKJVeumfgvt6Ax3arTRiGYNJvW1FLF198SUpmCCeFSPTx29OiEz1/uEF+O4PE4ZVIu/jRuA==","shasum":"8abbce5c9b5c1116a425b48fc617733f4d6def08","tarball":"https://registry.npmjs.org/@_apparatus_/intl-tools/-/intl-tools-3.0.2.tgz","fileCount":11,"unpackedSize":42866,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@_apparatus_%2fintl-tools@3.0.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIDVtMxCYnXkXC4NecEvQ+nvbYzm5V3Q+j6b33mHOSyShAiEA1HecoVZF2PZgUCnbtWgEF4fqbPHTObO3ZWaLf698KUs="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:cb1f368d-1608-4f0e-bc52-9297549146d1"}},"directories":{},"maintainers":[{"name":"pedro00dk","email":"pedro00dk@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/intl-tools_3.0.2_1773546116252_0.5441585065696595"},"_hasShrinkwrap":false}},"time":{"created":"2025-07-25T16:13:25.397Z","modified":"2026-03-15T03:41:56.705Z","1.0.0":"2025-07-25T16:13:25.660Z","1.0.1":"2025-07-25T16:17:18.163Z","1.0.2":"2025-07-26T13:44:46.084Z","2.0.0":"2025-11-09T09:28:16.466Z","2.0.1":"2025-11-10T04:44:06.655Z","3.0.0":"2026-03-06T23:02:05.187Z","3.0.1":"2026-03-07T02:11:48.635Z","3.0.2":"2026-03-15T03:41:56.391Z"},"bugs":{"url":"https://github.com/pedro00dk/apparatus-intl-tools/issues"},"author":{"name":"Pedro Henrique","email":"pedro00dk@gmail.com"},"license":"MIT","homepage":"https://github.com/pedro00dk/apparatus-intl-tools#readme","keywords":["localization","internationalization","intl","localize","translation","i18n","l10n"],"repository":{"type":"git","url":"git+https://github.com/pedro00dk/apparatus-intl-tools.git"},"description":"A small set of tools to support application internationalization.","maintainers":[{"name":"pedro00dk","email":"pedro00dk@gmail.com"}],"readme":"# @\\_apparatus\\_/intl-tools\n\n[![bundle size](https://deno.bundlejs.com/?q=@_apparatus_/intl-tools&badge=detailed)](https://bundlejs.com/?q=@_apparatus_/intl-tools)\n\nA small set of tools to support application internationalization.\n\n## Installation\n\n```sh\nnpm install @_apparatus_/intl-tools\n```\n\n## Features\n\n- 🌍 **Dynamic loading** - Load translations for different locales and modules on demand.\n- 🔌 **Pluggable formatters** - Integrate with external libraries like MessageFormat (ICU), Fluent, etc.\n- 🪆 **Nesting** - Reference translations within translations using `<.nested.key/>` and `<:module.nested.key/>` syntax.\n- 🏷️ **HTML-like Tags** - Wrap content with tags for rich text formatting.\n- ✅ **Type safety** - Fully typed translation keys with TypeScript autocomplete.\n- 📦 **Module system** - Organize translations by feature modules for better code splitting.\n\n## Examples\n\n### Basic usage\n\n```ts\nimport { createLocalizer } from '@_apparatus_/intl-tools'\n\n// Define your translations structure\n// A good idea is to import types from JSON\ntype Translations = {\n    common: {\n        greeting: string\n        user: {\n            welcome: string\n        }\n    }\n    dashboard: {\n        title: string\n        stats: string\n    }\n}\n\n// Create localizer instance\nconst localizer = createLocalizer<Translations>({\n    load: async (locale, module) => {\n        // Load translations synchronously or asynchronously\n        const response = await fetch(`/locales/${locale}/${module}.json`)\n        return response.json()\n    },\n})\nconst { t } = localizer\n\n// Set active locale and modules\nlocalizer.setLocales('en-US')\nlocalizer.setModules('common', 'dashboard')\n\n// Wait for pending locales and modules\nawait localizer.wait()\n\n// Access typed translations\nconsole.log(t.common.greeting())\nconsole.log(t.common.user.welcome())\nconsole.log(t.dashboard.title())\n```\n\n### Switching locales\n\n```ts\nconst localizer = createLocalizer(...)\nconst { t } = localizer\n\n// Set default locale\nlocalizer.setLocales('en-US')\nlocalizer.setModules('common')\nawait localizer.wait()\n\nconsole.log(t.common.greeting()) // \"Hello\"\n\n// Switch to Portuguese\nlocalizer.setLocales('pt-BR')\nawait localizer.wait()\nconsole.log(t.common.greeting()) // \"Olá\"\n\n// Locale fallbacks (tries first locale, falls back to second)\nlocalizer.setLocales('pt-BR', 'en-US')\n```\n\n### Translation nesting\n\n```ts\n// Translation files:\n// common.json\n{\n    \"app\": \"MyApp\",\n    \"welcome\": \"Welcome to <:app/>!\",\n    \"footer\": \"© 2024 <.app/>. All rights reserved.\",\n    \"cross_module\": \"Check <:dashboard:title/> for details\"\n}\n\nconst { t } = localizer\nt.common.welcome() // \"Welcome to MyApp!\"\nt.common.footer() // \"© 2024 MyApp. All rights reserved.\"\nt.common.cross_module() // \"Check Dashboard for details\"\n```\n\n### Custom formatters\n\n```ts\nimport { createLocalizer } from '@_apparatus_/intl-tools'\nimport IntlMessageFormat from 'intl-messageformat'\n\nconst localizer = createLocalizer<Translations>({\n    ...\n    parse: (locale, key, value) => {\n        const formatter = new IntlMessageFormat(value, locale)\n        return values => formatter.format(values) as string\n    },\n})\nconst { t } = localizer\n\n// \"You have {count, plural, =0 {no messages} one {# message} other {# messages}}.\"\nt.common.messages({ count: 0 }) // \"You have no messages.\"\nt.common.messages({ count: 1 }) // \"You have 1 message.\"\nt.common.messages({ count: 5 }) // \"You have 5 messages.\"\n```\n\n### HTML tags for rich Content\n\n```ts\nconst localizer = createLocalizer<Translations, JSX.Element>({\n    ...\n    tag: (children, tag) => {\n        // Fallback transform unmatched tags to elements\n        return <Dynamic tag={tag}>{children}</Dynamic>\n    },\n})\n\n// Translation: \"Read our <b><a-terms>terms of service</a-terms></b>.\"\nconst { t } = localizer\nconst content = t.common.legal({}, { 'a-terms': c => <a href='/terms'>{c}</a> })\n// Renders: \"Read our <b><a href=\"/terms\">terms of service</a></b>.\"\n```\n\n### Hook into rendering libraries lifecycle\n\n```tsx\nimport { createSignal, createEffect, Show } from 'solid-js'\nimport { createLocalizer } from '@_apparatus_/intl-tools'\n\n// Solid-js Suspense example\nconst localizer = createLocalizer<Translations>({\n    notify: (_, __, promise) => createResource(() => promise)[0],\n})\nlocalizer.setLocales('en-US')\nlocalizer.setModules('common', 'dashboard')\nconst { t } = localizer\n\nconst App = () => (\n    <Skeleton fallback='loading...'>\n        <div>\n            <h1>{t.dashboard.title()}</h1>\n            <p>{t.common.greeting()}</p>\n        </div>\n    </Skeleton>\n)\n```\n\n### Untyped keys\n\n```ts\nconst { t } = localizer\n\n// Typed access\nconst greetingType = getStrictUserPreferredGreeting() // 'formal' | 'informal'\nt.common.greeting[greetingType]() // ✅ Type safe\n\n// Key segment not known at compile time\nconst greetingType = getUserPreferredGreeting() // string\nt.common.greeting[greetingType]() // ⛔ Type error\nt.$.common.greeting[greetingType]() // ⚠️ Bypass error\n\n// Access deeply nested untyped keys\nt.$.dashboard.user.profile.settings()\n```\n","readmeFilename":"README.md"}