From bb55afb562b4071342c7719da88f53b7de754c53 Mon Sep 17 00:00:00 2001 From: root Date: Thu, 9 Apr 2026 10:18:12 +0500 Subject: [PATCH] fix: add missing admin_nav_import i18n key for import page --- ui/messages/en.json | 1 + ui/messages/fr.json | 52 +++---------------- ui/messages/id.json | 52 +++---------------- ui/messages/pt.json | 52 +++---------------- ui/messages/ru.json | 52 +++---------------- ui/src/lib/paraglide/README.md | 2 +- ui/src/lib/paraglide/messages/_index.js | 27 +++++----- .../messages/admin_ai_jobs_heading.js | 6 ++- .../messages/admin_ai_jobs_page_title.js | 6 ++- .../messages/admin_ai_jobs_subheading.js | 6 ++- .../messages/admin_text_gen_heading.js | 6 ++- .../messages/admin_text_gen_page_title.js | 6 ++- .../admin_translation_filter_placeholder.js | 6 ++- .../messages/admin_translation_heading.js | 6 ++- .../messages/admin_translation_no_jobs.js | 6 ++- .../messages/admin_translation_no_matching.js | 6 ++- .../messages/admin_translation_page_title.js | 6 ++- .../messages/admin_translation_tab_enqueue.js | 6 ++- .../messages/admin_translation_tab_jobs.js | 6 ++- .../paraglide/messages/profile_theme_cyber.js | 2 +- .../messages/profile_theme_forest.js | 2 +- .../paraglide/messages/profile_theme_mono.js | 2 +- 22 files changed, 107 insertions(+), 209 deletions(-) diff --git a/ui/messages/en.json b/ui/messages/en.json index 3e7ded2..dcaa371 100644 --- a/ui/messages/en.json +++ b/ui/messages/en.json @@ -402,6 +402,7 @@ "admin_nav_scrape": "Scrape", "admin_nav_audio": "Audio", "admin_nav_translation": "Translation", + "admin_nav_import": "Import", "admin_nav_changelog": "Changelog", "admin_nav_image_gen": "Image Gen", "admin_nav_text_gen": "Text Gen", diff --git a/ui/messages/fr.json b/ui/messages/fr.json index 9bc301b..a5074aa 100644 --- a/ui/messages/fr.json +++ b/ui/messages/fr.json @@ -1,6 +1,5 @@ { "$schema": "https://inlang.com/schema/inlang-message-format", - "nav_library": "Bibliothèque", "nav_catalogue": "Catalogue", "nav_feed": "Fil", @@ -11,7 +10,6 @@ "nav_sign_out": "Déconnexion", "nav_toggle_menu": "Menu", "nav_admin_panel": "Panneau admin", - "footer_library": "Bibliothèque", "footer_catalogue": "Catalogue", "footer_feedback": "Retour", @@ -20,7 +18,6 @@ "footer_dmca": "DMCA", "footer_copyright": "© {year} libnovel", "footer_dev": "dev", - "home_title": "libnovel", "home_stat_books": "Livres", "home_stat_chapters": "Chapitres", @@ -34,7 +31,6 @@ "home_discover_novels": "Découvrir des romans", "home_via_reader": "via {username}", "home_chapter_badge": "ch.{n}", - "player_generating": "Génération… {percent}%", "player_loading": "Chargement…", "player_chapters": "Chapitres", @@ -58,7 +54,6 @@ "player_auto_next_aria": "Suivant auto {state}", "player_go_to_chapter": "Aller au chapitre", "player_close": "Fermer le lecteur", - "login_page_title": "Connexion — libnovel", "login_heading": "Se connecter à libnovel", "login_subheading": "Choisissez un fournisseur pour continuer", @@ -68,7 +63,6 @@ "login_error_oauth_state": "Connexion annulée ou expirée. Veuillez réessayer.", "login_error_oauth_failed": "Impossible de se connecter au fournisseur. Veuillez réessayer.", "login_error_oauth_no_email": "Votre compte n'a pas d'adresse e-mail vérifiée. Ajoutez-en une et réessayez.", - "books_page_title": "Bibliothèque — libnovel", "books_heading": "Votre bibliothèque", "books_empty_title": "Aucun livre pour l'instant", @@ -78,7 +72,6 @@ "books_last_read": "Dernier lu : Ch.{n}", "books_reading_progress": "Ch.{current} / {total}", "books_remove": "Supprimer", - "catalogue_page_title": "Catalogue — libnovel", "catalogue_heading": "Catalogue", "catalogue_search_placeholder": "Rechercher des romans…", @@ -99,7 +92,6 @@ "catalogue_loading": "Chargement…", "catalogue_load_more": "Charger plus", "catalogue_results_count": "{n} résultats", - "book_detail_page_title": "{title} — libnovel", "book_detail_signin_to_save": "Connectez-vous pour sauvegarder", "book_detail_add_to_library": "Ajouter à la bibliothèque", @@ -116,13 +108,11 @@ "book_detail_rescrape": "Réextraire", "book_detail_scraping": "Extraction en cours…", "book_detail_in_library": "Dans la bibliothèque", - "chapters_page_title": "Chapitres — {title}", "chapters_heading": "Chapitres", "chapters_back_to_book": "Retour au livre", "chapters_reading_now": "En cours de lecture", "chapters_empty": "Aucun chapitre extrait pour l'instant.", - "reader_page_title": "{title} — Ch.{n} — libnovel", "reader_play_narration": "Lire la narration", "reader_generating_audio": "Génération audio…", @@ -144,7 +134,6 @@ "reader_auto_next": "Suivant auto", "reader_speed": "Vitesse", "reader_preview_notice": "Aperçu — ce chapitre n'a pas été entièrement extrait.", - "profile_page_title": "Profil — libnovel", "profile_heading": "Profil", "profile_avatar_label": "Avatar", @@ -179,7 +168,6 @@ "profile_sessions_heading": "Sessions actives", "profile_sign_out_all": "Se déconnecter de tous les autres appareils", "profile_joined": "Inscrit le {date}", - "user_page_title": "{username} — libnovel", "user_library_heading": "Bibliothèque de {username}", "user_follow": "Suivre", @@ -187,13 +175,11 @@ "user_followers": "{n} abonnés", "user_following": "{n} abonnements", "user_library_empty": "Aucun livre dans la bibliothèque.", - "error_not_found_title": "Page introuvable", "error_not_found_body": "La page que vous cherchez n'existe pas.", "error_generic_title": "Une erreur s'est produite", "error_go_home": "Accueil", "error_status": "Erreur {status}", - "admin_scrape_page_title": "Extraction — Admin", "admin_scrape_heading": "Extraction", "admin_scrape_catalogue": "Extraire le catalogue", @@ -211,14 +197,11 @@ "admin_scrape_status_cancelled": "Annulé", "admin_tasks_heading": "Tâches récentes", "admin_tasks_empty": "Aucune tâche pour l'instant.", - "admin_audio_page_title": "Audio — Admin", "admin_audio_heading": "Tâches audio", "admin_audio_empty": "Aucune tâche audio.", - "admin_changelog_page_title": "Changelog — Admin", "admin_changelog_heading": "Changelog", - "comments_heading": "Commentaires", "comments_empty": "Aucun commentaire pour l'instant. Soyez le premier !", "comments_placeholder": "Écrire un commentaire…", @@ -232,12 +215,10 @@ "comments_hide_replies": "Masquer les réponses", "comments_edited": "modifié", "comments_deleted": "[supprimé]", - "disclaimer_page_title": "Avertissement — libnovel", "privacy_page_title": "Politique de confidentialité — libnovel", "dmca_page_title": "DMCA — libnovel", "terms_page_title": "Conditions d'utilisation — libnovel", - "common_loading": "Chargement…", "common_error": "Erreur", "common_save": "Enregistrer", @@ -251,15 +232,12 @@ "common_no": "Non", "common_on": "activé", "common_off": "désactivé", - "locale_switcher_label": "Langue", - "books_empty_library": "Votre bibliothèque est vide.", "books_empty_discover": "Les livres que vous commencez à lire ou enregistrez depuis", "books_empty_discover_link": "Découvrir", "books_empty_discover_suffix": "apparaîtront ici.", "books_count": "{n} livre{s}", - "catalogue_sort_updated": "Mis à jour", "catalogue_search_button": "Rechercher", "catalogue_refresh": "Actualiser", @@ -292,7 +270,6 @@ "catalogue_scrape_forbidden_badge": "Interdit", "catalogue_scrape_novel_button": "Extraire", "catalogue_scraping_novel": "Extraction…", - "book_detail_not_in_library": "pas dans la bibliothèque", "book_detail_continue_ch": "Continuer ch.{n}", "book_detail_start_ch1": "Commencer au ch.1", @@ -328,18 +305,15 @@ "book_detail_rescrape_book": "Réextraire le livre", "book_detail_less": "Moins", "book_detail_more": "Plus", - "chapters_search_placeholder": "Rechercher des chapitres…", "chapters_jump_to": "Aller au Ch.{n}", "chapters_no_match": "Aucun chapitre ne correspond à « {q} »", "chapters_none_available": "Aucun chapitre disponible pour l'instant.", "chapters_reading_indicator": "en cours", "chapters_result_count": "{n} résultats", - "reader_fetching_chapter": "Récupération du chapitre…", "reader_words": "{n} mots", "reader_preview_audio_notice": "Aperçu — audio non disponible pour les livres hors bibliothèque.", - "profile_click_to_change": "Cliquez sur l'avatar pour changer la photo", "profile_tts_voice": "Voix TTS", "profile_auto_advance": "Avancer automatiquement au chapitre suivant", @@ -357,7 +331,6 @@ "profile_updating": "Mise à jour…", "profile_password_changed_ok": "Mot de passe modifié avec succès.", "profile_playback_speed": "Vitesse de lecture — {speed}x", - "profile_subscription_heading": "Abonnement", "profile_plan_pro": "Pro", "profile_plan_free": "Gratuit", @@ -369,7 +342,7 @@ "profile_upgrade_monthly": "Mensuel — 6 $ / mois", "profile_upgrade_annual": "Annuel — 48 $ / an", "profile_free_limits": "Plan gratuit : 3 chapitres audio par jour, lecture en anglais uniquement.", - "subscribe_page_title": "Passer Pro \u2014 libnovel", + "subscribe_page_title": "Passer Pro — libnovel", "subscribe_heading": "Lisez plus. Écoutez plus.", "subscribe_subheading": "Passez Pro et débloquez l'expérience libnovel complète.", "subscribe_monthly_label": "Mensuel", @@ -389,14 +362,12 @@ "subscribe_benefit_downloads": "Télécharger des chapitres pour une écoute hors ligne", "subscribe_login_prompt": "Connectez-vous pour vous abonner", "subscribe_login_cta": "Se connecter", - "user_currently_reading": "En cours de lecture", "user_library_count": "Bibliothèque ({n})", "user_joined": "Inscrit le {date}", "user_followers_label": "abonnés", "user_following_label": "abonnements", "user_no_books": "Aucun livre dans la bibliothèque pour l'instant.", - "admin_pages_label": "Pages", "admin_tools_label": "Outils", "admin_nav_scrape": "Scrape", @@ -412,7 +383,6 @@ "admin_nav_logs": "Journaux", "admin_nav_uptime": "Disponibilité", "admin_nav_push": "Notifications", - "admin_scrape_status_idle": "Inactif", "admin_scrape_full_catalogue": "Catalogue complet", "admin_scrape_single_book": "Livre unique", @@ -423,25 +393,21 @@ "admin_scrape_start": "Démarrer l'extraction", "admin_scrape_queuing": "En file d'attente…", "admin_scrape_running": "En cours…", - "admin_audio_filter_jobs": "Filtrer par slug, voix ou statut…", "admin_audio_filter_cache": "Filtrer par slug, chapitre ou voix…", "admin_audio_no_matching_jobs": "Aucun job correspondant.", "admin_audio_no_jobs": "Aucun job audio pour l'instant.", "admin_audio_cache_empty": "Cache audio vide.", "admin_audio_no_cache_results": "Aucun résultat.", - "admin_changelog_gitea": "Releases Gitea", "admin_changelog_no_releases": "Aucune release trouvée.", "admin_changelog_load_error": "Impossible de charger les releases : {error}", - "comments_top": "Les meilleures", "comments_new": "Nouvelles", "comments_posting": "Publication…", "comments_login_link": "Connectez-vous", "comments_login_suffix": "pour laisser un commentaire.", "comments_anonymous": "Anonyme", - "reader_audio_narration": "Narration Audio", "reader_playing": "Lecture en cours — contrôles ci-dessous", "reader_paused": "En pause — contrôles ci-dessous", @@ -454,7 +420,6 @@ "reader_voice_applies_next": "La nouvelle voix s'appliquera au prochain « Lire la narration ».", "reader_choose_voice": "Choisir une voix", "reader_generating_narration": "Génération de la narration…", - "profile_font_family": "Police", "profile_font_system": "Système", "profile_font_serif": "Serif", @@ -464,7 +429,6 @@ "profile_text_size_md": "Normal", "profile_text_size_lg": "Grand", "profile_text_size_xl": "Très grand", - "feed_page_title": "Fil — LibNovel", "feed_heading": "Fil d'abonnements", "feed_subheading": "Livres lus par vos abonnements", @@ -477,19 +441,17 @@ "feed_find_users_cta": "Trouver des lecteurs", "admin_nav_gitea": "Gitea", "admin_nav_grafana": "Grafana", - - "admin_translation_page_title": "Translation \u2014 Admin", + "admin_translation_page_title": "Translation — Admin", "admin_translation_heading": "Machine Translation", "admin_translation_tab_enqueue": "Enqueue", "admin_translation_tab_jobs": "Jobs", - "admin_translation_filter_placeholder": "Filter by slug, lang, or status\u2026", + "admin_translation_filter_placeholder": "Filter by slug, lang, or status…", "admin_translation_no_matching": "No matching jobs.", "admin_translation_no_jobs": "No translation jobs yet.", - - "admin_ai_jobs_page_title": "AI Jobs \u2014 Admin", + "admin_ai_jobs_page_title": "AI Jobs — Admin", "admin_ai_jobs_heading": "AI Jobs", "admin_ai_jobs_subheading": "Background AI generation tasks", - - "admin_text_gen_page_title": "Text Gen \u2014 Admin", - "admin_text_gen_heading": "Text Generation" + "admin_text_gen_page_title": "Text Gen — Admin", + "admin_text_gen_heading": "Text Generation", + "admin_nav_import": "Import" } diff --git a/ui/messages/id.json b/ui/messages/id.json index f822a19..c3047e7 100644 --- a/ui/messages/id.json +++ b/ui/messages/id.json @@ -1,6 +1,5 @@ { "$schema": "https://inlang.com/schema/inlang-message-format", - "nav_library": "Perpustakaan", "nav_catalogue": "Katalog", "nav_feed": "Umpan", @@ -11,7 +10,6 @@ "nav_sign_out": "Keluar", "nav_toggle_menu": "Menu", "nav_admin_panel": "Panel admin", - "footer_library": "Perpustakaan", "footer_catalogue": "Katalog", "footer_feedback": "Masukan", @@ -20,7 +18,6 @@ "footer_dmca": "DMCA", "footer_copyright": "© {year} libnovel", "footer_dev": "dev", - "home_title": "libnovel", "home_stat_books": "Buku", "home_stat_chapters": "Bab", @@ -34,7 +31,6 @@ "home_discover_novels": "Temukan Novel", "home_via_reader": "via {username}", "home_chapter_badge": "bab.{n}", - "player_generating": "Membuat… {percent}%", "player_loading": "Memuat…", "player_chapters": "Bab", @@ -58,7 +54,6 @@ "player_auto_next_aria": "Auto-lanjut {state}", "player_go_to_chapter": "Pergi ke bab", "player_close": "Tutup pemutar", - "login_page_title": "Masuk — libnovel", "login_heading": "Masuk ke libnovel", "login_subheading": "Pilih penyedia untuk melanjutkan", @@ -68,7 +63,6 @@ "login_error_oauth_state": "Masuk dibatalkan atau kedaluwarsa. Coba lagi.", "login_error_oauth_failed": "Tidak dapat terhubung ke penyedia. Coba lagi.", "login_error_oauth_no_email": "Akunmu tidak memiliki alamat email terverifikasi. Tambahkan dan coba lagi.", - "books_page_title": "Perpustakaan — libnovel", "books_heading": "Perpustakaanmu", "books_empty_title": "Belum ada buku", @@ -78,7 +72,6 @@ "books_last_read": "Terakhir: Bab.{n}", "books_reading_progress": "Bab.{current} / {total}", "books_remove": "Hapus", - "catalogue_page_title": "Katalog — libnovel", "catalogue_heading": "Katalog", "catalogue_search_placeholder": "Cari novel…", @@ -99,7 +92,6 @@ "catalogue_loading": "Memuat…", "catalogue_load_more": "Muat lebih banyak", "catalogue_results_count": "{n} hasil", - "book_detail_page_title": "{title} — libnovel", "book_detail_signin_to_save": "Masuk untuk menyimpan", "book_detail_add_to_library": "Tambah ke Perpustakaan", @@ -116,13 +108,11 @@ "book_detail_rescrape": "Perbarui", "book_detail_scraping": "Memperbarui…", "book_detail_in_library": "Ada di Perpustakaan", - "chapters_page_title": "Bab — {title}", "chapters_heading": "Bab", "chapters_back_to_book": "Kembali ke buku", "chapters_reading_now": "Sedang dibaca", "chapters_empty": "Belum ada bab yang diambil.", - "reader_page_title": "{title} — Bab.{n} — libnovel", "reader_play_narration": "Putar narasi", "reader_generating_audio": "Membuat audio…", @@ -144,7 +134,6 @@ "reader_auto_next": "Auto-lanjut", "reader_speed": "Kecepatan", "reader_preview_notice": "Pratinjau — bab ini belum sepenuhnya diambil.", - "profile_page_title": "Profil — libnovel", "profile_heading": "Profil", "profile_avatar_label": "Avatar", @@ -179,7 +168,6 @@ "profile_sessions_heading": "Sesi aktif", "profile_sign_out_all": "Keluar dari semua perangkat lain", "profile_joined": "Bergabung {date}", - "user_page_title": "{username} — libnovel", "user_library_heading": "Perpustakaan {username}", "user_follow": "Ikuti", @@ -187,13 +175,11 @@ "user_followers": "{n} pengikut", "user_following": "{n} mengikuti", "user_library_empty": "Tidak ada buku di perpustakaan.", - "error_not_found_title": "Halaman tidak ditemukan", "error_not_found_body": "Halaman yang kamu cari tidak ada.", "error_generic_title": "Terjadi kesalahan", "error_go_home": "Ke beranda", "error_status": "Error {status}", - "admin_scrape_page_title": "Scrape — Admin", "admin_scrape_heading": "Scrape", "admin_scrape_catalogue": "Scrape Katalog", @@ -211,14 +197,11 @@ "admin_scrape_status_cancelled": "Dibatalkan", "admin_tasks_heading": "Tugas terbaru", "admin_tasks_empty": "Belum ada tugas.", - "admin_audio_page_title": "Audio — Admin", "admin_audio_heading": "Tugas Audio", "admin_audio_empty": "Tidak ada tugas audio.", - "admin_changelog_page_title": "Changelog — Admin", "admin_changelog_heading": "Changelog", - "comments_heading": "Komentar", "comments_empty": "Belum ada komentar. Jadilah yang pertama!", "comments_placeholder": "Tulis komentar…", @@ -232,12 +215,10 @@ "comments_hide_replies": "Sembunyikan balasan", "comments_edited": "diedit", "comments_deleted": "[dihapus]", - "disclaimer_page_title": "Penyangkalan — libnovel", "privacy_page_title": "Kebijakan Privasi — libnovel", "dmca_page_title": "DMCA — libnovel", "terms_page_title": "Syarat Layanan — libnovel", - "common_loading": "Memuat…", "common_error": "Error", "common_save": "Simpan", @@ -251,15 +232,12 @@ "common_no": "Tidak", "common_on": "aktif", "common_off": "nonaktif", - "locale_switcher_label": "Bahasa", - "books_empty_library": "Perpustakaanmu kosong.", "books_empty_discover": "Buku yang mulai kamu baca atau simpan dari", "books_empty_discover_link": "Temukan", "books_empty_discover_suffix": "akan muncul di sini.", "books_count": "{n} buku", - "catalogue_sort_updated": "Diperbarui", "catalogue_search_button": "Cari", "catalogue_refresh": "Segarkan", @@ -292,7 +270,6 @@ "catalogue_scrape_forbidden_badge": "Terlarang", "catalogue_scrape_novel_button": "Scrape", "catalogue_scraping_novel": "Scraping…", - "book_detail_not_in_library": "tidak di perpustakaan", "book_detail_continue_ch": "Lanjutkan bab.{n}", "book_detail_start_ch1": "Mulai dari bab.1", @@ -328,18 +305,15 @@ "book_detail_rescrape_book": "Scrape ulang buku", "book_detail_less": "Lebih sedikit", "book_detail_more": "Selengkapnya", - "chapters_search_placeholder": "Cari bab…", "chapters_jump_to": "Loncat ke Bab.{n}", "chapters_no_match": "Tidak ada bab yang cocok dengan \"{q}\"", "chapters_none_available": "Belum ada bab tersedia.", "chapters_reading_indicator": "sedang dibaca", "chapters_result_count": "{n} hasil", - "reader_fetching_chapter": "Mengambil bab…", "reader_words": "{n} kata", "reader_preview_audio_notice": "Pratinjau — audio tidak tersedia untuk buku di luar perpustakaan.", - "profile_click_to_change": "Klik avatar untuk mengganti foto", "profile_tts_voice": "Suara TTS", "profile_auto_advance": "Otomatis lanjut ke bab berikutnya", @@ -357,7 +331,6 @@ "profile_updating": "Memperbarui…", "profile_password_changed_ok": "Kata sandi berhasil diubah.", "profile_playback_speed": "Kecepatan pemutaran — {speed}x", - "profile_subscription_heading": "Langganan", "profile_plan_pro": "Pro", "profile_plan_free": "Gratis", @@ -369,7 +342,7 @@ "profile_upgrade_monthly": "Bulanan — $6 / bln", "profile_upgrade_annual": "Tahunan — $48 / thn", "profile_free_limits": "Paket gratis: 3 bab audio per hari, hanya bahasa Inggris.", - "subscribe_page_title": "Jadi Pro \u2014 libnovel", + "subscribe_page_title": "Jadi Pro — libnovel", "subscribe_heading": "Baca lebih. Dengarkan lebih.", "subscribe_subheading": "Tingkatkan ke Pro dan buka pengalaman libnovel sepenuhnya.", "subscribe_monthly_label": "Bulanan", @@ -389,14 +362,12 @@ "subscribe_benefit_downloads": "Unduh bab untuk didengarkan secara offline", "subscribe_login_prompt": "Masuk untuk berlangganan", "subscribe_login_cta": "Masuk", - "user_currently_reading": "Sedang Dibaca", "user_library_count": "Perpustakaan ({n})", "user_joined": "Bergabung {date}", "user_followers_label": "pengikut", "user_following_label": "mengikuti", "user_no_books": "Belum ada buku di perpustakaan.", - "admin_pages_label": "Halaman", "admin_tools_label": "Alat", "admin_nav_scrape": "Scrape", @@ -412,7 +383,6 @@ "admin_nav_logs": "Log", "admin_nav_uptime": "Uptime", "admin_nav_push": "Notifikasi", - "admin_scrape_status_idle": "Menunggu", "admin_scrape_full_catalogue": "Katalog penuh", "admin_scrape_single_book": "Satu buku", @@ -423,25 +393,21 @@ "admin_scrape_start": "Mulai scrape", "admin_scrape_queuing": "Mengantri…", "admin_scrape_running": "Berjalan…", - "admin_audio_filter_jobs": "Filter berdasarkan slug, suara, atau status…", "admin_audio_filter_cache": "Filter berdasarkan slug, bab, atau suara…", "admin_audio_no_matching_jobs": "Tidak ada pekerjaan yang cocok.", "admin_audio_no_jobs": "Belum ada pekerjaan audio.", "admin_audio_cache_empty": "Cache audio kosong.", "admin_audio_no_cache_results": "Tidak ada hasil.", - "admin_changelog_gitea": "Rilis Gitea", "admin_changelog_no_releases": "Tidak ada rilis.", "admin_changelog_load_error": "Gagal memuat rilis: {error}", - "comments_top": "Teratas", "comments_new": "Terbaru", "comments_posting": "Mengirim…", "comments_login_link": "Masuk", "comments_login_suffix": "untuk meninggalkan komentar.", "comments_anonymous": "Anonim", - "reader_audio_narration": "Narasi Audio", "reader_playing": "Memutar — kontrol di bawah", "reader_paused": "Dijeda — kontrol di bawah", @@ -454,7 +420,6 @@ "reader_voice_applies_next": "Suara baru berlaku pada \"Putar narasi\" berikutnya.", "reader_choose_voice": "Pilih Suara", "reader_generating_narration": "Membuat narasi…", - "profile_font_family": "Jenis Font", "profile_font_system": "Sistem", "profile_font_serif": "Serif", @@ -464,7 +429,6 @@ "profile_text_size_md": "Normal", "profile_text_size_lg": "Besar", "profile_text_size_xl": "Sangat Besar", - "feed_page_title": "Umpan — LibNovel", "feed_heading": "Umpan Ikutan", "feed_subheading": "Buku yang sedang dibaca oleh pengguna yang Anda ikuti", @@ -477,19 +441,17 @@ "feed_find_users_cta": "Temukan pembaca", "admin_nav_gitea": "Gitea", "admin_nav_grafana": "Grafana", - - "admin_translation_page_title": "Translation \u2014 Admin", + "admin_translation_page_title": "Translation — Admin", "admin_translation_heading": "Machine Translation", "admin_translation_tab_enqueue": "Enqueue", "admin_translation_tab_jobs": "Jobs", - "admin_translation_filter_placeholder": "Filter by slug, lang, or status\u2026", + "admin_translation_filter_placeholder": "Filter by slug, lang, or status…", "admin_translation_no_matching": "No matching jobs.", "admin_translation_no_jobs": "No translation jobs yet.", - - "admin_ai_jobs_page_title": "AI Jobs \u2014 Admin", + "admin_ai_jobs_page_title": "AI Jobs — Admin", "admin_ai_jobs_heading": "AI Jobs", "admin_ai_jobs_subheading": "Background AI generation tasks", - - "admin_text_gen_page_title": "Text Gen \u2014 Admin", - "admin_text_gen_heading": "Text Generation" + "admin_text_gen_page_title": "Text Gen — Admin", + "admin_text_gen_heading": "Text Generation", + "admin_nav_import": "Import" } diff --git a/ui/messages/pt.json b/ui/messages/pt.json index 0965e52..268ef48 100644 --- a/ui/messages/pt.json +++ b/ui/messages/pt.json @@ -1,6 +1,5 @@ { "$schema": "https://inlang.com/schema/inlang-message-format", - "nav_library": "Biblioteca", "nav_catalogue": "Catálogo", "nav_feed": "Feed", @@ -11,7 +10,6 @@ "nav_sign_out": "Sair", "nav_toggle_menu": "Menu", "nav_admin_panel": "Painel admin", - "footer_library": "Biblioteca", "footer_catalogue": "Catálogo", "footer_feedback": "Feedback", @@ -20,7 +18,6 @@ "footer_dmca": "DMCA", "footer_copyright": "© {year} libnovel", "footer_dev": "dev", - "home_title": "libnovel", "home_stat_books": "Livros", "home_stat_chapters": "Capítulos", @@ -34,7 +31,6 @@ "home_discover_novels": "Descobrir Romances", "home_via_reader": "via {username}", "home_chapter_badge": "cap.{n}", - "player_generating": "Gerando… {percent}%", "player_loading": "Carregando…", "player_chapters": "Capítulos", @@ -58,7 +54,6 @@ "player_auto_next_aria": "Próximo automático {state}", "player_go_to_chapter": "Ir para capítulo", "player_close": "Fechar player", - "login_page_title": "Entrar — libnovel", "login_heading": "Entrar no libnovel", "login_subheading": "Escolha um provedor para continuar", @@ -68,7 +63,6 @@ "login_error_oauth_state": "Login cancelado ou expirado. Tente novamente.", "login_error_oauth_failed": "Não foi possível conectar ao provedor. Tente novamente.", "login_error_oauth_no_email": "Sua conta não tem endereço de email verificado. Adicione um e tente novamente.", - "books_page_title": "Biblioteca — libnovel", "books_heading": "Sua Biblioteca", "books_empty_title": "Nenhum livro ainda", @@ -78,7 +72,6 @@ "books_last_read": "Último: Cap.{n}", "books_reading_progress": "Cap.{current} / {total}", "books_remove": "Remover", - "catalogue_page_title": "Catálogo — libnovel", "catalogue_heading": "Catálogo", "catalogue_search_placeholder": "Pesquisar romances…", @@ -99,7 +92,6 @@ "catalogue_loading": "Carregando…", "catalogue_load_more": "Carregar mais", "catalogue_results_count": "{n} resultados", - "book_detail_page_title": "{title} — libnovel", "book_detail_signin_to_save": "Entre para salvar", "book_detail_add_to_library": "Adicionar à Biblioteca", @@ -116,13 +108,11 @@ "book_detail_rescrape": "Atualizar", "book_detail_scraping": "Atualizando…", "book_detail_in_library": "Na Biblioteca", - "chapters_page_title": "Capítulos — {title}", "chapters_heading": "Capítulos", "chapters_back_to_book": "Voltar ao livro", "chapters_reading_now": "Lendo", "chapters_empty": "Nenhum capítulo extraído ainda.", - "reader_page_title": "{title} — Cap.{n} — libnovel", "reader_play_narration": "Reproduzir narração", "reader_generating_audio": "Gerando áudio…", @@ -144,7 +134,6 @@ "reader_auto_next": "Próximo automático", "reader_speed": "Velocidade", "reader_preview_notice": "Prévia — este capítulo não foi totalmente extraído.", - "profile_page_title": "Perfil — libnovel", "profile_heading": "Perfil", "profile_avatar_label": "Avatar", @@ -179,7 +168,6 @@ "profile_sessions_heading": "Sessões ativas", "profile_sign_out_all": "Sair de todos os outros dispositivos", "profile_joined": "Entrou em {date}", - "user_page_title": "{username} — libnovel", "user_library_heading": "Biblioteca de {username}", "user_follow": "Seguir", @@ -187,13 +175,11 @@ "user_followers": "{n} seguidores", "user_following": "{n} seguindo", "user_library_empty": "Nenhum livro na biblioteca.", - "error_not_found_title": "Página não encontrada", "error_not_found_body": "A página que você procura não existe.", "error_generic_title": "Algo deu errado", "error_go_home": "Ir para início", "error_status": "Erro {status}", - "admin_scrape_page_title": "Extração — Admin", "admin_scrape_heading": "Extração", "admin_scrape_catalogue": "Extrair Catálogo", @@ -211,14 +197,11 @@ "admin_scrape_status_cancelled": "Cancelado", "admin_tasks_heading": "Tarefas recentes", "admin_tasks_empty": "Nenhuma tarefa ainda.", - "admin_audio_page_title": "Áudio — Admin", "admin_audio_heading": "Tarefas de Áudio", "admin_audio_empty": "Nenhuma tarefa de áudio.", - "admin_changelog_page_title": "Changelog — Admin", "admin_changelog_heading": "Changelog", - "comments_heading": "Comentários", "comments_empty": "Nenhum comentário ainda. Seja o primeiro!", "comments_placeholder": "Escreva um comentário…", @@ -232,12 +215,10 @@ "comments_hide_replies": "Ocultar respostas", "comments_edited": "editado", "comments_deleted": "[excluído]", - "disclaimer_page_title": "Aviso Legal — libnovel", "privacy_page_title": "Política de Privacidade — libnovel", "dmca_page_title": "DMCA — libnovel", "terms_page_title": "Termos de Serviço — libnovel", - "common_loading": "Carregando…", "common_error": "Erro", "common_save": "Salvar", @@ -251,15 +232,12 @@ "common_no": "Não", "common_on": "ativado", "common_off": "desativado", - "locale_switcher_label": "Idioma", - "books_empty_library": "Sua biblioteca está vazia.", "books_empty_discover": "Livros que você começar a ler ou salvar de", "books_empty_discover_link": "Descobrir", "books_empty_discover_suffix": "aparecerão aqui.", "books_count": "{n} livro{s}", - "catalogue_sort_updated": "Atualizado", "catalogue_search_button": "Pesquisar", "catalogue_refresh": "Atualizar", @@ -292,7 +270,6 @@ "catalogue_scrape_forbidden_badge": "Proibido", "catalogue_scrape_novel_button": "Extrair", "catalogue_scraping_novel": "Extraindo…", - "book_detail_not_in_library": "não está na biblioteca", "book_detail_continue_ch": "Continuar cap.{n}", "book_detail_start_ch1": "Começar pelo cap.1", @@ -328,18 +305,15 @@ "book_detail_rescrape_book": "Reextrair livro", "book_detail_less": "Menos", "book_detail_more": "Mais", - "chapters_search_placeholder": "Pesquisar capítulos…", "chapters_jump_to": "Ir para Cap.{n}", "chapters_no_match": "Nenhum capítulo encontrado para \"{q}\"", "chapters_none_available": "Nenhum capítulo disponível ainda.", "chapters_reading_indicator": "lendo", "chapters_result_count": "{n} resultados", - "reader_fetching_chapter": "Buscando capítulo…", "reader_words": "{n} palavras", "reader_preview_audio_notice": "Prévia — áudio não disponível para livros fora da biblioteca.", - "profile_click_to_change": "Clique no avatar para mudar a foto", "profile_tts_voice": "Voz TTS", "profile_auto_advance": "Avançar automaticamente para o próximo capítulo", @@ -357,7 +331,6 @@ "profile_updating": "Atualizando…", "profile_password_changed_ok": "Senha alterada com sucesso.", "profile_playback_speed": "Velocidade de reprodução — {speed}x", - "profile_subscription_heading": "Assinatura", "profile_plan_pro": "Pro", "profile_plan_free": "Gratuito", @@ -369,7 +342,7 @@ "profile_upgrade_monthly": "Mensal — $6 / mês", "profile_upgrade_annual": "Anual — $48 / ano", "profile_free_limits": "Plano gratuito: 3 capítulos de áudio por dia, somente inglês.", - "subscribe_page_title": "Seja Pro \u2014 libnovel", + "subscribe_page_title": "Seja Pro — libnovel", "subscribe_heading": "Leia mais. Ouça mais.", "subscribe_subheading": "Torne-se Pro e desbloqueie a experiência completa do libnovel.", "subscribe_monthly_label": "Mensal", @@ -389,14 +362,12 @@ "subscribe_benefit_downloads": "Baixe capítulos para ouvir offline", "subscribe_login_prompt": "Entre para assinar", "subscribe_login_cta": "Entrar", - "user_currently_reading": "Lendo Agora", "user_library_count": "Biblioteca ({n})", "user_joined": "Entrou em {date}", "user_followers_label": "seguidores", "user_following_label": "seguindo", "user_no_books": "Nenhum livro na biblioteca ainda.", - "admin_pages_label": "Páginas", "admin_tools_label": "Ferramentas", "admin_nav_scrape": "Scrape", @@ -412,7 +383,6 @@ "admin_nav_logs": "Logs", "admin_nav_uptime": "Uptime", "admin_nav_push": "Notificações", - "admin_scrape_status_idle": "Ocioso", "admin_scrape_full_catalogue": "Catálogo completo", "admin_scrape_single_book": "Livro único", @@ -423,25 +393,21 @@ "admin_scrape_start": "Iniciar extração", "admin_scrape_queuing": "Na fila…", "admin_scrape_running": "Executando…", - "admin_audio_filter_jobs": "Filtrar por slug, voz ou status…", "admin_audio_filter_cache": "Filtrar por slug, capítulo ou voz…", "admin_audio_no_matching_jobs": "Nenhum job correspondente.", "admin_audio_no_jobs": "Nenhum job de áudio ainda.", "admin_audio_cache_empty": "Cache de áudio vazio.", "admin_audio_no_cache_results": "Sem resultados.", - "admin_changelog_gitea": "Releases do Gitea", "admin_changelog_no_releases": "Nenhum release encontrado.", "admin_changelog_load_error": "Não foi possível carregar os releases: {error}", - "comments_top": "Mais votados", "comments_new": "Novos", "comments_posting": "Publicando…", "comments_login_link": "Entre", "comments_login_suffix": "para deixar um comentário.", "comments_anonymous": "Anônimo", - "reader_audio_narration": "Narração em Áudio", "reader_playing": "Reproduzindo — controles abaixo", "reader_paused": "Pausado — controles abaixo", @@ -454,7 +420,6 @@ "reader_voice_applies_next": "A nova voz será aplicada no próximo \"Reproduzir narração\".", "reader_choose_voice": "Escolher Voz", "reader_generating_narration": "Gerando narração…", - "profile_font_family": "Fonte", "profile_font_system": "Sistema", "profile_font_serif": "Serif", @@ -464,7 +429,6 @@ "profile_text_size_md": "Normal", "profile_text_size_lg": "Grande", "profile_text_size_xl": "Muito grande", - "feed_page_title": "Feed — LibNovel", "feed_heading": "Feed de seguidos", "feed_subheading": "Livros que seus seguidos estão lendo", @@ -477,19 +441,17 @@ "feed_find_users_cta": "Encontrar leitores", "admin_nav_gitea": "Gitea", "admin_nav_grafana": "Grafana", - - "admin_translation_page_title": "Translation \u2014 Admin", + "admin_translation_page_title": "Translation — Admin", "admin_translation_heading": "Machine Translation", "admin_translation_tab_enqueue": "Enqueue", "admin_translation_tab_jobs": "Jobs", - "admin_translation_filter_placeholder": "Filter by slug, lang, or status\u2026", + "admin_translation_filter_placeholder": "Filter by slug, lang, or status…", "admin_translation_no_matching": "No matching jobs.", "admin_translation_no_jobs": "No translation jobs yet.", - - "admin_ai_jobs_page_title": "AI Jobs \u2014 Admin", + "admin_ai_jobs_page_title": "AI Jobs — Admin", "admin_ai_jobs_heading": "AI Jobs", "admin_ai_jobs_subheading": "Background AI generation tasks", - - "admin_text_gen_page_title": "Text Gen \u2014 Admin", - "admin_text_gen_heading": "Text Generation" + "admin_text_gen_page_title": "Text Gen — Admin", + "admin_text_gen_heading": "Text Generation", + "admin_nav_import": "Import" } diff --git a/ui/messages/ru.json b/ui/messages/ru.json index 89876fc..7e8c7cb 100644 --- a/ui/messages/ru.json +++ b/ui/messages/ru.json @@ -1,6 +1,5 @@ { "$schema": "https://inlang.com/schema/inlang-message-format", - "nav_library": "Библиотека", "nav_catalogue": "Каталог", "nav_feed": "Лента", @@ -11,7 +10,6 @@ "nav_sign_out": "Выйти", "nav_toggle_menu": "Меню", "nav_admin_panel": "Панель администратора", - "footer_library": "Библиотека", "footer_catalogue": "Каталог", "footer_feedback": "Обратная связь", @@ -20,7 +18,6 @@ "footer_dmca": "DMCA", "footer_copyright": "© {year} libnovel", "footer_dev": "dev", - "home_title": "libnovel", "home_stat_books": "Книги", "home_stat_chapters": "Главы", @@ -34,7 +31,6 @@ "home_discover_novels": "Открыть новеллы", "home_via_reader": "от {username}", "home_chapter_badge": "гл.{n}", - "player_generating": "Генерация… {percent}%", "player_loading": "Загрузка…", "player_chapters": "Главы", @@ -58,7 +54,6 @@ "player_auto_next_aria": "Автопереход {state}", "player_go_to_chapter": "Перейти к главе", "player_close": "Закрыть плеер", - "login_page_title": "Вход — libnovel", "login_heading": "Войти в libnovel", "login_subheading": "Выберите провайдера для входа", @@ -68,7 +63,6 @@ "login_error_oauth_state": "Вход отменён или истёк срок действия. Попробуйте снова.", "login_error_oauth_failed": "Не удалось подключиться к провайдеру. Попробуйте снова.", "login_error_oauth_no_email": "У вашего аккаунта нет подтверждённого email. Добавьте его и повторите попытку.", - "books_page_title": "Библиотека — libnovel", "books_heading": "Ваша библиотека", "books_empty_title": "Книг пока нет", @@ -78,7 +72,6 @@ "books_last_read": "Последнее: гл.{n}", "books_reading_progress": "Гл.{current} / {total}", "books_remove": "Удалить", - "catalogue_page_title": "Каталог — libnovel", "catalogue_heading": "Каталог", "catalogue_search_placeholder": "Поиск новелл…", @@ -99,7 +92,6 @@ "catalogue_loading": "Загрузка…", "catalogue_load_more": "Загрузить ещё", "catalogue_results_count": "{n} результатов", - "book_detail_page_title": "{title} — libnovel", "book_detail_signin_to_save": "Войдите, чтобы сохранить", "book_detail_add_to_library": "В библиотеку", @@ -116,13 +108,11 @@ "book_detail_rescrape": "Обновить", "book_detail_scraping": "Обновление…", "book_detail_in_library": "В библиотеке", - "chapters_page_title": "Главы — {title}", "chapters_heading": "Главы", "chapters_back_to_book": "К книге", "chapters_reading_now": "Читается", "chapters_empty": "Главы ещё не загружены.", - "reader_page_title": "{title} — Гл.{n} — libnovel", "reader_play_narration": "Воспроизвести озвучку", "reader_generating_audio": "Генерация аудио…", @@ -144,7 +134,6 @@ "reader_auto_next": "Автопереход", "reader_speed": "Скорость", "reader_preview_notice": "Предпросмотр — эта глава не полностью загружена.", - "profile_page_title": "Профиль — libnovel", "profile_heading": "Профиль", "profile_avatar_label": "Аватар", @@ -179,7 +168,6 @@ "profile_sessions_heading": "Активные сессии", "profile_sign_out_all": "Выйти на всех других устройствах", "profile_joined": "Зарегистрирован {date}", - "user_page_title": "{username} — libnovel", "user_library_heading": "Библиотека {username}", "user_follow": "Подписаться", @@ -187,13 +175,11 @@ "user_followers": "{n} подписчиков", "user_following": "{n} подписок", "user_library_empty": "В библиотеке нет книг.", - "error_not_found_title": "Страница не найдена", "error_not_found_body": "Запрошенная страница не существует.", "error_generic_title": "Что-то пошло не так", "error_go_home": "На главную", "error_status": "Ошибка {status}", - "admin_scrape_page_title": "Парсинг — Админ", "admin_scrape_heading": "Парсинг", "admin_scrape_catalogue": "Парсинг каталога", @@ -211,14 +197,11 @@ "admin_scrape_status_cancelled": "Отменено", "admin_tasks_heading": "Последние задачи", "admin_tasks_empty": "Задач пока нет.", - "admin_audio_page_title": "Аудио — Админ", "admin_audio_heading": "Аудио задачи", "admin_audio_empty": "Аудио задач нет.", - "admin_changelog_page_title": "Changelog — Админ", "admin_changelog_heading": "Changelog", - "comments_heading": "Комментарии", "comments_empty": "Комментариев пока нет. Будьте первым!", "comments_placeholder": "Написать комментарий…", @@ -232,12 +215,10 @@ "comments_hide_replies": "Скрыть ответы", "comments_edited": "изменено", "comments_deleted": "[удалено]", - "disclaimer_page_title": "Отказ от ответственности — libnovel", "privacy_page_title": "Политика конфиденциальности — libnovel", "dmca_page_title": "DMCA — libnovel", "terms_page_title": "Условия использования — libnovel", - "common_loading": "Загрузка…", "common_error": "Ошибка", "common_save": "Сохранить", @@ -251,15 +232,12 @@ "common_no": "Нет", "common_on": "вкл.", "common_off": "выкл.", - "locale_switcher_label": "Язык", - "books_empty_library": "Ваша библиотека пуста.", "books_empty_discover": "Книги, которые вы начнёте читать или сохраните из", "books_empty_discover_link": "Каталога", "books_empty_discover_suffix": "появятся здесь.", "books_count": "{n} книг{s}", - "catalogue_sort_updated": "По дате обновления", "catalogue_search_button": "Поиск", "catalogue_refresh": "Обновить", @@ -292,7 +270,6 @@ "catalogue_scrape_forbidden_badge": "Запрещено", "catalogue_scrape_novel_button": "Парсить", "catalogue_scraping_novel": "Парсинг…", - "book_detail_not_in_library": "не в библиотеке", "book_detail_continue_ch": "Продолжить гл.{n}", "book_detail_start_ch1": "Начать с гл.1", @@ -328,18 +305,15 @@ "book_detail_rescrape_book": "Перепарсить книгу", "book_detail_less": "Скрыть", "book_detail_more": "Ещё", - "chapters_search_placeholder": "Поиск глав…", "chapters_jump_to": "Перейти к гл.{n}", "chapters_no_match": "Главы по запросу «{q}» не найдены", "chapters_none_available": "Глав пока нет.", "chapters_reading_indicator": "читается", "chapters_result_count": "{n} результатов", - "reader_fetching_chapter": "Загрузка главы…", "reader_words": "{n} слов", "reader_preview_audio_notice": "Предпросмотр — аудио недоступно для книг вне библиотеки.", - "profile_click_to_change": "Нажмите на аватар для смены фото", "profile_tts_voice": "Голос TTS", "profile_auto_advance": "Автопереход к следующей главе", @@ -357,7 +331,6 @@ "profile_updating": "Обновление…", "profile_password_changed_ok": "Пароль успешно изменён.", "profile_playback_speed": "Скорость воспроизведения — {speed}x", - "profile_subscription_heading": "Подписка", "profile_plan_pro": "Pro", "profile_plan_free": "Бесплатно", @@ -369,7 +342,7 @@ "profile_upgrade_monthly": "Ежемесячно — $6 / мес", "profile_upgrade_annual": "Ежегодно — $48 / год", "profile_free_limits": "Бесплатный план: 3 аудиоглавы в день, только английский.", - "subscribe_page_title": "Перейти на Pro \u2014 libnovel", + "subscribe_page_title": "Перейти на Pro — libnovel", "subscribe_heading": "Читайте больше. Слушайте больше.", "subscribe_subheading": "Перейдите на Pro и откройте полный опыт libnovel.", "subscribe_monthly_label": "Ежемесячно", @@ -389,14 +362,12 @@ "subscribe_benefit_downloads": "Скачивайте главы для прослушивания офлайн", "subscribe_login_prompt": "Войдите, чтобы оформить подписку", "subscribe_login_cta": "Войти", - "user_currently_reading": "Сейчас читает", "user_library_count": "Библиотека ({n})", "user_joined": "Зарегистрирован {date}", "user_followers_label": "подписчиков", "user_following_label": "подписок", "user_no_books": "Книг в библиотеке пока нет.", - "admin_pages_label": "Страницы", "admin_tools_label": "Инструменты", "admin_nav_scrape": "Скрейпинг", @@ -412,7 +383,6 @@ "admin_nav_logs": "Логи", "admin_nav_uptime": "Мониторинг", "admin_nav_push": "Уведомления", - "admin_scrape_status_idle": "Ожидание", "admin_scrape_full_catalogue": "Полный каталог", "admin_scrape_single_book": "Одна книга", @@ -423,25 +393,21 @@ "admin_scrape_start": "Начать парсинг", "admin_scrape_queuing": "В очереди…", "admin_scrape_running": "Выполняется…", - "admin_audio_filter_jobs": "Фильтр по slug, голосу или статусу…", "admin_audio_filter_cache": "Фильтр по slug, главе или голосу…", "admin_audio_no_matching_jobs": "Заданий не найдено.", "admin_audio_no_jobs": "Аудиозаданий пока нет.", "admin_audio_cache_empty": "Аудиокэш пуст.", "admin_audio_no_cache_results": "Результатов нет.", - "admin_changelog_gitea": "Релизы Gitea", "admin_changelog_no_releases": "Релизов не найдено.", "admin_changelog_load_error": "Не удалось загрузить релизы: {error}", - "comments_top": "Лучшие", "comments_new": "Новые", "comments_posting": "Отправка…", "comments_login_link": "Войдите", "comments_login_suffix": "чтобы оставить комментарий.", "comments_anonymous": "Аноним", - "reader_audio_narration": "Аудионарратив", "reader_playing": "Воспроизводится — управление ниже", "reader_paused": "Пауза — управление ниже", @@ -454,7 +420,6 @@ "reader_voice_applies_next": "Новый голос применится при следующем нажатии «Воспроизвести».", "reader_choose_voice": "Выбрать голос", "reader_generating_narration": "Генерация озвучки…", - "profile_font_family": "Шрифт", "profile_font_system": "Системный", "profile_font_serif": "Serif", @@ -464,7 +429,6 @@ "profile_text_size_md": "Нормальный", "profile_text_size_lg": "Большой", "profile_text_size_xl": "Очень большой", - "feed_page_title": "Лента — LibNovel", "feed_heading": "Лента подписок", "feed_subheading": "Книги, которые читают ваши подписки", @@ -477,19 +441,17 @@ "feed_find_users_cta": "Найти читателей", "admin_nav_gitea": "Gitea", "admin_nav_grafana": "Grafana", - - "admin_translation_page_title": "Translation \u2014 Admin", + "admin_translation_page_title": "Translation — Admin", "admin_translation_heading": "Machine Translation", "admin_translation_tab_enqueue": "Enqueue", "admin_translation_tab_jobs": "Jobs", - "admin_translation_filter_placeholder": "Filter by slug, lang, or status\u2026", + "admin_translation_filter_placeholder": "Filter by slug, lang, or status…", "admin_translation_no_matching": "No matching jobs.", "admin_translation_no_jobs": "No translation jobs yet.", - - "admin_ai_jobs_page_title": "AI Jobs \u2014 Admin", + "admin_ai_jobs_page_title": "AI Jobs — Admin", "admin_ai_jobs_heading": "AI Jobs", "admin_ai_jobs_subheading": "Background AI generation tasks", - - "admin_text_gen_page_title": "Text Gen \u2014 Admin", - "admin_text_gen_heading": "Text Generation" + "admin_text_gen_page_title": "Text Gen — Admin", + "admin_text_gen_heading": "Text Generation", + "admin_nav_import": "Import" } diff --git a/ui/src/lib/paraglide/README.md b/ui/src/lib/paraglide/README.md index a7c010e..9f68324 100644 --- a/ui/src/lib/paraglide/README.md +++ b/ui/src/lib/paraglide/README.md @@ -2,7 +2,7 @@ > Auto-generated i18n message functions. Import `messages.js` to use translated strings. -Compiled from: `/Users/kalekber/code/libnovel-v2/ui/project.inlang` +Compiled from: `/opt/libnovel-v3/ui/project.inlang` ## What is this folder? diff --git a/ui/src/lib/paraglide/messages/_index.js b/ui/src/lib/paraglide/messages/_index.js index 0497215..f936cdb 100644 --- a/ui/src/lib/paraglide/messages/_index.js +++ b/ui/src/lib/paraglide/messages/_index.js @@ -373,6 +373,7 @@ export * from './admin_tools_label.js' export * from './admin_nav_scrape.js' export * from './admin_nav_audio.js' export * from './admin_nav_translation.js' +export * from './admin_nav_import.js' export * from './admin_nav_changelog.js' export * from './admin_nav_image_gen.js' export * from './admin_nav_text_gen.js' @@ -405,18 +406,6 @@ export * from './admin_audio_no_cache_results.js' export * from './admin_changelog_gitea.js' export * from './admin_changelog_no_releases.js' export * from './admin_changelog_load_error.js' -export * from './admin_translation_page_title.js' -export * from './admin_translation_heading.js' -export * from './admin_translation_tab_enqueue.js' -export * from './admin_translation_tab_jobs.js' -export * from './admin_translation_filter_placeholder.js' -export * from './admin_translation_no_matching.js' -export * from './admin_translation_no_jobs.js' -export * from './admin_ai_jobs_page_title.js' -export * from './admin_ai_jobs_heading.js' -export * from './admin_ai_jobs_subheading.js' -export * from './admin_text_gen_page_title.js' -export * from './admin_text_gen_heading.js' export * from './comments_top.js' export * from './comments_new.js' export * from './comments_posting.js' @@ -453,4 +442,16 @@ export * from './feed_not_logged_in.js' export * from './feed_reader_label.js' export * from './feed_chapters_label.js' export * from './feed_browse_cta.js' -export * from './feed_find_users_cta.js' \ No newline at end of file +export * from './feed_find_users_cta.js' +export * from './admin_translation_page_title.js' +export * from './admin_translation_heading.js' +export * from './admin_translation_tab_enqueue.js' +export * from './admin_translation_tab_jobs.js' +export * from './admin_translation_filter_placeholder.js' +export * from './admin_translation_no_matching.js' +export * from './admin_translation_no_jobs.js' +export * from './admin_ai_jobs_page_title.js' +export * from './admin_ai_jobs_heading.js' +export * from './admin_ai_jobs_subheading.js' +export * from './admin_text_gen_page_title.js' +export * from './admin_text_gen_heading.js' \ No newline at end of file diff --git a/ui/src/lib/paraglide/messages/admin_ai_jobs_heading.js b/ui/src/lib/paraglide/messages/admin_ai_jobs_heading.js index ecc6d95..0640445 100644 --- a/ui/src/lib/paraglide/messages/admin_ai_jobs_heading.js +++ b/ui/src/lib/paraglide/messages/admin_ai_jobs_heading.js @@ -26,6 +26,10 @@ const fr_admin_ai_jobs_heading = /** @type {(inputs: Admin_Ai_Jobs_HeadingInputs }; /** +* | output | +* | --- | +* | "AI Jobs" | +* * @param {Admin_Ai_Jobs_HeadingInputs} inputs * @param {{ locale?: "en" | "ru" | "id" | "pt" | "fr" }} options * @returns {LocalizedString} @@ -37,4 +41,4 @@ export const admin_ai_jobs_heading = /** @type {((inputs?: Admin_Ai_Jobs_Heading if (locale === "id") return id_admin_ai_jobs_heading(inputs) if (locale === "pt") return pt_admin_ai_jobs_heading(inputs) return fr_admin_ai_jobs_heading(inputs) -}); +}); \ No newline at end of file diff --git a/ui/src/lib/paraglide/messages/admin_ai_jobs_page_title.js b/ui/src/lib/paraglide/messages/admin_ai_jobs_page_title.js index c386131..2f48ee8 100644 --- a/ui/src/lib/paraglide/messages/admin_ai_jobs_page_title.js +++ b/ui/src/lib/paraglide/messages/admin_ai_jobs_page_title.js @@ -26,6 +26,10 @@ const fr_admin_ai_jobs_page_title = /** @type {(inputs: Admin_Ai_Jobs_Page_Title }; /** +* | output | +* | --- | +* | "AI Jobs — Admin" | +* * @param {Admin_Ai_Jobs_Page_TitleInputs} inputs * @param {{ locale?: "en" | "ru" | "id" | "pt" | "fr" }} options * @returns {LocalizedString} @@ -37,4 +41,4 @@ export const admin_ai_jobs_page_title = /** @type {((inputs?: Admin_Ai_Jobs_Page if (locale === "id") return id_admin_ai_jobs_page_title(inputs) if (locale === "pt") return pt_admin_ai_jobs_page_title(inputs) return fr_admin_ai_jobs_page_title(inputs) -}); +}); \ No newline at end of file diff --git a/ui/src/lib/paraglide/messages/admin_ai_jobs_subheading.js b/ui/src/lib/paraglide/messages/admin_ai_jobs_subheading.js index c881f04..9a09059 100644 --- a/ui/src/lib/paraglide/messages/admin_ai_jobs_subheading.js +++ b/ui/src/lib/paraglide/messages/admin_ai_jobs_subheading.js @@ -26,6 +26,10 @@ const fr_admin_ai_jobs_subheading = /** @type {(inputs: Admin_Ai_Jobs_Subheading }; /** +* | output | +* | --- | +* | "Background AI generation tasks" | +* * @param {Admin_Ai_Jobs_SubheadingInputs} inputs * @param {{ locale?: "en" | "ru" | "id" | "pt" | "fr" }} options * @returns {LocalizedString} @@ -37,4 +41,4 @@ export const admin_ai_jobs_subheading = /** @type {((inputs?: Admin_Ai_Jobs_Subh if (locale === "id") return id_admin_ai_jobs_subheading(inputs) if (locale === "pt") return pt_admin_ai_jobs_subheading(inputs) return fr_admin_ai_jobs_subheading(inputs) -}); +}); \ No newline at end of file diff --git a/ui/src/lib/paraglide/messages/admin_text_gen_heading.js b/ui/src/lib/paraglide/messages/admin_text_gen_heading.js index 116383f..2bd4b0e 100644 --- a/ui/src/lib/paraglide/messages/admin_text_gen_heading.js +++ b/ui/src/lib/paraglide/messages/admin_text_gen_heading.js @@ -26,6 +26,10 @@ const fr_admin_text_gen_heading = /** @type {(inputs: Admin_Text_Gen_HeadingInpu }; /** +* | output | +* | --- | +* | "Text Generation" | +* * @param {Admin_Text_Gen_HeadingInputs} inputs * @param {{ locale?: "en" | "ru" | "id" | "pt" | "fr" }} options * @returns {LocalizedString} @@ -37,4 +41,4 @@ export const admin_text_gen_heading = /** @type {((inputs?: Admin_Text_Gen_Headi if (locale === "id") return id_admin_text_gen_heading(inputs) if (locale === "pt") return pt_admin_text_gen_heading(inputs) return fr_admin_text_gen_heading(inputs) -}); +}); \ No newline at end of file diff --git a/ui/src/lib/paraglide/messages/admin_text_gen_page_title.js b/ui/src/lib/paraglide/messages/admin_text_gen_page_title.js index 0c16eca..f70e040 100644 --- a/ui/src/lib/paraglide/messages/admin_text_gen_page_title.js +++ b/ui/src/lib/paraglide/messages/admin_text_gen_page_title.js @@ -26,6 +26,10 @@ const fr_admin_text_gen_page_title = /** @type {(inputs: Admin_Text_Gen_Page_Tit }; /** +* | output | +* | --- | +* | "Text Gen — Admin" | +* * @param {Admin_Text_Gen_Page_TitleInputs} inputs * @param {{ locale?: "en" | "ru" | "id" | "pt" | "fr" }} options * @returns {LocalizedString} @@ -37,4 +41,4 @@ export const admin_text_gen_page_title = /** @type {((inputs?: Admin_Text_Gen_Pa if (locale === "id") return id_admin_text_gen_page_title(inputs) if (locale === "pt") return pt_admin_text_gen_page_title(inputs) return fr_admin_text_gen_page_title(inputs) -}); +}); \ No newline at end of file diff --git a/ui/src/lib/paraglide/messages/admin_translation_filter_placeholder.js b/ui/src/lib/paraglide/messages/admin_translation_filter_placeholder.js index 63845d3..6e99440 100644 --- a/ui/src/lib/paraglide/messages/admin_translation_filter_placeholder.js +++ b/ui/src/lib/paraglide/messages/admin_translation_filter_placeholder.js @@ -26,6 +26,10 @@ const fr_admin_translation_filter_placeholder = /** @type {(inputs: Admin_Transl }; /** +* | output | +* | --- | +* | "Filter by slug, lang, or status…" | +* * @param {Admin_Translation_Filter_PlaceholderInputs} inputs * @param {{ locale?: "en" | "ru" | "id" | "pt" | "fr" }} options * @returns {LocalizedString} @@ -37,4 +41,4 @@ export const admin_translation_filter_placeholder = /** @type {((inputs?: Admin_ if (locale === "id") return id_admin_translation_filter_placeholder(inputs) if (locale === "pt") return pt_admin_translation_filter_placeholder(inputs) return fr_admin_translation_filter_placeholder(inputs) -}); +}); \ No newline at end of file diff --git a/ui/src/lib/paraglide/messages/admin_translation_heading.js b/ui/src/lib/paraglide/messages/admin_translation_heading.js index e223d6a..d16f696 100644 --- a/ui/src/lib/paraglide/messages/admin_translation_heading.js +++ b/ui/src/lib/paraglide/messages/admin_translation_heading.js @@ -26,6 +26,10 @@ const fr_admin_translation_heading = /** @type {(inputs: Admin_Translation_Headi }; /** +* | output | +* | --- | +* | "Machine Translation" | +* * @param {Admin_Translation_HeadingInputs} inputs * @param {{ locale?: "en" | "ru" | "id" | "pt" | "fr" }} options * @returns {LocalizedString} @@ -37,4 +41,4 @@ export const admin_translation_heading = /** @type {((inputs?: Admin_Translation if (locale === "id") return id_admin_translation_heading(inputs) if (locale === "pt") return pt_admin_translation_heading(inputs) return fr_admin_translation_heading(inputs) -}); +}); \ No newline at end of file diff --git a/ui/src/lib/paraglide/messages/admin_translation_no_jobs.js b/ui/src/lib/paraglide/messages/admin_translation_no_jobs.js index 358e0f9..706f19c 100644 --- a/ui/src/lib/paraglide/messages/admin_translation_no_jobs.js +++ b/ui/src/lib/paraglide/messages/admin_translation_no_jobs.js @@ -26,6 +26,10 @@ const fr_admin_translation_no_jobs = /** @type {(inputs: Admin_Translation_No_Jo }; /** +* | output | +* | --- | +* | "No translation jobs yet." | +* * @param {Admin_Translation_No_JobsInputs} inputs * @param {{ locale?: "en" | "ru" | "id" | "pt" | "fr" }} options * @returns {LocalizedString} @@ -37,4 +41,4 @@ export const admin_translation_no_jobs = /** @type {((inputs?: Admin_Translation if (locale === "id") return id_admin_translation_no_jobs(inputs) if (locale === "pt") return pt_admin_translation_no_jobs(inputs) return fr_admin_translation_no_jobs(inputs) -}); +}); \ No newline at end of file diff --git a/ui/src/lib/paraglide/messages/admin_translation_no_matching.js b/ui/src/lib/paraglide/messages/admin_translation_no_matching.js index 607131c..fd7616c 100644 --- a/ui/src/lib/paraglide/messages/admin_translation_no_matching.js +++ b/ui/src/lib/paraglide/messages/admin_translation_no_matching.js @@ -26,6 +26,10 @@ const fr_admin_translation_no_matching = /** @type {(inputs: Admin_Translation_N }; /** +* | output | +* | --- | +* | "No matching jobs." | +* * @param {Admin_Translation_No_MatchingInputs} inputs * @param {{ locale?: "en" | "ru" | "id" | "pt" | "fr" }} options * @returns {LocalizedString} @@ -37,4 +41,4 @@ export const admin_translation_no_matching = /** @type {((inputs?: Admin_Transla if (locale === "id") return id_admin_translation_no_matching(inputs) if (locale === "pt") return pt_admin_translation_no_matching(inputs) return fr_admin_translation_no_matching(inputs) -}); +}); \ No newline at end of file diff --git a/ui/src/lib/paraglide/messages/admin_translation_page_title.js b/ui/src/lib/paraglide/messages/admin_translation_page_title.js index 9e8c4bf..da6e76f 100644 --- a/ui/src/lib/paraglide/messages/admin_translation_page_title.js +++ b/ui/src/lib/paraglide/messages/admin_translation_page_title.js @@ -26,6 +26,10 @@ const fr_admin_translation_page_title = /** @type {(inputs: Admin_Translation_Pa }; /** +* | output | +* | --- | +* | "Translation — Admin" | +* * @param {Admin_Translation_Page_TitleInputs} inputs * @param {{ locale?: "en" | "ru" | "id" | "pt" | "fr" }} options * @returns {LocalizedString} @@ -37,4 +41,4 @@ export const admin_translation_page_title = /** @type {((inputs?: Admin_Translat if (locale === "id") return id_admin_translation_page_title(inputs) if (locale === "pt") return pt_admin_translation_page_title(inputs) return fr_admin_translation_page_title(inputs) -}); +}); \ No newline at end of file diff --git a/ui/src/lib/paraglide/messages/admin_translation_tab_enqueue.js b/ui/src/lib/paraglide/messages/admin_translation_tab_enqueue.js index ebf8aec..cd3ce69 100644 --- a/ui/src/lib/paraglide/messages/admin_translation_tab_enqueue.js +++ b/ui/src/lib/paraglide/messages/admin_translation_tab_enqueue.js @@ -26,6 +26,10 @@ const fr_admin_translation_tab_enqueue = /** @type {(inputs: Admin_Translation_T }; /** +* | output | +* | --- | +* | "Enqueue" | +* * @param {Admin_Translation_Tab_EnqueueInputs} inputs * @param {{ locale?: "en" | "ru" | "id" | "pt" | "fr" }} options * @returns {LocalizedString} @@ -37,4 +41,4 @@ export const admin_translation_tab_enqueue = /** @type {((inputs?: Admin_Transla if (locale === "id") return id_admin_translation_tab_enqueue(inputs) if (locale === "pt") return pt_admin_translation_tab_enqueue(inputs) return fr_admin_translation_tab_enqueue(inputs) -}); +}); \ No newline at end of file diff --git a/ui/src/lib/paraglide/messages/admin_translation_tab_jobs.js b/ui/src/lib/paraglide/messages/admin_translation_tab_jobs.js index ca4f111..7bffaf8 100644 --- a/ui/src/lib/paraglide/messages/admin_translation_tab_jobs.js +++ b/ui/src/lib/paraglide/messages/admin_translation_tab_jobs.js @@ -26,6 +26,10 @@ const fr_admin_translation_tab_jobs = /** @type {(inputs: Admin_Translation_Tab_ }; /** +* | output | +* | --- | +* | "Jobs" | +* * @param {Admin_Translation_Tab_JobsInputs} inputs * @param {{ locale?: "en" | "ru" | "id" | "pt" | "fr" }} options * @returns {LocalizedString} @@ -37,4 +41,4 @@ export const admin_translation_tab_jobs = /** @type {((inputs?: Admin_Translatio if (locale === "id") return id_admin_translation_tab_jobs(inputs) if (locale === "pt") return pt_admin_translation_tab_jobs(inputs) return fr_admin_translation_tab_jobs(inputs) -}); +}); \ No newline at end of file diff --git a/ui/src/lib/paraglide/messages/profile_theme_cyber.js b/ui/src/lib/paraglide/messages/profile_theme_cyber.js index 3d06538..0715f9d 100644 --- a/ui/src/lib/paraglide/messages/profile_theme_cyber.js +++ b/ui/src/lib/paraglide/messages/profile_theme_cyber.js @@ -41,4 +41,4 @@ export const profile_theme_cyber = /** @type {((inputs?: Profile_Theme_CyberInpu if (locale === "id") return id_profile_theme_cyber(inputs) if (locale === "pt") return pt_profile_theme_cyber(inputs) return fr_profile_theme_cyber(inputs) -}); +}); \ No newline at end of file diff --git a/ui/src/lib/paraglide/messages/profile_theme_forest.js b/ui/src/lib/paraglide/messages/profile_theme_forest.js index a5ab5d5..2928d40 100644 --- a/ui/src/lib/paraglide/messages/profile_theme_forest.js +++ b/ui/src/lib/paraglide/messages/profile_theme_forest.js @@ -41,4 +41,4 @@ export const profile_theme_forest = /** @type {((inputs?: Profile_Theme_ForestIn if (locale === "id") return id_profile_theme_forest(inputs) if (locale === "pt") return pt_profile_theme_forest(inputs) return fr_profile_theme_forest(inputs) -}); +}); \ No newline at end of file diff --git a/ui/src/lib/paraglide/messages/profile_theme_mono.js b/ui/src/lib/paraglide/messages/profile_theme_mono.js index 4868ff2..5407f40 100644 --- a/ui/src/lib/paraglide/messages/profile_theme_mono.js +++ b/ui/src/lib/paraglide/messages/profile_theme_mono.js @@ -41,4 +41,4 @@ export const profile_theme_mono = /** @type {((inputs?: Profile_Theme_MonoInputs if (locale === "id") return id_profile_theme_mono(inputs) if (locale === "pt") return pt_profile_theme_mono(inputs) return fr_profile_theme_mono(inputs) -}); +}); \ No newline at end of file