diff --git a/lib/i18n-core.ts b/lib/i18n-core.ts index 80063d6..0874a1c 100644 --- a/lib/i18n-core.ts +++ b/lib/i18n-core.ts @@ -3,9 +3,10 @@ export type Locale = (typeof supportedLocales)[number]; export const DEFAULT_LOCALE: Locale = "en"; export const LOCALE_COOKIE = "app-locale"; -export const localeMeta: Record = { +export const localeMeta: Record = { en: { dir: "ltr", label: "English" }, ar: { dir: "rtl", label: "\u0627\u0644\u0639\u0631\u0628\u064a\u0629" }, + id: { dir: "ltr", label: "Bahasa Indonesia" }, }; export function isSupportedLocale(value: string | null | undefined): value is Locale { diff --git a/locales/id.json b/locales/id.json new file mode 100644 index 0000000..87f0509 --- /dev/null +++ b/locales/id.json @@ -0,0 +1,219 @@ +{ + "app.subtitle": "Evaluasi dua pengembang secara berdampingan", + "app.title": "Bandingkan Pengembang GitHub", + "banner.languageWinner": "Pemenang Berdasarkan Bahasa", + "banner.leadby": "Unggul sebanyak", + "banner.metric": "Hasil", + "banner.overallWinner": "Pemenang Keseluruhan", + "banner.tie": "Hasil seri. Kedua pengembang memiliki kemampuan yang seimbang.", + "banner.tieShort": "Seri", + "banner.winner": "Pemenang", + "barchart.desc": "Rincian visual dari metrik utama", + "barchart.title": "Perbandingan Skor", + "breakdown.contribution": "Skor Kontribusi", + "breakdown.description": "Bilah kemajuan yang menunjukkan performa relatif", + "breakdown.pr": "Skor Permintaan Tarik", + "breakdown.repo": "Skor Repositori", + "breakdown.title": "Rincian Mendetail", + "chart.mode.language": "Berfokus pada Bahasa", + "chart.mode.overall": "Keseluruhan", + "comparison.avatarAlt": "Avatar {name}", + "comparsion.activity.score": "Skor Aktivitas", + "comparsion.contribution.diff": "Perbedaan Kontribusi", + "comparsion.contribution.score": "Skor Kontribusi", + "comparsion.diff": "Perbedaan Skor", + "comparsion.final.score": "Skor Akhir", + "comparsion.language.final.score": "Skor Akhir Bahasa", + "comparsion.pr.diff": "Perbedaan PR", + "comparsion.pr.score": "Skor PR", + "comparsion.repo.diff": "Perbedaan Repositori", + "comparsion.repo.score": "Skor Repositori", + "comparsion.score": "Skor", + "community.comments": "komentar", + "community.discussion": "Diskusi", + "community.issue": "Masalah", + "community.title": "Kontribusi Komunitas", + "empty.community": "Tidak ada masalah atau diskusi publik berdampak tinggi yang ditemukan.", + "empty.pullRequests": "Tidak ada permintaan tarik eksternal yang digabungkan ditemukan.", + "empty.repos": "Tidak ada repositori publik yang ditemukan.", + "error.calculateFailed": "Gagal menghitung skor", + "error.comparisonFailed": "Perbandingan gagal", + "error.fetchFailed": "Gagal mengambil data", + "error.generic": "Gagal membandingkan kedua pengguna saat ini. GitHub mungkin sedang membatasi jumlah permintaan. Silakan coba lagi nanti.", + "error.missingToken": "Peladen kehilangan konfigurasi token GitHub.", + "error.rateLimited": "API GitHub sedang membatasi laju permintaan. Silakan coba lagi dalam {seconds} detik.", + "error.tempThrottle": "API GitHub membatasi laju permintaan untuk sementara. Silakan coba lagi dalam sekitar {seconds} detik.", + "error.timeout": "Waktu permintaan API GitHub habis saat memproses permintaan. Silakan coba lagi dalam beberapa saat.", + "error.resourceLimit": "Batas sumber daya API GitHub telah tercapai untuk permintaan ini. Silakan coba lagi dalam beberapa saat.", + "error.missingUsername": "Sediakan dua nama pengguna untuk dibandingkan.", + "error.userNotFound": "Pengguna GitHub tidak ditemukan", + "explanations.contribution": "Skor Kontribusi", + "explanations.line.contribution.1": "Skor kontribusi hanya didasarkan pada masalah dan diskusi eksternal.", + "explanations.line.contribution.2": "Komit dan permintaan tarik dikecualikan untuk menghindari penghitungan ganda.", + "explanations.line.contribution.3": "Reaksi negatif mengurangi dampak masalah dan diskusi.", + "explanations.line.contribution.4": "Skor kontribusi dibatasi agar tidak mendominasi skor akhir.", + "explanations.line.language.1": "Skor yang berfokus pada bahasa bersifat opsional dan tidak menggantikan skor keseluruhan.", + "explanations.line.language.2": "Kesesuaian bahasa repositori dihitung dari distribusi bita bahasa repositori GitHub.", + "explanations.line.language.3": "Kesesuaian bahasa permintaan tarik menggunakan distribusi bahasa repositori target sebagai perkiraan.", + "explanations.line.language.4": "Repositori yang tidak sesuai dikurangi secara perlahan alih-alih diabaikan sepenuhnya.", + "explanations.line.language.5": "Repositori yang tidak memiliki data bahasa menggunakan faktor bahasa netral.", + "explanations.line.language.6": "Kesesuaian bahasa kontribusi komunitas menggunakan data bahasa repositori jika tersedia.", + "explanations.line.overall.1": "Skor akhir berbobot 45% dampak repositori, 45% dampak permintaan tarik, dan 10% dampak kontribusi komunitas.", + "explanations.line.pr.1": "Hanya permintaan tarik yang digabungkan yang dihitung.", + "explanations.line.pr.2": "Permintaan tarik ke repositori milik pengguna sendiri diabaikan.", + "explanations.line.pr.3": "Permintaan tarik yang berulang ke repositori yang sama menggunakan hukum hasil yang semakin menurun.", + "explanations.line.pr.4": "PR kecil dan PR besar yang dihasilkan secara otomatis dikurangi nilainya.", + "explanations.line.repo.1": "Skor repositori didasarkan pada bintang, percabangan, pemantau, dan aktivitas.", + "explanations.line.repo.2": "Repositori hasil percabangan dikurangi secara signifikan.", + "explanations.line.repo.3": "Repositori teratas memberikan kontribusi paling besar terhadap skor repositori.", + "explanations.language": "Skor Bahasa", + "explanations.overall": "Skor Keseluruhan", + "explanations.pr": "Skor Permintaan Tarik", + "explanations.repo": "Skor Repositori", + "explanations.title": "Bagaimana skor ini dihitung", + "footer.description": "Bandingkan metrik pengembang GitHub secara berdampingan dengan tampilan aktivitas, konsistensi, dan dampak keseluruhan yang lebih jelas.", + "footer.eyebrow": "Perbandingan Pengembang", + "footer.note": "Dibuat untuk peninjauan berdampingan yang cepat dan profesional saat Anda membutuhkan sinyal yang lebih bersih daripada sekadar menjelajahi profil mentah.", + "footer.summary": "Bandingkan metrik pengembang GitHub", + "footer.tag": "Metrik GitHub", + "footer.tagline": "Wawasan lebih tajam. Evaluasi lebih cepat.", + "form.compare": "Bandingkan", + "form.compare.ing": "Membandingkan...", + "form.header.eyebrow": "Dampak Pengembang", + "form.enterTwo": "Masukkan dua nama pengguna GitHub untuk membandingkan metrik pengembang mereka", + "form.insights.toggle": "Hasilkan wawasan", + "form.languages.clear": "Bersihkan bahasa", + "form.languages.description": "Mode fokus opsional untuk ekosistem tertentu (maksimal 5).", + "form.languages.empty": "Tidak ada bahasa yang dipilih. Hanya penilaian keseluruhan.", + "form.languages.remove": "Hapus {language}", + "form.languages.title": "Bahasa terpilih", + "form.languages.toggle": "Alihkan bahasa {language}", + "form.reset": "Atur Ulang", + "form.swap": "Tukar pengguna", + "form.username1": "Nama pengguna 1 (misalnya, torvalds)", + "form.username1.label": "Nama pengguna pertama", + "form.username2": "Nama pengguna 2 (misalnya, octocat)", + "form.username2.label": "Nama pengguna kedua", + "insights.confidenceNote": "Catatan tingkat kepercayaan", + "insights.contribution.leader": "{username} menunjukkan aktivitas kontribusi yang lebih tinggi", + "insights.equal.contribution": "Kedua pengembang memiliki tingkat kontribusi yang serupa", + "insights.equal.pr": "Kedua pengembang memiliki dampak permintaan tarik yang setara", + "insights.equal.repo": "Kedua pengembang memiliki kekuatan repositori yang serupa", + "insights.keyDifferences": "Perbedaan utama", + "insights.panelTitle": "Wawasan Perbandingan", + "insights.summaryText": "{winner} saat ini memiliki skor dampak sumber terbuka publik yang lebih tinggi sebanyak {diff} poin daripada {other}.", + "insights.pr.leader": "{username} unggul dalam dampak permintaan tarik dengan {score} vs {other}", + "insights.contribution.leaderDetailed": "{username} unggul dalam dampak kontribusi komunitas dengan {score} vs {other}", + "insights.recommendationsUser1": "Rekomendasi untuk pengguna 1", + "insights.recommendationsUser2": "Rekomendasi untuk pengguna 2", + "insights.recommendationsFor": "Rekomendasi untuk {name}", + "insights.strength.repo": "Dampak repositori dan visibilitas proyek yang lebih kuat.", + "insights.strength.pr": "Dampak permintaan tarik eksternal yang digabungkan lebih tinggi.", + "insights.strength.contribution": "Dampak kontribusi masalah/diskusi eksternal yang lebih tinggi.", + "insights.strength.balanced": "Dampak keseluruhan yang seimbang di seluruh dimensi penilaian utama.", + "insights.recommendation.repo": "Berinvestasi pada lebih sedikit repositori publik berkualitas tinggi dengan aktivitas yang berkelanjutan.", + "insights.recommendation.pr": "Tingkatkan kontribusi yang digabungkan ke repositori eksternal dengan jangkauan komunitas yang lebih luas.", + "insights.recommendation.contribution": "Berpartisipasi lebih banyak dalam masalah/diskusi eksternal bermutu tinggi untuk meningkatkan dampak komunitas.", + "insights.recommendation.maintain": "Pertahankan konsistensi di seluruh repositori, permintaan tarik, dan keterlibatan komunitas eksternal.", + "insights.repo.leader": "{username} memiliki portofolio repositori yang lebih kuat dengan {score} vs {other}", + "insights.summary": "Ringkasan", + "insights.title": "Wawasan Utama", + "insights.user1Strengths": "Kekuatan pengguna 1", + "insights.user2Strengths": "Kekuatan pengguna 2", + "insights.confidenceNoteText": "Perbandingan ini bersifat deterministik dan didasarkan pada sinyal GitHub publik yang diperoleh untuk {user1} dan {user2}.", + "methodology.back": "Kembali ke perbandingan", + "methodology.title": "Bagaimana penilaian DevImpact bekerja", + "methodology.intro": "Halaman ini menjelaskan alur penilaian deterministik yang digunakan oleh DevImpact. Rumus di bawah ini menjelaskan bagaimana dampak repositori, dampak permintaan tarik eksternal, dan dampak kontribusi komunitas digabungkan ke dalam skor akhir.", + "methodology.cta.description": "Lihat metodologi penilaian lengkap dengan rumus, penalti, dan alur langkah demi langkah.", + "methodology.cta.button": "Lihat metodologi lengkap", + "methodology.flow.title": "Peta alur penilaian", + "methodology.flow.stepLabel": "Langkah {number}", + "methodology.flow.step.collect": "Kumpulkan profil GitHub publik, repositori, permintaan tarik, masalah, dan diskusi.", + "methodology.flow.step.repo": "Hitung dampak repositori menggunakan bintang, percabangan, pemantau, aktivitas, dan pembobotan peringkat.", + "methodology.flow.step.pr": "Hitung dampak permintaan tarik eksternal yang digabungkan dengan hukum hasil yang semakin menurun per repositori.", + "methodology.flow.step.community": "Hitung dampak kontribusi komunitas dari masalah dan diskusi eksternal.", + "methodology.flow.step.adjustments": "Terapkan penalti dan batasan (penalti percabangan, penalti PR kecil/besar, batasan kontribusi).", + "methodology.flow.step.final": "Gabungkan skor berbobot menjadi skor dampak akhir (45% repositori, 45% PR, 10% kontribusi).", + "methodology.flow.step.normalize": "Normalisasi skor ke skala 0-100 scale untuk perbandingan antarmuka pengguna yang lebih jelas.", + "methodology.sections.components.title": "Komponen skor", + "methodology.sections.components.repo": "Skor Repositori: dampak proyek publik melalui kualitas dan visibilitas repositori.", + "methodology.sections.components.pr": "Skor PR: dampak permintaan tarik eksternal yang digabungkan dengan hukum hasil yang semakin menurun sebagai anti-spam.", + "methodology.sections.components.contribution": "Skor Kontribusi: hanya dampak masalah/diskusi eksternal.", + "methodology.sections.components.final": "Skor Akhir: kombinasi berbobot dari sinyal repositori, PR, dan kontribusi.", + "methodology.sections.weights.title": "Rumus berbobot", + "methodology.sections.weights.description": "Rumus berbobot mentah yang digunakan untuk menghitung skor akhir keseluruhan.", + "methodology.sections.weights.formula": "finalScore = repoScore * 0.45 + prScore * 0.45 + contributionScore * 0.10", + "methodology.sections.weights.repoWeight": "Bobot Skor Repositori = 45%", + "methodology.sections.weights.prWeight": "Bobot Skor PR = 45%", + "methodology.sections.weights.contributionWeight": "Bobot Skor Kontribusi = 10%", + "methodology.sections.diminishing.title": "Hasil yang semakin menurun", + "methodology.sections.diminishing.repo": "Bobot peringkat repositori: 5 repositori teratas memiliki bobot penuh, repositori yang tersisa dikurangi.", + "methodology.sections.diminishing.pr": "Di dalam setiap repositori eksternal, PR yang berulang menerima bobot yang menurun menggunakan 1/(indeks+1).", + "methodology.sections.adjustments.title": "Penalties and caps", + "methodology.sections.adjustments.fork": "Repositori hasil percabangan diberikan penalti berat agar karya yang disalin tidak mendominasi.", + "methodology.sections.adjustments.activity": "Repositori yang tidak aktif menerima faktor aktivitas yang lebih rendah daripada repositori yang baru saja diperbarui.", + "methodology.sections.adjustments.size": "PR kecil dan PR yang sangat besar diberikan penalti untuk mengurangi manipulasi dan perubahan otomatis.", + "methodology.sections.adjustments.contributionCap": "Skor kontribusi dibatasi sebesar 30% dari (repoScore + prScore).", + "methodology.sections.normalization.title": "Normalisasi", + "methodology.sections.normalization.formula": "normalizeScore(score, k) = 100 * score / (score + k)", + "methodology.sections.normalization.usage": "Skor yang dinormalisasi meningkatkan keterbacaan, sementara skor mentah tetap tersedia untuk transparansi.", + "methodology.sections.signals.title": "Sinyal transparansi", + "methodology.sections.signals.purpose": "Sinyal melaporkan apa yang dianalisis dan apa yang diabaikan, seperti PR milik repositori sendiri dan PR yang tidak digabungkan.", + "methodology.sections.signals.examples": "Contohnya mencakup jumlah PR eksternal yang digabungkan, repositori eksternal yang unik, dan cakupan kesesuaian bahasa.", + "language.focus": "Fokus Bahasa", + "language.match": "Kesesuaian bahasa", + "language.optionalNote": "Skor yang berfokus pada bahasa bersifat opsional dan tidak menggantikan skor keseluruhan.", + "language.winnerNote": "Pemenang keseluruhan dan pemenang yang berfokus pada bahasa dapat berbeda karena penilaian bahasa hanya berfokus pada ekosistem terpilih.", + "page.empty.description": "Bandingkan metrik pengembang GitHub secara berdampingan", + "page.empty.title": "Masukkan dua nama pengguna untuk dibandingkan", + "results.copied": "Disalin!", + "results.copy": "Salin Hasil", + "results.copyAria": "Salin hasil perbandingan ke papan klip", + "score.rawLabel": "Mentah: {value}", + "results.scoreVersion": "Versi skor", + "section.language": "Skor Berfokus pada Bahasa", + "section.overall": "Skor Keseluruhan", + "section.topLanguage": "Karya Berfokus pada Bahasa Teratas", + "section.topOverall": "Karya Keseluruhan Teratas", + "signals.averagePRLanguageMatch": "Rata-rata kesesuaian bahasa PR", + "signals.averageRepoLanguageMatch": "Rata-rata kesesuaian bahasa repositori", + "signals.discussionsAnalyzed": "Diskusi yang dianalisis", + "signals.externalDiscussionsCounted": "Diskusi eksternal yang dihitung", + "signals.externalIssuesCounted": "Masalah eksternal yang dihitung", + "signals.issuesAnalyzed": "Masalah yang dianalisis", + "signals.mergedExternalPRs": "PR eksternal yang digabungkan yang dihitung", + "signals.ownRepoPRsIgnored": "PR repositori sendiri diabaikan", + "signals.prsWithLanguageData": "PR dengan data bahasa", + "signals.pullRequestsAnalyzed": "Permintaan tarik yang dianalisis", + "signals.reposAnalyzed": "Repositori yang dianalisis", + "signals.reposWithLanguageData": "Repositori dengan data bahasa", + "signals.title": "Transparansi Penilaian", + "signals.uniqueExternalPRRepos": "Repositori eksternal unik", + "signals.unmergedPRsIgnored": "PR yang tidak digabungkan diabaikan", + "theme.toggle": "Alihkan mode warna", + "tooltip.contribution": "Mengukur dampak komunitas dari masalah dan diskusi eksternal.", + "tooltip.final": "Hasil berbobot berdasarkan dampak repositori, permintaan tarik, dan komunitas.", + "tooltip.pr": "Mengukur dampak permintaan tarik eksternal yang digabungkan.", + "tooltip.repo": "Mengukur dampak pembangun dari repositori.", + "topwork.desc": "Repositori dan permintaan tarik yang paling berdampak", + "topwork.forks": "percabangan", + "topwork.inRepo": "di {repo}", + "topwork.noPRs": "Tidak ada permintaan tarik yang ditemukan", + "topwork.noRepos": "Tidak ada repositori yang ditemukan", + "topwork.pr.additions": "penambahan", + "topwork.pr.deletions": "penghapusan", + "topwork.pr.repo.stars": "bintang pada repositori PR", + "topwork.stars": "bintang", + "topwork.title": "Karya Teratas", + "topwork.titleForUser": "Karya Teratas - {username}", + "topwork.topprs": "Permintaan Tarik Teratas", + "topwork.toprepos": "Repositori Teratas", + "topwork.selectedLang": "Bahasa terpilih", + "topwork.watchers": "pemantau", + "unknown.repo": "Repositori tidak diketahui", + "untitled": "Tanpa judul", + "a11y.openCommunityContribution": "Buka kontribusi komunitas {title} di GitHub", + "a11y.openProfile": "Buka profil GitHub untuk {name}", + "a11y.openPullRequest": "Buka permintaan tarik {title} di GitHub", + "a11y.openRepo": "Buka repositori {name} di GitHub" +} \ No newline at end of file