Files
citypulse/assets/lang/ms.json
Zahar 77d5be8fd1 feat(api,ui,db): add address, guest users, image URLs; update API
- Backend:
  - Add address column to tickets and migration script
  - Create guest users when user_id is missing; accept user_name and address
  - Normalize stored image paths and expose absolute image_url
  - Introduce utils for path normalization and ticket serialization
  - Add CORS configuration for dashboard/emulator origins
  - Tickets API:
    - Serialize via ticket_to_dict with consistent schema
    - Change status update to PATCH /api/tickets/{id}/status with JSON body
    - Add DELETE /api/tickets/{id} with safe file removal
- Dashboard:
  - Fetch tickets from backend, show thumbnails, absolute image URLs
  - Status select + PATCH updates, toasts for feedback
  - Add i18n key btn.viewDetails
- Mobile app:
  - Persist device user_id via SharedPreferences
  - Fetch and merge API tickets; prefer network imageUrl
  - Submit user_name and address; delete via API when available
  - Make location acquisition robust with fallbacks and non-blocking UX
- Android/deps:
  - Disable Geolocator NMEA listener to prevent crashes
  - Downgrade geolocator to ^11.0.0 for stability

BREAKING CHANGE:
- Status endpoint changed from PATCH /api/tickets/{id}?new_status=... to
  PATCH /api/tickets/{id}/status with JSON body: {"status":"in_progress"}.
- /api/tickets and /api/tickets/{id} responses now use "id" (replacing
  "ticket_id"), include "image_url", and normalize fields for clients. Update
  consumers to use the new schema.
2025-09-27 09:31:40 +08:00

157 lines
6.3 KiB
JSON

{
"app.name": "FixMate",
"nav.report": "Lapor",
"nav.map": "Peta",
"nav.myReports": "Laporan Saya",
"nav.settings": "Tetapan",
"btn.capture": "Tangkap",
"btn.gallery": "Galeri",
"btn.camera": "Kamera",
"capture.prompt": "Ambil gambar isu",
"btn.next": "Seterusnya",
"btn.submit": "Hantar",
"btn.save": "Simpan",
"btn.cancel": "Batal",
"btn.retake": "Ambil Semula",
"btn.delete": "Padam",
"btn.clearAll": "Kosongkan Semua",
"btn.changeStatus": "Tukar Status",
"btn.view": "Lihat",
"btn.details": "Butiran",
"btn.viewDetails": "Lihat butiran",
"btn.retry": "Cuba Semula",
"btn.allow": "Benarkan",
"btn.deny": "Tolak",
"btn.confirm": "Sahkan",
"btn.close": "Tutup",
"btn.openMap": "Buka Peta",
"btn.useSuggestion": "Guna Cadangan",
"btn.keepManual": "Kekal Manual",
"btn.apply": "Guna",
"btn.reset": "Tetap Semula",
"btn.filter": "Tapis",
"btn.ok": "OK",
"btn.yes": "Ya",
"btn.no": "Tidak",
"label.category": "Kategori",
"label.severity": "Tahap",
"label.status": "Status",
"label.notes": "Nota",
"label.address": "Alamat",
"label.location": "Lokasi",
"label.latitude": "Latitud",
"label.longitude": "Longitud",
"label.accuracy": "Ketepatan",
"label.timestamp": "Masa",
"label.deviceId": "ID Peranti",
"label.source": "Sumber",
"label.aiSuggestion": "Cadangan AI",
"status.submitted": "Dihantar",
"status.in_progress": "Dalam Proses",
"status.fixed": "Selesai",
"severity.high": "Tinggi",
"severity.medium": "Sederhana",
"severity.low": "Rendah",
"category.pothole": "Lubang Jalan",
"category.streetlight": "Lampu Jalan",
"category.signage": "Papan Tanda",
"category.trash": "Sampah",
"category.drainage": "Perparitan",
"category.other": "Lain-lain",
"filter.title": "Penapis",
"filter.category": "Kategori",
"filter.severity": "Tahap",
"filter.status": "Status",
"filter.dateRange": "Julat Tarikh",
"filter.showOnlyMine": "Tunjuk Milik Saya",
"map.legend": "Petunjuk Peta",
"map.noReports": "Tiada laporan",
"map.clustered": "Berkelompok",
"toast.reportSaved": "Laporan disimpan",
"toast.reportDeleted": "Laporan dipadam",
"toast.storageCleared": "Storan dikosongkan",
"confirm.deleteReport.title": "Padam laporan?",
"confirm.deleteReport.message": "Tindakan ini tidak boleh dibuat asal.",
"confirm.clearData.title": "Kosongkan semua data?",
"confirm.clearData.message": "Ini akan memadam semua laporan tempatan.",
"settings.language": "Bahasa",
"settings.diagnostics": "Diagnostik",
"settings.theme": "Tema",
"settings.theme.light": "Terang",
"settings.theme.dark": "Gelap",
"lang.en": "English",
"lang.ms": "Bahasa Malaysia",
"welcome.title": "Nampak. Tangkap. Baiki.",
"welcome.subtitle": "Lapor isu bandar dalam beberapa saat — bantu pasukan bertindak lebih pantas.",
"cta.continueGuest": "Teruskan sebagai tetamu",
"cta.signIn": "Log masuk",
"cta.skip": "Langkau",
"cta.next": "Seterusnya",
"cta.getStarted": "Mula",
"onboarding.header": "Selamat datang ke FixMate",
"onboarding.title1": "Tangkap pantas",
"onboarding.body1": "Ambil gambar dan hantar dalam kurang satu minit.",
"onboarding.title2": "Peta yang jelas",
"onboarding.body2": "Lihat isu di sekitar anda dengan pengelompokan pintar.",
"onboarding.title3": "Jejak kemajuan",
"onboarding.body3": "Ikuti kemas kini status apabila kerja disiapkan.",
"auth.title": "Log masuk",
"auth.signInWithApple": "Log masuk dengan Apple",
"auth.signInWithGoogle": "Log masuk dengan Google",
"auth.comingSoon": "Akan datang",
"welcome.title": "Nampak. Tangkap. Baiki.",
"welcome.subtitle": "Lapor isu bandar dalam beberapa saat dengan pengesanan berkuasa AI. Bantu mencipta komuniti yang lebih selamat dan lebih baik.",
"cta.continueGuest": "Teruskan sebagai Tetamu",
"cta.signIn": "Log Masuk",
"cta.skip": "Langkau buat masa ini",
"onboarding.header": "Selamat Datang ke FixMate",
"onboarding.title1": "Laporan Isu Pantas",
"onboarding.subtitle1": "Pengesanan Berkuasa AI",
"onboarding.body1": "Hanya ambil gambar mana-mana isu bandar - AI kami secara automatik mengenal pasti dan mengkategorikan masalah dalam beberapa saat.",
"onboarding.title2": "Pemetaan Bandar Pintar",
"onboarding.subtitle2": "Penglihatan Masa Nyata",
"onboarding.body2": "Lihat semua isu yang dilaporkan di peta interaktif dengan pengelompokan dan penapisan pintar.",
"onboarding.title3": "Jejak Kemajuan",
"onboarding.subtitle3": "Kekal Maklum",
"onboarding.body3": "Ikuti status laporan anda dari penyerahan hingga penyelesaian. Bantu memperbaiki komuniti anda.",
"onboarding.skip": "Langkau",
"onboarding.next": "Seterusnya",
"onboarding.getStarted": "Mula",
"review.title": "Semak & Hantar",
"review.submit": "Hantar",
"review.aiAnalysis": "Analisis AI Selesai",
"review.aiConfidence": "Pengesanan pintar dengan keyakinan {0}%",
"review.useSuggestion": "Guna Cadangan AI",
"review.editManually": "Edit Secara Manual",
"review.category": "Kategori Isu",
"review.severity": "Tahap Keterukan",
"review.notes": "Nota Tambahan",
"review.notesHint": "Tambah sebarang butiran atau konteks tambahan...",
"review.location": "Butiran Lokasi",
"review.coordinates": "Koordinat",
"review.accuracy": "Ketepatan: {0}m",
"error.saving": "Ralat menyimpan laporan: {0}",
"error.imagePick": "Ralat memilih imej: {0}",
"error.location": "Tidak dapat mendapatkan lokasi. Sila cuba lagi.",
"error.imageProcessing": "Ralat memproses imej: {0}",
"capture.title": "Lapor Isu",
"capture.subtitle": "Lapor Isu Bandar",
"capture.description": "Ambil gambar mana-mana isu penyelenggaraan bandar seperti lubang jalan, lampu jalan rosak, atau papan tanda rosak.",
"capture.processing": "Memproses imej...",
"capture.takePhoto": "Ambil Gambar",
"capture.gallery": "Pilih dari Galeri",
"report.viewDetails": "Lihat Butiran",
"report.updateStatus": "Kemas Kini Status",
"report.delete": "Padam",
"report.comingSoon": "Akan Datang!",
"settings.loading": "Memuatkan...",
"settings.app": "Apl",
"settings.version": "v1.0.0",
"settings.account": "Akaun",
"settings.account.guest": "Mod Tetamu",
"btn.logout": "Log Keluar",
"confirm.logout.title": "Log keluar?",
"confirm.logout.message": "Anda akan dibawa kembali ke skrin selamat datang.",
"label.createdAt": "Dicipta Pada",
"error.clearData": "Gagal mengosongkan data"
}