/** * DashCaddy Internationalization (i18n) — 31 languages * * Translations for dashboard UI and API error messages. * Languages: Arabic, Bengali, Chinese, Czech, Danish, Dutch, English, Finnish, * French, German, Greek, Hindi, Hungarian, Indonesian, Italian, Japanese, Korean, * Malay, Norwegian, Persian, Polish, Portuguese, Romanian, Russian, Spanish, * Swedish, Thai, Turkish, Ukrainian, Urdu, Vietnamese. * * No Hebrew — per project policy. */ const TRANSLATIONS = { en: { // 🇬🇧 English 'dashboard.title': 'Dashboard', 'dashboard.services': 'Services', 'dashboard.containers': 'Containers', 'dashboard.health': 'Health', 'dashboard.settings': 'Settings', 'dashboard.backups': 'Backups', 'dashboard.monitoring': 'Monitoring', 'dashboard.security': 'Security', 'service.status.healthy': 'Healthy', 'service.status.degraded': 'Degraded', 'service.status.down': 'Down', 'service.status.unknown': 'Unknown', 'service.status.pending': 'Pending', 'action.start': 'Start', 'action.stop': 'Stop', 'action.restart': 'Restart', 'action.delete': 'Delete', 'action.update': 'Update', 'action.deploy': 'Deploy', 'action.save': 'Save', 'action.cancel': 'Cancel', 'action.confirm': 'Confirm', 'error.not_found': 'Resource not found', 'error.unauthorized': 'Unauthorized', 'error.forbidden': 'Forbidden', 'error.rate_limited': 'Too many requests', 'error.internal': 'Internal server error', 'error.container_not_found': 'Container not found', 'error.service_not_found': 'Service not found', 'error.invalid_input': 'Invalid input', 'error.docker_unreachable': 'Docker daemon is not reachable', 'error.disk_full': 'Disk space is critically low', 'card.internet': 'Internet', 'card.auth': 'Auth', 'card.tailscale': 'Tailscale', 'card.dashca': 'DashCA', 'card.status.on': 'ON', 'card.status.off': 'OFF', 'card.status.yes': 'YES', 'card.status.no': 'NO', 'card.auth.not_configured': 'Not configured', 'action.open': 'Open', 'action.logs': 'Logs', 'action.settings': 'Settings', 'common.loading': 'Loading…', 'filter.services_placeholder': 'Filter services...', 'filter.all_status': 'All Status', 'filter.online': 'Online', 'filter.offline': 'Offline', 'filter.all_categories': 'All Categories', 'filter.batch_operations': 'Batch Operations', }, ar: { // 🇸🇦 العربية 'dashboard.title': 'لوحة التحكم', 'dashboard.services': 'الخدمات', 'dashboard.containers': 'الحاويات', 'dashboard.health': 'الصحة', 'dashboard.settings': 'الإعدادات', 'dashboard.backups': 'النسخ الاحتياطية', 'dashboard.monitoring': 'المراقبة', 'dashboard.security': 'الأمان', 'service.status.healthy': 'سليم', 'service.status.degraded': 'متدهور', 'service.status.down': 'متوقف', 'service.status.unknown': 'غير معروف', 'service.status.pending': 'قيد الانتظار', 'action.start': 'تشغيل', 'action.stop': 'إيقاف', 'action.restart': 'إعادة تشغيل', 'action.delete': 'حذف', 'action.update': 'تحديث', 'action.deploy': 'نشر', 'action.save': 'حفظ', 'action.cancel': 'إلغاء', 'action.confirm': 'تأكيد', 'error.not_found': 'المورد غير موجود', 'error.unauthorized': 'غير مصرح', 'error.forbidden': 'محظور', 'error.rate_limited': 'طلبات كثيرة جداً', 'error.internal': 'خطأ داخلي في الخادم', 'error.container_not_found': 'الحاوية غير موجودة', 'error.service_not_found': 'الخدمة غير موجودة', 'error.invalid_input': 'إدخال غير صالح', 'error.docker_unreachable': 'لا يمكن الوصول إلى Docker', 'error.disk_full': 'مساحة القرص منخفضة بشكل حرج', 'card.internet': 'Internet', 'card.auth': 'Auth', 'card.tailscale': 'Tailscale', 'card.dashca': 'DashCA', 'card.status.on': 'تشغيل', 'card.status.off': 'إيقاف', 'card.status.yes': 'نعم', 'card.status.no': 'لا', 'card.auth.not_configured': 'غير مُهيأ', 'action.open': 'فتح', 'action.logs': 'السجلات', 'action.settings': 'الإعدادات', 'common.loading': 'جار التحميل…', 'filter.services_placeholder': 'تصفية الخدمات...', 'filter.all_status': 'كل الحالات', 'filter.online': 'متصل', 'filter.offline': 'غير متصل', 'filter.all_categories': 'كل الفئات', 'filter.batch_operations': 'عمليات دفعية', }, bn: { // 🇧🇩 বাংলা 'dashboard.title': 'ড্যাশবোর্ড', 'dashboard.services': 'পরিষেবা', 'dashboard.containers': 'কন্টেইনার', 'dashboard.health': 'স্বাস্থ্য', 'dashboard.settings': 'সেটিংস', 'dashboard.backups': 'ব্যাকআপ', 'dashboard.monitoring': 'নিরীক্ষণ', 'dashboard.security': 'নিরাপত্তা', 'service.status.healthy': 'সুস্থ', 'service.status.degraded': 'অবনমিত', 'service.status.down': 'বন্ধ', 'service.status.unknown': 'অজানা', 'service.status.pending': 'মুলতুবি', 'action.start': 'শুরু', 'action.stop': 'বন্ধ', 'action.restart': 'পুনরায় চালু', 'action.delete': 'মুছুন', 'action.update': 'আপডেট', 'action.deploy': 'স্থাপন', 'action.save': 'সংরক্ষণ', 'action.cancel': 'বাতিল', 'action.confirm': 'নিশ্চিত করুন', 'error.not_found': 'সম্পদ পাওয়া যায়নি', 'error.unauthorized': 'অননুমোদিত', 'error.forbidden': 'নিষিদ্ধ', 'error.rate_limited': 'অনেক বেশি অনুরোধ', 'error.internal': 'অভ্যন্তরীণ সার্ভার ত্রুটি', 'error.container_not_found': 'কন্টেইনার পাওয়া যায়নি', 'error.service_not_found': 'পরিষেবা পাওয়া যায়নি', 'error.invalid_input': 'অবৈধ ইনপুট', 'error.docker_unreachable': 'Docker ডেমনে পৌঁছানো যাচ্ছে না', 'error.disk_full': 'ডিস্ক স্থান সংকটজনকভাবে কম', 'card.internet': 'Internet', 'card.auth': 'Auth', 'card.tailscale': 'Tailscale', 'card.dashca': 'DashCA', 'card.status.on': 'চালু', 'card.status.off': 'বন্ধ', 'card.status.yes': 'হ্যাঁ', 'card.status.no': 'না', 'card.auth.not_configured': 'কনফিগার করা হয়নি', 'action.open': 'খুলুন', 'action.logs': 'লগ', 'action.settings': 'সেটিংস', 'common.loading': 'লোড হচ্ছে…', 'filter.services_placeholder': 'পরিষেবা ফিল্টার করুন...', 'filter.all_status': 'সব অবস্থা', 'filter.online': 'অনলাইন', 'filter.offline': 'অফলাইন', 'filter.all_categories': 'সব বিভাগ', 'filter.batch_operations': 'ব্যাচ অপারেশন', }, cs: { // 🇨🇿 Čeština 'dashboard.title': 'Nástěnka', 'dashboard.services': 'Služby', 'dashboard.containers': 'Kontejnery', 'dashboard.health': 'Stav', 'dashboard.settings': 'Nastavení', 'dashboard.backups': 'Zálohy', 'dashboard.monitoring': 'Sledování', 'dashboard.security': 'Zabezpečení', 'service.status.healthy': 'Zdravý', 'service.status.degraded': 'Zhoršený', 'service.status.down': 'Nedostupný', 'service.status.unknown': 'Neznámý', 'service.status.pending': 'Čeká', 'action.start': 'Spustit', 'action.stop': 'Zastavit', 'action.restart': 'Restartovat', 'action.delete': 'Smazat', 'action.update': 'Aktualizovat', 'action.deploy': 'Nasadit', 'action.save': 'Uložit', 'action.cancel': 'Zrušit', 'action.confirm': 'Potvrdit', 'error.not_found': 'Zdroj nenalezen', 'error.unauthorized': 'Neoprávněno', 'error.forbidden': 'Zakázáno', 'error.rate_limited': 'Příliš mnoho požadavků', 'error.internal': 'Interní chyba serveru', 'error.container_not_found': 'Kontejner nenalezen', 'error.service_not_found': 'Služba nenalezena', 'error.invalid_input': 'Neplatný vstup', 'error.docker_unreachable': 'Docker daemon není dostupný', 'error.disk_full': 'Místo na disku je kriticky nízké', 'card.internet': 'Internet', 'card.auth': 'Auth', 'card.tailscale': 'Tailscale', 'card.dashca': 'DashCA', 'card.status.on': 'ZAP', 'card.status.off': 'VYP', 'card.status.yes': 'ANO', 'card.status.no': 'NE', 'card.auth.not_configured': 'Nenakonfigurováno', 'action.open': 'Otevřít', 'action.logs': 'Záznamy', 'action.settings': 'Nastavení', 'common.loading': 'Načítání…', 'filter.services_placeholder': 'Filtrovat služby...', 'filter.all_status': 'Všechny stavy', 'filter.online': 'Online', 'filter.offline': 'Offline', 'filter.all_categories': 'Všechny kategorie', 'filter.batch_operations': 'Hromadné operace', }, da: { // 🇩🇰 Dansk 'dashboard.title': 'Instrumentbræt', 'dashboard.services': 'Tjenester', 'dashboard.containers': 'Containere', 'dashboard.health': 'Sundhed', 'dashboard.settings': 'Indstillinger', 'dashboard.backups': 'Sikkerhedskopier', 'dashboard.monitoring': 'Overvågning', 'dashboard.security': 'Sikkerhed', 'service.status.healthy': 'Sund', 'service.status.degraded': 'Forringet', 'service.status.down': 'Nede', 'service.status.unknown': 'Ukendt', 'service.status.pending': 'Afventer', 'action.start': 'Start', 'action.stop': 'Stop', 'action.restart': 'Genstart', 'action.delete': 'Slet', 'action.update': 'Opdater', 'action.deploy': 'Udrul', 'action.save': 'Gem', 'action.cancel': 'Annuller', 'action.confirm': 'Bekræft', 'error.not_found': 'Ressource ikke fundet', 'error.unauthorized': 'Ikke autoriseret', 'error.forbidden': 'Forbudt', 'error.rate_limited': 'For mange anmodninger', 'error.internal': 'Intern serverfejl', 'error.container_not_found': 'Container ikke fundet', 'error.service_not_found': 'Tjeneste ikke fundet', 'error.invalid_input': 'Ugyldigt input', 'error.docker_unreachable': 'Docker-daemon er ikke tilgængelig', 'error.disk_full': 'Diskpladsen er kritisk lav', 'card.internet': 'Internet', 'card.auth': 'Auth', 'card.tailscale': 'Tailscale', 'card.dashca': 'DashCA', 'card.status.on': 'TIL', 'card.status.off': 'FRA', 'card.status.yes': 'JA', 'card.status.no': 'NEJ', 'card.auth.not_configured': 'Ikke konfigureret', 'action.open': 'Åbn', 'action.logs': 'Logfiler', 'action.settings': 'Indstillinger', 'common.loading': 'Indlæser…', 'filter.services_placeholder': 'Filtrer tjenester...', 'filter.all_status': 'Alle statusser', 'filter.online': 'Online', 'filter.offline': 'Offline', 'filter.all_categories': 'Alle kategorier', 'filter.batch_operations': 'Batchhandlinger', }, de: { // 🇩🇪 Deutsch 'dashboard.title': 'Dashboard', 'dashboard.services': 'Dienste', 'dashboard.containers': 'Container', 'dashboard.health': 'Zustand', 'dashboard.settings': 'Einstellungen', 'dashboard.backups': 'Backups', 'dashboard.monitoring': 'Überwachung', 'dashboard.security': 'Sicherheit', 'service.status.healthy': 'Gesund', 'service.status.degraded': 'Beeinträchtigt', 'service.status.down': 'Ausgefallen', 'service.status.unknown': 'Unbekannt', 'service.status.pending': 'Ausstehend', 'action.start': 'Starten', 'action.stop': 'Stopp', 'action.restart': 'Neustart', 'action.delete': 'Löschen', 'action.update': 'Aktualisieren', 'action.deploy': 'Bereitstellen', 'action.save': 'Speichern', 'action.cancel': 'Abbrechen', 'action.confirm': 'Bestätigen', 'error.not_found': 'Ressource nicht gefunden', 'error.unauthorized': 'Nicht autorisiert', 'error.forbidden': 'Verboten', 'error.rate_limited': 'Zu viele Anfragen', 'error.internal': 'Interner Serverfehler', 'error.container_not_found': 'Container nicht gefunden', 'error.service_not_found': 'Dienst nicht gefunden', 'error.invalid_input': 'Ungültige Eingabe', 'error.docker_unreachable': 'Docker-Daemon ist nicht erreichbar', 'error.disk_full': 'Speicherplatz kritisch niedrig', 'card.internet': 'Internet', 'card.auth': 'Auth', 'card.tailscale': 'Tailscale', 'card.dashca': 'DashCA', 'card.status.on': 'AN', 'card.status.off': 'AUS', 'card.status.yes': 'JA', 'card.status.no': 'NEIN', 'card.auth.not_configured': 'Nicht konfiguriert', 'action.open': 'Öffnen', 'action.logs': 'Protokolle', 'action.settings': 'Einstellungen', 'common.loading': 'Laden…', 'filter.services_placeholder': 'Dienste filtern...', 'filter.all_status': 'Alle Status', 'filter.online': 'Online', 'filter.offline': 'Offline', 'filter.all_categories': 'Alle Kategorien', 'filter.batch_operations': 'Stapeloperationen', }, el: { // 🇬🇷 Ελληνικά 'dashboard.title': 'Πίνακας ελέγχου', 'dashboard.services': 'Υπηρεσίες', 'dashboard.containers': 'Κοντέινερ', 'dashboard.health': 'Υγεία', 'dashboard.settings': 'Ρυθμίσεις', 'dashboard.backups': 'Αντίγραφα ασφαλείας', 'dashboard.monitoring': 'Παρακολούθηση', 'dashboard.security': 'Ασφάλεια', 'service.status.healthy': 'Υγιής', 'service.status.degraded': 'Υποβαθμισμένος', 'service.status.down': 'Κάτω', 'service.status.unknown': 'Άγνωστος', 'service.status.pending': 'Εκκρεμής', 'action.start': 'Έναρξη', 'action.stop': 'Διακοπή', 'action.restart': 'Επανεκκίνηση', 'action.delete': 'Διαγραφή', 'action.update': 'Ενημέρωση', 'action.deploy': 'Ανάπτυξη', 'action.save': 'Αποθήκευση', 'action.cancel': 'Ακύρωση', 'action.confirm': 'Επιβεβαίωση', 'error.not_found': 'Ο πόρος δεν βρέθηκε', 'error.unauthorized': 'Μη εξουσιοδοτημένος', 'error.forbidden': 'Απαγορευμένο', 'error.rate_limited': 'Πάρα πολλά αιτήματα', 'error.internal': 'Εσωτερικό σφάλμα διακομιστή', 'error.container_not_found': 'Το κοντέινερ δεν βρέθηκε', 'error.service_not_found': 'Η υπηρεσία δεν βρέθηκε', 'error.invalid_input': 'Μη έγκυρη είσοδος', 'error.docker_unreachable': 'Ο δαίμονας Docker δεν είναι προσβάσιμος', 'error.disk_full': 'Ο χώρος δίσκου είναι κρίσιμα χαμηλός', 'card.internet': 'Internet', 'card.auth': 'Auth', 'card.tailscale': 'Tailscale', 'card.dashca': 'DashCA', 'card.status.on': 'ΕΝΕΡΓ', 'card.status.off': 'ΑΝΕΝ', 'card.status.yes': 'ΝΑΙ', 'card.status.no': 'ΟΧΙ', 'card.auth.not_configured': 'Δεν έχει ρυθμιστεί', 'action.open': 'Άνοιγμα', 'action.logs': 'Καταγραφές', 'action.settings': 'Ρυθμίσεις', 'common.loading': 'Φόρτωση…', 'filter.services_placeholder': 'Φιλτράρισμα υπηρεσιών...', 'filter.all_status': 'Όλες οι καταστάσεις', 'filter.online': 'Σε σύνδεση', 'filter.offline': 'Εκτός σύνδεσης', 'filter.all_categories': 'Όλες οι κατηγορίες', 'filter.batch_operations': 'Μαζικές λειτουργίες', }, es: { // 🇪🇸 Español 'dashboard.title': 'Panel de control', 'dashboard.services': 'Servicios', 'dashboard.containers': 'Contenedores', 'dashboard.health': 'Salud', 'dashboard.settings': 'Configuración', 'dashboard.backups': 'Copias de seguridad', 'dashboard.monitoring': 'Monitoreo', 'dashboard.security': 'Seguridad', 'service.status.healthy': 'Saludable', 'service.status.degraded': 'Degradado', 'service.status.down': 'Caído', 'service.status.unknown': 'Desconocido', 'service.status.pending': 'Pendiente', 'action.start': 'Iniciar', 'action.stop': 'Detener', 'action.restart': 'Reiniciar', 'action.delete': 'Eliminar', 'action.update': 'Actualizar', 'action.deploy': 'Desplegar', 'action.save': 'Guardar', 'action.cancel': 'Cancelar', 'action.confirm': 'Confirmar', 'error.not_found': 'Recurso no encontrado', 'error.unauthorized': 'No autorizado', 'error.forbidden': 'Prohibido', 'error.rate_limited': 'Demasiadas solicitudes', 'error.internal': 'Error interno del servidor', 'error.container_not_found': 'Contenedor no encontrado', 'error.service_not_found': 'Servicio no encontrado', 'error.invalid_input': 'Entrada inválida', 'error.docker_unreachable': 'El demonio de Docker no es accesible', 'error.disk_full': 'Espacio en disco críticamente bajo', 'card.internet': 'Internet', 'card.auth': 'Auth', 'card.tailscale': 'Tailscale', 'card.dashca': 'DashCA', 'card.status.on': 'ENC', 'card.status.off': 'APAG', 'card.status.yes': 'SÍ', 'card.status.no': 'NO', 'card.auth.not_configured': 'Sin configurar', 'action.open': 'Abrir', 'action.logs': 'Registros', 'action.settings': 'Configuración', 'common.loading': 'Cargando…', 'filter.services_placeholder': 'Filtrar servicios...', 'filter.all_status': 'Todos los estados', 'filter.online': 'En línea', 'filter.offline': 'Sin conexión', 'filter.all_categories': 'Todas las categorías', 'filter.batch_operations': 'Operaciones por lotes', }, fa: { // 🇮🇷 فارسی 'dashboard.title': 'داشبورد', 'dashboard.services': 'سرویس‌ها', 'dashboard.containers': 'کانتینرها', 'dashboard.health': 'سلامت', 'dashboard.settings': 'تنظیمات', 'dashboard.backups': 'پشتیبان‌گیری', 'dashboard.monitoring': 'نظارت', 'dashboard.security': 'امنیت', 'service.status.healthy': 'سالم', 'service.status.degraded': 'تنزل‌یافته', 'service.status.down': 'خراب', 'service.status.unknown': 'نامشخص', 'service.status.pending': 'در انتظار', 'action.start': 'شروع', 'action.stop': 'توقف', 'action.restart': 'راه‌اندازی مجدد', 'action.delete': 'حذف', 'action.update': 'به‌روزرسانی', 'action.deploy': 'استقرار', 'action.save': 'ذخیره', 'action.cancel': 'لغو', 'action.confirm': 'تأیید', 'error.not_found': 'منبع یافت نشد', 'error.unauthorized': 'غیرمجاز', 'error.forbidden': 'ممنوع', 'error.rate_limited': 'درخواست‌های بیش از حد', 'error.internal': 'خطای داخلی سرور', 'error.container_not_found': 'کانتینر یافت نشد', 'error.service_not_found': 'سرویس یافت نشد', 'error.invalid_input': 'ورودی نامعتبر', 'error.docker_unreachable': 'دسترسی به Docker daemon ممکن نیست', 'error.disk_full': 'فضای دیسک به‌طور بحرانی کم است', 'card.internet': 'Internet', 'card.auth': 'Auth', 'card.tailscale': 'Tailscale', 'card.dashca': 'DashCA', 'card.status.on': 'روشن', 'card.status.off': 'خاموش', 'card.status.yes': 'بله', 'card.status.no': 'خیر', 'card.auth.not_configured': 'پیکربندی نشده', 'action.open': 'باز کردن', 'action.logs': 'گزارش‌ها', 'action.settings': 'تنظیمات', 'common.loading': 'در حال بارگذاری…', 'filter.services_placeholder': 'فیلتر خدمات...', 'filter.all_status': 'همه وضعیت‌ها', 'filter.online': 'آنلاین', 'filter.offline': 'آفلاین', 'filter.all_categories': 'همه دسته‌ها', 'filter.batch_operations': 'عملیات دسته‌ای', }, fi: { // 🇫🇮 Suomi 'dashboard.title': 'Ohjauspaneeli', 'dashboard.services': 'Palvelut', 'dashboard.containers': 'Kontainerit', 'dashboard.health': 'Terveys', 'dashboard.settings': 'Asetukset', 'dashboard.backups': 'Varmuuskopiot', 'dashboard.monitoring': 'Valvonta', 'dashboard.security': 'Turvallisuus', 'service.status.healthy': 'Terve', 'service.status.degraded': 'Heikentynyt', 'service.status.down': 'Alhaalla', 'service.status.unknown': 'Tuntematon', 'service.status.pending': 'Odottaa', 'action.start': 'Käynnistä', 'action.stop': 'Pysäytä', 'action.restart': 'Käynnistä uudelleen', 'action.delete': 'Poista', 'action.update': 'Päivitä', 'action.deploy': 'Käyttöönotto', 'action.save': 'Tallenna', 'action.cancel': 'Peruuta', 'action.confirm': 'Vahvista', 'error.not_found': 'Resurssia ei löytynyt', 'error.unauthorized': 'Ei valtuutettu', 'error.forbidden': 'Kielletty', 'error.rate_limited': 'Liian monta pyyntöä', 'error.internal': 'Sisäinen palvelinvirhe', 'error.container_not_found': 'Kontaineria ei löytynyt', 'error.service_not_found': 'Palvelua ei löytynyt', 'error.invalid_input': 'Virheellinen syöte', 'error.docker_unreachable': 'Docker-daemoniin ei saada yhteyttä', 'error.disk_full': 'Levytila on kriittisesti vähissä', 'card.internet': 'Internet', 'card.auth': 'Auth', 'card.tailscale': 'Tailscale', 'card.dashca': 'DashCA', 'card.status.on': 'PÄÄLLÄ', 'card.status.off': 'POIS', 'card.status.yes': 'KYLLÄ', 'card.status.no': 'EI', 'card.auth.not_configured': 'Ei määritetty', 'action.open': 'Avaa', 'action.logs': 'Lokit', 'action.settings': 'Asetukset', 'common.loading': 'Ladataan…', 'filter.services_placeholder': 'Suodata palveluita...', 'filter.all_status': 'Kaikki tilat', 'filter.online': 'Paikallaan', 'filter.offline': 'Poissa', 'filter.all_categories': 'Kaikki luokat', 'filter.batch_operations': 'Erätoiminnot', }, fr: { // 🇫🇷 Français 'dashboard.title': 'Tableau de bord', 'dashboard.services': 'Services', 'dashboard.containers': 'Conteneurs', 'dashboard.health': 'Santé', 'dashboard.settings': 'Paramètres', 'dashboard.backups': 'Sauvegardes', 'dashboard.monitoring': 'Surveillance', 'dashboard.security': 'Sécurité', 'service.status.healthy': 'Sain', 'service.status.degraded': 'Dégradé', 'service.status.down': 'Hors ligne', 'service.status.unknown': 'Inconnu', 'service.status.pending': 'En attente', 'action.start': 'Démarrer', 'action.stop': 'Arrêter', 'action.restart': 'Redémarrer', 'action.delete': 'Supprimer', 'action.update': 'Mettre à jour', 'action.deploy': 'Déployer', 'action.save': 'Enregistrer', 'action.cancel': 'Annuler', 'action.confirm': 'Confirmer', 'error.not_found': 'Ressource introuvable', 'error.unauthorized': 'Non autorisé', 'error.forbidden': 'Interdit', 'error.rate_limited': 'Trop de requêtes', 'error.internal': 'Erreur interne du serveur', 'error.container_not_found': 'Conteneur introuvable', 'error.service_not_found': 'Service introuvable', 'error.invalid_input': 'Entrée invalide', 'error.docker_unreachable': 'Le démon Docker est injoignable', 'error.disk_full': 'Espace disque critique', 'card.internet': 'Internet', 'card.auth': 'Auth', 'card.tailscale': 'Tailscale', 'card.dashca': 'DashCA', 'card.status.on': 'ALLUMÉ', 'card.status.off': 'ÉTEINT', 'card.status.yes': 'OUI', 'card.status.no': 'NON', 'card.auth.not_configured': 'Non configuré', 'action.open': 'Ouvrir', 'action.logs': 'Journaux', 'action.settings': 'Paramètres', 'common.loading': 'Chargement…', 'filter.services_placeholder': 'Filtrer les services...', 'filter.all_status': 'Tous les statuts', 'filter.online': 'En ligne', 'filter.offline': 'Hors ligne', 'filter.all_categories': 'Toutes les catégories', 'filter.batch_operations': 'Opérations par lot', }, hi: { // 🇮🇳 हिन्दी 'dashboard.title': 'डैशबोर्ड', 'dashboard.services': 'सेवाएं', 'dashboard.containers': 'कंटेनर', 'dashboard.health': 'स्वास्थ्य', 'dashboard.settings': 'सेटिंग्स', 'dashboard.backups': 'बैकअप', 'dashboard.monitoring': 'निगरानी', 'dashboard.security': 'सुरक्षा', 'service.status.healthy': 'स्वस्थ', 'service.status.degraded': 'क्षतिग्रस्त', 'service.status.down': 'बंद', 'service.status.unknown': 'अज्ञात', 'service.status.pending': 'लंबित', 'action.start': 'शुरू करें', 'action.stop': 'रोकें', 'action.restart': 'पुनर्प्रारंभ', 'action.delete': 'हटाएं', 'action.update': 'अपडेट', 'action.deploy': 'तैनात', 'action.save': 'सहेजें', 'action.cancel': 'रद्द करें', 'action.confirm': 'पुष्टि करें', 'error.not_found': 'संसाधन नहीं मिला', 'error.unauthorized': 'अनधिकृत', 'error.forbidden': 'निषिद्ध', 'error.rate_limited': 'बहुत अधिक अनुरोध', 'error.internal': 'आंतरिक सर्वर त्रुटि', 'error.container_not_found': 'कंटेनर नहीं मिला', 'error.service_not_found': 'सेवा नहीं मिली', 'error.invalid_input': 'अमान्य इनपुट', 'error.docker_unreachable': 'Docker डेमन तक नहीं पहुंच सकते', 'error.disk_full': 'डिस्क स्थान गंभीर रूप से कम है', 'card.internet': 'Internet', 'card.auth': 'Auth', 'card.tailscale': 'Tailscale', 'card.dashca': 'DashCA', 'card.status.on': 'चालू', 'card.status.off': 'बंद', 'card.status.yes': 'हाँ', 'card.status.no': 'नहीं', 'card.auth.not_configured': 'कॉन्फ़िगर नहीं किया गया', 'action.open': 'खोलें', 'action.logs': 'लॉग', 'action.settings': 'सेटिंग्स', 'common.loading': 'लोड हो रहा है…', 'filter.services_placeholder': 'सेवाएं फ़िल्टर करें...', 'filter.all_status': 'सभी स्थिति', 'filter.online': 'ऑनलाइन', 'filter.offline': 'ऑफ़लाइन', 'filter.all_categories': 'सभी श्रेणियाँ', 'filter.batch_operations': 'बैच संचालन', }, hu: { // 🇭🇺 Magyar 'dashboard.title': 'Vezérlőpult', 'dashboard.services': 'Szolgáltatások', 'dashboard.containers': 'Konténerek', 'dashboard.health': 'Állapot', 'dashboard.settings': 'Beállítások', 'dashboard.backups': 'Biztonsági mentések', 'dashboard.monitoring': 'Figyelés', 'dashboard.security': 'Biztonság', 'service.status.healthy': 'Egészséges', 'service.status.degraded': 'Csökkentett', 'service.status.down': 'Leállt', 'service.status.unknown': 'Ismeretlen', 'service.status.pending': 'Függőben', 'action.start': 'Indítás', 'action.stop': 'Leállítás', 'action.restart': 'Újraindítás', 'action.delete': 'Törlés', 'action.update': 'Frissítés', 'action.deploy': 'Telepítés', 'action.save': 'Mentés', 'action.cancel': 'Mégse', 'action.confirm': 'Megerősítés', 'error.not_found': 'Az erőforrás nem található', 'error.unauthorized': 'Nem engedélyezett', 'error.forbidden': 'Tiltott', 'error.rate_limited': 'Túl sok kérés', 'error.internal': 'Belső kiszolgálóhiba', 'error.container_not_found': 'A konténer nem található', 'error.service_not_found': 'A szolgáltatás nem található', 'error.invalid_input': 'Érvénytelen bemenet', 'error.docker_unreachable': 'A Docker démon nem érhető el', 'error.disk_full': 'A lemezterület kritikusan alacsony', 'card.internet': 'Internet', 'card.auth': 'Auth', 'card.tailscale': 'Tailscale', 'card.dashca': 'DashCA', 'card.status.on': 'BE', 'card.status.off': 'KI', 'card.status.yes': 'IGEN', 'card.status.no': 'NEM', 'card.auth.not_configured': 'Nincs beállítva', 'action.open': 'Megnyitás', 'action.logs': 'Naplók', 'action.settings': 'Beállítások', 'common.loading': 'Betöltés…', 'filter.services_placeholder': 'Szolgáltatások szűrése...', 'filter.all_status': 'Összes állapot', 'filter.online': 'Online', 'filter.offline': 'Offline', 'filter.all_categories': 'Összes kategória', 'filter.batch_operations': 'Tömeges műveletek', }, id: { // 🇮🇩 Indonesia 'dashboard.title': 'Dasbor', 'dashboard.services': 'Layanan', 'dashboard.containers': 'Kontainer', 'dashboard.health': 'Kesehatan', 'dashboard.settings': 'Pengaturan', 'dashboard.backups': 'Pencadangan', 'dashboard.monitoring': 'Pemantauan', 'dashboard.security': 'Keamanan', 'service.status.healthy': 'Sehat', 'service.status.degraded': 'Terkikis', 'service.status.down': 'Mati', 'service.status.unknown': 'Tidak diketahui', 'service.status.pending': 'Tertunda', 'action.start': 'Mulai', 'action.stop': 'Berhenti', 'action.restart': 'Mulai ulang', 'action.delete': 'Hapus', 'action.update': 'Perbarui', 'action.deploy': 'Sebarkan', 'action.save': 'Simpan', 'action.cancel': 'Batal', 'action.confirm': 'Konfirmasi', 'error.not_found': 'Sumber daya tidak ditemukan', 'error.unauthorized': 'Tidak berwenang', 'error.forbidden': 'Dilarang', 'error.rate_limited': 'Terlalu banyak permintaan', 'error.internal': 'Kesalahan server internal', 'error.container_not_found': 'Kontainer tidak ditemukan', 'error.service_not_found': 'Layanan tidak ditemukan', 'error.invalid_input': 'Input tidak valid', 'error.docker_unreachable': 'Daemon Docker tidak dapat dijangkau', 'error.disk_full': 'Ruang disk sangat rendah', 'card.internet': 'Internet', 'card.auth': 'Auth', 'card.tailscale': 'Tailscale', 'card.dashca': 'DashCA', 'card.status.on': 'HIDUP', 'card.status.off': 'MATI', 'card.status.yes': 'YA', 'card.status.no': 'TIDAK', 'card.auth.not_configured': 'Belum dikonfigurasi', 'action.open': 'Buka', 'action.logs': 'Log', 'action.settings': 'Pengaturan', 'common.loading': 'Memuat…', 'filter.services_placeholder': 'Filter layanan...', 'filter.all_status': 'Semua Status', 'filter.online': 'Daring', 'filter.offline': 'Luring', 'filter.all_categories': 'Semua Kategori', 'filter.batch_operations': 'Operasi Batch', }, it: { // 🇮🇹 Italiano 'dashboard.title': 'Cruscotto', 'dashboard.services': 'Servizi', 'dashboard.containers': 'Contenitori', 'dashboard.health': 'Salute', 'dashboard.settings': 'Impostazioni', 'dashboard.backups': 'Backup', 'dashboard.monitoring': 'Monitoraggio', 'dashboard.security': 'Sicurezza', 'service.status.healthy': 'Salutare', 'service.status.degraded': 'Danneggiato', 'service.status.down': 'Inattivo', 'service.status.unknown': 'Sconosciuto', 'service.status.pending': 'In attesa', 'action.start': 'Avvia', 'action.stop': 'Ferma', 'action.restart': 'Riavvia', 'action.delete': 'Elimina', 'action.update': 'Aggiorna', 'action.deploy': 'Distribuisci', 'action.save': 'Salva', 'action.cancel': 'Annulla', 'action.confirm': 'Conferma', 'error.not_found': 'Risorsa non trovata', 'error.unauthorized': 'Non autorizzato', 'error.forbidden': 'Vietato', 'error.rate_limited': 'Troppe richieste', 'error.internal': 'Errore interno del server', 'error.container_not_found': 'Contenitore non trovato', 'error.service_not_found': 'Servizio non trovato', 'error.invalid_input': 'Input non valido', 'error.docker_unreachable': 'Il daemon Docker non è raggiungibile', 'error.disk_full': 'Spazio su disco criticamente basso', 'card.internet': 'Internet', 'card.auth': 'Auth', 'card.tailscale': 'Tailscale', 'card.dashca': 'DashCA', 'card.status.on': 'ON', 'card.status.off': 'OFF', 'card.status.yes': 'SÌ', 'card.status.no': 'NO', 'card.auth.not_configured': 'Non configurato', 'action.open': 'Apri', 'action.logs': 'Log', 'action.settings': 'Impostazioni', 'common.loading': 'Caricamento…', 'filter.services_placeholder': 'Filtra servizi...', 'filter.all_status': 'Tutti gli stati', 'filter.online': 'Online', 'filter.offline': 'Offline', 'filter.all_categories': 'Tutte le categorie', 'filter.batch_operations': 'Operazioni batch', }, ja: { // 🇯🇵 日本語 'dashboard.title': 'ダッシュボード', 'dashboard.services': 'サービス', 'dashboard.containers': 'コンテナ', 'dashboard.health': 'ヘルス', 'dashboard.settings': '設定', 'dashboard.backups': 'バックアップ', 'dashboard.monitoring': '監視', 'dashboard.security': 'セキュリティ', 'service.status.healthy': '正常', 'service.status.degraded': '低下', 'service.status.down': '停止', 'service.status.unknown': '不明', 'service.status.pending': '保留中', 'action.start': '開始', 'action.stop': '停止', 'action.restart': '再起動', 'action.delete': '削除', 'action.update': '更新', 'action.deploy': 'デプロイ', 'action.save': '保存', 'action.cancel': 'キャンセル', 'action.confirm': '確認', 'error.not_found': 'リソースが見つかりません', 'error.unauthorized': '認証されていません', 'error.forbidden': '禁止されています', 'error.rate_limited': 'リクエストが多すぎます', 'error.internal': '内部サーバーエラー', 'error.container_not_found': 'コンテナが見つかりません', 'error.service_not_found': 'サービスが見つかりません', 'error.invalid_input': '無効な入力', 'error.docker_unreachable': 'Dockerデーモンに接続できません', 'error.disk_full': 'ディスク容量が致命的に不足しています', 'card.internet': 'Internet', 'card.auth': 'Auth', 'card.tailscale': 'Tailscale', 'card.dashca': 'DashCA', 'card.status.on': 'オン', 'card.status.off': 'オフ', 'card.status.yes': 'はい', 'card.status.no': 'いいえ', 'card.auth.not_configured': '未設定', 'action.open': '開く', 'action.logs': 'ログ', 'action.settings': '設定', 'common.loading': '読み込み中…', 'filter.services_placeholder': 'サービスを絞り込む...', 'filter.all_status': 'すべてのステータス', 'filter.online': 'オンライン', 'filter.offline': 'オフライン', 'filter.all_categories': 'すべてのカテゴリ', 'filter.batch_operations': '一括操作', }, ko: { // 🇰🇷 한국어 'dashboard.title': '대시보드', 'dashboard.services': '서비스', 'dashboard.containers': '컨테이너', 'dashboard.health': '상태', 'dashboard.settings': '설정', 'dashboard.backups': '백업', 'dashboard.monitoring': '모니터링', 'dashboard.security': '보안', 'service.status.healthy': '정상', 'service.status.degraded': '성능 저하', 'service.status.down': '중단', 'service.status.unknown': '알 수 없음', 'service.status.pending': '대기 중', 'action.start': '시작', 'action.stop': '중지', 'action.restart': '재시작', 'action.delete': '삭제', 'action.update': '업데이트', 'action.deploy': '배포', 'action.save': '저장', 'action.cancel': '취소', 'action.confirm': '확인', 'error.not_found': '리소스를 찾을 수 없습니다', 'error.unauthorized': '인증되지 않음', 'error.forbidden': '금지됨', 'error.rate_limited': '요청이 너무 많습니다', 'error.internal': '내부 서버 오류', 'error.container_not_found': '컨테이너를 찾을 수 없습니다', 'error.service_not_found': '서비스를 찾을 수 없습니다', 'error.invalid_input': '잘못된 입력', 'error.docker_unreachable': 'Docker 데몬에 연결할 수 없습니다', 'error.disk_full': '디스크 공간이 심각하게 부족합니다', 'card.internet': 'Internet', 'card.auth': 'Auth', 'card.tailscale': 'Tailscale', 'card.dashca': 'DashCA', 'card.status.on': '켜짐', 'card.status.off': '꺼짐', 'card.status.yes': '예', 'card.status.no': '아니오', 'card.auth.not_configured': '설정되지 않음', 'action.open': '열기', 'action.logs': '로그', 'action.settings': '설정', 'common.loading': '로딩 중…', 'filter.services_placeholder': '서비스 필터...', 'filter.all_status': '모든 상태', 'filter.online': '온라인', 'filter.offline': '오프라인', 'filter.all_categories': '모든 카테고리', 'filter.batch_operations': '일괄 작업', }, ms: { // 🇲🇾 Melayu 'dashboard.title': 'Papan pemuka', 'dashboard.services': 'Perkhidmatan', 'dashboard.containers': 'Bekas', 'dashboard.health': 'Kesihatan', 'dashboard.settings': 'Tetapan', 'dashboard.backups': 'Sandaran', 'dashboard.monitoring': 'Pemantauan', 'dashboard.security': 'Keselamatan', 'service.status.healthy': 'Sihat', 'service.status.degraded': 'Merosot', 'service.status.down': 'Tergendala', 'service.status.unknown': 'Tidak diketahui', 'service.status.pending': 'Belum selesai', 'action.start': 'Mula', 'action.stop': 'Berhenti', 'action.restart': 'Mulakan semula', 'action.delete': 'Padam', 'action.update': 'Kemas kini', 'action.deploy': 'Lancarkan', 'action.save': 'Simpan', 'action.cancel': 'Batal', 'action.confirm': 'Sahkan', 'error.not_found': 'Sumber tidak dijumpai', 'error.unauthorized': 'Tidak dibenarkan', 'error.forbidden': 'Dilarang', 'error.rate_limited': 'Terlalu banyak permintaan', 'error.internal': 'Ralat pelayan dalaman', 'error.container_not_found': 'Bekas tidak dijumpai', 'error.service_not_found': 'Perkhidmatan tidak dijumpai', 'error.invalid_input': 'Input tidak sah', 'error.docker_unreachable': 'Docker daemon tidak dapat dijangkau', 'error.disk_full': 'Ruang cakera sangat kritikal', 'card.internet': 'Internet', 'card.auth': 'Auth', 'card.tailscale': 'Tailscale', 'card.dashca': 'DashCA', 'card.status.on': 'HIDUP', 'card.status.off': 'MATI', 'card.status.yes': 'YA', 'card.status.no': 'TIDAK', 'card.auth.not_configured': 'Tidak dikonfigurasikan', 'action.open': 'Buka', 'action.logs': 'Log', 'action.settings': 'Tetapan', 'common.loading': 'Memuatkan…', 'filter.services_placeholder': 'Tapis perkhidmatan...', 'filter.all_status': 'Semua Status', 'filter.online': 'Dalam talian', 'filter.offline': 'Luar talian', 'filter.all_categories': 'Semua Kategori', 'filter.batch_operations': 'Operasi Kelompok', }, nl: { // 🇳🇱 Nederlands 'dashboard.title': 'Dashboard', 'dashboard.services': 'Diensten', 'dashboard.containers': 'Containers', 'dashboard.health': 'Status', 'dashboard.settings': 'Instellingen', 'dashboard.backups': 'Backups', 'dashboard.monitoring': 'Bewaking', 'dashboard.security': 'Beveiliging', 'service.status.healthy': 'Gezond', 'service.status.degraded': 'Achteruitgegaan', 'service.status.down': 'Offline', 'service.status.unknown': 'Onbekend', 'service.status.pending': 'In afwachting', 'action.start': 'Starten', 'action.stop': 'Stoppen', 'action.restart': 'Herstarten', 'action.delete': 'Verwijderen', 'action.update': 'Bijwerken', 'action.deploy': 'Uitrollen', 'action.save': 'Opslaan', 'action.cancel': 'Annuleren', 'action.confirm': 'Bevestigen', 'error.not_found': 'Bron niet gevonden', 'error.unauthorized': 'Niet geautoriseerd', 'error.forbidden': 'Verboden', 'error.rate_limited': 'Te veel verzoeken', 'error.internal': 'Interne serverfout', 'error.container_not_found': 'Container niet gevonden', 'error.service_not_found': 'Dienst niet gevonden', 'error.invalid_input': 'Ongeldige invoer', 'error.docker_unreachable': 'Docker-daemon is niet bereikbaar', 'error.disk_full': 'Schijfruimte kritiek laag', 'card.internet': 'Internet', 'card.auth': 'Auth', 'card.tailscale': 'Tailscale', 'card.dashca': 'DashCA', 'card.status.on': 'AAN', 'card.status.off': 'UIT', 'card.status.yes': 'JA', 'card.status.no': 'NEE', 'card.auth.not_configured': 'Niet geconfigureerd', 'action.open': 'Openen', 'action.logs': 'Logboeken', 'action.settings': 'Instellingen', 'common.loading': 'Laden…', 'filter.services_placeholder': 'Services filteren...', 'filter.all_status': 'Alle statussen', 'filter.online': 'Online', 'filter.offline': 'Offline', 'filter.all_categories': 'Alle categorieën', 'filter.batch_operations': 'Batchbewerkingen', }, no: { // 🇳🇴 Norsk 'dashboard.title': 'Kontrollpanel', 'dashboard.services': 'Tjenester', 'dashboard.containers': 'Beholdere', 'dashboard.health': 'Helse', 'dashboard.settings': 'Innstillinger', 'dashboard.backups': 'Sikkerhetskopier', 'dashboard.monitoring': 'Overvåking', 'dashboard.security': 'Sikkerhet', 'service.status.healthy': 'Sunn', 'service.status.degraded': 'Forringet', 'service.status.down': 'Nede', 'service.status.unknown': 'Ukjent', 'service.status.pending': 'Venter', 'action.start': 'Start', 'action.stop': 'Stopp', 'action.restart': 'Omstart', 'action.delete': 'Slett', 'action.update': 'Oppdater', 'action.deploy': 'Rull ut', 'action.save': 'Lagre', 'action.cancel': 'Avbryt', 'action.confirm': 'Bekreft', 'error.not_found': 'Ressurs ikke funnet', 'error.unauthorized': 'Ikke autorisert', 'error.forbidden': 'Forbudt', 'error.rate_limited': 'For mange forespørsler', 'error.internal': 'Intern serverfeil', 'error.container_not_found': 'Beholder ikke funnet', 'error.service_not_found': 'Tjeneste ikke funnet', 'error.invalid_input': 'Ugyldig inndata', 'error.docker_unreachable': 'Docker-daemon er ikke tilgjengelig', 'error.disk_full': 'Diskplassen er kritisk lav', 'card.internet': 'Internet', 'card.auth': 'Auth', 'card.tailscale': 'Tailscale', 'card.dashca': 'DashCA', 'card.status.on': 'PÅ', 'card.status.off': 'AV', 'card.status.yes': 'JA', 'card.status.no': 'NEI', 'card.auth.not_configured': 'Ikke konfigurert', 'action.open': 'Åpne', 'action.logs': 'Logger', 'action.settings': 'Innstillinger', 'common.loading': 'Laster…', 'filter.services_placeholder': 'Filtrer tjenester...', 'filter.all_status': 'Alle statuser', 'filter.online': 'På nett', 'filter.offline': 'Frakoblet', 'filter.all_categories': 'Alle kategorier', 'filter.batch_operations': 'Masseoperasjoner', }, pl: { // 🇵🇱 Polski 'dashboard.title': 'Panel', 'dashboard.services': 'Usługi', 'dashboard.containers': 'Kontenery', 'dashboard.health': 'Zdrowie', 'dashboard.settings': 'Ustawienia', 'dashboard.backups': 'Kopie zapasowe', 'dashboard.monitoring': 'Monitorowanie', 'dashboard.security': 'Bezpieczeństwo', 'service.status.healthy': 'Zdrowy', 'service.status.degraded': 'Naruszony', 'service.status.down': 'Nie działa', 'service.status.unknown': 'Nieznany', 'service.status.pending': 'Oczekuje', 'action.start': 'Uruchom', 'action.stop': 'Zatrzymaj', 'action.restart': 'Uruchom ponownie', 'action.delete': 'Usuń', 'action.update': 'Aktualizuj', 'action.deploy': 'Wdróż', 'action.save': 'Zapisz', 'action.cancel': 'Anuluj', 'action.confirm': 'Potwierdź', 'error.not_found': 'Nie znaleziono zasobu', 'error.unauthorized': 'Brak autoryzacji', 'error.forbidden': 'Zabronione', 'error.rate_limited': 'Zbyt wiele żądań', 'error.internal': 'Wewnętrzny błąd serwera', 'error.container_not_found': 'Nie znaleziono kontenera', 'error.service_not_found': 'Nie znaleziono usługi', 'error.invalid_input': 'Nieprawidłowe dane wejściowe', 'error.docker_unreachable': 'Daemon Docker jest niedostępny', 'error.disk_full': 'Krytycznie mało miejsca na dysku', 'card.internet': 'Internet', 'card.auth': 'Auth', 'card.tailscale': 'Tailscale', 'card.dashca': 'DashCA', 'card.status.on': 'WŁ', 'card.status.off': 'WYŁ', 'card.status.yes': 'TAK', 'card.status.no': 'NIE', 'card.auth.not_configured': 'Nie skonfigurowano', 'action.open': 'Otwórz', 'action.logs': 'Dzienniki', 'action.settings': 'Ustawienia', 'common.loading': 'Ładowanie…', 'filter.services_placeholder': 'Filtruj usługi...', 'filter.all_status': 'Wszystkie statusy', 'filter.online': 'Online', 'filter.offline': 'Offline', 'filter.all_categories': 'Wszystkie kategorie', 'filter.batch_operations': 'Operacje wsadowe', }, pt: { // 🇵🇹 Português 'dashboard.title': 'Painel', 'dashboard.services': 'Serviços', 'dashboard.containers': 'Contêineres', 'dashboard.health': 'Saúde', 'dashboard.settings': 'Configurações', 'dashboard.backups': 'Backups', 'dashboard.monitoring': 'Monitoramento', 'dashboard.security': 'Segurança', 'service.status.healthy': 'Saudável', 'service.status.degraded': 'Degradado', 'service.status.down': 'Inativo', 'service.status.unknown': 'Desconhecido', 'service.status.pending': 'Pendente', 'action.start': 'Iniciar', 'action.stop': 'Parar', 'action.restart': 'Reiniciar', 'action.delete': 'Excluir', 'action.update': 'Atualizar', 'action.deploy': 'Implantar', 'action.save': 'Salvar', 'action.cancel': 'Cancelar', 'action.confirm': 'Confirmar', 'error.not_found': 'Recurso não encontrado', 'error.unauthorized': 'Não autorizado', 'error.forbidden': 'Proibido', 'error.rate_limited': 'Muitas solicitações', 'error.internal': 'Erro interno do servidor', 'error.container_not_found': 'Contêiner não encontrado', 'error.service_not_found': 'Serviço não encontrado', 'error.invalid_input': 'Entrada inválida', 'error.docker_unreachable': 'Daemon do Docker inacessível', 'error.disk_full': 'Espaço em disco criticamente baixo', 'card.internet': 'Internet', 'card.auth': 'Auth', 'card.tailscale': 'Tailscale', 'card.dashca': 'DashCA', 'card.status.on': 'LIG', 'card.status.off': 'DESL', 'card.status.yes': 'SIM', 'card.status.no': 'NÃO', 'card.auth.not_configured': 'Não configurado', 'action.open': 'Abrir', 'action.logs': 'Registros', 'action.settings': 'Configurações', 'common.loading': 'Carregando…', 'filter.services_placeholder': 'Filtrar serviços...', 'filter.all_status': 'Todos os status', 'filter.online': 'Online', 'filter.offline': 'Offline', 'filter.all_categories': 'Todas as categorias', 'filter.batch_operations': 'Operações em lote', }, ro: { // 🇷🇴 Română 'dashboard.title': 'Tablou de bord', 'dashboard.services': 'Servicii', 'dashboard.containers': 'Containere', 'dashboard.health': 'Stare', 'dashboard.settings': 'Setări', 'dashboard.backups': 'Copii de rezervă', 'dashboard.monitoring': 'Monitorizare', 'dashboard.security': 'Securitate', 'service.status.healthy': 'Sănătos', 'service.status.degraded': 'Degradat', 'service.status.down': 'Oprit', 'service.status.unknown': 'Necunoscut', 'service.status.pending': 'În așteptare', 'action.start': 'Pornește', 'action.stop': 'Oprește', 'action.restart': 'Repornește', 'action.delete': 'Șterge', 'action.update': 'Actualizează', 'action.deploy': 'Lansează', 'action.save': 'Salvează', 'action.cancel': 'Anulează', 'action.confirm': 'Confirmă', 'error.not_found': 'Resursă negăsită', 'error.unauthorized': 'Neautorizat', 'error.forbidden': 'Interzis', 'error.rate_limited': 'Prea multe cereri', 'error.internal': 'Eroare internă a serverului', 'error.container_not_found': 'Container negăsit', 'error.service_not_found': 'Serviciu negăsit', 'error.invalid_input': 'Intrare invalidă', 'error.docker_unreachable': 'Daemonul Docker nu poate fi contactat', 'error.disk_full': 'Spațiul pe disc este critic de scăzut', 'card.internet': 'Internet', 'card.auth': 'Auth', 'card.tailscale': 'Tailscale', 'card.dashca': 'DashCA', 'card.status.on': 'PORNIT', 'card.status.off': 'OPRIT', 'card.status.yes': 'DA', 'card.status.no': 'NU', 'card.auth.not_configured': 'Neconfigurat', 'action.open': 'Deschide', 'action.logs': 'Jurnale', 'action.settings': 'Setări', 'common.loading': 'Se încarcă…', 'filter.services_placeholder': 'Filtrează serviciile...', 'filter.all_status': 'Toate statusurile', 'filter.online': 'Online', 'filter.offline': 'Offline', 'filter.all_categories': 'Toate categoriile', 'filter.batch_operations': 'Operațiuni lot', }, ru: { // 🇷🇺 Русский 'dashboard.title': 'Панель управления', 'dashboard.services': 'Сервисы', 'dashboard.containers': 'Контейнеры', 'dashboard.health': 'Здоровье', 'dashboard.settings': 'Настройки', 'dashboard.backups': 'Резервные копии', 'dashboard.monitoring': 'Мониторинг', 'dashboard.security': 'Безопасность', 'service.status.healthy': 'Здоров', 'service.status.degraded': 'Деградирован', 'service.status.down': 'Не работает', 'service.status.unknown': 'Неизвестно', 'service.status.pending': 'Ожидание', 'action.start': 'Запустить', 'action.stop': 'Остановить', 'action.restart': 'Перезапустить', 'action.delete': 'Удалить', 'action.update': 'Обновить', 'action.deploy': 'Развернуть', 'action.save': 'Сохранить', 'action.cancel': 'Отмена', 'action.confirm': 'Подтвердить', 'error.not_found': 'Ресурс не найден', 'error.unauthorized': 'Не авторизован', 'error.forbidden': 'Запрещено', 'error.rate_limited': 'Слишком много запросов', 'error.internal': 'Внутренняя ошибка сервера', 'error.container_not_found': 'Контейнер не найден', 'error.service_not_found': 'Сервис не найден', 'error.invalid_input': 'Неверный ввод', 'error.docker_unreachable': 'Docker недоступен', 'error.disk_full': 'Критически мало места на диске', 'card.internet': 'Internet', 'card.auth': 'Auth', 'card.tailscale': 'Tailscale', 'card.dashca': 'DashCA', 'card.status.on': 'ВКЛ', 'card.status.off': 'ВЫКЛ', 'card.status.yes': 'ДА', 'card.status.no': 'НЕТ', 'card.auth.not_configured': 'Не настроено', 'action.open': 'Открыть', 'action.logs': 'Журналы', 'action.settings': 'Настройки', 'common.loading': 'Загрузка…', 'filter.services_placeholder': 'Фильтр сервисов...', 'filter.all_status': 'Все статусы', 'filter.online': 'Онлайн', 'filter.offline': 'Офлайн', 'filter.all_categories': 'Все категории', 'filter.batch_operations': 'Пакетные операции', }, sv: { // 🇸🇪 Svenska 'dashboard.title': 'Instrumentpanel', 'dashboard.services': 'Tjänster', 'dashboard.containers': 'Behållare', 'dashboard.health': 'Hälsa', 'dashboard.settings': 'Inställningar', 'dashboard.backups': 'Säkerhetskopior', 'dashboard.monitoring': 'Övervakning', 'dashboard.security': 'Säkerhet', 'service.status.healthy': 'Frisk', 'service.status.degraded': 'Nedsatt', 'service.status.down': 'Nere', 'service.status.unknown': 'Okänd', 'service.status.pending': 'Väntar', 'action.start': 'Starta', 'action.stop': 'Stoppa', 'action.restart': 'Starta om', 'action.delete': 'Ta bort', 'action.update': 'Uppdatera', 'action.deploy': 'Distribuera', 'action.save': 'Spara', 'action.cancel': 'Avbryt', 'action.confirm': 'Bekräfta', 'error.not_found': 'Resurs hittades inte', 'error.unauthorized': 'Obehörig', 'error.forbidden': 'Förbjuden', 'error.rate_limited': 'För många förfrågningar', 'error.internal': 'Internt serverfel', 'error.container_not_found': 'Behållare hittades inte', 'error.service_not_found': 'Tjänst hittades inte', 'error.invalid_input': 'Ogiltig inmatning', 'error.docker_unreachable': 'Docker-daemon kan inte nås', 'error.disk_full': 'Diskutrymmet är kritiskt lågt', 'card.internet': 'Internet', 'card.auth': 'Auth', 'card.tailscale': 'Tailscale', 'card.dashca': 'DashCA', 'card.status.on': 'PÅ', 'card.status.off': 'AV', 'card.status.yes': 'JA', 'card.status.no': 'NEJ', 'card.auth.not_configured': 'Inte konfigurerad', 'action.open': 'Öppna', 'action.logs': 'Loggar', 'action.settings': 'Inställningar', 'common.loading': 'Laddar…', 'filter.services_placeholder': 'Filtrera tjänster...', 'filter.all_status': 'Alla statusar', 'filter.online': 'Uppkopplad', 'filter.offline': 'Nerkopplad', 'filter.all_categories': 'Alla kategorier', 'filter.batch_operations': 'Batchåtgärder', }, th: { // 🇹🇭 ไทย 'dashboard.title': 'แดชบอร์ด', 'dashboard.services': 'บริการ', 'dashboard.containers': 'คอนเทนเนอร์', 'dashboard.health': 'สถานะ', 'dashboard.settings': 'การตั้งค่า', 'dashboard.backups': 'การสำรองข้อมูล', 'dashboard.monitoring': 'การตรวจสอบ', 'dashboard.security': 'ความปลอดภัย', 'service.status.healthy': 'ปกติ', 'service.status.degraded': 'เสื่อม', 'service.status.down': 'ล่ม', 'service.status.unknown': 'ไม่ทราบ', 'service.status.pending': 'รอดำเนินการ', 'action.start': 'เริ่ม', 'action.stop': 'หยุด', 'action.restart': 'รีสตาร์ท', 'action.delete': 'ลบ', 'action.update': 'อัปเดต', 'action.deploy': 'ปรับใช้', 'action.save': 'บันทึก', 'action.cancel': 'ยกเลิก', 'action.confirm': 'ยืนยัน', 'error.not_found': 'ไม่พบทรัพยากร', 'error.unauthorized': 'ไม่ได้รับอนุญาต', 'error.forbidden': 'ห้าม', 'error.rate_limited': 'คำขอมากเกินไป', 'error.internal': 'ข้อผิดพลาดภายในเซิร์ฟเวอร์', 'error.container_not_found': 'ไม่พบคอนเทนเนอร์', 'error.service_not_found': 'ไม่พบบริการ', 'error.invalid_input': 'อินพุตไม่ถูกต้อง', 'error.docker_unreachable': 'ไม่สามารถเข้าถึง Docker daemon ได้', 'error.disk_full': 'พื้นที่ดิสก์เหลือน้อยวิกฤต', 'card.internet': 'Internet', 'card.auth': 'Auth', 'card.tailscale': 'Tailscale', 'card.dashca': 'DashCA', 'card.status.on': 'เปิด', 'card.status.off': 'ปิด', 'card.status.yes': 'ใช่', 'card.status.no': 'ไม่', 'card.auth.not_configured': 'ยังไม่ได้กำหนดค่า', 'action.open': 'เปิด', 'action.logs': 'บันทึก', 'action.settings': 'การตั้งค่า', 'common.loading': 'กำลังโหลด…', 'filter.services_placeholder': 'กรองบริการ...', 'filter.all_status': 'สถานะทั้งหมด', 'filter.online': 'ออนไลน์', 'filter.offline': 'ออฟไลน์', 'filter.all_categories': 'หมวดหมู่ทั้งหมด', 'filter.batch_operations': 'การดำเนินการแบบกลุ่ม', }, tr: { // 🇹🇷 Türkçe 'dashboard.title': 'Kontrol Paneli', 'dashboard.services': 'Hizmetler', 'dashboard.containers': 'Konteynerler', 'dashboard.health': 'Sağlık', 'dashboard.settings': 'Ayarlar', 'dashboard.backups': 'Yedekler', 'dashboard.monitoring': 'İzleme', 'dashboard.security': 'Güvenlik', 'service.status.healthy': 'Sağlıklı', 'service.status.degraded': 'Bozulmuş', 'service.status.down': 'Çalışmıyor', 'service.status.unknown': 'Bilinmiyor', 'service.status.pending': 'Beklemede', 'action.start': 'Başlat', 'action.stop': 'Durdur', 'action.restart': 'Yeniden Başlat', 'action.delete': 'Sil', 'action.update': 'Güncelle', 'action.deploy': 'Dağıt', 'action.save': 'Kaydet', 'action.cancel': 'İptal', 'action.confirm': 'Onayla', 'error.not_found': 'Kaynak bulunamadı', 'error.unauthorized': 'Yetkisiz', 'error.forbidden': 'Yasak', 'error.rate_limited': 'Çok fazla istek', 'error.internal': 'Dahili sunucu hatası', 'error.container_not_found': 'Konteyner bulunamadı', 'error.service_not_found': 'Hizmet bulunamadı', 'error.invalid_input': 'Geçersiz giriş', 'error.docker_unreachable': 'Docker daemonuna ulaşılamıyor', 'error.disk_full': 'Disk alanı kritik düzeyde düşük', 'card.internet': 'Internet', 'card.auth': 'Auth', 'card.tailscale': 'Tailscale', 'card.dashca': 'DashCA', 'card.status.on': 'AÇIK', 'card.status.off': 'KAPALI', 'card.status.yes': 'EVET', 'card.status.no': 'HAYIR', 'card.auth.not_configured': 'Yapılandırılmadı', 'action.open': 'Aç', 'action.logs': 'Günlükler', 'action.settings': 'Ayarlar', 'common.loading': 'Yükleniyor…', 'filter.services_placeholder': 'Hizmetleri filtrele...', 'filter.all_status': 'Tüm Durumlar', 'filter.online': 'Çevrimiçi', 'filter.offline': 'Çevrimdışı', 'filter.all_categories': 'Tüm Kategoriler', 'filter.batch_operations': 'Toplu İşlemler', }, uk: { // 🇺🇦 Українська 'dashboard.title': 'Панель керування', 'dashboard.services': 'Сервіси', 'dashboard.containers': 'Контейнери', 'dashboard.health': "Здоров'я", 'dashboard.settings': 'Налаштування', 'dashboard.backups': 'Резервні копії', 'dashboard.monitoring': 'Моніторинг', 'dashboard.security': 'Безпека', 'service.status.healthy': 'Здоровий', 'service.status.degraded': 'Деградований', 'service.status.down': 'Не працює', 'service.status.unknown': 'Невідомо', 'service.status.pending': 'Очікування', 'action.start': 'Запустити', 'action.stop': 'Зупинити', 'action.restart': 'Перезапустити', 'action.delete': 'Видалити', 'action.update': 'Оновити', 'action.deploy': 'Розгорнути', 'action.save': 'Зберегти', 'action.cancel': 'Скасувати', 'action.confirm': 'Підтвердити', 'error.not_found': 'Ресурс не знайдено', 'error.unauthorized': 'Не авторизовано', 'error.forbidden': 'Заборонено', 'error.rate_limited': 'Занадто багато запитів', 'error.internal': 'Внутрішня помилка сервера', 'error.container_not_found': 'Контейнер не знайдено', 'error.service_not_found': 'Сервіс не знайдено', 'error.invalid_input': 'Невірне введення', 'error.docker_unreachable': 'Docker недоступний', 'error.disk_full': 'Критично мало місця на диску', 'card.internet': 'Internet', 'card.auth': 'Auth', 'card.tailscale': 'Tailscale', 'card.dashca': 'DashCA', 'card.status.on': 'УВІМК', 'card.status.off': 'ВИМК', 'card.status.yes': 'ТАК', 'card.status.no': 'НІ', 'card.auth.not_configured': 'Не налаштовано', 'action.open': 'Відкрити', 'action.logs': 'Журнали', 'action.settings': 'Налаштування', 'common.loading': 'Завантаження…', 'filter.services_placeholder': 'Фільтр сервісів...', 'filter.all_status': 'Усі статуси', 'filter.online': 'Онлайн', 'filter.offline': 'Офлайн', 'filter.all_categories': 'Усі категорії', 'filter.batch_operations': 'Пакетні операції', }, ur: { // 🇵🇰 اردو 'dashboard.title': 'ڈیش بورڈ', 'dashboard.services': 'خدمات', 'dashboard.containers': 'کنٹینرز', 'dashboard.health': 'صحت', 'dashboard.settings': 'ترتیبات', 'dashboard.backups': 'بیک اپ', 'dashboard.monitoring': 'نگرانی', 'dashboard.security': 'تحفظ', 'service.status.healthy': 'صحت مند', 'service.status.degraded': 'خراب', 'service.status.down': 'بند', 'service.status.unknown': 'نامعلوم', 'service.status.pending': 'زیر التواء', 'action.start': 'شروع', 'action.stop': 'روک', 'action.restart': 'دوبارہ شروع', 'action.delete': 'حذف', 'action.update': 'اپڈیٹ', 'action.deploy': 'تعینات', 'action.save': 'محفوظ', 'action.cancel': 'منسوخ', 'action.confirm': 'تصدیق', 'error.not_found': 'وسائل نہیں ملے', 'error.unauthorized': 'غیر مجاز', 'error.forbidden': 'ممنوع', 'error.rate_limited': 'بہت زیادہ درخواستیں', 'error.internal': 'اندرونی سرور نقص', 'error.container_not_found': 'کنٹینر نہیں ملا', 'error.service_not_found': 'سروس نہیں ملی', 'error.invalid_input': 'غلط ان پٹ', 'error.docker_unreachable': 'Docker ڈیمن تک رسائی نہیں', 'error.disk_full': 'ڈسک کی جگہ نہایت کم ہے', 'card.internet': 'Internet', 'card.auth': 'Auth', 'card.tailscale': 'Tailscale', 'card.dashca': 'DashCA', 'card.status.on': 'چالو', 'card.status.off': 'بند', 'card.status.yes': 'ہاں', 'card.status.no': 'نہیں', 'card.auth.not_configured': 'ترتیب نہیں دیا گیا', 'action.open': 'کھولیں', 'action.logs': 'لاگز', 'action.settings': 'ترتیبات', 'common.loading': 'لوڈ ہو رہا ہے…', 'filter.services_placeholder': 'خدمات فلٹر کریں...', 'filter.all_status': 'تمام صورتحال', 'filter.online': 'آن لائن', 'filter.offline': 'آف لائن', 'filter.all_categories': 'تمام اقسام', 'filter.batch_operations': 'بیچ آپریشنز', }, vi: { // 🇻🇳 Tiếng Việt 'dashboard.title': 'Bảng điều khiển', 'dashboard.services': 'Dịch vụ', 'dashboard.containers': 'Bộ chứa', 'dashboard.health': 'Tình trạng', 'dashboard.settings': 'Cài đặt', 'dashboard.backups': 'Sao lưu', 'dashboard.monitoring': 'Giám sát', 'dashboard.security': 'Bảo mật', 'service.status.healthy': 'Khỏe mạnh', 'service.status.degraded': 'Giảm', 'service.status.down': 'Ngừng', 'service.status.unknown': 'Không xác định', 'service.status.pending': 'Đang chờ', 'action.start': 'Bắt đầu', 'action.stop': 'Dừng', 'action.restart': 'Khởi động lại', 'action.delete': 'Xóa', 'action.update': 'Cập nhật', 'action.deploy': 'Triển khai', 'action.save': 'Lưu', 'action.cancel': 'Hủy', 'action.confirm': 'Xác nhận', 'error.not_found': 'Không tìm thấy tài nguyên', 'error.unauthorized': 'Không được phép', 'error.forbidden': 'Bị cấm', 'error.rate_limited': 'Quá nhiều yêu cầu', 'error.internal': 'Lỗi máy chủ nội bộ', 'error.container_not_found': 'Không tìm thấy bộ chứa', 'error.service_not_found': 'Không tìm thấy dịch vụ', 'error.invalid_input': 'Đầu vào không hợp lệ', 'error.docker_unreachable': 'Không thể kết nối với Docker daemon', 'error.disk_full': 'Không gian đĩa cực kỳ thấp', 'card.internet': 'Internet', 'card.auth': 'Auth', 'card.tailscale': 'Tailscale', 'card.dashca': 'DashCA', 'card.status.on': 'BẬT', 'card.status.off': 'TẮT', 'card.status.yes': 'CÓ', 'card.status.no': 'KHÔNG', 'card.auth.not_configured': 'Chưa cấu hình', 'action.open': 'Mở', 'action.logs': 'Nhật ký', 'action.settings': 'Cài đặt', 'common.loading': 'Đang tải…', 'filter.services_placeholder': 'Lọc dịch vụ...', 'filter.all_status': 'Tất cả trạng thái', 'filter.online': 'Trực tuyến', 'filter.offline': 'Ngoại tuyến', 'filter.all_categories': 'Tất cả danh mục', 'filter.batch_operations': 'Thao tác hàng loạt', }, zh: { // 🇨🇳 中文 'dashboard.title': '仪表盘', 'dashboard.services': '服务', 'dashboard.containers': '容器', 'dashboard.health': '健康', 'dashboard.settings': '设置', 'dashboard.backups': '备份', 'dashboard.monitoring': '监控', 'dashboard.security': '安全', 'service.status.healthy': '健康', 'service.status.degraded': '降级', 'service.status.down': '宕机', 'service.status.unknown': '未知', 'service.status.pending': '待处理', 'action.start': '启动', 'action.stop': '停止', 'action.restart': '重启', 'action.delete': '删除', 'action.update': '更新', 'action.deploy': '部署', 'action.save': '保存', 'action.cancel': '取消', 'action.confirm': '确认', 'error.not_found': '未找到资源', 'error.unauthorized': '未授权', 'error.forbidden': '禁止访问', 'error.rate_limited': '请求过多', 'error.internal': '内部服务器错误', 'error.container_not_found': '未找到容器', 'error.service_not_found': '未找到服务', 'error.invalid_input': '输入无效', 'error.docker_unreachable': '无法连接 Docker 守护进程', 'error.disk_full': '磁盘空间严重不足', 'card.internet': 'Internet', 'card.auth': 'Auth', 'card.tailscale': 'Tailscale', 'card.dashca': 'DashCA', 'card.status.on': '开启', 'card.status.off': '关闭', 'card.status.yes': '是', 'card.status.no': '否', 'card.auth.not_configured': '未配置', 'action.open': '打开', 'action.logs': '日志', 'action.settings': '设置', 'common.loading': '加载中…', 'filter.services_placeholder': '筛选服务...', 'filter.all_status': '所有状态', 'filter.online': '在线', 'filter.offline': '离线', 'filter.all_categories': '所有类别', 'filter.batch_operations': '批量操作', }, }; const SUPPORTED_LANGUAGES = Object.keys(TRANSLATIONS); const DEFAULT_LANGUAGE = 'en'; // Language metadata for UI dropdowns const LANGUAGE_META = { en: { name: 'English', flag: '🇺🇸', rtl: false }, ar: { name: 'العربية', flag: '🇸🇦', rtl: true }, bn: { name: 'বাংলা', flag: '🇧🇩', rtl: false }, cs: { name: 'Čeština', flag: '🇨🇿', rtl: false }, da: { name: 'Dansk', flag: '🇩🇰', rtl: false }, de: { name: 'Deutsch', flag: '🇩🇪', rtl: false }, el: { name: 'Ελληνικά', flag: '🇬🇷', rtl: false }, es: { name: 'Español', flag: '🇪🇸', rtl: false }, fa: { name: 'فارسی', flag: '🇮🇷', rtl: true }, fi: { name: 'Suomi', flag: '🇫🇮', rtl: false }, fr: { name: 'Français', flag: '🇫🇷', rtl: false }, hi: { name: 'हिन्दी', flag: '🇮🇳', rtl: false }, hu: { name: 'Magyar', flag: '🇭🇺', rtl: false }, id: { name: 'Indonesia', flag: '🇮🇩', rtl: false }, it: { name: 'Italiano', flag: '🇮🇹', rtl: false }, ja: { name: '日本語', flag: '🇯🇵', rtl: false }, ko: { name: '한국어', flag: '🇰🇷', rtl: false }, ms: { name: 'Melayu', flag: '🇲🇾', rtl: false }, nl: { name: 'Nederlands', flag: '🇳🇱', rtl: false }, no: { name: 'Norsk', flag: '🇳🇴', rtl: false }, pl: { name: 'Polski', flag: '🇵🇱', rtl: false }, pt: { name: 'Português', flag: '🇵🇹', rtl: false }, ro: { name: 'Română', flag: '🇷🇴', rtl: false }, ru: { name: 'Русский', flag: '🇷🇺', rtl: false }, sv: { name: 'Svenska', flag: '🇸🇪', rtl: false }, th: { name: 'ไทย', flag: '🇹🇭', rtl: false }, tr: { name: 'Türkçe', flag: '🇹🇷', rtl: false }, uk: { name: 'Українська', flag: '🇺🇦', rtl: false }, ur: { name: 'اردو', flag: '🇵🇰', rtl: true }, vi: { name: 'Tiếng Việt', flag: '🇻🇳', rtl: false }, zh: { name: '中文', flag: '🇨🇳', rtl: false }, }; function t(key, lang) { lang = lang || DEFAULT_LANGUAGE; var dict = TRANSLATIONS[lang] || TRANSLATIONS[DEFAULT_LANGUAGE]; return dict[key] || TRANSLATIONS[DEFAULT_LANGUAGE][key] || key; } function getSupportedLanguages() { return SUPPORTED_LANGUAGES; } function getLanguageMeta(lang) { return LANGUAGE_META[lang] || LANGUAGE_META[DEFAULT_LANGUAGE]; } function getAllLanguages() { return LANGUAGE_META; } function isRTL(lang) { return lang === 'ar' || lang === 'fa' || lang === 'ur'; } function isSupported(lang) { return SUPPORTED_LANGUAGES.indexOf(lang) >= 0; } function detectLanguage(acceptLanguage) { if (!acceptLanguage) return DEFAULT_LANGUAGE; var parts = acceptLanguage.split(','); var entries = []; for (var i = 0; i < parts.length; i++) { var seg = parts[i].trim(); if (!seg) continue; var bits = seg.split(';'); var code = bits[0].split('-')[0].trim().toLowerCase(); if (!code) continue; var q = 1.0; for (var j = 1; j < bits.length; j++) { var kv = bits[j].trim().split('='); if (kv.length === 2 && kv[0].trim().toLowerCase() === 'q') { var qStr = kv[1].trim(); // RFC 7231 §5.3.1: qvalue = ( "0" [ "." 0*3DIGIT ] ) / ( "1" [ "." 0*3"0" ] ) // Match the strict grammar; values that do not conform are treated as // "no q-value specified" and fall back to q=1.0, the HTTP default. var qMatch = qStr.match(/^(0(?:\.\d{0,3})?|1(?:\.0{0,3})?)$/); if (qMatch) { q = parseFloat(qMatch[1]); } } } entries.push({ code: code, q: q, order: i }); } entries.sort(function (a, b) { if (b.q !== a.q) return b.q - a.q; return a.order - b.order; }); for (var k = 0; k < entries.length; k++) { if (entries[k].q === 0) continue; if (isSupported(entries[k].code)) return entries[k].code; } // Intentional design policy: when every supported entry was explicitly // refused with q=0 (or no supported language was offered), fall back to the // server default (DEFAULT_LANGUAGE) rather than honoring the refusal. return DEFAULT_LANGUAGE; } module.exports = { t, getSupportedLanguages, getLanguageMeta, getAllLanguages, isRTL, isSupported, detectLanguage, DEFAULT_LANGUAGE, TRANSLATIONS, LANGUAGE_META, };