Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@
<a href="docs/i18n/README.de.md"><img src="https://img.shields.io/badge/lang-Deutsch-555" alt="Deutsch" /></a>
<a href="docs/i18n/README.tr.md"><img src="https://img.shields.io/badge/lang-Türkçe-555" alt="Türkçe" /></a>
<a href="docs/i18n/README.ko.md"><img src="https://img.shields.io/badge/lang-한국어-555" alt="한국어" /></a>
<a href="docs/i18n/README.id.md"><img src="https://img.shields.io/badge/lang-Bahasa Indonesia-555" alt="Bahasa Indonesia" /></a>
</p>

<p align="center">
Expand Down
2 changes: 1 addition & 1 deletion apps/dashboard/src/i18n/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ import autoDns from "./locales/en/autoDns.json";
export const baseDictionary = { brand, auth, dashboard, settings, servers, billing, library, onboarding, deploy, deployments, importProject, projects, projectSettings, projectDetail, emails, emailsAdmin, chrome, overview, widgets, misc, migration, jobs, issues, autoDns };
export type Dictionary = typeof baseDictionary;

export const locales = ["en", "ar", "es", "fr", "de", "pt", "ja", "zh", "tr"] as const;
export const locales = ["en", "ar", "es", "fr", "de", "pt", "ja", "zh", "tr", "id"] as const;
export type Locale = (typeof locales)[number];
export const defaultLocale: Locale = "en";
export const LOCALE_COOKIE = "openship-locale";
Expand Down
111 changes: 111 additions & 0 deletions apps/dashboard/src/i18n/locales/id/auth.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,111 @@
{
"login": {
"title": "Selamat datang kembali",
"subtitle": "Masuk ke akun Anda untuk melanjutkan.",
"emailLabel": "Email",
"emailPlaceholder": "you@example.com",
"passwordLabel": "Password",
"passwordPlaceholder": "••••••••",
"forgot": "Lupa?",
"submit": "Masuk",
"submitting": "Masuk…",
"noAccount": "Belum punya akun?",
"createOne": "Buat akun"
},
"zeroAuth": {
"title": "Masin tidak tersedia di sini",
"remoteBrowser": "Instance ini berjalan tanpa akun, dan sesi hanya bisa dibuat untuk browser di mesin tempat OpenShip berjalan. Anda membuka dashboard dari {origin}, jadi tidak ada yang bisa dimasuki.",
"refused": "Instance ini berjalan tanpa akun, dan server menolak membuat sesi untuk browser ini, sehingga masuk di sini tidak bisa diselesaikan.",
"remedy": "Untuk masuk dengan akun, tambahkan ini ke environment OpenShip dan mulai ulang:",
"remedyAdmin": "Lalu masuk dengan akun admin yang dibuat saat pengaturan.",
"retry": "Coba lagi"
},
"register": {
"title": "Buat akun Anda",
"subtitle": "Mulai dengan OpenShip dalam hitungan detik.",
"nameLabel": "Nama",
"namePlaceholder": "Nama Anda",
"emailLabel": "Email",
"emailPlaceholder": "you@example.com",
"passwordLabel": "Password",
"passwordPlaceholder": "Min. 8 karakter",
"submit": "Buat akun",
"submitting": "Membuat akun…",
"hasAccount": "Sudah punya akun?",
"signIn": "Masuk"
},
"forgotPassword": {
"title": "Atur ulang password Anda",
"subtitle": "Masukkan email Anda dan kami akan mengirim kode reset.",
"emailLabel": "Email",
"emailPlaceholder": "you@example.com",
"submit": "Kirim kode reset",
"submitting": "Mengirim…",
"backToSignIn": "Kembali ke masuk",
"spamHint": "Tidak melihatnya? Periksa folder spam atau junk Anda."
},
"resetPassword": {
"title": "Atur password baru",
"subtitle": "Pilih password yang kuat untuk akun Anda.",
"codeSentTo": "Kami mengirim kode 6 digit ke {email}. Masukkan di bawah bersama password baru Anda.",
"codeSentGeneric": "Masukkan kode reset yang kami kirim ke email Anda, dan password baru Anda.",
"passwordLabel": "Password baru",
"passwordPlaceholder": "Min. 8 karakter",
"confirmLabel": "Konfirmasi password",
"confirmPlaceholder": "Masukkan ulang password",
"submit": "Atur ulang password",
"submitting": "Mengatur ulang…",
"backToSignIn": "Kembali ke masuk",
"doneTitle": "Password diatur ulang",
"doneDescription": "Password Anda telah berhasil diperbarui.",
"doneAction": "Masuk"
},
"verifyEmail": {
"verifyingTitle": "Memverifikasi email Anda…",
"verifyingSubtitle": "Sebentar saja.",
"verifiedTitle": "Email terverifikasi",
"verifiedDescription": "Email Anda telah diverifikasi. Anda bisa masuk sekarang.",
"verifiedAction": "Lanjutkan ke masuk",
"errorTitle": "Verifikasi gagal",
"errorDescription": "Kode mungkin salah atau sudah kedaluwarsa.",
"resendEmail": "Kirim ulang kode",
"signIn": "Masuk",
"pendingTitle": "Verifikasi email Anda",
"pendingSentTo": "Kami mengirim kode 6 digit ke {email}. Masukkan di bawah untuk memverifikasi email Anda.",
"pendingGeneric": "Masukkan kode verifikasi yang kami kirim ke email Anda.",
"resendVerification": "Kirim ulang kode",
"backToSignIn": "Kembali ke masuk",
"codeLabel": "Kode verifikasi",
"codePlaceholder": "Masukkan kode 6 digit",
"verifyCode": "Verifikasi email",
"codeLocked": "Terlalu banyak percobaan — kode ini dikunci. Minta kode baru dan periksa email Anda.",
"codeExpired": "Kode ini sudah kedaluwarsa. Minta yang baru.",
"codeInvalid": "Kode salah. Silakan periksa dan coba lagi.",
"resendRateLimited": "Silakan tunggu sebentar sebelum meminta kode lain.",
"spamHint": "Tidak melihat kode? Periksa folder spam atau junk Anda."
},
"oauth": {
"or": "atau",
"github": "Lanjutkan dengan GitHub",
"google": "Lanjutkan dengan Google"
},
"errors": {
"invalidCredentials": "Email atau password tidak valid.",
"serverUnreachable": "Tidak dapat menghubungi server. Apakah API sedang berjalan?",
"generic": "Terjadi kesalahan. Silakan coba lagi.",
"oauthFailed": "Masuk dengan OAuth gagal. Silakan coba lagi.",
"passwordMin": "Password harus minimal 8 karakter.",
"passwordMismatch": "Password tidak cocok.",
"invalidToken": "Kode reset tidak valid atau hilang. Silakan minta kode baru.",
"resetFailed": "Tidak dapat mengatur ulang password.",
"createFailed": "Tidak dapat membuat akun.",
"verificationFailed": "Verifikasi gagal.",
"verificationExpired": "Verifikasi gagal. Kode mungkin sudah kedaluwarsa.",
"resendFailed": "Gagal mengirim ulang. Silakan coba lagi.",
"verificationSent": "Email verifikasi terkirim!"
},
"back": "Kembali",
"toggleTheme": "Ubah tema",
"showPassword": "Tampilkan password",
"hidePassword": "Sembunyikan password"
}
29 changes: 29 additions & 0 deletions apps/dashboard/src/i18n/locales/id/autoDns.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
{
"checking": "Memeriksa penyedia DNS Anda…",
"noProviderTitle": "Atur record ini secara otomatis",
"noProviderDesc": "Hubungkan penyedia DNS dan OpenShip bisa menambahkan record ini untuk Anda.",
"connect": "Hubungkan penyedia DNS",
"unauthorizedTitle": "Penedia DNS perlu dihubungkan ulang",
"unauthorizedDesc": "Token yang disimpan ditolak. Hubungkan ulang untuk mengonfigurasi DNS otomatis.",
"reconnect": "Hubungkan ulang penyedia",
"unavailableTitle": "Tidak dapat menghubungi penyedia DNS Anda",
"unavailableDesc": "Kami tidak dapat memeriksa zona Anda saat ini. Coba lagi sebentar.",
"retry": "Coba lagi",
"managedBy": "{provider} mengelola {zone}",
"apply": "Konfigurasi DNS otomatis",
"applying": "Mengonfigurasi…",
"reapply": "Terapkan ulang record",
"allInPlace": "Semua record sudah terpasang",
"actionCreate": "Tambah",
"actionUpdate": "Perbarui",
"actionAdopt": "Arahkan ulang",
"actionInSync": "Sudah terpasang",
"actionConflict": "Konflik",
"conflictNote": "Tidak dikelola oleh OpenShip — hapus atau atur record ini secara manual.",
"outcomeApplied": "Diterapkan",
"outcomeSkipped": "Dilewati",
"outcomeFailed": "Gagal",
"resultDone": "DNS diperbarui.",
"resultPartial": "Beberapa record perlu diperhatikan.",
"applyFailed": "Tidak dapat mengonfigurasi DNS."
}
215 changes: 215 additions & 0 deletions apps/dashboard/src/i18n/locales/id/billing.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,215 @@
{
"capacity": {
"title": "Kapasitas & penggunaan",
"subtitle": "Kapasitas yang disertakan dalam paket Anda dan berapa yang telah Anda gunakan. Angka langsung disinkronkan dari OpenShip Cloud.",
"routes": "Route gratis",
"runningServices": "Layanan aktif",
"projects": "Proyek",
"workspaces": "Workspace",
"unlimited": "Tidak terbatas",
"used": "digunakan",
"of": "dari {max}",
"syncing": "Menyinkronkan dari cloud"
},
"topupsComingSoon": "Isi ulang kredit satu kali segera hadir — Anda akan bisa menambah kredit di atas kuota bulanan Anda di sini.",
"header": {
"credits": "Komputasi",
"creditsSuffix": "dari {limit}",
"overQuota": "Melebihi kuota",
"bandwidth": "Bandwidth",
"bandwidthNote": "gabungan masuk + keluar",
"build": "Waktu build",
"min": "mnt",
"capacity": "Kapasitas",
"workspaces": "workspace",
"vcpus": "vCPU",
"ram": "RAM",
"diskCap": "disk"
},
"tabs": {
"overview": "Ringkasan",
"usage": "Penggunaan",
"plans": "Paket",
"topups": "Isi Ulang",
"payment": "Metode Pembayaran",
"invoices": "Faktur"
},
"portal": {
"openButton": "Buka Portal Stripe",
"errorMissingUrl": "URL portal hilang dari respons",
"errorOpenFailed": "Gagal membuka portal Stripe"
},
"unavailable": {
"notConnected": {
"title": "Hubungkan ke OpenShip Cloud untuk mengelola tagihan",
"description": "Instance lokal Anda belum terhubung ke OpenShip Cloud. Hubungkan untuk melihat status langganan, penggunaan, faktur, dan isi ulang.",
"connect": "Hubungkan ke OpenShip Cloud",
"connecting": "Menunggu masuk…"
},
"sessionExpired": {
"title": "Sesi OpenShip Cloud Anda kedaluwarsa",
"description": "Anda masih terhubung, tetapi token sesi yang dikeluarkan OpenShip Cloud tidak lagi valid. Hubungkan ulang untuk memperbaruinya — tidak perlu memutuskan hubungan terlebih dahulu.",
"reconnect": "Hubungkan ulang ke OpenShip Cloud",
"connecting": "Menunggu masuk…"
},
"unreachable": {
"title": "Tidak dapat menghubungi tagihan OpenShip Cloud",
"description": "Sesi cloud Anda mungkin kedaluwarsa atau cloud sementara tidak tersedia. Coba lagi, atau hubungkan ulang dari Pengaturan → Cloud.",
"tryAgain": "Coba lagi",
"reconnect": "Hubungkan ulang"
},
"notEnabled": {
"title": "Tagihan tidak diaktifkan untuk organisasi ini",
"description": "Tagihan dikonfigurasi tetapi tidak aktif untuk organisasi ini. Hubungi administrator Anda untuk mengaktifkannya."
}
},
"plansRoute": {
"loadError": "Gagal memuat paket",
"genericError": "Terjadi kesalahan",
"tryAgain": "Coba lagi",
"checkoutError": "Gagal memulai checkout"
},
"pricing": {
"custom": "Kustom",
"comingSoon": "Segera hadir",
"mostPopular": "Paling populer",
"currentPlan": "Paket saat ini",
"contactSales": "Hubungi sales",
"freeForever": "Gratis selamanya",
"upgrade": "Tingkatkan"
},
"topups": {
"loadError": "Gagal memuat paket isi ulang",
"title": "Isi ulang kredit",
"description": "Paket kredit satu kali yang dibebankan melalui Stripe. Kredit tidak pernah kedaluwarsa dan ditumpuk di atas kuota bulanan Anda.",
"tryAgain": "Coba lagi",
"credits": "menit komputasi",
"redirecting": "Mengalihkan…",
"buy": "Beli",
"empty": "Belum ada paket isi ulang yang tersedia.",
"receiptsTitle": "Isi ulang terbaru",
"receiptsDescription": "Kwitansi dikelola di Stripe — buka portal tagihan untuk melihat riwayat faktur dan mengunduh kwitansi.",
"opening": "Membuka…",
"openPortal": "Buka Portal Stripe",
"checkoutError": "Gagal memulai checkout",
"portalError": "Gagal membuka portal tagihan"
},
"overview": {
"creditsLeft": "menit komputasi tersisa",
"planLabel": "Paket {name}",
"usedThisPeriod": "Digunakan periode ini",
"resets": "Reset",
"resetsInDay": "Dalam {n} hari",
"resetsInDays": "Dalam {n} hari",
"none": "—",
"recentActivity": "Aktivitas terbaru",
"last7Days": "7 hari terakhir",
"viewFullUsage": "Lihat penggunaan lengkap",
"noUsageYet": "Belum ada penggunaan",
"usageError": "Gagal memuat penggunaan",
"needMoreCredits": "Butuh lebih banyak menit komputasi?",
"oneTimeTopups": "Isi ulang satu kali, tanpa perubahan langganan",
"seeAllPacks": "Lihat semua paket",
"packsError": "Gagal memuat paket",
"noPacks": "Tidak ada paket isi ulang yang tersedia.",
"creditsAmount": "{n} menit komputasi",
"oneTime": "{price} satu kali",
"buy": "Beli",
"checkoutError": "Gagal memulai checkout"
},
"usage": {
"loadError": "Gagal memuat penggunaan",
"kpi": {
"balance": "Saldo",
"balanceSuffix": "dari {limit} kredit",
"consumed": "Digunakan periode ini",
"credits": "menit komputasi",
"burnRate": "Laju pembakaran",
"burnRateSuffix": "kredit/hari (7 hari terakhir)",
"projected": "Proyeksi akhir periode",
"noPeriod": "tidak ada periode"
},
"granularity": {
"day": "hari",
"week": "minggu"
},
"chart": {
"title": "Penggunaan dari waktu ke waktu",
"subtitle": "Unit terukur bertumpuk per {unit}."
},
"breakdown": {
"title": "Rincian sumber daya",
"subtitle": "Kredit ditetapkan secara proporsional ke penggunaan sumber daya terukur dalam rentang yang dipilih.",
"resource": "Sumber Daya",
"units": "Unit",
"credits": "Menit Komputasi",
"percentOfTotal": "% dari total",
"loading": "Memuat…",
"empty": "Tidak ada penggunaan dalam rentang yang dipilih."
},
"resources": {
"cpu": {
"label": "Waktu CPU",
"units": "vCPU-jam"
},
"memory": {
"label": "Memori",
"units": "GB-jam"
},
"disk": {
"label": "Disk IO",
"units": "GB"
},
"network": {
"label": "Jaringan",
"units": "GB"
}
},
"toolbar": {
"workspace": "Workspace",
"workspaceTooltip": "Rincian per workspace hadir di v1.1",
"allWorkspaces": "Semua workspace",
"to": "ke"
},
"empty": "Tidak ada data penggunaan untuk rentang yang dipilih."
},
"chart": {
"cpu": "CPU",
"memory": "Memori",
"diskIo": "Disk IO",
"network": "Jaringan",
"weekTick": "Mg {n}"
},
"layout": {
"title": "Tagihan & Penggunaan",
"subtitle": "Kelola langganan, penggunaan, dan metode pembayaran Anda."
},
"sidebar": {
"planSuffix": "Paket {name}",
"status": "Status",
"statusInactive": "Tidak aktif",
"upgradeTo": "Tingkatkan ke {name}",
"contactSales": "Hubungi sales",
"freeForever": "Gratis selamanya",
"perMonth": "${price}/bln",
"statuses": {
"active": "Aktif",
"trialing": "Uji coba",
"past_due": "Terlambat",
"canceled": "Dibatalkan",
"incomplete": "Tidak lengkap",
"incomplete_expired": "Kedaluwarsa",
"unpaid": "Belum dibayar",
"paused": "Dijeda"
},
"includedTitle": "Yang termasuk"
},
"paymentPanel": {
"title": "Metode pembayaran",
"description": "Kartu, rekening bank, dan detail tagihan dikelola di Portal Pelanggan Stripe. Buka portal untuk menambah, menghapus, atau memperbarui metode pembayaran Anda."
},
"invoicesPanel": {
"title": "Faktur",
"description": "Faktur dan kwitansi berada di Portal Pelanggan Stripe. Buka portal untuk melihat riwayat tagihan Anda dan mengunduh faktur PDF."
}
}
3 changes: 3 additions & 0 deletions apps/dashboard/src/i18n/locales/id/brand.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
{
"brand": "OpenShip"
}
Loading