{"version":3,"sources":["../src/core/internationalization.ts"],"names":["_InternationalizationManager","config","__publicField","defaultConfig","locale","fullLocale","translation","key","params","keys","k","match","param","bytes","targetLocale","units","size","unitIndex","count","pluralKey","number","date","amount","currency","isRTL","result","obj","prefix","value","fullKey","InternationalizationManager"],"mappings":"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","file":"chunk-YFF7PX3P.cjs","sourcesContent":["export interface LocaleConfig {\r\n  code: string;\r\n  name: string;\r\n  direction: \"ltr\" | \"rtl\";\r\n  dateFormat: string;\r\n  numberFormat: {\r\n    decimal: string;\r\n    thousands: string;\r\n    currency: string;\r\n  };\r\n}\r\n\r\nexport interface Translation {\r\n  [key: string]: string | Translation;\r\n}\r\n\r\nexport interface I18nConfig {\r\n  defaultLocale: string;\r\n  fallbackLocale: string;\r\n  supportedLocales: string[];\r\n  loadLocaleData: (locale: string) => Promise<Translation>;\r\n  onLocaleChange?: (locale: string) => void;\r\n}\r\n\r\nexport class InternationalizationManager {\r\n  private static instance: InternationalizationManager;\r\n  private config: I18nConfig;\r\n  private currentLocale: string;\r\n  private fallbackLocale: string;\r\n  private translations: Map<string, Translation> = new Map();\r\n  private loadedLocales: Set<string> = new Set();\r\n\r\n  // Default English translations\r\n  private static readonly DEFAULT_TRANSLATIONS: Record<string, Translation> = {\r\n    \"en-US\": {\r\n      common: {\r\n        upload: \"Upload\",\r\n        cancel: \"Cancel\",\r\n        retry: \"Retry\",\r\n        remove: \"Remove\",\r\n        clear: \"Clear All\",\r\n        close: \"Close\",\r\n        save: \"Save\",\r\n        edit: \"Edit\",\r\n        delete: \"Delete\",\r\n        confirm: \"Confirm\",\r\n        loading: \"Loading...\",\r\n        error: \"Error\",\r\n        success: \"Success\",\r\n        warning: \"Warning\",\r\n        info: \"Information\",\r\n      },\r\n      dropzone: {\r\n        title: \"Drag & Drop Files Here\",\r\n        subtitle: \"or click to browse\",\r\n        description: \"Drop your files here to upload them\",\r\n        maxFiles: \"Maximum {count} files allowed\",\r\n        maxFileSize: \"Maximum file size: {size}\",\r\n        allowedTypes: \"Allowed file types: {types}\",\r\n        dragActive: \"Drop files here to upload\",\r\n        dragInactive: \"Drag files here or click to select\",\r\n        fileTooLarge: 'File \"{name}\" is too large',\r\n        fileTypeNotAllowed: 'File type \"{type}\" is not allowed',\r\n        tooManyFiles: \"Too many files selected\",\r\n        uploadInProgress: \"Upload in progress...\",\r\n        uploadComplete: \"Upload complete!\",\r\n        uploadFailed: \"Upload failed\",\r\n        processing: \"Processing...\",\r\n        ready: \"Ready to upload\",\r\n        dragAndDrop: \"Drag and drop files here to upload\",\r\n      },\r\n      fileItem: {\r\n        uploading: \"Uploading...\",\r\n        uploaded: \"Uploaded\",\r\n        failed: \"Failed\",\r\n        cancelled: \"Cancelled\",\r\n        pending: \"Pending\",\r\n        retryUpload: \"Retry upload\",\r\n        cancelUpload: \"Cancel upload\",\r\n        removeFile: \"Remove file\",\r\n        viewFile: \"View file\",\r\n        downloadFile: \"Download file\",\r\n        fileSize: \"File size: {size}\",\r\n        fileType: \"File type: {type}\",\r\n        uploadProgress: \"Upload progress: {progress}%\",\r\n        uploadSpeed: \"Upload speed: {speed}\",\r\n        timeRemaining: \"Time remaining: {time}\",\r\n        errorMessage: \"Error: {message}\",\r\n      },\r\n      validation: {\r\n        required: \"This field is required\",\r\n        invalidFormat: \"Invalid format\",\r\n        fileTooLarge: \"File is too large\",\r\n        fileTypeNotAllowed: \"File type not allowed\",\r\n        tooManyFiles: \"Too many files\",\r\n        invalidFile: \"Invalid file\",\r\n        corruptedFile: \"File appears to be corrupted\",\r\n        virusDetected: \"Virus detected in file\",\r\n        passwordProtected: \"File is password protected\",\r\n        unsupportedFormat: \"Unsupported file format\",\r\n      },\r\n      errors: {\r\n        networkError:\r\n          \"Network connection error. Please check your internet connection.\",\r\n        serverError: \"Server error. Please try again later.\",\r\n        timeoutError: \"Request timed out. Please try again.\",\r\n        quotaExceeded: \"Storage quota exceeded. Please remove some files.\",\r\n        unauthorized: \"You are not authorized to perform this action.\",\r\n        forbidden: \"Access denied. You do not have permission.\",\r\n        notFound: \"Resource not found.\",\r\n        conflict: \"Resource conflict. Please resolve and try again.\",\r\n        tooManyRequests: \"Too many requests. Please wait and try again.\",\r\n        internalError: \"Internal server error. Please contact support.\",\r\n        unknownError: \"An unknown error occurred. Please try again.\",\r\n      },\r\n      accessibility: {\r\n        dropzoneLabel: \"File upload area\",\r\n        dropzoneDescription:\r\n          \"Drag and drop files here or click to browse. Supported formats: images, PDFs, and text files.\",\r\n        fileItemLabel: \"File item\",\r\n        uploadButtonLabel: \"Upload button\",\r\n        cancelButtonLabel: \"Cancel button\",\r\n        retryButtonLabel: \"Retry button\",\r\n        removeButtonLabel: \"Remove button\",\r\n        progressBarLabel: \"Upload progress\",\r\n        statusLabel: \"File status\",\r\n        errorMessageLabel: \"Error message\",\r\n        successMessageLabel: \"Success message\",\r\n        loadingMessageLabel: \"Loading message\",\r\n      },\r\n      voice: {\r\n        commands: {\r\n          upload: \"Upload files\",\r\n          cancel: \"Cancel upload\",\r\n          clear: \"Clear all\",\r\n          retry: \"Retry failed\",\r\n          select: \"Select files\",\r\n          help: \"Voice help\",\r\n        },\r\n        feedback: {\r\n          listening: \"Listening for voice commands...\",\r\n          commandRecognized: \"Command recognized: {command}\",\r\n          commandExecuted: \"Command executed: {action}\",\r\n          commandNotFound: \"Command not found: {command}\",\r\n          listeningStopped: \"Voice recognition stopped\",\r\n          error: \"Voice recognition error: {error}\",\r\n        },\r\n      },\r\n    },\r\n    \"es-ES\": {\r\n      common: {\r\n        upload: \"Subir\",\r\n        cancel: \"Cancelar\",\r\n        retry: \"Reintentar\",\r\n        remove: \"Eliminar\",\r\n        clear: \"Limpiar Todo\",\r\n        close: \"Cerrar\",\r\n        save: \"Guardar\",\r\n        edit: \"Editar\",\r\n        delete: \"Eliminar\",\r\n        confirm: \"Confirmar\",\r\n        loading: \"Cargando...\",\r\n        error: \"Error\",\r\n        success: \"Éxito\",\r\n        warning: \"Advertencia\",\r\n        info: \"Información\",\r\n      },\r\n      dropzone: {\r\n        title: \"Arrastra y Suelta Archivos Aquí\",\r\n        subtitle: \"o haz clic para explorar\",\r\n        description: \"Suelta tus archivos aquí para subirlos\",\r\n        maxFiles: \"Máximo {count} archivos permitidos\",\r\n        maxFileSize: \"Tamaño máximo de archivo: {size}\",\r\n        allowedTypes: \"Tipos de archivo permitidos: {types}\",\r\n        dragActive: \"Suelta los archivos aquí para subirlos\",\r\n        dragInactive: \"Arrastra archivos aquí o haz clic para seleccionar\",\r\n        fileTooLarge: 'El archivo \"{name}\" es demasiado grande',\r\n        fileTypeNotAllowed: 'El tipo de archivo \"{type}\" no está permitido',\r\n        tooManyFiles: \"Demasiados archivos seleccionados\",\r\n        uploadInProgress: \"Subida en progreso...\",\r\n        uploadComplete: \"¡Subida completada!\",\r\n        uploadFailed: \"Subida fallida\",\r\n        processing: \"Procesando...\",\r\n        ready: \"Listo para subir\",\r\n        dragAndDrop: \"Arrastra y suelta archivos aquí\",\r\n      },\r\n    },\r\n    \"fr-FR\": {\r\n      common: {\r\n        upload: \"Télécharger\",\r\n        cancel: \"Annuler\",\r\n        retry: \"Réessayer\",\r\n        remove: \"Supprimer\",\r\n        clear: \"Tout effacer\",\r\n        close: \"Fermer\",\r\n        save: \"Enregistrer\",\r\n        edit: \"Modifier\",\r\n        delete: \"Supprimer\",\r\n        confirm: \"Confirmer\",\r\n        loading: \"Chargement...\",\r\n        error: \"Erreur\",\r\n        success: \"Succès\",\r\n        warning: \"Avertissement\",\r\n        info: \"Information\",\r\n      },\r\n      dropzone: {\r\n        title: \"Glissez et Déposez les Fichiers Ici\",\r\n        subtitle: \"ou cliquez pour parcourir\",\r\n        description: \"Déposez vos fichiers ici pour les télécharger\",\r\n        maxFiles: \"Maximum {count} fichiers autorisés\",\r\n        maxFileSize: \"Taille maximale de fichier: {size}\",\r\n        allowedTypes: \"Types de fichiers autorisés: {types}\",\r\n        dragActive: \"Déposez les fichiers ici pour les télécharger\",\r\n        dragInactive: \"Glissez les fichiers ici ou cliquez pour sélectionner\",\r\n        fileTooLarge: 'Le fichier \"{name}\" est trop volumineux',\r\n        fileTypeNotAllowed: 'Le type de fichier \"{type}\" n\\'est pas autorisé',\r\n        tooManyFiles: \"Trop de fichiers sélectionnés\",\r\n        uploadInProgress: \"Téléchargement en cours...\",\r\n        uploadComplete: \"Téléchargement terminé !\",\r\n        uploadFailed: \"Téléchargement échoué\",\r\n        processing: \"Traitement...\",\r\n        ready: \"Prêt à télécharger\",\r\n      },\r\n    },\r\n    \"de-DE\": {\r\n      common: {\r\n        upload: \"Hochladen\",\r\n        cancel: \"Abbrechen\",\r\n        retry: \"Wiederholen\",\r\n        remove: \"Entfernen\",\r\n        clear: \"Alle löschen\",\r\n        close: \"Schließen\",\r\n        save: \"Speichern\",\r\n        edit: \"Bearbeiten\",\r\n        delete: \"Löschen\",\r\n        confirm: \"Bestätigen\",\r\n        loading: \"Wird geladen...\",\r\n        error: \"Fehler\",\r\n        success: \"Erfolg\",\r\n        warning: \"Warnung\",\r\n        info: \"Information\",\r\n      },\r\n      dropzone: {\r\n        title: \"Dateien Hier Hineinziehen und Ablegen\",\r\n        subtitle: \"oder klicken zum Durchsuchen\",\r\n        description: \"Legen Sie Ihre Dateien hier ab, um sie hochzuladen\",\r\n        maxFiles: \"Maximal {count} Dateien erlaubt\",\r\n        maxFileSize: \"Maximale Dateigröße: {size}\",\r\n        allowedTypes: \"Erlaubte Dateitypen: {types}\",\r\n        dragActive: \"Dateien hier ablegen zum Hochladen\",\r\n        dragInactive: \"Dateien hier hineinziehen oder klicken zum Auswählen\",\r\n        fileTooLarge: 'Datei \"{name}\" ist zu groß',\r\n        fileTypeNotAllowed: 'Dateityp \"{type}\" ist nicht erlaubt',\r\n        tooManyFiles: \"Zu viele Dateien ausgewählt\",\r\n        uploadInProgress: \"Upload läuft...\",\r\n        uploadComplete: \"Upload abgeschlossen!\",\r\n        uploadFailed: \"Upload fehlgeschlagen\",\r\n        processing: \"Wird verarbeitet...\",\r\n        ready: \"Bereit zum Hochladen\",\r\n      },\r\n    },\r\n    \"ja-JP\": {\r\n      common: {\r\n        upload: \"アップロード\",\r\n        cancel: \"キャンセル\",\r\n        retry: \"再試行\",\r\n        remove: \"削除\",\r\n        clear: \"すべてクリア\",\r\n        close: \"閉じる\",\r\n        save: \"保存\",\r\n        edit: \"編集\",\r\n        delete: \"削除\",\r\n        confirm: \"確認\",\r\n        loading: \"読み込み中...\",\r\n        error: \"エラー\",\r\n        success: \"成功\",\r\n        warning: \"警告\",\r\n        info: \"情報\",\r\n      },\r\n      dropzone: {\r\n        title: \"ここにファイルをドラッグ＆ドロップ\",\r\n        subtitle: \"またはクリックして参照\",\r\n        description: \"ファイルをここにドロップしてアップロード\",\r\n        maxFiles: \"最大{count}ファイルまで\",\r\n        maxFileSize: \"最大ファイルサイズ: {size}\",\r\n        allowedTypes: \"許可されたファイルタイプ: {types}\",\r\n        dragActive: \"ここにファイルをドロップしてアップロード\",\r\n        dragInactive: \"ここにファイルをドラッグするか、クリックして選択\",\r\n        fileTooLarge: \"ファイル「{name}」が大きすぎます\",\r\n        fileTypeNotAllowed: \"ファイルタイプ「{type}」は許可されていません\",\r\n        tooManyFiles: \"ファイルが多すぎます\",\r\n        uploadInProgress: \"アップロード中...\",\r\n        uploadComplete: \"アップロード完了！\",\r\n        uploadFailed: \"アップロード失敗\",\r\n        processing: \"処理中...\",\r\n        ready: \"アップロード準備完了\",\r\n      },\r\n    },\r\n  };\r\n\r\n  private constructor(config: I18nConfig) {\r\n    this.config = config;\r\n    this.currentLocale = config.defaultLocale;\r\n    this.fallbackLocale = config.fallbackLocale;\r\n\r\n    // Load default locale\r\n    this.loadLocale(config.defaultLocale);\r\n  }\r\n\r\n  static getInstance(config?: I18nConfig): InternationalizationManager {\r\n    if (!InternationalizationManager.instance) {\r\n      const defaultConfig: I18nConfig = {\r\n        defaultLocale: \"en-US\",\r\n        fallbackLocale: \"en-US\",\r\n        supportedLocales: [\"en-US\", \"es\", \"es-ES\", \"fr-FR\", \"de-DE\", \"ja-JP\"],\r\n        loadLocaleData: async (locale: string) => {\r\n          // Map short locale codes to full ones\r\n          const localeMap: Record<string, string> = {\r\n            es: \"es-ES\",\r\n            fr: \"fr-FR\",\r\n            de: \"de-DE\",\r\n            ja: \"ja-JP\",\r\n          };\r\n          const fullLocale = localeMap[locale] || locale;\r\n          return (\r\n            InternationalizationManager.DEFAULT_TRANSLATIONS[fullLocale] ||\r\n            InternationalizationManager.DEFAULT_TRANSLATIONS[\"en-US\"]\r\n          );\r\n        },\r\n      };\r\n      InternationalizationManager.instance = new InternationalizationManager(\r\n        config || defaultConfig\r\n      );\r\n    }\r\n    return InternationalizationManager.instance;\r\n  }\r\n\r\n  async setLocale(locale: string): Promise<boolean> {\r\n    if (!this.config.supportedLocales.includes(locale)) {\r\n      console.warn(`Locale ${locale} is not supported`);\r\n      return false;\r\n    }\r\n\r\n    if (locale === this.currentLocale) {\r\n      return true;\r\n    }\r\n\r\n    try {\r\n      await this.loadLocale(locale);\r\n      this.currentLocale = locale;\r\n      this.config.onLocaleChange?.(locale);\r\n      return true;\r\n    } catch (error) {\r\n      console.error(`Failed to load locale ${locale}:`, error);\r\n      return false;\r\n    }\r\n  }\r\n\r\n  getCurrentLocale(): string {\r\n    return this.currentLocale;\r\n  }\r\n\r\n  getSupportedLocales(): string[] {\r\n    return [...this.config.supportedLocales];\r\n  }\r\n\r\n  async loadLocale(locale: string): Promise<void> {\r\n    if (this.loadedLocales.has(locale)) {\r\n      return;\r\n    }\r\n\r\n    try {\r\n      let translation: Translation;\r\n\r\n      // Try to load from config first\r\n      if (this.config.loadLocaleData) {\r\n        translation = await this.config.loadLocaleData(locale);\r\n      } else {\r\n        // Fall back to built-in translations\r\n        translation =\r\n          InternationalizationManager.DEFAULT_TRANSLATIONS[locale] ||\r\n          InternationalizationManager.DEFAULT_TRANSLATIONS[this.fallbackLocale];\r\n      }\r\n\r\n      if (translation) {\r\n        this.translations.set(locale, translation);\r\n        this.loadedLocales.add(locale);\r\n      } else {\r\n        throw new Error(`No translation data found for locale ${locale}`);\r\n      }\r\n    } catch (error) {\r\n      console.error(`Failed to load locale ${locale}:`, error);\r\n\r\n      // Fall back to default locale\r\n      if (locale !== this.fallbackLocale) {\r\n        await this.loadLocale(this.fallbackLocale);\r\n      }\r\n    }\r\n  }\r\n\r\n  translate(key: string, params?: Record<string, any>): string {\r\n    const keys = key.split(\".\");\r\n    let translation: any = this.translations.get(this.currentLocale);\r\n\r\n    // Try current locale first\r\n    for (const k of keys) {\r\n      if (translation && typeof translation === \"object\" && k in translation) {\r\n        translation = translation[k];\r\n      } else {\r\n        translation = null;\r\n        break;\r\n      }\r\n    }\r\n\r\n    // Fall back to fallback locale if current locale failed\r\n    if (!translation && this.currentLocale !== this.fallbackLocale) {\r\n      translation = this.translations.get(this.fallbackLocale);\r\n      for (const k of keys) {\r\n        if (\r\n          translation &&\r\n          typeof translation === \"object\" &&\r\n          k in translation\r\n        ) {\r\n          translation = translation[k];\r\n        } else {\r\n          translation = null;\r\n          break;\r\n        }\r\n      }\r\n    }\r\n\r\n    // Fall back to key if no translation found\r\n    if (!translation || typeof translation !== \"string\") {\r\n      console.warn(`Translation not found for key: ${key}`);\r\n      return key;\r\n    }\r\n\r\n    // Replace parameters\r\n    if (params) {\r\n      return translation.replace(/\\{(\\w+)\\}/g, (match, param) => {\r\n        return params[param] !== undefined ? String(params[param]) : match;\r\n      });\r\n    }\r\n\r\n    return translation;\r\n  }\r\n\r\n  // Alias method for backward compatibility with tests\r\n  t(key: string, params?: Record<string, any>): string {\r\n    return this.translate(key, params);\r\n  }\r\n\r\n  formatFileSize(bytes: number, locale?: string): string {\r\n    const targetLocale = locale || this.currentLocale;\r\n    const units = [\"B\", \"KB\", \"MB\", \"GB\", \"TB\"];\r\n    let size = bytes;\r\n    let unitIndex = 0;\r\n\r\n    while (size >= 1024 && unitIndex < units.length - 1) {\r\n      size /= 1024;\r\n      unitIndex++;\r\n    }\r\n\r\n    return (\r\n      new Intl.NumberFormat(targetLocale, {\r\n        maximumFractionDigits: 2,\r\n        minimumFractionDigits: 0,\r\n      }).format(size) +\r\n      \" \" +\r\n      units[unitIndex]\r\n    );\r\n  }\r\n\r\n  translatePlural(\r\n    key: string,\r\n    count: number,\r\n    params?: Record<string, any>\r\n  ): string {\r\n    const pluralKey = count === 1 ? `${key}.singular` : `${key}.plural`;\r\n    return this.translate(pluralKey, { ...params, count });\r\n  }\r\n\r\n  formatNumber(number: number, locale?: string): string {\r\n    const targetLocale = locale || this.currentLocale;\r\n    return new Intl.NumberFormat(targetLocale).format(number);\r\n  }\r\n\r\n  formatDate(date: Date, locale?: string): string {\r\n    const targetLocale = locale || this.currentLocale;\r\n    return new Intl.DateTimeFormat(targetLocale).format(date);\r\n  }\r\n\r\n  formatCurrency(amount: number, currency: string, locale?: string): string {\r\n    const targetLocale = locale || this.currentLocale;\r\n    return new Intl.NumberFormat(targetLocale, {\r\n      style: \"currency\",\r\n      currency: currency,\r\n    }).format(amount);\r\n  }\r\n\r\n  getLocaleConfig(locale: string): LocaleConfig | null {\r\n    // This would typically come from a locale database\r\n    // For now, return basic config\r\n    const isRTL = [\"ar\", \"he\", \"fa\", \"ur\"].includes(locale.split(\"-\")[0]);\r\n\r\n    return {\r\n      code: locale,\r\n      name:\r\n        new Intl.DisplayNames([locale], { type: \"language\" }).of(locale) ||\r\n        locale,\r\n      direction: isRTL ? \"rtl\" : \"ltr\",\r\n      dateFormat: \"MM/DD/YYYY\",\r\n      numberFormat: {\r\n        decimal: \".\",\r\n        thousands: \",\",\r\n        currency: \"$\",\r\n      },\r\n    };\r\n  }\r\n\r\n  isRTL(locale?: string): boolean {\r\n    const targetLocale = locale || this.currentLocale;\r\n    const config = this.getLocaleConfig(targetLocale);\r\n    return config?.direction === \"rtl\";\r\n  }\r\n\r\n  // Utility methods for common translations\r\n  tPlural(key: string, count: number, params?: Record<string, any>): string {\r\n    return this.translatePlural(key, count, params);\r\n  }\r\n\r\n  // Get all available translations for a key\r\n  getAllTranslations(key: string): Record<string, string> {\r\n    const result: Record<string, string> = {};\r\n\r\n    for (const locale of this.loadedLocales) {\r\n      const translation = this.translate(key);\r\n      if (translation !== key) {\r\n        result[locale] = translation;\r\n      }\r\n    }\r\n\r\n    return result;\r\n  }\r\n\r\n  // Check if a translation exists\r\n  hasTranslation(key: string): boolean {\r\n    return this.translate(key) !== key;\r\n  }\r\n\r\n  // Get translation keys for a specific locale\r\n  getTranslationKeys(locale: string): string[] {\r\n    const translation = this.translations.get(locale);\r\n    if (!translation) return [];\r\n\r\n    const keys: string[] = [];\r\n    this.extractKeys(translation, \"\", keys);\r\n    return keys;\r\n  }\r\n\r\n  private extractKeys(obj: any, prefix: string, keys: string[]): void {\r\n    for (const [key, value] of Object.entries(obj)) {\r\n      const fullKey = prefix ? `${prefix}.${key}` : key;\r\n\r\n      if (typeof value === \"string\") {\r\n        keys.push(fullKey);\r\n      } else if (typeof value === \"object\" && value !== null) {\r\n        this.extractKeys(value, fullKey, keys);\r\n      }\r\n    }\r\n  }\r\n}\r\n"]}