{"_id":"@dbs-portal/module-language-management","name":"@dbs-portal/module-language-management","dist-tags":{"latest":"1.0.0"},"versions":{"1.0.0":{"name":"@dbs-portal/module-language-management","version":"1.0.0","description":"Internationalization and localization management module for DBS Portal","type":"module","main":"dist/index.js","types":"dist/index.d.ts","exports":{".":{"import":"./dist/index.js","types":"./dist/index.d.ts"},"./components":{"import":"./dist/components.js","types":"./dist/components.d.ts"},"./services":{"import":"./dist/services.js","types":"./dist/services.d.ts"},"./types":{"import":"./dist/types.js","types":"./dist/types.d.ts"},"./hooks":{"import":"./dist/hooks.js","types":"./dist/hooks.d.ts"},"./utils":{"import":"./dist/utils.js","types":"./dist/utils.d.ts"}},"scripts":{"build":"tsc && vite build","dev":"tsc --watch","test":"vitest run","test:watch":"vitest","test:coverage":"vitest run --coverage","lint":"biome lint src","format":"biome format src --write","type-check":"tsc --noEmit"},"dependencies":{"@dbs-portal/core-api":"1.0.0","@dbs-portal/core-auth":"1.0.0","@dbs-portal/core-shared":"1.0.0","@dbs-portal/core-store":"1.0.0","@dbs-portal/core-ui":"1.0.0","@dbs-portal/module-tenant-management":"1.0.0","@dnd-kit/core":"^6.3.1","@dnd-kit/sortable":"^10.0.0","@dnd-kit/utilities":"^3.2.2","@tanstack/react-query":"^5.0.0","@tanstack/react-router":"^1.0.0","antd":"^5.0.0","date-fns":"^3.0.0","i18next":"^25.3.2","i18next-browser-languagedetector":"^8.2.0","i18next-http-backend":"^3.0.2","immer":"^10.0.0","lodash-es":"^4.17.21","react":"^18.2.0","react-dom":"^18.2.0","react-i18next":"^15.6.1","uuid":"^9.0.0","zod":"^3.0.0","zustand":"^4.0.0"},"devDependencies":{"@dbs-portal/tool-build":"1.0.0","@dbs-portal/tool-testing":"1.0.0","@dbs-portal/tool-tsconfig":"1.0.0","@testing-library/jest-dom":"^6.6.4","@types/lodash-es":"^4.17.0","@types/react":"^18.2.0","@types/react-dom":"^18.2.0","@types/uuid":"^9.0.0","typescript":"^5.0.0","vite":"^5.0.0","vitest":"^1.0.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"keywords":["i18n","internationalization","localization","translation","language","locale","react","typescript","dbs-portal"],"author":{"name":"DBS Portal Team"},"repository":{"type":"git","url":"git+https://github.com/your-org/dbs-portal.git","directory":"packages/modules/language-management"},"bugs":{"url":"https://github.com/your-org/dbs-portal/issues"},"homepage":"https://github.com/your-org/dbs-portal#readme","license":"MIT","_id":"@dbs-portal/module-language-management@1.0.0","gitHead":"61a23904a481b624f3e8ed7abb6c944ecfeaca7b","_nodeVersion":"20.19.0","_npmVersion":"10.8.2","dist":{"integrity":"sha512-60t8rhMS2YB422NQMhUXGWy+UxQap6kCeU76d1ZIIsao+IWR/P6y9kS8CkJCvB0G29TwqakZKq35qwmk4T02zQ==","shasum":"4bb108a0d14591ba7a06d686d8db60e46ff183d8","tarball":"https://registry.npmjs.org/@dbs-portal/module-language-management/-/module-language-management-1.0.0.tgz","fileCount":84,"unpackedSize":4752718,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQDzjg/eJgCdAbP4V9B5FgJdIE6HpWzIkfSQemXoODyYrgIgbFJZZmZW6G68KoA8ewuCJZL9ZPCI4pkiDIcK+E5sNMI="}]},"_npmUser":{"name":"longvq","email":"vqlong1604@gmail.com"},"directories":{},"maintainers":[{"name":"longvq","email":"vqlong1604@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/module-language-management_1.0.0_1754218661409_0.782905121505981"},"_hasShrinkwrap":false}},"time":{"created":"2025-08-03T10:57:41.309Z","1.0.0":"2025-08-03T10:57:41.623Z","modified":"2025-08-03T10:57:41.890Z"},"maintainers":[{"name":"longvq","email":"vqlong1604@gmail.com"}],"description":"Internationalization and localization management module for DBS Portal","homepage":"https://github.com/your-org/dbs-portal#readme","keywords":["i18n","internationalization","localization","translation","language","locale","react","typescript","dbs-portal"],"repository":{"type":"git","url":"git+https://github.com/your-org/dbs-portal.git","directory":"packages/modules/language-management"},"author":{"name":"DBS Portal Team"},"bugs":{"url":"https://github.com/your-org/dbs-portal/issues"},"license":"MIT","readme":"# Language Management Module\n\nA comprehensive internationalization and localization management module for DBS Portal, providing language detection, translation management, and locale switching capabilities.\n\n## Features\n\n### 🌍 Language Detection\n- Browser language detection from Accept-Language headers\n- URL parameter-based language switching\n- Cookie-based user preference storage\n- Geolocation-based language suggestions\n- Fallback language support\n\n### 📝 Translation Management\n- Hierarchical namespace organization\n- Translation key management with metadata\n- Multi-language translation editing\n- Translation approval workflows\n- Auto-translation integration\n- Import/export capabilities (JSON, CSV, XLSX, PO, XLIFF)\n\n### 🎨 UI Components\n- **LanguageList**: Comprehensive language management interface\n- **LocaleSelector**: Flexible language selection dropdown\n- **TranslationEditor**: Multi-language translation editing interface\n\n### 🔧 Developer Tools\n- React Query hooks for data fetching\n- TypeScript-first API with full type safety\n- Zustand store integration\n- i18next configuration utilities\n\n## Installation\n\n```bash\nnpm install @dbs-portal/module-language-management\n```\n\n## Dependencies\n\n### Required\n- `@tanstack/react-query` - Data fetching and caching\n- `antd` - UI components\n- `react` - React framework\n- `i18next` - Internationalization framework\n- `react-i18next` - React bindings for i18next\n\n### Optional\n- `@dnd-kit/core` - Drag and drop functionality\n- `@dnd-kit/sortable` - Sortable lists\n- `@dnd-kit/utilities` - DnD utilities\n- `i18next-browser-languagedetector` - Browser language detection\n- `i18next-http-backend` - HTTP backend for translations\n\n## Quick Start\n\n### 1. Basic Setup\n\n```tsx\nimport { LanguageList, LocaleSelector } from '@dbs-portal/module-language-management'\n\nfunction App() {\n  return (\n    <div>\n      {/* Language selector in header */}\n      <LocaleSelector \n        value=\"en\"\n        onChange={(lang) => console.log('Language changed:', lang)}\n        showFlags\n        showNativeNames\n      />\n      \n      {/* Language management page */}\n      <LanguageList \n        showStatistics\n        onLanguageSelect={(lang) => console.log('Selected:', lang)}\n      />\n    </div>\n  )\n}\n```\n\n### 2. Using React Query Hooks\n\n```tsx\nimport { useLanguages, useTranslationKeys } from '@dbs-portal/module-language-management'\n\nfunction LanguageManager() {\n  const { data: languages, isLoading } = useLanguages()\n  const { data: translations } = useTranslationKeys(1, 50, {\n    namespaceId: 'common'\n  })\n\n  if (isLoading) return <div>Loading...</div>\n\n  return (\n    <div>\n      <h2>Available Languages ({languages?.meta?.total})</h2>\n      {languages?.data?.map(lang => (\n        <div key={lang.code}>{lang.name}</div>\n      ))}\n    </div>\n  )\n}\n```\n\n### 3. Language Detection\n\n```tsx\nimport { detectLanguage, initializeI18n } from '@dbs-portal/module-language-management'\n\n// Detect user's preferred language\nconst detection = detectLanguage({\n  acceptLanguage: 'en-US,en;q=0.9,es;q=0.8',\n  url: window.location.href,\n  fallbackLanguage: 'en'\n})\n\nconsole.log('Detected language:', detection.detectedLanguage)\nconsole.log('Confidence:', detection.confidence)\n\n// Initialize i18n\nawait initializeI18n({\n  defaultLanguage: detection.detectedLanguage,\n  apiBaseUrl: '/api',\n  enableBackend: true,\n  enableDetection: true\n})\n```\n\n## API Reference\n\n### Components\n\n#### LanguageList\nComprehensive language management interface with CRUD operations.\n\n```tsx\ninterface LanguageListProps {\n  onLanguageSelect?: (language: Language) => void\n  onLanguageToggle?: (language: Language, enabled: boolean) => void\n  showStatistics?: boolean\n  allowReorder?: boolean\n  className?: string\n}\n```\n\n#### LocaleSelector\nFlexible language selection dropdown with multiple display modes.\n\n```tsx\ninterface LocaleSelectorProps {\n  value?: LanguageCode\n  onChange?: (language: LanguageCode) => void\n  showFlags?: boolean\n  showNativeNames?: boolean\n  size?: 'small' | 'large'\n  placement?: 'top' | 'bottom' | 'topLeft' | 'topCenter' | 'topRight' | 'bottomLeft' | 'bottomCenter' | 'bottomRight'\n  className?: string\n}\n```\n\n#### TranslationEditor\nMulti-language translation editing interface with approval workflows.\n\n```tsx\ninterface TranslationEditorProps {\n  namespaceId?: ID\n  keyId?: ID\n  language?: LanguageCode\n  onSave?: (key: string, translations: Record<LanguageCode, string>) => void\n  onCancel?: () => void\n  showPreview?: boolean\n  enableAutoTranslation?: boolean\n  className?: string\n}\n```\n\n### Hooks\n\n#### Language Management\n- `useLanguages()` - Fetch paginated languages\n- `useLanguage(code)` - Fetch single language\n- `useCreateLanguage()` - Create new language\n- `useUpdateLanguage()` - Update existing language\n- `useDeleteLanguage()` - Delete language\n- `useToggleLanguage()` - Enable/disable language\n\n#### Translation Management\n- `useTranslationKeys()` - Fetch translation keys\n- `useTranslationKey(id)` - Fetch single translation key\n- `useUpdateTranslation()` - Update translation value\n- `useAutoTranslate()` - Auto-translate keys\n- `useImportTranslations()` - Import translation files\n- `useExportTranslations()` - Export translations\n\n### Utilities\n\n#### Language Detection\n```tsx\n// Detect from various sources\ndetectFromAcceptLanguage(header: string): LanguageCode[]\ndetectFromUserAgent(userAgent: string): LanguageCode[]\ndetectFromURL(url: string, paramName?: string): LanguageCode | null\ndetectFromCookie(cookieName?: string): LanguageCode | null\n\n// Comprehensive detection\ndetectLanguage(options: DetectionOptions): LanguageDetectionResult\n```\n\n#### i18n Configuration\n```tsx\n// Initialize i18n\ninitializeI18n(config?: I18nConfig): Promise<typeof i18n>\n\n// Translation management\nloadTranslations(language: LanguageCode, namespace: string): Promise<Record<string, any>>\nchangeLanguage(language: LanguageCode): Promise<void>\ngetTranslation(key: string, options?: TranslationOptions): string\n```\n\n## Supported Languages\n\nThe module supports 37 languages out of the box:\n\n- **European**: English, Spanish, French, German, Italian, Portuguese, Dutch, Swedish, Danish, Norwegian, Finnish, Polish, Czech, Hungarian, Romanian, Bulgarian, Croatian, Slovak, Slovenian, Estonian, Latvian, Lithuanian, Maltese, Irish, Welsh, Basque, Catalan, Galician\n- **Asian**: Chinese (Simplified), Chinese (Traditional), Japanese, Korean, Hindi, Thai, Vietnamese\n- **Middle Eastern**: Arabic\n- **Slavic**: Russian\n\n## Configuration\n\n### Environment Variables\n```env\n# API endpoints\nVITE_API_BASE_URL=http://localhost:3000/api\nVITE_TRANSLATIONS_ENDPOINT=/translations\n\n# Language detection\nVITE_DEFAULT_LANGUAGE=en\nVITE_FALLBACK_LANGUAGE=en\nVITE_ENABLE_AUTO_DETECTION=true\n\n# Auto-translation\nVITE_ENABLE_AUTO_TRANSLATION=true\nVITE_AUTO_TRANSLATION_PROVIDER=google\n```\n\n### TypeScript Configuration\n```json\n{\n  \"compilerOptions\": {\n    \"types\": [\"@dbs-portal/module-language-management\"]\n  }\n}\n```\n\n## Development\n\n### Building\n```bash\nnpm run build\n```\n\n### Testing\n```bash\nnpm test\n```\n\n### Type Checking\n```bash\nnpm run type-check\n```\n\n## Contributing\n\n1. Follow the established patterns for hooks, components, and services\n2. Ensure all new features have TypeScript types\n3. Add tests for new functionality\n4. Update documentation for API changes\n\n## License\n\nMIT License - see LICENSE file for details.\n","readmeFilename":"README.md","_rev":"1-591ef75e551a3fc8de37e9bd619419ab"}