diff --git a/apps/readest-app/public/locales/ar/translation.json b/apps/readest-app/public/locales/ar/translation.json index bde3129e..467e3224 100644 --- a/apps/readest-app/public/locales/ar/translation.json +++ b/apps/readest-app/public/locales/ar/translation.json @@ -306,7 +306,6 @@ "File Size:": "حجم الملف:", "Auto Detect": "الكشف التلقائي", "Touch": "اللمس", - "Scrolling Overlap (px)": "تداخل التمرير (بكسل)", "Next Section": "القسم التالي", "Previous Section": "القسم السابق", "Next Page": "الصفحة التالية", @@ -327,5 +326,12 @@ "Azure Translator": "مترجم أزور", "Invert Image In Dark Mode": "عكس الصورة في الوضع المظلم", "Help improve Readest": "ساعد في تحسين ريديست", - "Sharing anonymized statistics": "مشاركة إحصائيات مجهولة الهوية" + "Sharing anonymized statistics": "مشاركة إحصائيات مجهولة الهوية", + "Interface Language": "لغة الواجهة", + "Translation": "الترجمة", + "Enable Translation": "تمكين الترجمة", + "Translation Service": "خدمة الترجمة", + "Translate To": "ترجمة إلى", + "Disable Translation": "تعطيل الترجمة", + "Overlap Margin": "هامش التداخل" } diff --git a/apps/readest-app/public/locales/de/translation.json b/apps/readest-app/public/locales/de/translation.json index d290db2b..dca5dbbf 100644 --- a/apps/readest-app/public/locales/de/translation.json +++ b/apps/readest-app/public/locales/de/translation.json @@ -306,7 +306,6 @@ "File Size:": "Dateigröße:", "Auto Detect": "Automatisch erkennen", "Touch": "Berührung", - "Scrolling Overlap (px)": "Scroll-Überlappung (px)", "Next Section": "Nächster Abschnitt", "Previous Section": "Vorheriger Abschnitt", "Next Page": "Nächste Seite", @@ -323,5 +322,12 @@ "Azure Translator": "Azure Übersetzer", "Invert Image In Dark Mode": "Invertiere Bild im Dunkeln", "Help improve Readest": "Readest verbessern helfen", - "Sharing anonymized statistics": "Anonymisierte Statistiken teilen" + "Sharing anonymized statistics": "Anonymisierte Statistiken teilen", + "Interface Language": "Benutzeroberflächensprache", + "Translation": "Übersetzung", + "Enable Translation": "Übersetzung aktivieren", + "Translation Service": "Übersetzungsdienst", + "Translate To": "Übersetzen nach", + "Disable Translation": "Übersetzung deaktivieren", + "Overlap Margin": "Überlappungsrand" } diff --git a/apps/readest-app/public/locales/el/translation.json b/apps/readest-app/public/locales/el/translation.json index 4c1f1bcb..3c94576e 100644 --- a/apps/readest-app/public/locales/el/translation.json +++ b/apps/readest-app/public/locales/el/translation.json @@ -306,7 +306,6 @@ "File Size:": "Μέγεθος αρχείου:", "Auto Detect": "Αυτόματη ανίχνευση", "Touch": "Αφή", - "Scrolling Overlap (px)": "Επικάλυψη κύλισης (px)", "Next Section": "Επόμενη ενότητα", "Previous Section": "Προηγούμενη ενότητα", "Next Page": "Επόμενη σελίδα", @@ -323,5 +322,12 @@ "Azure Translator": "Μεταφραστής Azure", "Invert Image In Dark Mode": "Αντιστροφή σε σκούρο", "Help improve Readest": "Βοηθήστε στη βελτίωση του Readest", - "Sharing anonymized statistics": "Μοιράζομαι ανώνυμες στατιστικές" + "Sharing anonymized statistics": "Μοιράζομαι ανώνυμες στατιστικές", + "Interface Language": "Γλώσσα διεπαφής", + "Translation": "Μετάφραση", + "Enable Translation": "Ενεργοποίηση μετάφρασης", + "Translation Service": "Υπηρεσία μετάφρασης", + "Translate To": "Μετάφραση σε", + "Disable Translation": "Απενεργοποίηση μετάφρασης", + "Overlap Margin": "Περιθώριο επικάλυψης" } diff --git a/apps/readest-app/public/locales/es/translation.json b/apps/readest-app/public/locales/es/translation.json index 2e287ad3..e92e3894 100644 --- a/apps/readest-app/public/locales/es/translation.json +++ b/apps/readest-app/public/locales/es/translation.json @@ -306,7 +306,6 @@ "File Size:": "Peso del archivo:", "Auto Detect": "Detección automática", "Touch": "Toque", - "Scrolling Overlap (px)": "Superposición de desplazamiento (px)", "Next Section": "Siguiente sección", "Previous Section": "Sección anterior", "Next Page": "Página siguiente", @@ -324,5 +323,12 @@ "Azure Translator": "Azure Translator", "Invert Image In Dark Mode": "Invertir imagen en oscuro", "Help improve Readest": "Ayuda a mejorar Readest", - "Sharing anonymized statistics": "Compartiendo estadísticas anónimas" + "Sharing anonymized statistics": "Compartiendo estadísticas anónimas", + "Interface Language": "Idioma de la interfaz", + "Translation": "Traducción", + "Enable Translation": "Habilitar traducción", + "Translation Service": "Servicio de traducción", + "Translate To": "Traducir a", + "Disable Translation": "Deshabilitar traducción", + "Overlap Margin": "Margen de superposición" } diff --git a/apps/readest-app/public/locales/fr/translation.json b/apps/readest-app/public/locales/fr/translation.json index 25b9f3d2..0a81e7f4 100644 --- a/apps/readest-app/public/locales/fr/translation.json +++ b/apps/readest-app/public/locales/fr/translation.json @@ -306,7 +306,6 @@ "File Size:": "Taille du fichier :", "Auto Detect": "Détection automatique", "Touch": "Touch", - "Scrolling Overlap (px)": "Chevauchement de défilement (px)", "Next Section": "Section suivante", "Previous Section": "Section précédente", "Next Page": "Page suivante", @@ -324,5 +323,12 @@ "Azure Translator": "Traducteur Azure", "Invert Image In Dark Mode": "Inverser l'image en mode sombre", "Help improve Readest": "Contribuer à améliorer Readest", - "Sharing anonymized statistics": "Partage de statistiques anonymisées" + "Sharing anonymized statistics": "Partage de statistiques anonymisées", + "Interface Language": "Langue de l'interface", + "Translation": "Traduction", + "Enable Translation": "Activer la traduction", + "Translation Service": "Service de traduction", + "Translate To": "Traduire vers", + "Disable Translation": " désactiver la traduction", + "Overlap Margin": "Marges de chevauchement" } diff --git a/apps/readest-app/public/locales/hi/translation.json b/apps/readest-app/public/locales/hi/translation.json index c7646df9..9244149f 100644 --- a/apps/readest-app/public/locales/hi/translation.json +++ b/apps/readest-app/public/locales/hi/translation.json @@ -306,7 +306,6 @@ "File Size:": "फ़ाइल आकार:", "Auto Detect": "स्वचालित पहचान", "Touch": "स्पर्श", - "Scrolling Overlap (px)": "स्क्रॉलिंग ओवरलैप (px)", "Next Section": "अगला अनुभाग", "Previous Section": "पिछला अनुभाग", "Next Page": "अगला पृष्ठ", @@ -323,5 +322,12 @@ "Azure Translator": "एज़्योर अनुवादक", "Invert Image In Dark Mode": "अंधेरे में छवि को उलटें", "Help improve Readest": "Readest में सुधार करने में मदद करें", - "Sharing anonymized statistics": "सांख्यिकी साझा करना" + "Sharing anonymized statistics": "सांख्यिकी साझा करना", + "Interface Language": "इंटरफ़ेस भाषा", + "Translation": "अनुवाद", + "Enable Translation": "अनुवाद सक्षम करें", + "Translation Service": "अनुवाद सेवा", + "Translate To": "अनुवाद करें", + "Disable Translation": "अनुवाद अक्षम करें", + "Overlap Margin": "ओवरलैप मार्जिन" } diff --git a/apps/readest-app/public/locales/id/translation.json b/apps/readest-app/public/locales/id/translation.json index 608126c3..10305e49 100644 --- a/apps/readest-app/public/locales/id/translation.json +++ b/apps/readest-app/public/locales/id/translation.json @@ -306,7 +306,6 @@ "File Size:": "Ukuran File:", "Auto Detect": "Deteksi Otomatis", "Touch": "Sentuh", - "Scrolling Overlap (px)": "Overlapping Gulir (px)", "Next Section": "Bagian Selanjutnya", "Previous Section": "Bagian Sebelumnya", "Next Page": "Halaman Berikutnya", @@ -322,5 +321,12 @@ "Azure Translator": "Azure Translator", "Invert Image In Dark Mode": "Inversi Gambar di Gelap", "Help improve Readest": "Bantu tingkatkan Readest", - "Sharing anonymized statistics": "Berbagi statistik anonim" + "Sharing anonymized statistics": "Berbagi statistik anonim", + "Interface Language": "Bahasa Antarmuka", + "Translation": "Terjemahan", + "Enable Translation": "Aktifkan Terjemahan", + "Translation Service": "Layanan Terjemahan", + "Translate To": "Terjemahkan Ke", + "Disable Translation": "Nonaktifkan Terjemahan", + "Overlap Margin": "Margin Tumpang Tindih" } diff --git a/apps/readest-app/public/locales/it/translation.json b/apps/readest-app/public/locales/it/translation.json index ab88bc62..17337076 100644 --- a/apps/readest-app/public/locales/it/translation.json +++ b/apps/readest-app/public/locales/it/translation.json @@ -306,7 +306,6 @@ "File Size:": "Dimensione file:", "Auto Detect": "Rilevamento automatico", "Touch": "Touch", - "Scrolling Overlap (px)": "Overlap scorrimento (px)", "Next Section": "Sezione successiva", "Previous Section": "Sezione precedente", "Next Page": "Pagina successiva", @@ -324,5 +323,12 @@ "Azure Translator": "Traduttore Azure", "Invert Image In Dark Mode": "Inverti immagine in scuro", "Help improve Readest": "Aiuta a migliorare Readest", - "Sharing anonymized statistics": "Condivisione di statistiche anonime" + "Sharing anonymized statistics": "Condivisione di statistiche anonime", + "Interface Language": "Lingua dell'interfaccia", + "Translation": "Traduzione", + "Enable Translation": "Abilita traduzione", + "Translation Service": "Servizio di traduzione", + "Translate To": "Traduci in", + "Disable Translation": "Disabilita traduzione", + "Overlap Margin": "Margine di sovrapposizione" } diff --git a/apps/readest-app/public/locales/ja/translation.json b/apps/readest-app/public/locales/ja/translation.json index a23121aa..eb5ed833 100644 --- a/apps/readest-app/public/locales/ja/translation.json +++ b/apps/readest-app/public/locales/ja/translation.json @@ -306,7 +306,6 @@ "File Size:": "ファイルサイズ:", "Auto Detect": "自動検出", "Touch": "タッチ", - "Scrolling Overlap (px)": "スクロール重複(px)", "Next Section": "次のセクション", "Previous Section": "前のセクション", "Next Page": "次のページ", @@ -322,5 +321,12 @@ "Azure Translator": "Azure翻訳", "Invert Image In Dark Mode": "ダークモードで画像を反転", "Help improve Readest": "Readestを改善する手助け", - "Sharing anonymized statistics": "匿名化された統計情報を共有" + "Sharing anonymized statistics": "匿名化された統計情報を共有", + "Interface Language": "インターフェースの言語", + "Translation": "翻訳", + "Enable Translation": "翻訳を有効にする", + "Translation Service": "翻訳サービス", + "Translate To": "翻訳先", + "Disable Translation": "翻訳を無効にする", + "Overlap Margin": "オーバーラップマージン" } diff --git a/apps/readest-app/public/locales/ko/translation.json b/apps/readest-app/public/locales/ko/translation.json index ec4a96d4..a11fc836 100644 --- a/apps/readest-app/public/locales/ko/translation.json +++ b/apps/readest-app/public/locales/ko/translation.json @@ -306,7 +306,6 @@ "File Size:": "파일 크기:", "Auto Detect": "자동 감지", "Touch": "터치", - "Scrolling Overlap (px)": "스크롤 겹침 (px)", "Next Section": "다음 섹션", "Previous Section": "이전 섹션", "Next Page": "다음 페이지", @@ -322,5 +321,12 @@ "Azure Translator": "Azure 번역기", "Invert Image In Dark Mode": "어두운 곳에서 이미지 반전", "Help improve Readest": "Readest 개선에 도움을 주세요", - "Sharing anonymized statistics": "익명화된 통계 공유" + "Sharing anonymized statistics": "익명화된 통계 공유", + "Interface Language": "인터페이스 언어", + "Translation": "번역", + "Enable Translation": "번역 활성화", + "Translation Service": "번역 서비스", + "Translate To": "번역 대상 언어", + "Disable Translation": "번역 비활성화", + "Overlap Margin": "겹침 여백" } diff --git a/apps/readest-app/public/locales/nl/translation.json b/apps/readest-app/public/locales/nl/translation.json index d4be7fb7..e435ea77 100644 --- a/apps/readest-app/public/locales/nl/translation.json +++ b/apps/readest-app/public/locales/nl/translation.json @@ -306,7 +306,6 @@ "Don’t have an account? Sign up": "Nog geen account? Registreer u", "All the world's a stage,\nAnd all the men and women merely players;\nThey have their exits and their entrances,\nAnd one man in his time plays many parts,\nHis acts being seven ages.\n\n— William Shakespeare": "De hele wereld is een toneel,\nEn alle mannen en vrouwen slechts spelers;\nZij hebben hun uitgangen en hun entrees,\nEn één man speelt in zijn tijd vele rollen,\nZijn daden zijnde zeven leeftijden.\n\n— William Shakespeare", "Touch": "Raak", - "Scrolling Overlap (px)": "Scroll-overlap (px)", "Next Section": "Volgende sectie", "Previous Section": "Vorige sectie", "Next Page": "Volgende pagina", @@ -323,5 +322,12 @@ "Azure Translator": "Azure Vertaler", "Invert Image In Dark Mode": "Inverteer afbeelding in het donker", "Help improve Readest": "Help Readest verbeteren", - "Sharing anonymized statistics": "Anonieme statistieken delen" + "Sharing anonymized statistics": "Anonieme statistieken delen", + "Interface Language": "Interface-taal", + "Translation": "Vertaling", + "Enable Translation": "Vertaling inschakelen", + "Translation Service": "Vertaalservice", + "Translate To": "Vertalen naar", + "Disable Translation": "Vertaling uitschakelen", + "Overlap Margin": "Overlap marge" } diff --git a/apps/readest-app/public/locales/pl/translation.json b/apps/readest-app/public/locales/pl/translation.json index aa6612d0..f6a389bc 100644 --- a/apps/readest-app/public/locales/pl/translation.json +++ b/apps/readest-app/public/locales/pl/translation.json @@ -306,7 +306,6 @@ "File Size:": "Rozmiar pliku:", "Auto Detect": "Automatyczne wykrywanie", "Touch": "Dotyk", - "Scrolling Overlap (px)": "Nakładanie przewijania (px)", "Next Section": "Następna sekcja", "Previous Section": "Poprzednia sekcja", "Next Page": "Następna strona", @@ -325,5 +324,12 @@ "Azure Translator": "Azure Translator", "Invert Image In Dark Mode": "Odwróć obraz w ciemności", "Help improve Readest": "Pomóż ulepszyć Readest", - "Sharing anonymized statistics": "Udostępnianie zanonimizowanych statystyk" + "Sharing anonymized statistics": "Udostępnianie zanonimizowanych statystyk", + "Interface Language": "Język interfejsu", + "Translation": "Tłumaczenie", + "Enable Translation": "Włącz tłumaczenie", + "Translation Service": "Usługa tłumaczenia", + "Translate To": "Przetłumacz na", + "Disable Translation": "Wyłącz tłumaczenie", + "Overlap Margin": "Margines nakładania" } diff --git a/apps/readest-app/public/locales/pt/translation.json b/apps/readest-app/public/locales/pt/translation.json index d29e0d64..29ea6531 100644 --- a/apps/readest-app/public/locales/pt/translation.json +++ b/apps/readest-app/public/locales/pt/translation.json @@ -306,7 +306,6 @@ "File Size:": "Tamanho do arquivo:", "Auto Detect": "Detectar Automaticamente", "Touch": "Toque", - "Scrolling Overlap (px)": "Sobreposição de Rolagem (px)", "Next Section": "Próxima seção", "Previous Section": "Seção anterior", "Next Page": "Próxima página", @@ -324,5 +323,12 @@ "Azure Translator": "Tradutor Azure", "Invert Image In Dark Mode": "Inverter Imagem no Escuro", "Help improve Readest": "Ajude a melhorar o Readest", - "Sharing anonymized statistics": "Compartilhando estatísticas anonimizadas" + "Sharing anonymized statistics": "Compartilhando estatísticas anonimizadas", + "Interface Language": "Idioma da interface", + "Translation": "Tradução", + "Enable Translation": "Ativar tradução", + "Translation Service": "Serviço de tradução", + "Translate To": "Traduzir para", + "Disable Translation": "Desativar tradução", + "Overlap Margin": "Margem de Sobreposição" } diff --git a/apps/readest-app/public/locales/ru/translation.json b/apps/readest-app/public/locales/ru/translation.json index eb66e37c..7a678289 100644 --- a/apps/readest-app/public/locales/ru/translation.json +++ b/apps/readest-app/public/locales/ru/translation.json @@ -306,7 +306,6 @@ "File Size:": "Размер файла:", "Auto Detect": "Автоопределение", "Touch": "Сенсорный экран", - "Scrolling Overlap (px)": "Перекрытие прокрутки (px)", "Next Section": "Следующий раздел", "Previous Section": "Предыдущий раздел", "Next Page": "Следующая страница", @@ -325,5 +324,12 @@ "Azure Translator": "Azure Translator", "Invert Image In Dark Mode": "Инвертировать в тёмной теме", "Help improve Readest": "Помогите улучшить Readest", - "Sharing anonymized statistics": "Отправка анонимной статистики" + "Sharing anonymized statistics": "Отправка анонимной статистики", + "Interface Language": "Язык интерфейса", + "Translation": "Перевод", + "Enable Translation": "Включить перевод", + "Translation Service": "Сервис перевода", + "Translate To": "Перевести на", + "Disable Translation": "Отключить перевод", + "Overlap Margin": "Поле перекрытия" } diff --git a/apps/readest-app/public/locales/tr/translation.json b/apps/readest-app/public/locales/tr/translation.json index 87728f9f..1ecf3f80 100644 --- a/apps/readest-app/public/locales/tr/translation.json +++ b/apps/readest-app/public/locales/tr/translation.json @@ -306,7 +306,6 @@ "File Size:": "Dosya Boyutu:", "Auto Detect": "Algıla", "Touch": "Dokunmatik", - "Scrolling Overlap (px)": "Kaydırma Üst Üste Binen (px)", "Next Section": "Sonraki Bölüm", "Previous Section": "Önceki Bölüm", "Next Page": "Sonraki Sayfa", @@ -323,5 +322,12 @@ "Azure Translator": "Azure Çevirmen", "Invert Image In Dark Mode": "Karartılmış Görüntüyü Ters Çevir", "Help improve Readest": "Readest’i geliştirin", - "Sharing anonymized statistics": "Anonim verileri paylaş" + "Sharing anonymized statistics": "Anonim verileri paylaş", + "Interface Language": "Arayüz Dili", + "Translation": "Çeviri", + "Enable Translation": "Çeviriyi Etkinleştir", + "Translation Service": "Çeviri Hizmeti", + "Translate To": "Şuna Çevir", + "Disable Translation": "Çeviriyi Devre Dışı Bırak", + "Overlap Margin": "Çakışma Kenar Boşluğu" } diff --git a/apps/readest-app/public/locales/uk/translation.json b/apps/readest-app/public/locales/uk/translation.json index 9f37fce0..be6c83b2 100644 --- a/apps/readest-app/public/locales/uk/translation.json +++ b/apps/readest-app/public/locales/uk/translation.json @@ -306,7 +306,6 @@ "File Size:": "Розмір файлу:", "Auto Detect": "Авто виявлення", "Touch": "Дотик", - "Scrolling Overlap (px)": "Прокрутка перекриття (px)", "Next Section": "Наступний розділ", "Previous Section": "Попередній розділ", "Next Page": "Наступна сторінка", @@ -325,5 +324,12 @@ "Azure Translator": "Azure Translator", "Invert Image In Dark Mode": "Інвертувати зображення в темряві", "Help improve Readest": "Допоможіть покращити Readest", - "Sharing anonymized statistics": "Поділ анонімною статистикою" + "Sharing anonymized statistics": "Поділ анонімною статистикою", + "Interface Language": "Мова інтерфейсу", + "Translation": "Переклад", + "Enable Translation": "Увімкнути переклад", + "Translation Service": "Служба перекладу", + "Translate To": "Перекласти на", + "Disable Translation": "Вимкнути переклад", + "Overlap Margin": "Відступ перекриття" } diff --git a/apps/readest-app/public/locales/vi/translation.json b/apps/readest-app/public/locales/vi/translation.json index 046bbb53..b848638d 100644 --- a/apps/readest-app/public/locales/vi/translation.json +++ b/apps/readest-app/public/locales/vi/translation.json @@ -306,7 +306,6 @@ "File Size:": "Kích thước tệp:", "Auto Detect": "Phát hiện tự động", "Touch": "Chạm", - "Scrolling Overlap (px)": "Chồng chéo cuộn (px)", "Next Section": "Phần tiếp theo", "Previous Section": "Phần trước", "Next Page": "Trang tiếp theo", @@ -322,5 +321,12 @@ "Azure Translator": "Azure Translator", "Invert Image In Dark Mode": "Đảo ảnh chế độ tối", "Help improve Readest": "Giúp cải thiện Readest", - "Sharing anonymized statistics": "Chia sẻ thống kê ẩn danh" + "Sharing anonymized statistics": "Chia sẻ thống kê ẩn danh", + "Interface Language": "Ngôn ngữ giao diện", + "Translation": "Dịch", + "Enable Translation": "Bật dịch", + "Translation Service": "Dịch vụ dịch thuật", + "Translate To": "Dịch sang", + "Disable Translation": "Tắt dịch", + "Overlap Margin": "Độ chồng lề" } diff --git a/apps/readest-app/public/locales/zh-CN/translation.json b/apps/readest-app/public/locales/zh-CN/translation.json index 09a48a8a..5c119fda 100644 --- a/apps/readest-app/public/locales/zh-CN/translation.json +++ b/apps/readest-app/public/locales/zh-CN/translation.json @@ -306,7 +306,6 @@ "File Size:": "文件大小", "Auto Detect": "自动检测", "Touch": "触控", - "Scrolling Overlap (px)": "滚动重叠(px)", "Next Section": "下一章", "Previous Section": "上一章", "Next Page": "下一页", @@ -322,5 +321,12 @@ "Azure Translator": "Azure Translator", "Invert Image In Dark Mode": "深色主题下图片反色", "Help improve Readest": "帮助改进 Readest", - "Sharing anonymized statistics": "分享匿名统计数据" + "Sharing anonymized statistics": "分享匿名统计数据", + "Interface Language": "界面语言", + "Translation": "翻译", + "Enable Translation": "启用翻译", + "Translation Service": "翻译服务", + "Translate To": "翻译到", + "Disable Translation": "禁用翻译", + "Overlap Margin": "重叠边距" } diff --git a/apps/readest-app/public/locales/zh-TW/translation.json b/apps/readest-app/public/locales/zh-TW/translation.json index 8c95d39f..ac47ddd3 100644 --- a/apps/readest-app/public/locales/zh-TW/translation.json +++ b/apps/readest-app/public/locales/zh-TW/translation.json @@ -306,7 +306,6 @@ "File Size:": "檔案大小", "Auto Detect": "自動檢測", "Touch": "觸控", - "Scrolling Overlap (px)": "滾動重疊(px)", "Next Section": "下一章", "Previous Section": "上一章", "Next Page": "下一頁", @@ -322,5 +321,12 @@ "Azure Translator": "Azure Translator", "Invert Image In Dark Mode": "深色主題下圖片反相", "Help improve Readest": "幫助改進 Readest", - "Sharing anonymized statistics": "分享匿名統計數據" + "Sharing anonymized statistics": "分享匿名統計數據", + "Interface Language": "介面語言", + "Translation": "翻譯", + "Enable Translation": "啟用翻譯", + "Translation Service": "翻譯服務", + "Translate To": "翻譯至", + "Disable Translation": "停用翻譯", + "Overlap Margin": "重疊邊距" } diff --git a/apps/readest-app/src/app/reader/components/FoliateViewer.tsx b/apps/readest-app/src/app/reader/components/FoliateViewer.tsx index 4a01d929..31269053 100644 --- a/apps/readest-app/src/app/reader/components/FoliateViewer.tsx +++ b/apps/readest-app/src/app/reader/components/FoliateViewer.tsx @@ -28,6 +28,7 @@ import { getMaxInlineSize } from '@/utils/config'; import { getDirFromUILanguage } from '@/utils/rtl'; import { transformContent } from '@/services/transformService'; import { lockScreenOrientation } from '@/utils/bridge'; +import { useTextTranslation } from '../hooks/useTextTranslation'; const FoliateViewer: React.FC<{ bookKey: string; @@ -52,6 +53,7 @@ const FoliateViewer: React.FC<{ useUICSS(bookKey); useProgressSync(bookKey); useProgressAutoSave(bookKey); + useTextTranslation(bookKey, viewRef.current); const progressRelocateHandler = (event: Event) => { const detail = (event as CustomEvent).detail; diff --git a/apps/readest-app/src/app/reader/components/HeaderBar.tsx b/apps/readest-app/src/app/reader/components/HeaderBar.tsx index 8b19f8dc..beb506fd 100644 --- a/apps/readest-app/src/app/reader/components/HeaderBar.tsx +++ b/apps/readest-app/src/app/reader/components/HeaderBar.tsx @@ -14,6 +14,7 @@ import SidebarToggler from './SidebarToggler'; import BookmarkToggler from './BookmarkToggler'; import NotebookToggler from './NotebookToggler'; import SettingsToggler from './SettingsToggler'; +import TranslationToggler from './TranslationToggler'; import ViewMenu from './ViewMenu'; interface HeaderBarProps { @@ -129,6 +130,7 @@ const HeaderBar: React.FC = ({
+ { + const _ = useTranslation(); + const { envConfig } = useEnv(); + const { getViewSettings, setViewSettings, setHoveredBookKey } = useReaderStore(); + const viewSettings = getViewSettings(bookKey)!; + const [translationEnabled, setTranslationEnabled] = useState(viewSettings.translationEnabled!); + + useEffect(() => { + if (translationEnabled === viewSettings.translationEnabled) return; + setHoveredBookKey(''); + saveViewSettings(envConfig, bookKey, 'translationEnabled', translationEnabled, true, false); + viewSettings.translationEnabled = translationEnabled; + setViewSettings(bookKey, { ...viewSettings }); + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [translationEnabled]); + + return ( + + ); +}; + +export default TranslationToggler; diff --git a/apps/readest-app/src/app/reader/components/annotator/TranslatorPopup.tsx b/apps/readest-app/src/app/reader/components/annotator/TranslatorPopup.tsx index 8bb08149..a1b24b5b 100644 --- a/apps/readest-app/src/app/reader/components/annotator/TranslatorPopup.tsx +++ b/apps/readest-app/src/app/reader/components/annotator/TranslatorPopup.tsx @@ -6,7 +6,8 @@ import { useSettingsStore } from '@/store/settingsStore'; import { useTranslation } from '@/hooks/useTranslation'; import { useTranslator } from '@/hooks/useTranslator'; import { TRANSLATED_LANGS } from '@/services/constants'; -import { TranslatorName } from '@/services/translators'; +import { UseTranslatorOptions } from '@/services/translators'; +import { localeToLang } from '@/utils/lang'; import Select from '@/components/Select'; const notSupportedLangs = ['hi', 'vi']; @@ -16,12 +17,7 @@ const generateTranslatorLangs = () => { const result: Record = {}; for (const [code, name] of Object.entries(langs)) { if (notSupportedLangs.includes(code)) continue; - let newCode = code.toUpperCase(); - if (newCode === 'ZH-CN') { - newCode = 'ZH-HANS'; - } else if (newCode === 'ZH-TW') { - newCode = 'ZH-HANT'; - } + const newCode = localeToLang(code).toUpperCase(); result[newCode] = name; } return result; @@ -53,11 +49,9 @@ const TranslatorPopup: React.FC = ({ const { token } = useAuth(); const { settings, setSettings } = useSettingsStore(); const [providers, setProviders] = useState([]); - const [provider, setProvider] = useState( - settings.globalReadSettings.translationProvider as TranslatorName, - ); const [sourceLang, setSourceLang] = useState('AUTO'); const [targetLang, setTargetLang] = useState(settings.globalReadSettings.translateTargetLang); + const [provider, setProvider] = useState(settings.globalReadSettings.translationProvider); const [translation, setTranslation] = useState(null); const [detectedSourceLang, setDetectedSourceLang] = useState< keyof typeof TRANSLATOR_LANGS | null @@ -69,7 +63,7 @@ const TranslatorPopup: React.FC = ({ provider, sourceLang, targetLang, - }); + } as UseTranslatorOptions); const handleSourceLangChange = (event: React.ChangeEvent) => { setSourceLang(event.target.value); @@ -86,7 +80,7 @@ const TranslatorPopup: React.FC = ({ if (selectedTranslator) { settings.globalReadSettings.translationProvider = selectedTranslator.name; setSettings(settings); - setProvider(selectedTranslator.name as TranslatorName); + setProvider(selectedTranslator.name); } }; diff --git a/apps/readest-app/src/app/reader/components/settings/ControlPanel.tsx b/apps/readest-app/src/app/reader/components/settings/ControlPanel.tsx index c7b8d436..b78e6652 100644 --- a/apps/readest-app/src/app/reader/components/settings/ControlPanel.tsx +++ b/apps/readest-app/src/app/reader/components/settings/ControlPanel.tsx @@ -92,7 +92,7 @@ const ControlPanel: React.FC<{ bookKey: string }> = ({ bookKey }) => { />
void; + disabled?: boolean; + className?: string; + listClassName?: string; } -const DropDown: React.FC = ({ selected, options, onSelect }) => { +const DropDown: React.FC = ({ + selected, + options, + onSelect, + className, + listClassName, + disabled = false, +}) => { const iconSize16 = useResponsiveSize(16); const defaultIconSize = useDefaultIconSize(); return ( -
+