mirror of
https://github.com/mauriceboe/TREK.git
synced 2026-06-21 06:11:45 +00:00
a876fb2634
* feat(auth): passkey (WebAuthn) login — server endpoints, schema + admin toggle Add @simplewebauthn/server registration and primary (discoverable) login ceremonies under /api/auth/passkey, a webauthn_credentials + single-use webauthn_challenges schema (migration), the instance-wide passkey_login toggle (default off) enforced before auth by a guard, and require_mfa satisfaction via a verified passkey. RP ID/origin come only from server config (webauthn_rp_id/origins -> APP_URL), never request headers. * feat(auth): passkey enrolment, login button + admin settings UI PasskeysSection in account settings (add/rename/remove with a current-password step-up), a 'Sign in with a passkey' button on the login page, the admin enable + RP-ID/origins controls, and a per-user admin reset action. * i18n(auth): passkey strings across all locales Add login/settings/admin passkey keys to en and all 19 translated locales.
100 lines
5.0 KiB
TypeScript
100 lines
5.0 KiB
TypeScript
import type { TranslationStrings } from '../types';
|
|
|
|
const login: TranslationStrings = {
|
|
'login.error': 'Login gagal. Periksa kembali kredensial kamu.',
|
|
'login.tagline': 'Perjalananmu.\nRencanamu.',
|
|
'login.description':
|
|
'Rencanakan perjalanan bersama dengan peta interaktif, anggaran, dan sinkronisasi real-time.',
|
|
'login.features.maps': 'Peta Interaktif',
|
|
'login.features.mapsDesc': 'Google Places, rute & pengelompokan',
|
|
'login.features.realtime': 'Sinkronisasi Real-Time',
|
|
'login.features.realtimeDesc': 'Rencanakan bersama via WebSocket',
|
|
'login.features.budget': 'Pelacak Anggaran',
|
|
'login.features.budgetDesc': 'Kategori, grafik & biaya per orang',
|
|
'login.features.collab': 'Kolaborasi',
|
|
'login.features.collabDesc': 'Multi-pengguna dengan perjalanan bersama',
|
|
'login.features.packing': 'Daftar Packing',
|
|
'login.features.packingDesc': 'Kategori, progres & saran',
|
|
'login.features.bookings': 'Reservasi',
|
|
'login.features.bookingsDesc': 'Penerbangan, hotel, restoran & lainnya',
|
|
'login.features.files': 'Dokumen',
|
|
'login.features.filesDesc': 'Unggah & kelola dokumen',
|
|
'login.features.routes': 'Rute Cerdas',
|
|
'login.features.routesDesc': 'Optimasi otomatis & ekspor ke Google Maps',
|
|
'login.selfHosted': 'Self-hosted · Open Source · Datamu tetap milikmu',
|
|
'login.title': 'Masuk',
|
|
'login.subtitle': 'Selamat datang kembali',
|
|
'login.signingIn': 'Sedang masuk…',
|
|
'login.signIn': 'Masuk',
|
|
'login.createAdmin': 'Buat Akun Admin',
|
|
'login.createAdminHint': 'Siapkan akun admin pertama untuk TREK.',
|
|
'login.setNewPassword': 'Atur Kata Sandi Baru',
|
|
'login.setNewPasswordHint':
|
|
'Kamu harus mengganti kata sandi sebelum melanjutkan.',
|
|
'login.createAccount': 'Buat Akun',
|
|
'login.createAccountHint': 'Daftarkan akun baru.',
|
|
'login.creating': 'Membuat…',
|
|
'login.noAccount': 'Belum punya akun?',
|
|
'login.hasAccount': 'Sudah punya akun?',
|
|
'login.register': 'Daftar',
|
|
'login.emailPlaceholder': 'kamu@email.com',
|
|
'login.username': 'Nama pengguna',
|
|
'login.oidc.registrationDisabled':
|
|
'Pendaftaran dinonaktifkan. Hubungi administrator kamu.',
|
|
'login.oidc.noEmail': 'Tidak ada email yang diterima dari penyedia.',
|
|
'login.oidc.tokenFailed': 'Autentikasi gagal.',
|
|
'login.oidc.invalidState': 'Sesi tidak valid. Coba lagi.',
|
|
'login.demoFailed': 'Login demo gagal',
|
|
'login.oidcSignIn': 'Masuk dengan {name}',
|
|
'login.oidcOnly':
|
|
'Autentikasi kata sandi dinonaktifkan. Masuk menggunakan penyedia SSO kamu.',
|
|
'login.oidcLoggedOut':
|
|
'Kamu telah keluar. Masuk kembali menggunakan penyedia SSO kamu.',
|
|
'login.demoHint': 'Coba demo — tidak perlu registrasi',
|
|
'login.mfaTitle': 'Autentikasi dua faktor',
|
|
'login.mfaSubtitle': 'Masukkan kode 6 digit dari aplikasi autentikator kamu.',
|
|
'login.mfaCodeLabel': 'Kode verifikasi',
|
|
'login.mfaCodeRequired': 'Masukkan kode dari aplikasi autentikator kamu.',
|
|
'login.mfaHint':
|
|
'Buka Google Authenticator, Authy, atau aplikasi TOTP lainnya.',
|
|
'login.mfaBack': '← Kembali ke halaman masuk',
|
|
'login.mfaVerify': 'Verifikasi',
|
|
'login.invalidInviteLink':
|
|
'Tautan undangan tidak valid atau sudah kedaluwarsa',
|
|
'login.oidcFailed': 'Login OIDC gagal',
|
|
'login.usernameRequired': 'Nama pengguna wajib diisi',
|
|
'login.passwordMinLength': 'Kata sandi minimal 8 karakter',
|
|
'login.forgotPassword': 'Lupa kata sandi?',
|
|
'login.forgotPasswordTitle': 'Setel ulang kata sandi',
|
|
'login.forgotPasswordBody':
|
|
'Masukkan alamat email akunmu. Jika akun ada, kami akan mengirim tautan reset.',
|
|
'login.forgotPasswordSubmit': 'Kirim tautan',
|
|
'login.forgotPasswordSentTitle': 'Periksa email kamu',
|
|
'login.forgotPasswordSentBody':
|
|
'Jika ada akun dengan email tersebut, tautannya sedang dikirim. Berlaku 60 menit.',
|
|
'login.forgotPasswordSmtpHintOff':
|
|
'Catatan: administrator belum mengonfigurasi SMTP, jadi tautan reset akan ditulis ke konsol server alih-alih dikirim lewat email.',
|
|
'login.backToLogin': 'Kembali ke login',
|
|
'login.newPassword': 'Kata sandi baru',
|
|
'login.confirmPassword': 'Konfirmasi kata sandi baru',
|
|
'login.passwordsDontMatch': 'Kata sandi tidak cocok',
|
|
'login.mfaCode': 'Kode 2FA',
|
|
'login.resetPasswordTitle': 'Tetapkan kata sandi baru',
|
|
'login.resetPasswordBody':
|
|
'Pilih kata sandi kuat yang belum pernah kamu pakai di sini. Minimal 8 karakter.',
|
|
'login.resetPasswordMfaBody':
|
|
'Masukkan kode 2FA atau kode cadangan untuk menyelesaikan reset.',
|
|
'login.resetPasswordSubmit': 'Setel ulang kata sandi',
|
|
'login.resetPasswordVerify': 'Verifikasi & setel ulang',
|
|
'login.resetPasswordSuccessTitle': 'Kata sandi diperbarui',
|
|
'login.resetPasswordSuccessBody':
|
|
'Sekarang kamu bisa login dengan kata sandi baru.',
|
|
'login.resetPasswordInvalidLink': 'Tautan tidak valid',
|
|
'login.resetPasswordInvalidLinkBody':
|
|
'Tautan hilang atau rusak. Minta tautan baru untuk melanjutkan.',
|
|
'login.resetPasswordFailed': 'Reset gagal. Tautan mungkin sudah kedaluwarsa.',
|
|
'login.passkey.signIn': 'Masuk dengan passkey',
|
|
'login.passkey.failed': 'Masuk dengan passkey gagal. Silakan coba lagi.',
|
|
};
|
|
export default login;
|