{"_id":"@armego/pnar-i18n","_rev":"2-3912d8df134bacfa814b7ca1c272e266","name":"@armego/pnar-i18n","dist-tags":{"latest":"1.0.1"},"versions":{"1.0.0":{"name":"@armego/pnar-i18n","version":"1.0.0","keywords":["react","i18n","internationalization","multilingual","pnar","typescript"],"author":{"name":"Armego Chylla"},"license":"MIT","_id":"@armego/pnar-i18n@1.0.0","maintainers":[{"name":"armego","email":"armegochylla@gmail.com"}],"homepage":"https://github.com/armego/pnar-i18n#readme","bugs":{"url":"https://github.com/armego/pnar-i18n/issues"},"dist":{"shasum":"a4e004f3e409458d241376b2ba4c010a35167e2c","tarball":"https://registry.npmjs.org/@armego/pnar-i18n/-/pnar-i18n-1.0.0.tgz","fileCount":17,"integrity":"sha512-dZtEyXAErihZn2goozjrfPOthPVB6KJV8JHnfzyRcOtwBzgqnmgFKR3AvUri7wHLpql8kcrdOtinIm1sXcFOcw==","signatures":[{"sig":"MEUCIC2S4MA6v4tBMnpGPKhiOW/Kxz3fkAu4trVS+Ib34oeXAiEAoiNtr+T8HlntYOM19YNuodNG3mL8IM+cRuWn8a97Iaw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":26950},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","gitHead":"3b62f556f581c2039f8e394ba5bf52cea170c1cf","scripts":{"dev":"tsc --watch","lint":"eslint src --ext .ts,.tsx","test":"jest","build":"tsc","test:watch":"jest --watch","type-check":"tsc --noEmit","publish:npm":"npm publish --access public","prepublishOnly":"npm run build"},"_npmUser":{"name":"armego","email":"armegochylla@gmail.com"},"repository":{"url":"git+https://github.com/armego/pnar-i18n.git","type":"git"},"_npmVersion":"10.9.3","description":"Multilingual support library for React applications with Pnar language support","directories":{},"_nodeVersion":"22.18.0","_hasShrinkwrap":false,"devDependencies":{"jest":"^29.0.0","eslint":"^8.0.0","rollup":"^3.0.0","typescript":"^4.9.0","@babel/core":"^7.0.0","@types/react":"^18.0.0","@types/react-dom":"^18.0.0","@babel/preset-env":"^7.0.0","@babel/preset-react":"^7.0.0","@rollup/plugin-babel":"^6.0.0","@babel/preset-typescript":"^7.0.0","@typescript-eslint/parser":"^5.0.0","rollup-plugin-typescript2":"^0.34.0","@rollup/plugin-node-resolve":"^15.0.0","@typescript-eslint/eslint-plugin":"^5.0.0"},"peerDependencies":{"react":"^16.8.0 || ^17.0.0 || ^18.0.0","react-dom":"^16.8.0 || ^17.0.0 || ^18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/pnar-i18n_1.0.0_1756299887265_0.8067073871352721","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@armego/pnar-i18n","version":"1.0.1","description":"Multilingual support library for React applications with Pnar language support","repository":{"type":"git","url":"git+https://github.com/armego/pnar-i18n.git"},"main":"dist/index.js","types":"dist/index.d.ts","type":"commonjs","scripts":{"build":"tsc","dev":"tsc --watch","test":"jest","test:watch":"jest --watch","lint":"eslint src --ext .ts,.tsx","type-check":"tsc --noEmit","prepublishOnly":"npm run build","publish:npm":"npm publish --access public"},"keywords":["react","i18n","internationalization","multilingual","pnar","typescript"],"author":{"name":"Armego Chylla"},"license":"MIT","peerDependencies":{"react":"^16.8.0 || ^17.0.0 || ^18.0.0","react-dom":"^16.8.0 || ^17.0.0 || ^18.0.0"},"devDependencies":{"@types/react":"^18.0.0","@types/react-dom":"^18.0.0","@typescript-eslint/eslint-plugin":"^5.0.0","@typescript-eslint/parser":"^5.0.0","eslint":"^8.0.0","jest":"^29.0.0","rollup":"^3.0.0","rollup-plugin-typescript2":"^0.34.0","typescript":"^4.9.0","@rollup/plugin-node-resolve":"^15.0.0","@rollup/plugin-babel":"^6.0.0","@babel/core":"^7.0.0","@babel/preset-env":"^7.0.0","@babel/preset-react":"^7.0.0","@babel/preset-typescript":"^7.0.0"},"_id":"@armego/pnar-i18n@1.0.1","gitHead":"7cb476bcae0e75b52041c858f578a966926f835e","bugs":{"url":"https://github.com/armego/pnar-i18n/issues"},"homepage":"https://github.com/armego/pnar-i18n#readme","_nodeVersion":"22.18.0","_npmVersion":"10.9.3","dist":{"integrity":"sha512-Xn2Gb4322ZXbUG1Yc59P7YT10HAUkAX78Lni92bieqCc70qzy6QIG3vi+YTbH+hE+HV+Fco+bu1KG2bNOstHNg==","shasum":"049ca479addea3f2844c1be4a5287d980840f675","tarball":"https://registry.npmjs.org/@armego/pnar-i18n/-/pnar-i18n-1.0.1.tgz","fileCount":17,"unpackedSize":28022,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIGbSeOvOYumEMiRi18R+cS1X06iXvFkD0ViIz4R1Tda1AiEA0cS3fbfrsKO5cOkiNAjDd6MgGdoCINzgvUDd3lyScoQ="}]},"_npmUser":{"name":"armego","email":"armegochylla@gmail.com"},"directories":{},"maintainers":[{"name":"armego","email":"armegochylla@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/pnar-i18n_1.0.1_1756300161843_0.61234105441011"},"_hasShrinkwrap":false}},"time":{"created":"2025-08-27T13:04:47.162Z","modified":"2025-08-27T13:09:22.246Z","1.0.0":"2025-08-27T13:04:47.508Z","1.0.1":"2025-08-27T13:09:22.072Z"},"bugs":{"url":"https://github.com/armego/pnar-i18n/issues"},"author":{"name":"Armego Chylla"},"license":"MIT","homepage":"https://github.com/armego/pnar-i18n#readme","keywords":["react","i18n","internationalization","multilingual","pnar","typescript"],"repository":{"type":"git","url":"git+https://github.com/armego/pnar-i18n.git"},"description":"Multilingual support library for React applications with Pnar language support","maintainers":[{"name":"armego","email":"armegochylla@gmail.com"}],"readme":"# @armego/pnar-i18n\n\nA powerful, flexible internationalization library for React applications with built-in Pnar language support.\n\n## Features\n\n- ✅ **TypeScript Support** - Full type safety\n- ✅ **Dynamic Loading** - Load translations on-demand\n- ✅ **Interpolation** - Variable substitution in translations\n- ✅ **Pluralization** - Handle singular/plural forms\n- ✅ **Date Localization** - Format dates according to language\n- ✅ **Persistence** - Remember user's language preference\n- ✅ **Fallbacks** - Graceful degradation to fallback languages\n- ✅ **React Integration** - Hooks and context-based API\n- ✅ **Framework Agnostic** - Works with any React setup\n\n## Installation\n\n```bash\nnpm install @armego/pnar-i18n\n# or\nyarn add @armego/pnar-i18n\n```\n\n> **Note:** This package is published under the `@armego` scope. The original intended name `@pnar-world/i18n` was not available.\n\n## Quick Start\n\n```typescript\nimport React from 'react';\nimport { TranslationProvider, useTranslation } from '@armego/pnar-i18n';\n\nconst translations = {\n  en: {\n    welcome: 'Welcome',\n    greeting: 'Hello {{name}}!',\n  },\n  pnar: {\n    welcome: 'Alæ',\n    greeting: 'Hey[Hei/Hoi/Hiw] {{name}}!',\n  },\n};\n\nfunction App() {\n  return (\n    <TranslationProvider\n      config={{\n        defaultLanguage: 'en',\n        translations,\n      }}\n    >\n      <MyComponent />\n    </TranslationProvider>\n  );\n}\n\nfunction MyComponent() {\n  const { t } = useTranslation();\n\n  return (\n    <div>\n      <h1>{t('welcome')}</h1>\n      <p>{t('greeting', { name: 'John' })}</p>\n    </div>\n  );\n}\n```\n\n## API Reference\n\n### TranslationProvider\n\n```typescript\ninterface I18nConfig {\n  defaultLanguage: string;\n  fallbackLanguage?: string;\n  translations?: Translations;\n  loadTranslations?: (language: string) => Promise<TranslationMap>;\n  persistLanguage?: boolean;\n  storageKey?: string;\n  interpolation?: {\n    prefix: string;\n    suffix: string;\n  };\n}\n```\n\n### useTranslation Hook\n\n```typescript\nconst {\n  t, // Translation function\n  language, // Current language\n  setLanguage, // Change language\n  isLoading, // Loading state\n  availableLanguages, // Available languages\n} = useTranslation();\n```\n\n### usePluralize Hook\n\n```typescript\nconst pluralize = usePluralize();\n\n// Basic usage\npluralize('item', 1); // \"item\"\npluralize('item', 5); // \"items\" (if plural form exists)\n\n// With custom translations\npluralize('apple', 3); // Uses translation key 'apple_many' if available\n```\n\n### useDateLocalization Hook\n\n```typescript\nconst localizeDate = useDateLocalization();\n\n// Format dates according to current language\nlocalizeDate(new Date(), 'long'); // \"December 25, 2023\" (localized)\nlocalizeDate(new Date(), 'short'); // \"12/25/23\" (localized)\n```\n\n## Advanced Usage\n\n### Dynamic Translation Loading\n\n```typescript\nconst loadTranslations = async (language: string) => {\n  const response = await fetch(`/locales/${language}.json`);\n  return response.json();\n};\n\n<TranslationProvider\n  config={{\n    defaultLanguage: 'en',\n    loadTranslations,\n  }}\n>\n  <App />\n</TranslationProvider>;\n```\n\n### Pluralization\n\n```typescript\nimport { usePluralize } from '@armego/pnar-i18n';\n\nfunction MyComponent() {\n  const pluralize = usePluralize();\n\n  return <p>{pluralize('item', count)}</p>;\n}\n```\n\n### Language Switcher\n\n```typescript\nimport { LanguageSwitcher } from '@armego/pnar-i18n';\n\nfunction Header() {\n  return (\n    <header>\n      <LanguageSwitcher variant=\"buttons\" />\n    </header>\n  );\n}\n```\n\n## Configuration Options\n\n| Option             | Type           | Default                        | Description              |\n| ------------------ | -------------- | ------------------------------ | ------------------------ |\n| `defaultLanguage`  | `string`       | `'en'`                         | Default language         |\n| `fallbackLanguage` | `string`       | `'en'`                         | Fallback language        |\n| `translations`     | `Translations` | `{}`                           | Static translations      |\n| `loadTranslations` | `Function`     | -                              | Dynamic loading function |\n| `persistLanguage`  | `boolean`      | `true`                         | Save language preference |\n| `storageKey`       | `string`       | `'pnar-i18n-language'`         | localStorage key         |\n| `interpolation`    | `object`       | `{prefix: '{{', suffix: '}}'}` | Interpolation markers    |\n\n## Examples\n\n### Basic Usage with JSON Files\n\n```typescript\n// translations/en.json\n{\n  \"welcome\": \"Welcome\",\n  \"greeting\": \"Hello {{name}}!\",\n  \"items\": \"item\",\n  \"items_many\": \"items\"\n}\n\n// translations/pnar.json\n{\n  \"welcome\": \"Alæ\",\n  \"greeting\": \"Hey[Hei/Hoi/Hiw] {{name}}!\",\n  \"items\": \"ki item\",\n  \"items_many\": \"Bõn item\"\n}\n\n// App.tsx\nimport React from 'react';\nimport { TranslationProvider, useTranslation, usePluralize, LanguageSwitcher } from '@armego/pnar-i18n';\n\nconst loadTranslations = async (language: string) => {\n  const response = await fetch(`/translations/${language}.json`);\n  return response.json();\n};\n\nfunction App() {\n  return (\n    <TranslationProvider\n      config={{\n        defaultLanguage: 'en',\n        loadTranslations\n      }}\n    >\n      <Header />\n      <Content />\n    </TranslationProvider>\n  );\n}\n\nfunction Header() {\n  return (\n    <header>\n      <LanguageSwitcher variant=\"buttons\" />\n    </header>\n  );\n}\n\nfunction Content() {\n  const { t } = useTranslation();\n  const pluralize = usePluralize();\n\n  return (\n    <div>\n      <h1>{t('welcome')}</h1>\n      <p>{t('greeting', { name: 'John' })}</p>\n      <p>{pluralize('items', 5)}</p>\n    </div>\n  );\n}\n```\n\n## Development\n\n```bash\n# Install dependencies\nnpm install\n\n# Build the project\nnpm run build\n\n# Run in development mode\nnpm run dev\n\n# Run tests\nnpm run test\n\n# Run linting\nnpm run lint\n\n# Type checking\nnpm run type-check\n```\n\n## Contributing\n\nContributions are welcome! Please feel free to submit a Pull Request.\n\n## License\n\nMIT</content>\n<parameter name=\"filePath\">/Users/armegochylla/Projects/pnar-world-admin-vite-react-ts/pnar-i18n/README.md\n","readmeFilename":"README.md"}