Files
citypulse/assets/lang/en.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": "Report",
"nav.map": "Map",
"nav.myReports": "My Reports",
"nav.settings": "Settings",
"btn.capture": "Capture",
"btn.gallery": "Gallery",
"btn.camera": "Camera",
"capture.prompt": "Take a photo of the issue",
"btn.next": "Next",
"btn.submit": "Submit",
"btn.save": "Save",
"btn.cancel": "Cancel",
"btn.retake": "Retake",
"btn.delete": "Delete",
"btn.clearAll": "Clear All",
"btn.changeStatus": "Change Status",
"btn.view": "View",
"btn.details": "Details",
"btn.viewDetails": "View details",
"btn.retry": "Retry",
"btn.allow": "Allow",
"btn.deny": "Deny",
"btn.confirm": "Confirm",
"btn.close": "Close",
"btn.openMap": "Open Map",
"btn.useSuggestion": "Use Suggestion",
"btn.keepManual": "Keep Manual",
"btn.apply": "Apply",
"btn.reset": "Reset",
"btn.filter": "Filter",
"btn.ok": "OK",
"btn.yes": "Yes",
"btn.no": "No",
"label.category": "Category",
"label.severity": "Severity",
"label.status": "Status",
"label.notes": "Notes",
"label.address": "Address",
"label.location": "Location",
"label.latitude": "Latitude",
"label.longitude": "Longitude",
"label.accuracy": "Accuracy",
"label.timestamp": "Timestamp",
"label.deviceId": "Device ID",
"label.source": "Source",
"label.aiSuggestion": "AI Suggestion",
"status.submitted": "Submitted",
"status.in_progress": "In Progress",
"status.fixed": "Fixed",
"severity.high": "High",
"severity.medium": "Medium",
"severity.low": "Low",
"category.pothole": "Pothole",
"category.streetlight": "Streetlight",
"category.signage": "Signage",
"category.trash": "Trash",
"category.drainage": "Drainage",
"category.other": "Other",
"filter.title": "Filters",
"filter.category": "Category",
"filter.severity": "Severity",
"filter.status": "Status",
"filter.dateRange": "Date Range",
"filter.showOnlyMine": "Show Only Mine",
"map.legend": "Map Legend",
"map.noReports": "No reports found",
"map.clustered": "Clustered",
"toast.reportSaved": "Report saved",
"toast.reportDeleted": "Report deleted",
"toast.storageCleared": "Storage cleared",
"confirm.deleteReport.title": "Delete report?",
"confirm.deleteReport.message": "This action cannot be undone.",
"confirm.clearData.title": "Clear all data?",
"confirm.clearData.message": "This will remove all local reports.",
"settings.language": "Language",
"settings.diagnostics": "Diagnostics",
"settings.theme": "Theme",
"settings.theme.light": "Light",
"settings.theme.dark": "Dark",
"lang.en": "English",
"lang.ms": "Bahasa Malaysia",
"welcome.title": "Spot it. Snap it. Fix it.",
"welcome.subtitle": "Report city issues in seconds with AI-powered detection. Help create safer, better communities together.",
"cta.continueGuest": "Continue as guest",
"cta.signIn": "Sign in",
"cta.skip": "Skip",
"cta.next": "Next",
"cta.getStarted": "Get started",
"onboarding.header": "Welcome to FixMate",
"onboarding.title1": "Fast Issue Reporting",
"onboarding.body1": "Simply take a photo of any urban issue - our AI automatically identifies and categorizes the problem in seconds.",
"onboarding.title2": "Smart City Mapping",
"onboarding.body2": "View all reported issues on an interactive map with intelligent clustering and filtering options.",
"onboarding.title3": "Track Progress",
"onboarding.body3": "Follow the status of your reports from submission to resolution. Help make your community better.",
"auth.title": "Sign in",
"auth.signInWithApple": "Sign in with Apple",
"auth.signInWithGoogle": "Sign in with Google",
"auth.comingSoon": "Coming soon",
"welcome.title": "Spot it. Snap it. Fix it.",
"welcome.subtitle": "Report city issues in seconds with AI-powered detection. Help create safer, better communities together.",
"cta.continueGuest": "Continue as Guest",
"cta.signIn": "Sign In",
"cta.skip": "Skip for now",
"onboarding.header": "Welcome to FixMate",
"onboarding.title1": "Fast Issue Reporting",
"onboarding.subtitle1": "AI-Powered Detection",
"onboarding.body1": "Simply take a photo of any urban issue - our AI automatically identifies and categorizes the problem in seconds.",
"onboarding.title2": "Smart City Mapping",
"onboarding.subtitle2": "Real-Time Visualization",
"onboarding.body2": "View all reported issues on an interactive map with intelligent clustering and filtering options.",
"onboarding.title3": "Track Progress",
"onboarding.subtitle3": "Stay Informed",
"onboarding.body3": "Follow the status of your reports from submission to resolution. Help make your community better.",
"onboarding.skip": "Skip",
"onboarding.next": "Next",
"onboarding.getStarted": "Get Started",
"review.title": "Review & Submit",
"review.submit": "Submit",
"review.aiAnalysis": "AI Analysis Complete",
"review.aiConfidence": "Smart detection with {0}% confidence",
"review.useSuggestion": "Use AI Suggestion",
"review.editManually": "Edit Manually",
"review.category": "Issue Category",
"review.severity": "Severity Level",
"review.notes": "Additional Notes",
"review.notesHint": "Add any additional details or context...",
"review.location": "Location Details",
"review.coordinates": "Coordinates",
"review.accuracy": "Accuracy: {0}m",
"error.saving": "Error saving report: {0}",
"error.imagePick": "Error picking image: {0}",
"error.location": "Unable to get location. Please try again.",
"error.imageProcessing": "Error processing image: {0}",
"capture.title": "Report Issue",
"capture.subtitle": "Report City Issues",
"capture.description": "Take a photo of any urban maintenance issue like potholes, broken streetlights, or damaged signage.",
"capture.processing": "Processing image...",
"capture.takePhoto": "Take Photo",
"capture.gallery": "Choose from Gallery",
"report.viewDetails": "View Details",
"report.updateStatus": "Update Status",
"report.delete": "Delete",
"report.comingSoon": "Coming Soon!",
"settings.loading": "Loading...",
"settings.app": "App",
"settings.version": "v1.0.0",
"settings.account": "Account",
"settings.account.guest": "Guest Mode",
"btn.logout": "Logout",
"confirm.logout.title": "Logout?",
"confirm.logout.message": "You will be returned to the welcome screen.",
"label.createdAt": "Created At",
"error.clearData": "Failed to clear data"
}