diff --git a/locales/es.json b/locales/es.json index e95cc1c..f165fbd 100644 --- a/locales/es.json +++ b/locales/es.json @@ -4,6 +4,7 @@ "Sinopsistrans" ] }, + "language": "Español", "faq": { "whatIsZim": "¿Qué es un archivo ZIM?", "whatIsZimDescParagraph": "El formato de archivo ZIM almacena el contenido de un sitio web para su uso {0}. Reúne el contenido normal de un sitio web en un único archivo y lo comprime para que sea más fácil guardarlo, compartirlo y almacenarlo.", diff --git a/locales/fa.json b/locales/fa.json index 09b5935..cdb02e5 100644 --- a/locales/fa.json +++ b/locales/fa.json @@ -2,6 +2,7 @@ "@metadata": { "authors": [] }, + "language": "فارسی", "faq": { "whatIsZim": "فایل ZIM چیست؟", "whatIsZimDescParagraph": "فرمت فایل ZIM محتوای وب‌سایت را برای استفاده {0} ذخیره می‌کند. این فرمت اجزای اصلی یک وب‌سایت را در یک آرشیو واحد جمع‌آوری و فشرده می‌کند تا ذخیره، اشتراک‌گذاری و نگهداری آن آسان‌تر شود.", diff --git a/locales/id.json b/locales/id.json new file mode 100644 index 0000000..a628324 --- /dev/null +++ b/locales/id.json @@ -0,0 +1,103 @@ +{ + "@metadata": { + "authors": [ + "Akmaie Ajam" + ] + }, + "language": "Bahasa Indonesia", + "faq": { + "whatIsZim": "Apa itu berkas ZIM?", + "whatIsZimDescParagraph": "Format berkas ZIM menyimpan konten situs web untuk penggunaan {0}. Format ini menyusun unsur-unsur normal situs web menjadi satu arsip, dan mengompresnya agar lebih mudah disimpan, dibagi, dan disimpan.", + "whatIsZimDescLinkContent0": "offline", + "howToRead": "Bagaimana cara membaca berkas ZIM saya?", + "howToReadDescParagraph": "Anda akan memerlukan pembaca berkas ZIM. Ini biasanya berarti {0}, yang tersedia pada {1}.", + "howToReadDescLinkContent0": "Kiwix", + "howToReadDescLinkContent1": "komputer desktop, perangkat seluler, dan banyak lagi", + "missingContent": "File ZIM tidak lengkap atau lebih kecil dari situs web asli", + "missingContentDesc": "Karena sifat alat ini, kami tidak dapat membiarkannya terbuka kepada permintaan tak terbatas ke situs web mana pun. Itu dapat membahayakan infrastruktur kami, dan juga situs web target. Saat ini kami memberlakukan dua batasan: ukuran berkas {human_size_limit} GiB dan {human_time_limit}.", + "gotError": "Saya mendapat pesan kesalahan (tidak ada ZIM) atau tidak dapat membaca berkas ZIM", + "gotErrorDescParagraph": "Periksa ulang URL yang Anda masukkan, dan jika masih tidak berfungsi, buatlah tiket kutu di {0}. Tunjukkan situs web target, nomor permintaan (tertera di email yang Anda terima), dan perangkat yang Anda gunakan untuk mencoba membuka berkas ZIM.", + "gotErrorDescLinkContent0": "github" + }, + "units": { + "timeLimit": { + "singular": "jam", + "plural": "jam" + } + }, + "footer": { + "poweredByThankTo": "Didukung oleh {0} dan {1}, terima kasih atas Penghargaan {2} ❤️", + "link0": "Kiwix", + "link1": "Perekam web", + "link2": "Dukungan Mozilla Open-Source" + }, + "header": { + "donate": "Biarkan ini gratis. Sumbangkan" + }, + "newRequest": { + "headingParagraph": "Ingin versi offline situs web? Cukup {0}!", + "headingBold": "ZIM-kan", + "urlLabel": "URL lengkap situs web yang akan dikonversi", + "emailLabel": "Email Anda untuk menerima tautan unduhan. Alamat tidak disimpan", + "submit": "Ayo ZIM-kan!", + "advancedOptions": "opsi lanjutan", + "fetchingDefinition": "Memuat definisi offliner…", + "errorFetchingDefinition": "Terjadi kesalahan saat mengambil definisi offliner", + "creatingRequest": "Membuat permintaan…", + "errorCreatingRequest": "Ada kesalahan saat membuat permintaan", + "offlinerNotFound": "Zimit offliner tidak ditemukan, kami mungkin mengalami masalah serius pada infrastruktur kami." + }, + "notFound": { + "heading": "Tidak Ditemukan", + "description": "Tidak ada apa pun di sini, URL Anda mungkin salah. Mungkin Anda ingin kembali." + }, + "requestStatus": { + "progressMessage": "{task_progression_percent}% ({task_progression_status_code})", + "refreshing": "Menyegarkan status tugas…", + "errorRefreshing": "Ada kesalahan saat menyegarkan status tugas", + "refreshAuto": "Halaman ini akan disegar secara otomatis setiap {refresh_interval} detik, tidak perlu menyegarkannya secara manual.", + "zimingOf": "Pen-Zim-an dari", + "requestingSlot": "Meminta slot", + "requestRecorded": "Permintaan Anda telah dicatat dan sedang menunggu slot pada infrastruktur kami untuk dijalankan. Walaupun kami bertujuan menyelesaikan semua permintaan dalam 24 jam, infrastruktur kami pada layanan gratis ini terbatas dan terkadang kami mengalami lonjakan minat dari banyak pengguna, sehingga menunda dimulainya pemrosesan permintaan hingga beberapa hari. Harap bersabar!", + "requestFailed": "Permintaan Anda gagal! Kami mohon maaf atas hal itu.", + "failureReasons": "Sejumlah alasan dapat menyebabkan kegagalan pen-zim-an. Sering kali, URL-nya tidak memadai… Harap periksa ulang dan buat permintaan baru. Jika tidak berhasil, {0}.", + "failureReasonsLinkContent0": "buka tiket di github", + "successMessage": "Berhasil!", + "successMessageExplanation": "Tautan di bawah ini akan kedaluwarsa dan berkas akan dihapus setelah seminggu.", + "successMessageButton": "Unduh", + "limitHit": "Perhatian, perhatikan bahwa arsip Anda tidak lengkap, Anda telah mencapai ukuran berkas maksimum ({human_size_limit} GiB) atau durasi ({human_time_limit}) yang diizinkan untuk perayapan gratis. {contact_us_link} untuk membeli ruang server tambahan untuk tugas Anda.", + "limitHitContactUsLink": "Hubungi kami", + "beingProcessedMessage": "Permintaan Anda sedang diproses", + "beingProcessedExplanation": "Sistem kami saat ini sedang mengonversi URL yang diberikan menjadi berkas ZIM yang bagus. Tergantung pada jumlah halaman di situs web ini, prosesnya bisa memakan waktu beberapa menit atau jam.", + "bookmarkUrl": "Anda dapat menandai URL halaman peramban saat ini untuk kembali lagi nanti melihat tugas ini.", + "emailNotification": "Anda telah menerima email dengan URL saat ini, dan Anda juga akan mendapatkan pemberitahuan email saat tugas selesai, sehingga Anda dapat menutup jendela ini dengan aman.", + "noEmailNotification": "Jangan tutup jendela ini tanpa penanda ini atau Anda tidak akan dapat mengunduh ZIM Anda karena Anda tidak memberikan email.", + "settingsHeading": "Pengaturan", + "taskNotFound": "Tugas tidak ditemukan. URL Anda salah atau layanan kami sedang mengalami masalah." + }, + "email": { + "requested": { + "subject": "Tugas Youzim.it %{taskId} diminta", + "title": "ZIM diminta!", + "zimRequestRecorded": "Permintaan ZIM Anda sebesar %{link} telah direkam.", + "howToFollowProgress": "Anda dapat mengikuti status permintaan ini di %{link}.", + "emailWillBeSent": "Kami akan mengirimkan email lagi setelah berkas ZIM Anda siap diunduh." + }, + "succeeded": { + "subject": "Tugas Youzim.it %{taskId} berhasil", + "title": "ZIM sudah siap!", + "zimRequestCompleted": "Permintaan ZIM Anda sebesar %{link} telah direkam.", + "hereItIs": "Ini dia:", + "incomplete": "Sayangnya ZIM-nya tidak lengkap karena Anda telah mencapai batas (%{sizeLimit} atau %{timeLimit}) yang diizinkan untuk perayapan gratis. %{contactUsLink} untuk membantu kami membeli ruang server tambahan untuk Anda.", + "contactUsLinkContent": "Hubungi kami" + }, + "failed": { + "subject": "Tugas Youzim.it %{taskId} gagal", + "title": "Permintaan ZIM Anda gagal!", + "weAreSorry": "Kami benar-benar minta maaf.", + "checkAndRetry": "Ini mungkin disebabkan oleh kesalahan pada URL yang Anda masukkan (%{configUrlLink}) atau pengaturan tambahan yang hilang / gagal. Harap periksa kembali dan %{retryLink}.", + "retryLinkContent": "coba lagi", + "howToCheckSettings": "Anda dapat memeriksa pengaturan yang Anda gunakan di %{taskLink}." + } + } +} diff --git a/locales/ko.json b/locales/ko.json index 49c0654..acafb09 100644 --- a/locales/ko.json +++ b/locales/ko.json @@ -1,9 +1,11 @@ { "@metadata": { "authors": [ + "Benoit74", "Ykhwong" ] }, + "language": "한국어", "faq": { "whatIsZim": "ZIM 파일은 무엇입니까?", "whatIsZimDescLinkContent0": "오프라인", diff --git a/locales/lb.json b/locales/lb.json index bcdfcd2..49e732b 100644 --- a/locales/lb.json +++ b/locales/lb.json @@ -4,6 +4,7 @@ "Volvox" ] }, + "language": "Lëtzebuergesch", "faq": { "whatIsZim": "Wat ass e ZIM-Fichier?", "whatIsZimDescLinkContent0": "offline", diff --git a/locales/mk.json b/locales/mk.json index 2818317..2c882f4 100644 --- a/locales/mk.json +++ b/locales/mk.json @@ -4,6 +4,7 @@ "Bjankuloski06" ] }, + "language": "македонски", "faq": { "whatIsZim": "Што е тоа ZIM-податотека?", "whatIsZimDescParagraph": "Форматот на ZIM-податотеката ја складира содржината на мрежното место за употреба на {0}. Ја собира нормалната составница на мрежното место во еден архив, и ја збива за да биде полесна за зачувување, споделување и складирање.", diff --git a/locales/sq.json b/locales/sq.json index 26761f8..18a3930 100644 --- a/locales/sq.json +++ b/locales/sq.json @@ -4,6 +4,7 @@ "Besnik b" ] }, + "language": "shqip", "faq": { "whatIsZim": "Ç’është një kartelë ZIM?", "whatIsZimDescParagraph": "Formati ZIM i kartelave depoziton lëndën e sajtit për përdorim {0}. Grumbullon në një arkiv të vetëm pjesët përbërëse të një sajti dhe e ngjesh atë, për ta bërë më të kollajtë të ruhet, ndahet me të tjerët dhe depozitohet.", diff --git a/locales/zh-hans.json b/locales/zh-hans.json index e610d52..4dd8396 100644 --- a/locales/zh-hans.json +++ b/locales/zh-hans.json @@ -1,9 +1,11 @@ { "@metadata": { "authors": [ + "Benoit74", "TFX202X" ] }, + "language": "中文(简体)", "faq": { "whatIsZim": "什么是.ZIM文件?", "whatIsZimDescParagraph": "ZIM文件格式存储网站内容以供{0}使用。它将网站的正常组成部分组合成一个档案,并对其进行压缩,以便于保存、共享和存储。", diff --git a/ui/src/i18n.ts b/ui/src/i18n.ts index c90cf16..36d3fb1 100644 --- a/ui/src/i18n.ts +++ b/ui/src/i18n.ts @@ -24,19 +24,23 @@ const localesFiles = import.meta.glob('../../locales/*.json') // Display name must be in native language. Display name must start with an upper-character. // It should be provided by the translator under `language` key. If not, you might source proper values from https://w.wiki/C7AQ since Translate Wiki uses IETF codes export const supportedLanguages: Language[] = [ - { code: 'en', display: 'English', rtl: false }, // Keep default first in array + { code: 'en', display: 'English', rtl: false }, + { code: 'es', display: 'Español', rtl: false }, { code: 'fa', display: 'فارسی', rtl: true }, { code: 'fr', display: 'Français', rtl: false }, - { code: 'es', display: 'Español', rtl: false }, + { code: 'id', display: 'Bahasa Indonesia', rtl: false }, + // { code: 'ko', display: '한국어', rtl: false }, + // { code: 'lb', display: 'Lëtzebuergesch', rtl: false }, + // { code: 'mk', display: 'македонски', rtl: false } + // { code: 'sq', display: 'shqip', rtl: false }, { code: 'zh-hans', display: '简体中文', rtl: false } - // { code: 'ko', display: 'Korean', rtl: false }, - // { code: 'lb', display: 'Luxembourgish', rtl: false }, - // { code: 'mk', display: 'Macedonian', rtl: false } ] // Check if browser language is supported, otherwise fallback to English const defaultLanguage: Language = - supportedLanguages.find((lang) => lang.code == simplifiedBrowserLanguage) || supportedLanguages[0] + supportedLanguages.find((lang) => lang.code == simplifiedBrowserLanguage) || + supportedLanguages.find((lang) => lang.code == 'en') || + supportedLanguages[0] // Create the i18n system const i18n = createI18n({