diff --git a/locales/en.json b/locales/en.json index 960df82..208bc92 100644 --- a/locales/en.json +++ b/locales/en.json @@ -1732,7 +1732,56 @@ "admin_key": "Admin API Key (For external access)", "wa_enable": "Enable WhatsApp Bot", "wa_numbers": "Admin WA Numbers (Comma-separated)", - "wa_delay": "Delay Between Broadcast Messages (seconds)" + "wa_delay": "Delay Between Broadcast Messages (seconds)", + "logo_title": "Application Logo", + "logo_portal": "Customer Portal & Login Logo", + "logo_invoice": "PDF & Invoice Logo", + "logo_pwa": "PWA Logo (App Icon)", + "hero": "Landing Page Hero Image", + "speed_title": "Speed Test & Uptime", + "speed_provider": "Speed Test Provider (Quick Fill)", + "speed_provider_ph": "-- Select to auto-fill URL & mode (optional) --", + "sp_librespeed": "LibreSpeed Self-Hosted (internal, embed)", + "sp_openspeed": "OpenSpeedTest Self-Hosted (internal, embed)", + "sp_ookla": "Ookla Speedtest Custom (external, embed)", + "sp_cloudflare": "Cloudflare Speed Test (external, new tab)", + "sp_googlefiber": "Google Fiber Speed Test (external, new tab)", + "sp_speedtestnet": "Speedtest.net / Ookla (external, new tab)", + "speed_link": "Speed Test Link", + "speed_mode": "Display Mode on Customer Dashboard", + "sp_mode_iframe": "Embed / iframe — for providers that allow it", + "sp_mode_tab": "New Tab — for providers that block iframes", + "repo_link": "Project Repository Link (GitHub)", + "uptime_link": "Website Uptime Link (Status)", + "qris_status": "Static QRIS Status", + "qris_url": "QRIS Static QR URL", + "qris_payload": "QRIS Static Payload (String)", + "qris_upload": "Upload QRIS Image (optional)", + "bank_status": "Bank Transfer Status", + "ewallet_status": "E-Wallet Status", + "bank_list": "Bank Accounts (1 per line: Bank|Number|Holder Name)", + "ewallet_list": "E-Wallets (1 per line: Name|Number|Holder Name)", + "wh_url": "1) Webhook URL (POST method)", + "wh_secret": "2) Secret Token (alternative header X-Webhook-Token)", + "wh_wa_notif": "WA Notification when Payment Not Matched", + "wh_wa_hint": "Send WA to admin whenever a payment is detected but not matched (to be matched manually by comparing notification time vs transfer proof).", + "wh_retention": "Webhook Notification Retention (Automation)", + "wh_retention_hint": "Webhook notifications older than this number of days are deleted automatically each day (04:45). Default 30 days.", + "wh_howto": "How to set up in the app (e.g. android-notification-forwarder / MacroDroid):", + "wh_li1": "Method POST, Content-Type application/json.", + "wh_li2": "API URL = the URL above (secret included), or the base URL + header X-Webhook-Token: <token>.", + "wh_li3": "Target Apps = bank/e-wallet app packages (e.g. com.gojek.gopay, OVO, DANA, Jenius).", + "wh_li4": "WhatsApp/Telegram notifications are automatically rejected so chats are not treated as payments.", + "wh_li5": "The amount in the notification must equal the invoice unique amount (amount + QRIS unique code).", + "wh_test": "Test Webhook", + "pay_on_self": "Self-Service (static QRIS + manual/MacroDroid)", + "pay_on_gateway": "Gateway (Mayar)", + "pay_mode_hint": "Mode 1 = Gateway (Mayar only). Mode 2 = static QRIS + manual verification.", + "mayar_key": "Mayar API Key", + "mayar_webhook": "Mayar Webhook (Mode 1 — Gateway)", + "save": "Save Settings", + "pay_mode": "Mode", + "qris_note": "Note" } }, "tech": { diff --git a/locales/id.json b/locales/id.json index 11a615a..69d9efe 100644 --- a/locales/id.json +++ b/locales/id.json @@ -1733,7 +1733,56 @@ "admin_key": "Admin API Key (Untuk akses luar)", "wa_enable": "Enable WhatsApp Bot", "wa_numbers": "Nomor Admin WA (Pisahkan dengan koma)", - "wa_delay": "Jeda Antar Pesan Broadcast (Detik)" + "wa_delay": "Jeda Antar Pesan Broadcast (Detik)", + "logo_title": "Logo Aplikasi", + "logo_portal": "Logo Portal Pelanggan & Login", + "logo_invoice": "Logo PDF & Invoice", + "logo_pwa": "Logo PWA (Ikon Aplikasi)", + "hero": "Foto Hero Landing Page", + "speed_title": "Speed Test & Uptime", + "speed_provider": "Provider Speed Test (Isi Cepat)", + "speed_provider_ph": "-- Pilih untuk isi URL & mode otomatis (opsional) --", + "sp_librespeed": "LibreSpeed Self-Hosted (internal, embed)", + "sp_openspeed": "OpenSpeedTest Self-Hosted (internal, embed)", + "sp_ookla": "Ookla Speedtest Custom (eksternal, embed)", + "sp_cloudflare": "Cloudflare Speed Test (eksternal, buka tab)", + "sp_googlefiber": "Google Fiber Speed Test (eksternal, buka tab)", + "sp_speedtestnet": "Speedtest.net / Ookla (eksternal, buka tab)", + "speed_link": "Link Speed Test", + "speed_mode": "Mode Tampilan di Dashboard Pelanggan", + "sp_mode_iframe": "Embed / iframe — untuk provider yang mengizinkan", + "sp_mode_tab": "Buka Tab Baru — untuk provider yang memblokir iframe", + "repo_link": "Link Repositori Proyek (GitHub)", + "uptime_link": "Link Uptime Website (Status)", + "qris_status": "Status QRIS Statis", + "qris_url": "QRIS Static QR URL", + "qris_payload": "QRIS Static Payload (String)", + "qris_upload": "Upload Gambar QRIS (opsional)", + "bank_status": "Status Transfer Bank", + "ewallet_status": "Status E-Wallet", + "bank_list": "Rekening Bank (1 per baris: Bank|Nomor|Atas Nama)", + "ewallet_list": "E-Wallet (1 per baris: Nama|Nomor|Atas Nama)", + "wh_url": "1) URL Webhook (method POST)", + "wh_secret": "2) Secret Token (alternatif header X-Webhook-Token)", + "wh_wa_notif": "Notifikasi WA saat Pembayaran Belum Cocok", + "wh_wa_hint": "Kirim WA ke admin tiap ada pembayaran terdeteksi tapi belum cocok (untuk dicocokkan manual via jam notif vs bukti transfer).", + "wh_retention": "Retensi Notifikasi Webhook (Otomasi)", + "wh_retention_hint": "Notif webhook yang lebih tua dari jumlah hari ini dihapus otomatis tiap hari (04:45). Default 30 hari.", + "wh_howto": "Cara memasang di app (mis. android-notification-forwarder / MacroDroid):", + "wh_li1": "Method POST, Content-Type application/json.", + "wh_li2": "API URL = URL di atas (secret sudah termasuk), atau URL dasar + header X-Webhook-Token: <token>.", + "wh_li3": "Target Apps = package aplikasi bank/e-wallet (mis. com.gojek.gopay, OVO, DANA, Jenius).", + "wh_li4": "Notifikasi WhatsApp/Telegram otomatis ditolak agar chat tak dianggap pembayaran.", + "wh_li5": "Nominal di notifikasi harus sama dengan nominal unik tagihan (jumlah + kode unik QRIS).", + "wh_test": "Tes Webhook", + "pay_on_self": "Self-Service (QRIS statis + manual/MacroDroid)", + "pay_on_gateway": "Gateway (Mayar)", + "pay_mode_hint": "Mode 1 = Gateway (hanya Mayar). Mode 2 = QRIS statis + verifikasi manual.", + "mayar_key": "Mayar API Key", + "mayar_webhook": "Webhook Mayar (Mode 1 — Gateway)", + "save": "Simpan Pengaturan", + "pay_mode": "Mode", + "qris_note": "Catatan" } }, "tech": { diff --git a/views/admin/settings.ejs b/views/admin/settings.ejs index 2275295..44e805e 100644 --- a/views/admin/settings.ejs +++ b/views/admin/settings.ejs @@ -457,11 +457,11 @@
-
Logo Aplikasi
+
<%= t('admin.set.logo_title','Logo Aplikasi') %>
- +
@@ -475,7 +475,7 @@
- +
@@ -491,7 +491,7 @@
- +
@@ -513,7 +513,7 @@
Landing Page
- +
@@ -530,31 +530,31 @@
-
Speed Test & Uptime
+
<%- t('admin.set.speed_title','Speed Test & Uptime') %>
- +
Preset hanya mengisi otomatis — sesuaikan URL bila perlu.
- +
Bisa internal (LibreSpeed / OpenSpeedTest self-hosted) atau eksternal (Ookla Custom, Cloudflare, Google Fiber, dll). Harus bisa diakses public. Jika dikosongkan, dashboard pelanggan menampilkan "Speedtest belum di setup".
- +
Di halaman pelanggan tersedia tombol Muat Ulang (reload speed test) & Bersihkan Cache.
@@ -577,12 +577,12 @@ }
- +
Dipakai untuk tautan Repo, Form/Issue (/issues/new/choose), Wiki, dan Lisensi di landing page.
- +
Dipakai untuk tombol/redirect <%= t('common.status','Status') %> di landing page. Jika dikosongkan, landing page tidak menampilkan tab Status.
@@ -597,30 +597,30 @@
QRIS Statis (Semi-Otomatis)
- +
- +
- +
- +
Jika diisi, sistem akan membuat QRIS dinamis per transaksi (nominal langsung terisi saat scan). Jika kosong, sistem pakai URL gambar seperti biasa.
- +
Jika di-upload, sistem akan menyimpan file dan otomatis mengisi URL QRIS.
@@ -705,14 +705,14 @@
Transfer Bank & E-Wallet (Manual, Mode 2)
- +
- +
- +
Nominal & kode unik sama seperti QRIS; verifikasi otomatis (webhook forwarder) + manual (upload bukti).
@@ -739,14 +739,14 @@ const macroWebhookUrlFull = _base + '/api/webhook/v1/payment-notif?secret_key=' + encodeURIComponent(_secret); %>
- +
- +
@@ -754,15 +754,15 @@
- + -
Kirim WA ke admin tiap ada pembayaran terdeteksi tapi belum cocok (untuk dicocokkan manual via jam notif vs bukti transfer).
+
<%= t('admin.set.wh_wa_hint','Kirim WA ke admin tiap ada pembayaran terdeteksi tapi belum cocok (untuk dicocokkan manual via jam notif vs bukti transfer).') %>
- +
-
Notif webhook yang lebih tua dari jumlah hari ini dihapus otomatis tiap hari (04:45). Default 30 hari.
+
<%= t('admin.set.wh_retention_hint','Notif webhook yang lebih tua dari jumlah hari ini dihapus otomatis tiap hari (04:45). Default 30 hari.') %>
- Cara memasang di app (mis. android-notification-forwarder / MacroDroid): + <%= t('admin.set.wh_howto','Cara memasang di app (mis. android-notification-forwarder / MacroDroid):') %>
    -
  1. Method POST, Content-Type application/json.
  2. -
  3. API URL = URL di atas (secret sudah termasuk), atau URL dasar + header X-Webhook-Token: <token>.
  4. -
  5. Target Apps = package aplikasi bank/e-wallet (mis. com.gojek.gopay, OVO, DANA, Jenius).
  6. -
  7. Notifikasi WhatsApp/Telegram otomatis ditolak agar chat tak dianggap pembayaran.
  8. -
  9. Nominal di notifikasi harus sama dengan nominal unik tagihan (jumlah + kode unik QRIS).
  10. +
  11. <%- t('admin.set.wh_li1','Method POST, Content-Type application/json.') %>
  12. +
  13. <%- t('admin.set.wh_li2','API URL = URL di atas (secret sudah termasuk), atau URL dasar + header X-Webhook-Token: <token>.') %>
  14. +
  15. <%- t('admin.set.wh_li3','Target Apps = package aplikasi bank/e-wallet (mis. com.gojek.gopay, OVO, DANA, Jenius).') %>
  16. +
  17. <%= t('admin.set.wh_li4','Notifikasi WhatsApp/Telegram otomatis ditolak agar chat tak dianggap pembayaran.') %>
  18. +
  19. <%- t('admin.set.wh_li5','Nominal di notifikasi harus sama dengan nominal unik tagihan (jumlah + kode unik QRIS).') %>
- +
@@ -794,15 +794,15 @@
Mode Pembayaran
- + -
Mode 1 = Gateway (hanya Mayar). Mode 2 = QRIS statis + verifikasi manual.
+
<%= t('admin.set.pay_mode_hint','Mode 1 = Gateway (hanya Mayar). Mode 2 = QRIS statis + verifikasi manual.') %>
- +
Webhook Mayar: https://<domain-anda>/api/webhook/mayar
@@ -810,7 +810,7 @@
- +
@@ -822,7 +822,7 @@
- +