{"_id":"@aryagg/i18n","_rev":"6-1e9638f14d925ef865d9cecd0cedcddb","name":"@aryagg/i18n","dist-tags":{"latest":"1.0.2"},"versions":{"1.0.0":{"name":"@aryagg/i18n","version":"1.0.0","keywords":[],"author":"","license":"ISC","_id":"@aryagg/i18n@1.0.0","maintainers":[{"name":"aryagg","email":"aryaglekshmi@gmail.com"}],"dist":{"shasum":"5fbc0d00ac72bafba67f40836f383b04df6b48cb","tarball":"https://registry.npmjs.org/@aryagg/i18n/-/i18n-1.0.0.tgz","fileCount":3,"integrity":"sha512-z1binNYylMQvSGB557nil9ItnxLXJ5NK51Zx/8x8eEGgHIvCV0NfL8WKw+WNZrqOu6TffSoHNks53CfAvyhbAw==","signatures":[{"sig":"MEQCICU76TvPm7lxGu3K0at+UDK7b52aWYTYyGvKNVOwo0qlAiBX3eN9SXB5NabBRyFtpiDzgMw1c/AOKYbOHLZmePW/lg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5195},"main":"dist/index.mjs","types":"dist/index.d.mts","exports":{".":{"types":"./dist/index.d.mts","import":"./dist/index.mjs"}},"gitHead":"11d3bff96a8dda26a3d0410926d58e531acc8bf1","scripts":{"build":"tsup"},"_npmUser":{"name":"aryagg","email":"aryaglekshmi@gmail.com"},"_npmVersion":"10.9.7","description":"Shared internationalization utilities for aryagg packages","directories":{},"_nodeVersion":"22.22.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","typescript":"^6.0.3"},"_npmOperationalInternal":{"tmp":"tmp/i18n_1.0.0_1781250200638_0.7148733135468224","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@aryagg/i18n","version":"1.0.1","keywords":[],"author":"","license":"ISC","_id":"@aryagg/i18n@1.0.1","maintainers":[{"name":"aryagg","email":"aryaglekshmi@gmail.com"},{"name":"kawtharklayshe","email":"kawthar.klayshe177@gmail.com"}],"homepage":"https://github.com/iron-throne/skeleton-packages/tree/main/packages/i18n","bugs":{"url":"https://github.com/iron-throne/skeleton-packages/issues"},"dist":{"shasum":"bda7dd174b20943f460993fb919b78e04c548c57","tarball":"https://registry.npmjs.org/@aryagg/i18n/-/i18n-1.0.1.tgz","fileCount":4,"integrity":"sha512-1jlIt470f87nTzOUX/vfy0yoESgACwtlJMXqOki20hclDK/jOX50f8bRSqUAC96iwnpvo12Q68CvqN/N41F0bw==","signatures":[{"sig":"MEUCIQCqKToSMKchJr+IuXGTH6Y223N9CBWrHWIYOvEkYkR8nAIgTNsBKoQQZZjeu0vLu6lsRQ4NryAn4OAuchsSBHQKn40=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":11928},"main":"dist/index.mjs","types":"dist/index.d.mts","exports":{".":{"types":"./dist/index.d.mts","import":"./dist/index.mjs"}},"gitHead":"eb184818057fe3ab35d8a2e2607ea3185b2a0395","scripts":{"build":"tsup"},"_npmUser":{"name":"aryagg","email":"aryaglekshmi@gmail.com"},"repository":{"url":"git+https://github.com/iron-throne/skeleton-packages.git","type":"git","directory":"packages/i18n"},"_npmVersion":"10.9.7","description":"Shared internationalization utilities for aryagg packages","directories":{},"_nodeVersion":"22.22.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","typescript":"^6.0.3"},"_npmOperationalInternal":{"tmp":"tmp/i18n_1.0.1_1785390360215_0.976376587047503","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"@aryagg/i18n","version":"1.0.2","description":"Shared internationalization utilities for aryagg packages","main":"dist/index.mjs","types":"dist/index.d.mts","exports":{".":{"import":"./dist/index.mjs","types":"./dist/index.d.mts"}},"publishConfig":{"access":"public"},"scripts":{"build":"tsup"},"repository":{"type":"git","url":"git+https://github.com/iron-throne/skeleton-packages.git","directory":"packages/i18n"},"homepage":"https://github.com/iron-throne/skeleton-packages/tree/main/packages/i18n","bugs":{"url":"https://github.com/iron-throne/skeleton-packages/issues"},"keywords":[],"author":"","license":"ISC","devDependencies":{"tsup":"^8.5.1","typescript":"^6.0.3"},"_id":"@aryagg/i18n@1.0.2","gitHead":"e4b03911e609474505797432a27ac802af3f54fc","_nodeVersion":"22.22.2","_npmVersion":"10.9.7","dist":{"integrity":"sha512-L7/Iq4p7tAMcvIg4GrQK5TaqtWJ9yY2ExeAc33ZWKpZEng0iLGCUMv3GvD+8dKh0cljkzN2rXGRM/LxFbZCqdQ==","shasum":"e1e4b1b4ccb97e9906be42bbf50d18258a7a962e","tarball":"https://registry.npmjs.org/@aryagg/i18n/-/i18n-1.0.2.tgz","fileCount":4,"unpackedSize":11928,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQD0GT0U/hgZUefIBKXZ/eLtx03iTnvOlfMa26qJOFznxAIhAOZk4cfu0AY2Zl8cA5mc/MmvV5d5x8bPiSQQ+IKRaz/e"}]},"_npmUser":{"name":"aryagg","email":"aryaglekshmi@gmail.com"},"directories":{},"maintainers":[{"name":"aryagg","email":"aryaglekshmi@gmail.com"},{"name":"kawtharklayshe","email":"kawthar.klayshe177@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/i18n_1.0.2_1788504722648_0.17134609548303548"},"_hasShrinkwrap":false}},"time":{"created":"2026-06-12T07:43:20.545Z","modified":"2026-09-04T06:52:03.133Z","1.0.0":"2026-06-12T07:43:20.780Z","1.0.1":"2026-07-30T05:46:00.365Z","1.0.2":"2026-09-04T06:52:02.811Z"},"bugs":{"url":"https://github.com/iron-throne/skeleton-packages/issues"},"license":"ISC","homepage":"https://github.com/iron-throne/skeleton-packages/tree/main/packages/i18n","keywords":[],"repository":{"type":"git","url":"git+https://github.com/iron-throne/skeleton-packages.git","directory":"packages/i18n"},"description":"Shared internationalization utilities for aryagg packages","maintainers":[{"name":"aryagg","email":"aryaglekshmi@gmail.com"},{"name":"kawtharklayshe","email":"kawthar.klayshe177@gmail.com"}],"readme":"# @aryagg/i18n\n\nLightweight internationalization (i18n) utility for aryagg packages. Supports translation lookup, nested keys, variable interpolation, plural forms, and lazy-loaded messages.\n\n[![npm](https://img.shields.io/npm/v/@aryagg/i18n)](https://www.npmjs.com/package/@aryagg/i18n)\n[![GitHub](https://img.shields.io/badge/source-GitHub-181717)](https://github.com/iron-throne/skeleton-packages/tree/main/packages/i18n)\n\n---\n\n## Installation\n\n```bash\nnpm install @aryagg/i18n\n```\n\n---\n\n## Quick Start\n\n```ts\nimport { createI18n } from '@aryagg/i18n';\n\nconst i18n = createI18n({\n  locale: 'en',\n  fallbackLocale: 'en',\n  messages: {\n    en: {\n      greeting: 'Hello, {name}!',\n      nav: {\n        home: 'Home',\n        about: 'About',\n      },\n    },\n    ar: {\n      greeting: 'مرحبا، {name}!',\n      nav: {\n        home: 'الرئيسية',\n      },\n    },\n  },\n});\n\ni18n.t('greeting', { name: 'Alice' }); // \"Hello, Alice!\"\ni18n.t('nav.home');                    // \"Home\"\n```\n\n---\n\n## Core API\n\n### `createI18n(options)`\n\nCreates and returns an `I18n` instance.\n\n```ts\nconst i18n = createI18n({\n  locale: 'en',               // active language\n  fallbackLocale: 'en',       // used when a key is missing in the active locale\n  messages: { ... },          // translation dictionary\n  missing: (key, locale) => { // optional: called when a key is not found\n    console.warn(`[i18n] missing \"${key}\" in \"${locale}\"`);\n  },\n});\n```\n\n---\n\n### `i18n.t(key, params?)`\n\nLooks up a translation key. Supports dot notation for nested keys and `{placeholder}` interpolation.\n\n```ts\ni18n.t('nav.home');                        // \"Home\"\ni18n.t('greeting', { name: 'Alice' });     // \"Hello, Alice!\"\ni18n.t('missing.key');                     // returns \"missing.key\" (key as fallback)\n```\n\n---\n\n### `i18n.setLocale(locale)` / `i18n.getLocale()`\n\nSwitch the active language at runtime.\n\n```ts\ni18n.setLocale('ar');\ni18n.t('greeting', { name: 'Alice' }); // \"مرحبا، Alice!\"\ni18n.getLocale();                       // \"ar\"\n```\n\n---\n\n### `i18n.addMessages(locale, map)`\n\nMerge additional messages into a locale — useful for lazy loading translation files.\n\n```ts\ni18n.addMessages('fr', {\n  greeting: 'Bonjour, {name}!',\n});\n\ni18n.setLocale('fr');\ni18n.t('greeting', { name: 'Alice' }); // \"Bonjour, Alice!\"\n```\n\n---\n\n### `i18n.getLocales()`\n\nReturns all loaded locale codes.\n\n```ts\ni18n.getLocales(); // [\"en\", \"ar\", \"fr\"]\n```\n\n---\n\n### `interpolate(template, params)`\n\nStandalone function — replaces `{key}` placeholders in any string.\n\n```ts\nimport { interpolate } from '@aryagg/i18n';\n\ninterpolate('Hello, {name}! You have {count} messages.', { name: 'Alice', count: 3 });\n// \"Hello, Alice! You have 3 messages.\"\n\ninterpolate('Hi {name}', {});\n// \"Hi {name}\"  ← unknown placeholders are left unchanged\n```\n\n---\n\n### `plural(count, forms, params?)`\n\nPicks the correct word form based on count.\n\n```ts\nimport { plural } from '@aryagg/i18n';\n\nplural(0, { zero: 'No items',  one: '1 item', other: '{n} items' }, { n: 0 }); // \"No items\"\nplural(1, {                    one: '1 item', other: '{n} items' }, { n: 1 }); // \"1 item\"\nplural(5, {                    one: '1 item', other: '{n} items' }, { n: 5 }); // \"5 items\"\n```\n\n`PluralForms` shape:\n\n```ts\ninterface PluralForms {\n  one: string;\n  other: string;\n  zero?: string; // optional — falls back to \"other\" if not provided\n}\n```\n\n---\n\n## TypeScript Types\n\n```ts\nimport type {\n  Locale,            // string — e.g. \"en\", \"ar\"\n  TranslationMap,    // { [key: string]: string | TranslationMap }\n  TranslationMessages, // Record<Locale, TranslationMap>\n  I18nOptions,       // options for createI18n()\n  PluralForms,       // { one, other, zero? }\n} from '@aryagg/i18n';\n```\n\n---\n\n## Source\n\n[github.com/iron-throne/skeleton-packages/tree/main/packages/i18n](https://github.com/iron-throne/skeleton-packages/tree/main/packages/i18n)\n","readmeFilename":"README.md"}