mirror of
https://github.com/mauriceboe/TREK.git
synced 2026-10-24 16:03:02 +00:00
6e3eb591b5
Paddle tours are planned on the water by TREK's own router: a water network per paddle region, built from the same Geofabrik extract as the obstacles and searched in a worker thread of the server (no sidecar). Rivers, canals and lakes (direct or along the shore), portages round weirs, locks by policy, whitewater by boat, gaps marked. Found portages and locks become points of their own; an unplannable leg says why and offers a way out. - Shaping points: a click on the line sets a point that steers the route without being a stop (hikes and paddle tours); recompute a single leg. - Lake style direct/shore, suggested from the wind forecast. - Regions load by themselves where a paddler plans (admin setting: automatic, on request, off; size cap and a daily count), with requests for the admins, a notification, and the load followed on the leg. - Portage from the last point, portages follow footways via the walking router (or stay straight), "put in here" on slipways and put-ins. - MCP plan_paddle_route with the REST route's rules.
91 lines
3.9 KiB
TypeScript
91 lines
3.9 KiB
TypeScript
import type { NotificationLocale } from '../externalNotifications/types';
|
|
import { pluralForm } from '../plural';
|
|
|
|
const fr: NotificationLocale = {
|
|
email: {
|
|
footer: 'Vous recevez cet e-mail car les notifications sont activées dans TREK.',
|
|
manage: 'Gérer les préférences',
|
|
madeWith: 'Made with',
|
|
openTrek: 'Ouvrir TREK',
|
|
},
|
|
events: {
|
|
trip_invite: (p) => ({
|
|
title: `Invitation à "${p.trip}"`,
|
|
body: `${p.actor} a invité ${p.invitee || 'un membre'} au voyage "${p.trip}".`,
|
|
}),
|
|
booking_change: (p) => ({
|
|
title: `Nouvelle réservation : ${p.booking}`,
|
|
body: `${p.actor} a ajouté une réservation "${p.booking}" (${p.type}) à "${p.trip}".`,
|
|
}),
|
|
trip_reminder: (p) => ({
|
|
title: `Rappel de voyage : ${p.trip}`,
|
|
body: `Votre voyage "${p.trip}" approche !`,
|
|
}),
|
|
todo_due: (p) => ({
|
|
title: `Tâche à échéance : ${p.todo}`,
|
|
body: `"${p.todo}" dans "${p.trip}" est due le ${p.due}.`,
|
|
}),
|
|
vacay_invite: (p) => ({
|
|
title: 'Invitation Vacay Fusion',
|
|
body: `${p.actor} vous invite à fusionner les plans de vacances. Ouvrez TREK pour accepter ou refuser.`,
|
|
}),
|
|
vacay_share: (p) => ({
|
|
title: 'Calendrier Vacay partagé',
|
|
body: `${p.actor} a partagé son calendrier de vacances avec vous. Ouvrez TREK pour le consulter.`,
|
|
}),
|
|
collection_invite: (p) => ({
|
|
title: 'Invitation à une collection',
|
|
body: `${p.actor} vous invite à partager une collection. Ouvrez TREK pour accepter ou refuser.`,
|
|
}),
|
|
photos_shared: (p) => ({
|
|
title: pluralForm(p.count, 'fr', { one: `${p.count} photo partagée`, other: `${p.count} photos partagées` }),
|
|
body: pluralForm(p.count, 'fr', {
|
|
one: `${p.actor} a partagé ${p.count} photo dans "${p.trip}".`,
|
|
other: `${p.actor} a partagé ${p.count} photos dans "${p.trip}".`,
|
|
}),
|
|
}),
|
|
collab_message: (p) => ({
|
|
title: `Nouveau message dans "${p.trip}"`,
|
|
body: `${p.actor} : ${p.preview}`,
|
|
}),
|
|
packing_tagged: (p) => ({
|
|
title: `Bagages : ${p.category}`,
|
|
body: `${p.actor} vous a assigné à la catégorie "${p.category}" dans "${p.trip}".`,
|
|
}),
|
|
version_available: (p) => ({
|
|
title: 'Nouvelle version TREK disponible',
|
|
body: `TREK ${p.version} est maintenant disponible. Rendez-vous dans le panneau d'administration pour mettre à jour.`,
|
|
}),
|
|
replica_failure: (p) => ({
|
|
title: 'Échec de réplique de stockage',
|
|
body:
|
|
`Échec de l'écriture sur la réplique '${p.backend}' : ${p.op} de ${p.key} — ${p.error}.` +
|
|
(p.suppressed !== '0'
|
|
? pluralForm(p.suppressed, 'fr', {
|
|
one: ` ${p.suppressed} autre échec n'a pas été signalé depuis la dernière notification.`,
|
|
other: ` ${p.suppressed} autres échecs n'ont pas été signalés depuis la dernière notification.`,
|
|
})
|
|
: ''),
|
|
}),
|
|
paddle_region_requested: (p) => ({
|
|
title: 'Région de pagaie demandée',
|
|
body: `${p.actor} planifie une sortie en canoë dans ${p.region}. Charge ou refuse ses données d'eau dans l'administration, sous Modules.`,
|
|
}),
|
|
synology_session_cleared: () => ({
|
|
title: 'Session Synology effacée',
|
|
body: 'Votre compte ou URL Synology a changé. Vous avez été déconnecté de Synology Photos.',
|
|
}),
|
|
plugin_notification: (p) => ({ title: p.title ?? '', body: p.body ?? '' }),
|
|
},
|
|
passwordReset: {
|
|
subject: 'Réinitialisez votre mot de passe',
|
|
greeting: 'Bonjour',
|
|
body: 'Nous avons reçu une demande de réinitialisation du mot de passe de votre compte TREK. Cliquez sur le bouton ci-dessous pour définir un nouveau mot de passe.',
|
|
ctaIntro: 'Réinitialiser le mot de passe',
|
|
expiry: 'Ce lien expire dans 60 minutes.',
|
|
ignore: "Si vous n'êtes pas à l'origine de cette demande, ignorez cet e-mail — votre mot de passe ne changera pas.",
|
|
},
|
|
};
|
|
|
|
export default fr;
|