UNPKG

besper-frontend-site-dev-main

Version:

Professional B-esper Frontend Site - Site-wide integration toolkit for full website bot deployment

485 lines (462 loc) 16.6 kB
// Internationalization for chat widget - European languages and major languages export const translations = { // Input placeholder text typeYourMessage: { en: 'Type your message here...', de: 'Geben Sie hier Ihre Nachricht ein...', fr: 'Tapez votre message ici...', es: 'Escribe tu mensaje aquí...', it: 'Digita il tuo messaggio qui...', pt: 'Digite sua mensagem aqui...', nl: 'Typ hier uw bericht...', pl: 'Wpisz tutaj swoją wiadomość...', sv: 'Skriv ditt meddelande här...', da: 'Skriv din besked her...', fi: 'Kirjoita viestisi tähän...', no: 'Skriv meldingen din her...', cs: 'Zde napište svou zprávu...', hu: 'Írja ide üzenetét...', ro: 'Introduceți mesajul aici...', sk: 'Sem napíšte svoju správu...', hr: 'Ovdje unesite poruku...', bg: 'Въведете съобщението си тук...', sl: 'Tukaj vnesite svoje sporočilo...', et: 'Sisestage oma sõnum siia...', lv: 'Ievadiet savu ziņu šeit...', lt: 'Čia įveskite savo žinutę...', el: 'Πληκτρολογήστε το μήνυμά σας εδώ...', ru: 'Введите ваше сообщение здесь...', uk: 'Введіть ваше повідомлення тут...', // Major Asian and world languages ja: 'ここにメッセージを入力してください...', zh: '在此输入您的消息...', ko: '여기에 메시지를 입력하세요...', ar: 'اكتب رسالتك هنا...', hi: 'अपना संदेश यहाँ टाइप करें...', id: 'Ketik pesan Anda di sini...', tr: 'Mesajınızı buraya yazın...', th: 'พิมพ์ข้อความของคุณที่นี่...', vi: 'Nhập tin nhắn của bạn tại đây...', he: 'הקלד את ההודעה שלך כאן...', fa: 'پیام خود را اینجا تایپ کنید...', ms: 'Taip mesej anda di sini...', tl: 'I-type ang inyong mensahe dito...', }, // Tooltip texts tooltips: { downloadConversation: { en: 'Download Conversation', de: 'Unterhaltung herunterladen', fr: 'Télécharger la conversation', es: 'Descargar conversación', it: 'Scarica conversazione', pt: 'Baixar conversa', nl: 'Gesprek downloaden', pl: 'Pobierz rozmowę', sv: 'Ladda ner konversation', da: 'Download samtale', fi: 'Lataa keskustelu', no: 'Last ned samtale', cs: 'Stáhnout konverzaci', hu: 'Beszélgetés letöltése', ro: 'Descarcă conversația', sk: 'Stiahnuť konverzáciu', hr: 'Preuzmi razgovor', bg: 'Изтегли разговор', sl: 'Prenesi pogovor', et: 'Laadi alla vestlus', lv: 'Lejupielādēt sarunu', lt: 'Atsisiųsti pokalbį', el: 'Λήψη συνομιλίας', ru: 'Скачать беседу', uk: 'Завантажити розмову', // Major Asian and world languages ja: '会話をダウンロード', zh: '下载对话', ko: '대화 다운로드', ar: 'تحميل المحادثة', hi: 'बातचीत डाउनलोड करें', id: 'Unduh Percakapan', tr: 'Konuşmayı İndir', th: 'ดาวน์โหลดการสนทนา', vi: 'Tải cuộc trò chuyện', he: 'הורד שיחה', fa: 'دانلود مکالمه', ms: 'Muat turun Perbualan', tl: 'I-download ang Pag-uusap', }, restartConversation: { en: 'Restart Conversation', de: 'Unterhaltung neu starten', fr: 'Redémarrer la conversation', es: 'Reiniciar conversación', it: 'Riavvia conversazione', pt: 'Reiniciar conversa', nl: 'Gesprek herstarten', pl: 'Uruchom ponownie rozmowę', sv: 'Starta om konversation', da: 'Genstart samtale', fi: 'Aloita keskustelu uudelleen', no: 'Start samtale på nytt', cs: 'Restartovat konverzaci', hu: 'Beszélgetés újraindítása', ro: 'Repornește conversația', sk: 'Reštartovať konverzáciu', hr: 'Ponovno pokreni razgovor', bg: 'Рестартирай разговор', sl: 'Ponovno zaženi pogovor', et: 'Taaskäivita vestlus', lv: 'Atsākt sarunu', lt: 'Paleisti pokalbį iš naujo', el: 'Επανεκκίνηση συνομιλίας', ru: 'Перезапустить беседу', uk: 'Перезапустити розмову', // Major Asian and world languages ja: '会話を再開', zh: '重新开始对话', ko: '대화 재시작', ar: 'إعادة تشغيل المحادثة', hi: 'बातचीत पुनः आरंभ करें', id: 'Mulai Ulang Percakapan', tr: 'Konuşmayı Yeniden Başlat', th: 'เริ่มการสนทนาใหม่', vi: 'Khởi động lại cuộc trò chuyện', he: 'הפעל מחדש שיחה', fa: 'راه اندازی مجدد مکالمه', ms: 'Mulakan semula Perbualan', tl: 'Simulan muli ang Pag-uusap', }, deleteConversation: { en: 'Delete Conversation', de: 'Unterhaltung löschen', fr: 'Supprimer la conversation', es: 'Eliminar conversación', it: 'Elimina conversazione', pt: 'Excluir conversa', nl: 'Gesprek verwijderen', pl: 'Usuń rozmowę', sv: 'Radera konversation', da: 'Slet samtale', fi: 'Poista keskustelu', no: 'Slett samtale', cs: 'Smazat konverzaci', hu: 'Beszélgetés törlése', ro: 'Șterge conversația', sk: 'Vymazať konverzáciu', hr: 'Obriši razgovor', bg: 'Изтрий разговор', sl: 'Izbriši pogovor', et: 'Kustuta vestlus', lv: 'Dzēst sarunu', lt: 'Ištrinti pokalbį', el: 'Διαγραφή συνομιλίας', ru: 'Удалить беседу', uk: 'Видалити розмову', // Major Asian and world languages ja: '会話を削除', zh: '删除对话', ko: '대화 삭제', ar: 'حذف المحادثة', hi: 'बातचीत हटाएं', id: 'Hapus Percakapan', tr: 'Konuşmayı Sil', th: 'ลบการสนทนา', vi: 'Xóa cuộc trò chuyện', he: 'מחק שיחה', fa: 'حذف مکالمه', ms: 'Padam Perbualan', tl: 'Tanggalin ang Pag-uusap', }, expandView: { en: 'Optimize view for better readability', de: 'Ansicht für bessere Lesbarkeit optimieren', fr: 'Optimiser la vue pour une meilleure lisibilité', es: 'Optimizar vista para mejor legibilidad', it: 'Ottimizza vista per migliore leggibilità', pt: 'Otimizar visualização para melhor legibilidade', nl: 'Optimaliseer weergave voor betere leesbaarheid', pl: 'Zoptymalizuj widok dla lepszej czytelności', sv: 'Optimera vy för bättre läsbarhet', da: 'Optimer visning for bedre læsbarhed', fi: 'Optimoi näkymä parempaa luettavuutta varten', no: 'Optimaliser visning for bedre lesbarhet', cs: 'Optimalizovat zobrazení pro lepší čitelnost', hu: 'Nézet optimalizálása a jobb olvashatóságért', ro: 'Optimizează vizualizarea pentru o mai bună lizibilitate', sk: 'Optimalizovať zobrazenie pre lepšiu čitateľnosť', hr: 'Optimiziraj prikaz za bolju čitljivost', bg: 'Оптимизирай изгледа за по-добра четимост', sl: 'Optimiziraj pogled za boljšo berljivost', et: 'Optimeeri vaade parema loetavuse jaoks', lv: 'Optimizēt skatu labākai lasāmībai', lt: 'Optimizuoti vaizdą geresniam skaitomumui', el: 'Βελτιστοποίηση προβολής για καλύτερη αναγνωσιμότητα', ru: 'Оптимизировать вид для лучшей читаемости', uk: 'Оптимізувати вигляд для кращої читабельності', // Major Asian and world languages ja: '読みやすさのためにビューを最適化', zh: '优化视图以提高可读性', ko: '가독성을 위한 보기 최적화', ar: 'تحسين العرض لقابلية قراءة أفضل', hi: 'बेहतर पठनीयता के लिए दृश्य को अनुकूलित करें', id: 'Optimalkan tampilan untuk keterbacaan yang lebih baik', tr: 'Daha iyi okunabilirlik için görünümü optimize edin', th: 'ปรับแต่งมุมมองเพื่อการอ่านที่ดีขึ้น', vi: 'Tối ưu hóa chế độ xem để dễ đọc hơn', he: 'אופטימיזציה של התצוגה לקריאה טובה יותר', fa: 'بهینه سازی نمایش برای خوانایی بهتر', ms: 'Optimalkan paparan untuk kebolehbacaan yang lebih baik', tl: 'I-optimize ang view para sa mas magandang pagkakabasa', }, minimizeChat: { en: 'Minimize', de: 'Minimieren', fr: 'Réduire', es: 'Minimizar', it: 'Riduci', pt: 'Minimizar', nl: 'Minimaliseren', pl: 'Minimalizuj', sv: 'Minimera', da: 'Minimer', fi: 'Pienennä', no: 'Minimer', cs: 'Minimalizovat', hu: 'Minimalizálás', ro: 'Minimizează', sk: 'Minimalizovať', hr: 'Minimiziraj', bg: 'Минимизирай', sl: 'Minimiziraj', et: 'Minimeeri', lv: 'Minimizēt', lt: 'Sumažinti', el: 'Ελαχιστοποίηση', ru: 'Свернуть', uk: 'Згорнути', // Major Asian and world languages ja: '最小化', zh: '最小化', ko: '최소화', ar: 'تصغير', hi: 'न्यूनतम करें', id: 'Kecilkan', tr: 'Küçült', th: 'ย่อขนาด', vi: 'Thu nhỏ', he: 'מזער', fa: 'کمینه کردن', ms: 'Kecilkan', tl: 'Paliitin', }, dataPolicy: { en: 'Data Policy', de: 'Datenschutzrichtlinie', fr: 'Politique de données', es: 'Política de datos', it: 'Politica sui dati', pt: 'Política de dados', nl: 'Gegevensbeleid', pl: 'Polityka danych', sv: 'Datapolicy', da: 'Datapolitik', fi: 'Tietopolitiikka', no: 'Datapolicy', cs: 'Zásady dat', hu: 'Adatkezelési irányelvek', ro: 'Politica datelor', sk: 'Zásady údajov', hr: 'Politika podataka', bg: 'Политика за данни', sl: 'Politika podatkov', et: 'Andmepoliitika', lv: 'Datu politika', lt: 'Duomenų politika', el: 'Πολιτική δεδομένων', ru: 'Политика данных', uk: 'Політика даних', // Major Asian and world languages ja: 'データポリシー', zh: '数据政策', ko: '데이터 정책', ar: 'سياسة البيانات', hi: 'डेटा नीति', id: 'Kebijakan Data', tr: 'Veri Politikası', th: 'นโยบายข้อมูล', vi: 'Chính sách dữ liệu', he: 'מדיניות נתונים', fa: 'سیاست داده', ms: 'Dasar Data', tl: 'Patakaran sa Data', }, }, // Status messages statusMessages: { connecting: { en: 'Connecting...', de: 'Verbindet...', fr: 'Connexion...', es: 'Conectando...', it: 'Connessione...', pt: 'Conectando...', nl: 'Verbinden...', pl: 'Łączenie...', sv: 'Ansluter...', da: 'Forbinder...', fi: 'Yhdistetään...', no: 'Kobler til...', cs: 'Připojování...', hu: 'Csatlakozás...', ro: 'Se conectează...', sk: 'Pripájanie...', hr: 'Povezivanje...', bg: 'Свързване...', sl: 'Povezovanje...', et: 'Ühendamine...', lv: 'Savienojas...', lt: 'Jungiamasi...', el: 'Σύνδεση...', ru: 'Подключение...', uk: 'Підключення...', // Major Asian and world languages ja: '接続中...', zh: '正在连接...', ko: '연결 중...', ar: 'جاري الاتصال...', hi: 'कनेक्ट हो रहा है...', id: 'Menghubungkan...', tr: 'Bağlanıyor...', th: 'กำลังเชื่อมต่อ...', vi: 'Đang kết nối...', he: 'מתחבר...', fa: 'در حال اتصال...', ms: 'Menyambung...', tl: 'Kumukonekta...', }, typing: { en: 'Typing...', de: 'Schreibt...', fr: 'Saisie...', es: 'Escribiendo...', it: 'Scrivendo...', pt: 'Digitando...', nl: 'Typen...', pl: 'Pisze...', sv: 'Skriver...', da: 'Skriver...', fi: 'Kirjoittaa...', no: 'Skriver...', cs: 'Píše...', hu: 'Gépel...', ro: 'Scrie...', sk: 'Píše...', hr: 'Piše...', bg: 'Пише...', sl: 'Piše...', et: 'Kirjutab...', lv: 'Raksta...', lt: 'Rašo...', el: 'Πληκτρολογεί...', ru: 'Печатает...', uk: 'Друкує...', // Major Asian and world languages ja: '入力中...', zh: '正在输入...', ko: '입력 중...', ar: 'يكتب...', hi: 'टाइप कर रहा है...', id: 'Mengetik...', tr: 'Yazıyor...', th: 'กำลังพิมพ์...', vi: 'Đang gõ...', he: 'מקליד...', fa: 'در حال تایپ...', ms: 'Menaip...', tl: 'Nagta-type...', }, }, }; /** * Get browser language with enhanced fallback for mobile and PC compatibility */ export function getBrowserLanguage() { let lang = 'en'; // Default fallback try { // Try multiple browser language detection methods for better mobile compatibility if (typeof navigator !== 'undefined') { // Primary: navigator.language (most reliable) lang = navigator.language; // Fallback 1: navigator.languages array (modern browsers) if (!lang && navigator.languages && navigator.languages.length > 0) { lang = navigator.languages[0]; } // Fallback 2: navigator.userLanguage (IE/older browsers) if (!lang && navigator.userLanguage) { lang = navigator.userLanguage; } // Fallback 3: navigator.browserLanguage (IE/older browsers) if (!lang && navigator.browserLanguage) { lang = navigator.browserLanguage; } // Fallback 4: navigator.systemLanguage (IE/older browsers) if (!lang && navigator.systemLanguage) { lang = navigator.systemLanguage; } } // Ensure we have a valid string if (!lang || typeof lang !== 'string') { lang = 'en'; } // Extract main language code (e.g., 'en-US' becomes 'en') lang = lang.split('-')[0].toLowerCase(); // Validate the language code (basic check for 2-3 character codes) if (!/^[a-z]{2,3}$/.test(lang)) { lang = 'en'; } } catch (error) { // If any error occurs, fallback to English console.warn('Language detection failed:', error); lang = 'en'; } return lang; } /** * Get localized text with fallback to English */ export function getLocalizedText(category, key, language = null) { const lang = language || getBrowserLanguage(); if (translations[category] && translations[category][key]) { return ( translations[category][key][lang] || translations[category][key]['en'] || key ); } return key; } /** * Get all translations for a category in current language */ export function getLocalizedCategory(category, language = null) { const lang = language || getBrowserLanguage(); if (!translations[category]) return {}; const result = {}; for (const key in translations[category]) { result[key] = translations[category][key][lang] || translations[category][key]['en'] || key; } return result; } /** * Get direct translation for a top-level key */ export function getTranslation(key, language = null) { const lang = language || getBrowserLanguage(); if (translations[key]) { return translations[key][lang] || translations[key]['en'] || key; } return key; }