Add bilingual i18n UI and lighten component shadows

This commit is contained in:
Bernard Ngandu
2025-10-10 10:30:28 +02:00
parent 8f4b954af8
commit 0422becdd0
20 changed files with 622 additions and 141 deletions
+123
View File
@@ -0,0 +1,123 @@
{
"app": {
"name": "SignalMap",
"tagline": "Crowd signals around your route"
},
"status": {
"idle": "Live feed",
"loading": "Syncing map",
"posting": "Sending signal",
"refreshing": "Updating heat",
"error": "Offline"
},
"header": {
"badge": {
"updated": "{{time}}"
},
"actions": {
"refresh": "Refresh now",
"focusHeat": "Focus heatmap",
"locate": "Locate me",
"mySignal": "My last signal"
}
},
"overview": {
"title": "Nearby coverage",
"description": "Signals refresh automatically every few seconds.",
"stats": {
"signals": "Signals",
"contributors": "Contributors"
},
"badge": "Your last signal {{time}}",
"error": {
"action": "Try again"
},
"cta": {
"send": "Drop a signal manually",
"sending": "Sending…",
"waiting": "Waiting for location…"
},
"locationPermission": "Allow location permissions to personalise the feed.",
"lastSynced": "Last synced {{time}}"
},
"hotspots": {
"title": "Danger zone intel",
"description": "Highest intensity heat within {{radius}}km.",
"noLocation": "{{hint}}",
"empty": "No active hotspots nearby. Tap the map to log a new signal.",
"focus": "Focus",
"itemTitle": "Hotspot #{{index}}",
"itemSubtitleWithDistance": "{{distance}} · {{coordinates}}",
"itemSubtitle": "{{coordinates}}"
},
"activity": {
"title": "Live community pings",
"description": "Latest activity reported by nearby contributors.",
"empty": "No recent signals within your area yet.",
"view": "View"
},
"map": {
"posting": "Sending your signal…",
"loading": "Syncing map…",
"confirmationHint": "Confirm the new signal in the dialog to send it."
},
"dialog": {
"confirmSignal": {
"title": "Confirm new signal",
"description": "You're about to publish a community alert at these coordinates. Double-check the spot before confirming.",
"latitude": "Latitude",
"longitude": "Longitude",
"reach": "Signals are visible to travellers within {{radius}}km and help the community stay aware of hotspots.",
"cancel": "Cancel",
"confirm": "Confirm signal",
"sending": "Sending…"
}
},
"location": {
"hint": {
"requesting": "Fetching your location…",
"allow": "Allow location access to view nearby reports.",
"showing": "Showing reports within {{radius}}km of you."
},
"error": {
"permissionDenied": "Location access denied. Enable it to view nearby pings.",
"unavailable": "Unable to determine your position. Try again.",
"timeout": "Timed out while fetching your location.",
"generic": "Failed to retrieve your location.",
"unsupported": "Geolocation is not supported in this browser."
}
},
"activityItem": {
"user": "User {{id}}",
"distance": "{{distance}} away"
},
"common": {
"coordinates": "{{lat}}°, {{lng}}°",
"never": "never",
"actions": {
"close": "Close"
},
"aria": {
"theme": {
"light": "Switch to light mode",
"dark": "Switch to dark mode"
},
"language": "Change language to {{language}}",
"sheet": {
"close": "Close panel"
}
}
},
"language": {
"label": "Language",
"english": "English",
"french": "Français"
},
"errors": {
"feedUnavailable": "Unable to reach the hotspot feed.",
"feedUnknown": "Unknown error while loading hotspots.",
"submitUnavailable": "Unable to store your signal.",
"submitUnknown": "Something went wrong while saving your signal.",
"submitWithReason": "{{message}}"
}
}
+123
View File
@@ -0,0 +1,123 @@
{
"app": {
"name": "SignalMap",
"tagline": "Alertes de la communauté sur votre itinéraire"
},
"status": {
"idle": "Flux en direct",
"loading": "Synchronisation de la carte",
"posting": "Envoi du signal",
"refreshing": "Mise à jour de la chaleur",
"error": "Hors ligne"
},
"header": {
"badge": {
"updated": "{{time}}"
},
"actions": {
"refresh": "Actualiser",
"focusHeat": "Centrer la chaleur",
"locate": "Me localiser",
"mySignal": "Mon dernier signal"
}
},
"overview": {
"title": "Couverture à proximité",
"description": "Les signaux se mettent à jour automatiquement toutes les quelques secondes.",
"stats": {
"signals": "Signaux",
"contributors": "Contributeurs"
},
"badge": "Votre dernier signal {{time}}",
"error": {
"action": "Réessayer"
},
"cta": {
"send": "Déposer un signal manuellement",
"sending": "Envoi…",
"waiting": "En attente de la localisation…"
},
"locationPermission": "Autorisez la localisation pour personnaliser le flux.",
"lastSynced": "Dernière synchronisation {{time}}"
},
"hotspots": {
"title": "Infos sur les zones à risque",
"description": "Chaleur la plus intense dans un rayon de {{radius}} km.",
"noLocation": "{{hint}}",
"empty": "Aucune zone active à proximité. Touchez la carte pour enregistrer un nouveau signal.",
"focus": "Centrer",
"itemTitle": "Zone chaude n°{{index}}",
"itemSubtitleWithDistance": "{{distance}} · {{coordinates}}",
"itemSubtitle": "{{coordinates}}"
},
"activity": {
"title": "Alertes de la communauté",
"description": "Dernières activités signalées à proximité.",
"empty": "Aucun signal récent dans votre secteur.",
"view": "Voir"
},
"map": {
"posting": "Envoi de votre signal…",
"loading": "Synchronisation de la carte…",
"confirmationHint": "Confirmez le nouveau signal dans la fenêtre pour l'envoyer."
},
"dialog": {
"confirmSignal": {
"title": "Confirmer le nouveau signal",
"description": "Vous êtes sur le point de publier une alerte communautaire à ces coordonnées. Vérifiez l'emplacement avant de confirmer.",
"latitude": "Latitude",
"longitude": "Longitude",
"reach": "Les signaux sont visibles par les voyageurs dans un rayon de {{radius}} km et aident la communauté à rester informée des zones à risque.",
"cancel": "Annuler",
"confirm": "Confirmer le signal",
"sending": "Envoi…"
}
},
"location": {
"hint": {
"requesting": "Récupération de votre localisation…",
"allow": "Autorisez l'accès à la localisation pour voir les signalements à proximité.",
"showing": "Affichage des signalements dans un rayon de {{radius}} km autour de vous."
},
"error": {
"permissionDenied": "Accès à la localisation refusé. Activez-le pour voir les alertes proches.",
"unavailable": "Impossible de déterminer votre position. Réessayez.",
"timeout": "Délai dépassé lors de la récupération de votre localisation.",
"generic": "Échec de la récupération de votre localisation.",
"unsupported": "La géolocalisation n'est pas prise en charge par ce navigateur."
}
},
"activityItem": {
"user": "Utilisateur {{id}}",
"distance": "À {{distance}}"
},
"common": {
"coordinates": "{{lat}}°, {{lng}}°",
"never": "jamais",
"actions": {
"close": "Fermer"
},
"aria": {
"theme": {
"light": "Passer en mode clair",
"dark": "Passer en mode sombre"
},
"language": "Changer la langue pour {{language}}",
"sheet": {
"close": "Fermer le panneau"
}
}
},
"language": {
"label": "Langue",
"english": "Anglais",
"french": "Français"
},
"errors": {
"feedUnavailable": "Impossible d'atteindre le flux de signaux.",
"feedUnknown": "Erreur inconnue lors du chargement des signaux.",
"submitUnavailable": "Impossible d'enregistrer votre signal.",
"submitUnknown": "Une erreur est survenue lors de l'enregistrement de votre signal.",
"submitWithReason": "{{message}}"
}
}