feat: improve French translations — thanks @quentinClaudel
This commit is contained in:
@@ -6,10 +6,13 @@ import type { HolidaysMap, VacayEntry } from '../../types'
|
||||
const WEEKDAYS_EN = ['Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa', 'Su']
|
||||
const WEEKDAYS_DE = ['Mo', 'Di', 'Mi', 'Do', 'Fr', 'Sa', 'So']
|
||||
const WEEKDAYS_ES = ['Lu', 'Ma', 'Mi', 'Ju', 'Vi', 'Sa', 'Do']
|
||||
const WEEKDAYS_FR = ['Lu', 'Ma', 'Me', 'Je', 'Ve', 'Sa', 'Di']
|
||||
const WEEKDAYS_AR = ['اث', 'ثل', 'أر', 'خم', 'جم', 'سب', 'أح']
|
||||
|
||||
const MONTHS_EN = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']
|
||||
const MONTHS_DE = ['Januar', 'Februar', 'März', 'April', 'Mai', 'Juni', 'Juli', 'August', 'September', 'Oktober', 'November', 'Dezember']
|
||||
const MONTHS_ES = ['Enero', 'Febrero', 'Marzo', 'Abril', 'Mayo', 'Junio', 'Julio', 'Agosto', 'Septiembre', 'Octubre', 'Noviembre', 'Diciembre']
|
||||
const MONTHS_FR = ['Janvier', 'Février', 'Mars', 'Avril', 'Mai', 'Juin', 'Juillet', 'Août', 'Septembre', 'Octobre', 'Novembre', 'Décembre']
|
||||
const MONTHS_AR = ['يناير', 'فبراير', 'مارس', 'أبريل', 'مايو', 'يونيو', 'يوليو', 'أغسطس', 'سبتمبر', 'أكتوبر', 'نوفمبر', 'ديسمبر']
|
||||
|
||||
function hexToRgba(hex: string, alpha: number): string {
|
||||
@@ -37,9 +40,10 @@ export default function VacayMonthCard({
|
||||
onCellClick, companyMode, blockWeekends, weekendDays = [0, 6]
|
||||
}: VacayMonthCardProps) {
|
||||
const { language } = useTranslation()
|
||||
const weekdays = language === 'de' ? WEEKDAYS_DE : language === 'es' ? WEEKDAYS_ES : language === 'ar' ? WEEKDAYS_AR : WEEKDAYS_EN
|
||||
const monthNames = language === 'de' ? MONTHS_DE : language === 'es' ? MONTHS_ES : language === 'ar' ? MONTHS_AR : MONTHS_EN
|
||||
|
||||
|
||||
const weekdays = language === 'de' ? WEEKDAYS_DE : language === 'es' ? WEEKDAYS_ES : language === 'fr' ? WEEKDAYS_FR : language === 'ar' ? WEEKDAYS_AR : WEEKDAYS_EN
|
||||
const monthNames = language === 'de' ? MONTHS_DE : language === 'es' ? MONTHS_ES : language === 'fr' ? MONTHS_FR : language === 'ar' ? MONTHS_AR : MONTHS_EN
|
||||
|
||||
const weeks = useMemo(() => {
|
||||
const firstDay = new Date(year, month, 1)
|
||||
const daysInMonth = new Date(year, month + 1, 0).getDate()
|
||||
|
||||
@@ -5,13 +5,13 @@ const fr: Record<string, string> = {
|
||||
'common.delete': 'Supprimer',
|
||||
'common.edit': 'Modifier',
|
||||
'common.add': 'Ajouter',
|
||||
'common.loading': 'Chargement...',
|
||||
'common.loading': 'Chargement…',
|
||||
'common.error': 'Erreur',
|
||||
'common.back': 'Retour',
|
||||
'common.all': 'Tout',
|
||||
'common.close': 'Fermer',
|
||||
'common.open': 'Ouvrir',
|
||||
'common.upload': 'Téléverser',
|
||||
'common.upload': 'Importer',
|
||||
'common.search': 'Rechercher',
|
||||
'common.confirm': 'Confirmer',
|
||||
'common.ok': 'OK',
|
||||
@@ -24,10 +24,10 @@ const fr: Record<string, string> = {
|
||||
'common.name': 'Nom',
|
||||
'common.email': 'E-mail',
|
||||
'common.password': 'Mot de passe',
|
||||
'common.saving': 'Enregistrement...',
|
||||
'common.saving': 'Enregistrement…',
|
||||
'common.update': 'Mettre à jour',
|
||||
'common.change': 'Modifier',
|
||||
'common.uploading': 'Téléversement…',
|
||||
'common.uploading': 'Import en cours…',
|
||||
'common.backToPlanning': 'Retour à la planification',
|
||||
'common.reset': 'Réinitialiser',
|
||||
|
||||
@@ -44,7 +44,7 @@ const fr: Record<string, string> = {
|
||||
|
||||
// Dashboard
|
||||
'dashboard.title': 'Mes voyages',
|
||||
'dashboard.subtitle.loading': 'Chargement des voyages...',
|
||||
'dashboard.subtitle.loading': 'Chargement des voyages…',
|
||||
'dashboard.subtitle.trips': '{count} voyages ({archived} archivés)',
|
||||
'dashboard.subtitle.empty': 'Commencez votre premier voyage',
|
||||
'dashboard.subtitle.activeOne': '{count} voyage actif',
|
||||
@@ -54,8 +54,8 @@ const fr: Record<string, string> = {
|
||||
'dashboard.gridView': 'Vue en grille',
|
||||
'dashboard.listView': 'Vue en liste',
|
||||
'dashboard.currency': 'Devise',
|
||||
'dashboard.timezone': 'Fuseaux horaires',
|
||||
'dashboard.localTime': 'Local',
|
||||
'dashboard.timezone': 'Fuseau horaire',
|
||||
'dashboard.localTime': 'Heure locale',
|
||||
'dashboard.timezoneCustomTitle': 'Fuseau horaire personnalisé',
|
||||
'dashboard.timezoneCustomLabelPlaceholder': 'Libellé (facultatif)',
|
||||
'dashboard.timezoneCustomTzPlaceholder': 'ex. America/New_York',
|
||||
@@ -105,7 +105,7 @@ const fr: Record<string, string> = {
|
||||
'dashboard.addMembers': 'Compagnons de voyage',
|
||||
'dashboard.addMember': 'Ajouter un membre',
|
||||
'dashboard.coverSaved': 'Image de couverture enregistrée',
|
||||
'dashboard.coverUploadError': 'Échec du téléversement',
|
||||
'dashboard.coverUploadError': 'Échec de l\'import',
|
||||
'dashboard.coverRemoveError': 'Échec de la suppression',
|
||||
'dashboard.titleRequired': 'Le titre est obligatoire',
|
||||
'dashboard.endDateError': 'La date de fin doit être postérieure à la date de début',
|
||||
@@ -115,7 +115,7 @@ const fr: Record<string, string> = {
|
||||
'settings.subtitle': 'Configurez vos paramètres personnels',
|
||||
'settings.map': 'Carte',
|
||||
'settings.mapTemplate': 'Modèle de carte',
|
||||
'settings.mapTemplatePlaceholder.select': 'Sélectionner un modèle...',
|
||||
'settings.mapTemplatePlaceholder.select': 'Sélectionner un modèle…',
|
||||
'settings.mapDefaultHint': 'Laissez vide pour OpenStreetMap (par défaut)',
|
||||
'settings.mapTemplatePlaceholder': 'https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png',
|
||||
'settings.mapHint': 'Modèle d\'URL pour les tuiles de carte',
|
||||
@@ -127,7 +127,7 @@ const fr: Record<string, string> = {
|
||||
'settings.mapsKeyHint': 'Pour la recherche de lieux. Nécessite l\'API Places (New). Obtenez-la sur console.cloud.google.com',
|
||||
'settings.weatherKey': 'Clé API OpenWeatherMap',
|
||||
'settings.weatherKeyHint': 'Pour les données météo. Gratuit sur openweathermap.org/api',
|
||||
'settings.keyPlaceholder': 'Saisir la clé...',
|
||||
'settings.keyPlaceholder': 'Saisir la clé…',
|
||||
'settings.configured': 'Configuré',
|
||||
'settings.saveKeys': 'Enregistrer les clés',
|
||||
'settings.display': 'Affichage',
|
||||
@@ -186,15 +186,15 @@ const fr: Record<string, string> = {
|
||||
'settings.toast.keysSaved': 'Clés API enregistrées',
|
||||
'settings.toast.displaySaved': 'Paramètres d\'affichage enregistrés',
|
||||
'settings.toast.profileSaved': 'Profil enregistré',
|
||||
'settings.uploadAvatar': 'Téléverser une photo de profil',
|
||||
'settings.uploadAvatar': 'Importer une photo de profil',
|
||||
'settings.removeAvatar': 'Supprimer la photo de profil',
|
||||
'settings.avatarUploaded': 'Photo de profil mise à jour',
|
||||
'settings.avatarRemoved': 'Photo de profil supprimée',
|
||||
'settings.avatarError': 'Échec du téléversement',
|
||||
'settings.avatarError': 'Échec de l\'import',
|
||||
|
||||
// Login
|
||||
'login.error': 'Échec de la connexion. Veuillez vérifier vos identifiants.',
|
||||
'login.tagline': 'Vos voyages.\nVotre plan.',
|
||||
'login.tagline': 'Vos voyages.\nVotre organisation.',
|
||||
'login.description': 'Planifiez vos voyages en collaboration avec des cartes interactives, des budgets et la synchronisation en temps réel.',
|
||||
'login.features.maps': 'Cartes interactives',
|
||||
'login.features.mapsDesc': 'Google Places, itinéraires et regroupement',
|
||||
@@ -209,7 +209,7 @@ const fr: Record<string, string> = {
|
||||
'login.features.bookings': 'Réservations',
|
||||
'login.features.bookingsDesc': 'Vols, hôtels, restaurants et plus',
|
||||
'login.features.files': 'Documents',
|
||||
'login.features.filesDesc': 'Téléversez et gérez vos documents',
|
||||
'login.features.filesDesc': 'Importez et gérez vos documents',
|
||||
'login.features.routes': 'Itinéraires intelligents',
|
||||
'login.features.routesDesc': 'Optimisation automatique et export Google Maps',
|
||||
'login.selfHosted': 'Auto-hébergé · Open Source · Vos données restent les vôtres',
|
||||
@@ -260,7 +260,7 @@ const fr: Record<string, string> = {
|
||||
'register.minChars': 'Min. 6 caractères',
|
||||
'register.confirmPassword': 'Confirmer le mot de passe',
|
||||
'register.repeatPassword': 'Répéter le mot de passe',
|
||||
'register.registering': 'Inscription en cours...',
|
||||
'register.registering': 'Inscription en cours…',
|
||||
'register.register': 'S\'inscrire',
|
||||
'register.hasAccount': 'Vous avez déjà un compte ?',
|
||||
'register.signIn': 'Se connecter',
|
||||
@@ -343,7 +343,7 @@ const fr: Record<string, string> = {
|
||||
|
||||
// File Types
|
||||
'admin.fileTypes': 'Types de fichiers autorisés',
|
||||
'admin.fileTypesHint': 'Configurez les types de fichiers que les utilisateurs peuvent téléverser.',
|
||||
'admin.fileTypesHint': 'Configurez les types de fichiers que les utilisateurs peuvent importer.',
|
||||
'admin.fileTypesFormat': 'Extensions séparées par des virgules (ex. jpg,png,pdf,doc). Utilisez * pour autoriser tous les types.',
|
||||
'admin.fileTypesSaved': 'Paramètres des types de fichiers enregistrés',
|
||||
|
||||
@@ -381,11 +381,11 @@ const fr: Record<string, string> = {
|
||||
'admin.addons.catalog.budget.description': 'Suivez les dépenses et planifiez votre budget de voyage',
|
||||
'admin.addons.catalog.documents.name': 'Documents',
|
||||
'admin.addons.catalog.documents.description': 'Stockez et gérez vos documents de voyage',
|
||||
'admin.addons.catalog.vacay.name': 'Vacay',
|
||||
'admin.addons.catalog.vacay.name': 'Vacances',
|
||||
'admin.addons.catalog.vacay.description': 'Planificateur de vacances personnel avec vue calendrier',
|
||||
'admin.addons.catalog.atlas.name': 'Atlas',
|
||||
'admin.addons.catalog.atlas.description': 'Carte du monde avec pays visités et statistiques de voyage',
|
||||
'admin.addons.catalog.collab.name': 'Collab',
|
||||
'admin.addons.catalog.collab.name': 'Collaboration',
|
||||
'admin.addons.catalog.collab.description': 'Notes en temps réel, sondages et chat pour la planification de voyage',
|
||||
'admin.addons.subtitleBefore': 'Activez ou désactivez des fonctionnalités pour personnaliser votre expérience ',
|
||||
'admin.addons.subtitleAfter': '.',
|
||||
@@ -408,7 +408,7 @@ const fr: Record<string, string> = {
|
||||
'admin.weather.climateDesc': 'Moyennes des 85 dernières années pour les jours au-delà des prévisions de 16 jours',
|
||||
'admin.weather.requests': '10 000 requêtes / jour',
|
||||
'admin.weather.requestsDesc': 'Gratuit, aucune clé API requise',
|
||||
'admin.weather.locationHint': 'La météo est basée sur le premier lieu avec des coordonnées de chaque jour. Si aucun lieu n\'est assigné à un jour, un lieu de la liste est utilisé comme référence.',
|
||||
'admin.weather.locationHint': 'La météo est basée sur le premier lieu avec des coordonnées de chaque jour. Si aucun lieu n\'est attribué à un jour, un lieu de la liste est utilisé comme référence.',
|
||||
|
||||
// GitHub
|
||||
'admin.tabs.github': 'GitHub',
|
||||
@@ -419,8 +419,8 @@ const fr: Record<string, string> = {
|
||||
'admin.github.showDetails': 'Afficher les détails',
|
||||
'admin.github.hideDetails': 'Masquer les détails',
|
||||
'admin.github.loadMore': 'Charger plus',
|
||||
'admin.github.loading': 'Chargement...',
|
||||
'admin.github.support': 'Aide à continuer le développement de TREK',
|
||||
'admin.github.loading': 'Chargement…',
|
||||
'admin.github.support': 'Aidez à poursuivre le développement de TREK',
|
||||
'admin.github.error': 'Impossible de charger les versions',
|
||||
'admin.github.by': 'par',
|
||||
|
||||
@@ -430,7 +430,7 @@ const fr: Record<string, string> = {
|
||||
'admin.update.install': 'Installer la mise à jour',
|
||||
'admin.update.confirmTitle': 'Installer la mise à jour ?',
|
||||
'admin.update.confirmText': 'TREK sera mis à jour de {current} vers {version}. Le serveur redémarrera automatiquement ensuite.',
|
||||
'admin.update.dataInfo': 'Toutes vos données (voyages, utilisateurs, clés API, téléversements, Vacay, Atlas, budgets) seront préservées.',
|
||||
'admin.update.dataInfo': 'Toutes vos données (voyages, utilisateurs, clés API, importations, Vacances, Atlas, budgets) seront préservées.',
|
||||
'admin.update.warning': 'L\'application sera brièvement indisponible pendant le redémarrage.',
|
||||
'admin.update.confirm': 'Mettre à jour maintenant',
|
||||
'admin.update.installing': 'Mise à jour…',
|
||||
@@ -443,7 +443,7 @@ const fr: Record<string, string> = {
|
||||
'admin.update.reloadHint': 'Veuillez recharger la page dans quelques secondes.',
|
||||
|
||||
// Vacay addon
|
||||
'vacay.subtitle': 'Planifiez et gérez vos jours de congé',
|
||||
'vacay.subtitle': 'Planifiez et gérez vos jours de congés',
|
||||
'vacay.settings': 'Paramètres',
|
||||
'vacay.year': 'Année',
|
||||
'vacay.addYear': 'Ajouter une année',
|
||||
@@ -490,11 +490,11 @@ const fr: Record<string, string> = {
|
||||
'vacay.shareEmailPlaceholder': 'E-mail de l\'utilisateur TREK',
|
||||
'vacay.shareSuccess': 'Plan partagé avec succès',
|
||||
'vacay.shareError': 'Impossible de partager le plan',
|
||||
'vacay.dissolve': 'Dissoudre la fusion',
|
||||
'vacay.dissolve': 'Séparer les calendriers',
|
||||
'vacay.dissolveHint': 'Séparer à nouveau les calendriers. Vos entrées seront conservées.',
|
||||
'vacay.dissolveAction': 'Dissoudre',
|
||||
'vacay.dissolved': 'Calendrier séparé',
|
||||
'vacay.fusedWith': 'Fusionné avec',
|
||||
'vacay.fusedWith': 'Partagé avec',
|
||||
'vacay.you': 'vous',
|
||||
'vacay.noData': 'Aucune donnée',
|
||||
'vacay.changeColor': 'Changer la couleur',
|
||||
@@ -580,14 +580,14 @@ const fr: Record<string, string> = {
|
||||
'trip.tabs.packingShort': 'Bagages',
|
||||
'trip.tabs.budget': 'Budget',
|
||||
'trip.tabs.files': 'Fichiers',
|
||||
'trip.loading': 'Chargement du voyage...',
|
||||
'trip.loading': 'Chargement du voyage…',
|
||||
'trip.mobilePlan': 'Plan',
|
||||
'trip.mobilePlaces': 'Lieux',
|
||||
'trip.toast.placeUpdated': 'Lieu mis à jour',
|
||||
'trip.toast.placeAdded': 'Lieu ajouté',
|
||||
'trip.toast.placeDeleted': 'Lieu supprimé',
|
||||
'trip.toast.selectDay': 'Veuillez d\'abord sélectionner un jour',
|
||||
'trip.toast.assignedToDay': 'Lieu assigné au jour',
|
||||
'trip.toast.assignedToDay': 'Lieu attribué au planning',
|
||||
'trip.toast.reorderError': 'Échec de la réorganisation',
|
||||
'trip.toast.reservationUpdated': 'Réservation mise à jour',
|
||||
'trip.toast.reservationAdded': 'Réservation ajoutée',
|
||||
@@ -605,7 +605,7 @@ const fr: Record<string, string> = {
|
||||
'dayplan.totalCost': 'Coût total',
|
||||
'dayplan.days': 'Jours',
|
||||
'dayplan.dayN': 'Jour {n}',
|
||||
'dayplan.calculating': 'Calcul en cours...',
|
||||
'dayplan.calculating': 'Calcul en cours…',
|
||||
'dayplan.route': 'Itinéraire',
|
||||
'dayplan.optimize': 'Optimiser',
|
||||
'dayplan.optimized': 'Itinéraire optimisé',
|
||||
@@ -620,11 +620,11 @@ const fr: Record<string, string> = {
|
||||
'dayplan.pdfError': 'Échec de l\'export PDF',
|
||||
|
||||
// Places Sidebar
|
||||
'places.addPlace': 'Ajouter un lieu/activité',
|
||||
'places.addPlace': 'Ajouter un lieu ou une activité',
|
||||
'places.assignToDay': 'Ajouter à quel jour ?',
|
||||
'places.all': 'Tous',
|
||||
'places.unplanned': 'Non planifiés',
|
||||
'places.search': 'Rechercher des lieux...',
|
||||
'places.search': 'Rechercher des lieux…',
|
||||
'places.allCategories': 'Toutes les catégories',
|
||||
'places.count': '{count} lieux',
|
||||
'places.countSingular': '1 lieu',
|
||||
@@ -634,7 +634,7 @@ const fr: Record<string, string> = {
|
||||
'places.formName': 'Nom',
|
||||
'places.formNamePlaceholder': 'ex. Tour Eiffel',
|
||||
'places.formDescription': 'Description',
|
||||
'places.formDescriptionPlaceholder': 'Brève description...',
|
||||
'places.formDescriptionPlaceholder': 'Brève description…',
|
||||
'places.formAddress': 'Adresse',
|
||||
'places.formAddressPlaceholder': 'Rue, ville, pays',
|
||||
'places.formLat': 'Latitude (ex. 48.8566)',
|
||||
@@ -648,10 +648,10 @@ const fr: Record<string, string> = {
|
||||
'places.endTimeBeforeStart': 'L\'heure de fin est antérieure à l\'heure de début',
|
||||
'places.timeCollision': 'Chevauchement horaire avec :',
|
||||
'places.formWebsite': 'Site web',
|
||||
'places.formNotesPlaceholder': 'Notes personnelles...',
|
||||
'places.formNotesPlaceholder': 'Notes personnelles…',
|
||||
'places.formReservation': 'Réservation',
|
||||
'places.reservationNotesPlaceholder': 'Notes de réservation, numéro de confirmation...',
|
||||
'places.mapsSearchPlaceholder': 'Rechercher des lieux...',
|
||||
'places.reservationNotesPlaceholder': 'Notes de réservation, numéro de confirmation…',
|
||||
'places.mapsSearchPlaceholder': 'Rechercher des lieux…',
|
||||
'places.mapsSearchError': 'La recherche de lieu a échoué.',
|
||||
'places.osmHint': 'Recherche via OpenStreetMap (pas de photos, horaires ni notes). Ajoutez une clé API Google dans les paramètres pour plus de détails.',
|
||||
'places.osmActive': 'Recherche via OpenStreetMap (pas de photos, notes ni horaires). Ajoutez une clé API Google dans les paramètres pour des données enrichies.',
|
||||
@@ -696,7 +696,7 @@ const fr: Record<string, string> = {
|
||||
'reservations.time': 'Heure',
|
||||
'reservations.timeAlt': 'Heure (alternative, ex. 19h30)',
|
||||
'reservations.notes': 'Notes',
|
||||
'reservations.notesPlaceholder': 'Notes supplémentaires...',
|
||||
'reservations.notesPlaceholder': 'Notes supplémentaires…',
|
||||
'reservations.meta.airline': 'Compagnie aérienne',
|
||||
'reservations.meta.flightNumber': 'N° de vol',
|
||||
'reservations.meta.from': 'De',
|
||||
@@ -726,14 +726,14 @@ const fr: Record<string, string> = {
|
||||
'reservations.confirm.delete': 'Voulez-vous vraiment supprimer la réservation « {name} » ?',
|
||||
'reservations.toast.updated': 'Réservation mise à jour',
|
||||
'reservations.toast.removed': 'Réservation supprimée',
|
||||
'reservations.toast.fileUploaded': 'Fichier téléversé',
|
||||
'reservations.toast.uploadError': 'Échec du téléversement',
|
||||
'reservations.toast.fileUploaded': 'Fichier importé',
|
||||
'reservations.toast.uploadError': 'Échec de l\'import',
|
||||
'reservations.newTitle': 'Nouvelle réservation',
|
||||
'reservations.bookingType': 'Type de réservation',
|
||||
'reservations.titleLabel': 'Titre',
|
||||
'reservations.titlePlaceholder': 'ex. Lufthansa LH123, Hôtel Adlon, ...',
|
||||
'reservations.titlePlaceholder': 'ex. Lufthansa LH123, Hôtel Adlon, …',
|
||||
'reservations.locationAddress': 'Lieu / Adresse',
|
||||
'reservations.locationPlaceholder': 'Adresse, aéroport, hôtel...',
|
||||
'reservations.locationPlaceholder': 'Adresse, aéroport, hôtel…',
|
||||
'reservations.confirmationCode': 'Code de réservation',
|
||||
'reservations.confirmationPlaceholder': 'ex. ABC12345',
|
||||
'reservations.day': 'Jour',
|
||||
@@ -741,22 +741,22 @@ const fr: Record<string, string> = {
|
||||
'reservations.place': 'Lieu',
|
||||
'reservations.noPlace': 'Aucun lieu',
|
||||
'reservations.pendingSave': 'sera enregistré…',
|
||||
'reservations.uploading': 'Téléversement...',
|
||||
'reservations.uploading': 'Importation…',
|
||||
'reservations.attachFile': 'Joindre un fichier',
|
||||
'reservations.linkExisting': 'Lier un fichier existant',
|
||||
'reservations.toast.saveError': 'Échec de l\'enregistrement',
|
||||
'reservations.toast.updateError': 'Échec de la mise à jour',
|
||||
'reservations.toast.deleteError': 'Échec de la suppression',
|
||||
'reservations.confirm.remove': 'Supprimer la réservation pour « {name} » ?',
|
||||
'reservations.linkAssignment': 'Lier à l\'assignation du jour',
|
||||
'reservations.pickAssignment': 'Sélectionnez une assignation de votre plan...',
|
||||
'reservations.linkAssignment': 'Lier à l\'affectation du jour',
|
||||
'reservations.pickAssignment': 'Sélectionnez une affectation de votre plan…',
|
||||
'reservations.noAssignment': 'Aucun lien (autonome)',
|
||||
|
||||
// Budget
|
||||
'budget.title': 'Budget',
|
||||
'budget.emptyTitle': 'Aucun budget créé',
|
||||
'budget.emptyText': 'Créez des catégories et des entrées pour planifier votre budget de voyage',
|
||||
'budget.emptyPlaceholder': 'Nom de la catégorie...',
|
||||
'budget.emptyPlaceholder': 'Nom de la catégorie…',
|
||||
'budget.createCategory': 'Créer une catégorie',
|
||||
'budget.category': 'Catégorie',
|
||||
'budget.categoryName': 'Nom de la catégorie',
|
||||
@@ -774,24 +774,24 @@ const fr: Record<string, string> = {
|
||||
'budget.total': 'Total',
|
||||
'budget.totalBudget': 'Budget total',
|
||||
'budget.byCategory': 'Par catégorie',
|
||||
'budget.editTooltip': 'Cliquer pour modifier',
|
||||
'budget.editTooltip': 'Cliquez pour modifier',
|
||||
'budget.confirm.deleteCategory': 'Voulez-vous vraiment supprimer la catégorie « {name} » avec {count} entrées ?',
|
||||
'budget.deleteCategory': 'Supprimer la catégorie',
|
||||
'budget.perPerson': 'Par personne',
|
||||
'budget.paid': 'Payé',
|
||||
'budget.open': 'Ouvert',
|
||||
'budget.noMembers': 'Aucun membre assigné',
|
||||
'budget.noMembers': 'Aucun membre attribué',
|
||||
|
||||
// Files
|
||||
'files.title': 'Fichiers',
|
||||
'files.count': '{count} fichiers',
|
||||
'files.countSingular': '1 fichier',
|
||||
'files.uploaded': '{count} téléversés',
|
||||
'files.uploadError': 'Échec du téléversement',
|
||||
'files.uploaded': '{count} importés',
|
||||
'files.uploadError': 'Échec de l\'import',
|
||||
'files.dropzone': 'Déposez les fichiers ici',
|
||||
'files.dropzoneHint': 'ou cliquez pour parcourir',
|
||||
'files.allowedTypes': 'Images, PDF, DOC, DOCX, XLS, XLSX, TXT, CSV · Max 50 Mo',
|
||||
'files.uploading': 'Téléversement...',
|
||||
'files.uploading': 'Importation…',
|
||||
'files.filterAll': 'Tous',
|
||||
'files.filterPdf': 'PDF',
|
||||
'files.filterImages': 'Images',
|
||||
@@ -799,7 +799,7 @@ const fr: Record<string, string> = {
|
||||
'files.filterCollab': 'Notes Collab',
|
||||
'files.sourceCollab': 'Depuis les notes Collab',
|
||||
'files.empty': 'Aucun fichier',
|
||||
'files.emptyHint': 'Téléversez des fichiers pour les joindre à votre voyage',
|
||||
'files.emptyHint': 'Importez des fichiers pour les joindre à votre voyage',
|
||||
'files.openTab': 'Ouvrir dans un nouvel onglet',
|
||||
'files.confirm.delete': 'Voulez-vous vraiment supprimer ce fichier ?',
|
||||
'files.toast.deleted': 'Fichier supprimé',
|
||||
@@ -818,18 +818,18 @@ const fr: Record<string, string> = {
|
||||
'files.assignTitle': 'Assigner le fichier',
|
||||
'files.assignPlace': 'Lieu',
|
||||
'files.assignBooking': 'Réservation',
|
||||
'files.unassigned': 'Non assigné',
|
||||
'files.unassigned': 'Non attribué',
|
||||
'files.unlink': 'Supprimer le lien',
|
||||
'files.toast.trashed': 'Déplacé dans la corbeille',
|
||||
'files.toast.restored': 'Fichier restauré',
|
||||
'files.toast.trashEmptied': 'Corbeille vidée',
|
||||
'files.toast.assigned': 'Fichier assigné',
|
||||
'files.toast.assigned': 'Fichier attribué',
|
||||
'files.toast.assignError': 'Échec de l\'assignation',
|
||||
'files.toast.restoreError': 'Échec de la restauration',
|
||||
'files.confirm.permanentDelete': 'Supprimer définitivement ce fichier ? Cette action est irréversible.',
|
||||
'files.confirm.emptyTrash': 'Supprimer définitivement tous les fichiers de la corbeille ? Cette action est irréversible.',
|
||||
'files.noteLabel': 'Note',
|
||||
'files.notePlaceholder': 'Ajouter une note...',
|
||||
'files.notePlaceholder': 'Ajouter une note…',
|
||||
|
||||
// Packing
|
||||
'packing.title': 'Liste de bagages',
|
||||
@@ -841,8 +841,8 @@ const fr: Record<string, string> = {
|
||||
'packing.suggestionsTitle': 'Ajouter des suggestions',
|
||||
'packing.allSuggested': 'Toutes les suggestions ajoutées',
|
||||
'packing.allPacked': 'Tout est emballé !',
|
||||
'packing.addPlaceholder': 'Ajouter un nouvel article...',
|
||||
'packing.categoryPlaceholder': 'Catégorie...',
|
||||
'packing.addPlaceholder': 'Ajouter un nouvel article…',
|
||||
'packing.categoryPlaceholder': 'Catégorie…',
|
||||
'packing.filterAll': 'Tous',
|
||||
'packing.filterOpen': 'À faire',
|
||||
'packing.filterDone': 'Fait',
|
||||
@@ -956,10 +956,10 @@ const fr: Record<string, string> = {
|
||||
|
||||
// Backup (Admin)
|
||||
'backup.title': 'Sauvegarde des données',
|
||||
'backup.subtitle': 'Base de données et tous les fichiers téléversés',
|
||||
'backup.subtitle': 'Base de données et tous les fichiers importés',
|
||||
'backup.refresh': 'Actualiser',
|
||||
'backup.upload': 'Téléverser une sauvegarde',
|
||||
'backup.uploading': 'Téléversement…',
|
||||
'backup.upload': 'Importer une sauvegarde',
|
||||
'backup.uploading': 'Importation…',
|
||||
'backup.create': 'Créer une sauvegarde',
|
||||
'backup.creating': 'Création…',
|
||||
'backup.empty': 'Aucune sauvegarde',
|
||||
@@ -967,14 +967,14 @@ const fr: Record<string, string> = {
|
||||
'backup.download': 'Télécharger',
|
||||
'backup.restore': 'Restaurer',
|
||||
'backup.confirm.restore': 'Restaurer la sauvegarde « {name} » ?\n\nToutes les données actuelles seront remplacées par la sauvegarde.',
|
||||
'backup.confirm.uploadRestore': 'Téléverser et restaurer le fichier de sauvegarde « {name} » ?\n\nToutes les données actuelles seront écrasées.',
|
||||
'backup.confirm.uploadRestore': 'Importer et restaurer le fichier de sauvegarde « {name} » ?\n\nToutes les données actuelles seront écrasées.',
|
||||
'backup.confirm.delete': 'Supprimer la sauvegarde « {name} » ?',
|
||||
'backup.toast.loadError': 'Impossible de charger les sauvegardes',
|
||||
'backup.toast.created': 'Sauvegarde créée avec succès',
|
||||
'backup.toast.createError': 'Impossible de créer la sauvegarde',
|
||||
'backup.toast.restored': 'Sauvegarde restaurée. La page va se recharger…',
|
||||
'backup.toast.restoreError': 'Échec de la restauration',
|
||||
'backup.toast.uploadError': 'Échec du téléversement',
|
||||
'backup.toast.uploadError': 'Échec de l\'import',
|
||||
'backup.toast.deleted': 'Sauvegarde supprimée',
|
||||
'backup.toast.deleteError': 'Échec de la suppression',
|
||||
'backup.toast.downloadError': 'Échec du téléchargement',
|
||||
@@ -1000,15 +1000,15 @@ const fr: Record<string, string> = {
|
||||
// Photos
|
||||
'photos.allDays': 'Tous les jours',
|
||||
'photos.noPhotos': 'Aucune photo',
|
||||
'photos.uploadHint': 'Téléversez vos photos de voyage',
|
||||
'photos.uploadHint': 'Importez vos photos de voyage',
|
||||
'photos.clickToSelect': 'ou cliquez pour sélectionner',
|
||||
'photos.linkPlace': 'Lier au lieu',
|
||||
'photos.noPlace': 'Aucun lieu',
|
||||
'photos.uploadN': '{n} photo(s) téléversées',
|
||||
'photos.uploadN': '{n} photo(s) importée(s)',
|
||||
|
||||
// Backup restore modal
|
||||
'backup.restoreConfirmTitle': 'Restaurer la sauvegarde ?',
|
||||
'backup.restoreWarning': 'Toutes les données actuelles (voyages, lieux, utilisateurs, téléversements) seront définitivement remplacées par la sauvegarde. Cette action est irréversible.',
|
||||
'backup.restoreWarning': 'Toutes les données actuelles (voyages, lieux, utilisateurs, importations) seront définitivement remplacées par la sauvegarde. Cette action est irréversible.',
|
||||
'backup.restoreTip': 'Conseil : créez une sauvegarde de l\'état actuel avant de restaurer.',
|
||||
'backup.restoreConfirm': 'Oui, restaurer',
|
||||
|
||||
@@ -1045,8 +1045,8 @@ const fr: Record<string, string> = {
|
||||
'planner.placeN': '{n} lieux',
|
||||
'planner.addNote': 'Ajouter une note',
|
||||
'planner.noEntries': 'Aucune entrée pour ce jour',
|
||||
'planner.addPlace': 'Ajouter un lieu/activité',
|
||||
'planner.addPlaceShort': '+ Ajouter un lieu/activité',
|
||||
'planner.addPlace': 'Ajouter un lieu ou une activité',
|
||||
'planner.addPlaceShort': '+ Ajouter un lieu ou une activité',
|
||||
'planner.resPending': 'Réservation en attente · ',
|
||||
'planner.resConfirmed': 'Réservation confirmée · ',
|
||||
'planner.notePlaceholder': 'Note…',
|
||||
@@ -1076,7 +1076,7 @@ const fr: Record<string, string> = {
|
||||
'planner.noDays': 'Aucun jour',
|
||||
'planner.editTripToAddDays': 'Modifiez le voyage pour ajouter des jours',
|
||||
'planner.dayCount': '{n} jours',
|
||||
'planner.clickToUnlock': 'Cliquer pour déverrouiller',
|
||||
'planner.clickToUnlock': 'Cliquez pour déverrouiller',
|
||||
'planner.keepPosition': 'Maintenir la position lors de l\'optimisation de l\'itinéraire',
|
||||
'planner.dayDetails': 'Détails du jour',
|
||||
'planner.dayN': 'Jour {n}',
|
||||
@@ -1139,7 +1139,7 @@ const fr: Record<string, string> = {
|
||||
'memories.allLocations': 'Tous les lieux',
|
||||
|
||||
// Collab Addon
|
||||
'collab.tabs.chat': 'Chat',
|
||||
'collab.tabs.chat': 'Discussion',
|
||||
'collab.tabs.notes': 'Notes',
|
||||
'collab.tabs.polls': 'Sondages',
|
||||
'collab.whatsNext.title': 'À venir',
|
||||
@@ -1149,7 +1149,7 @@ const fr: Record<string, string> = {
|
||||
'collab.whatsNext.until': 'à',
|
||||
'collab.whatsNext.emptyHint': 'Les activités avec des horaires apparaîtront ici',
|
||||
'collab.chat.send': 'Envoyer',
|
||||
'collab.chat.placeholder': 'Écrire un message...',
|
||||
'collab.chat.placeholder': 'Écrire un message…',
|
||||
'collab.chat.empty': 'Commencez la conversation',
|
||||
'collab.chat.emptyHint': 'Les messages sont partagés avec tous les membres du voyage',
|
||||
'collab.chat.emptyDesc': 'Partagez des idées, des plans et des mises à jour avec votre groupe de voyage',
|
||||
@@ -1166,9 +1166,9 @@ const fr: Record<string, string> = {
|
||||
'collab.notes.emptyHint': 'Commencez à capturer vos idées et plans',
|
||||
'collab.notes.all': 'Toutes',
|
||||
'collab.notes.titlePlaceholder': 'Titre de la note',
|
||||
'collab.notes.contentPlaceholder': 'Écrivez quelque chose...',
|
||||
'collab.notes.contentPlaceholder': 'Écrivez quelque chose…',
|
||||
'collab.notes.categoryPlaceholder': 'Catégorie',
|
||||
'collab.notes.newCategory': 'Nouvelle catégorie...',
|
||||
'collab.notes.newCategory': 'Nouvelle catégorie…',
|
||||
'collab.notes.category': 'Catégorie',
|
||||
'collab.notes.noCategory': 'Sans catégorie',
|
||||
'collab.notes.color': 'Couleur',
|
||||
@@ -1182,7 +1182,7 @@ const fr: Record<string, string> = {
|
||||
'collab.notes.categorySettings': 'Gérer les catégories',
|
||||
'collab.notes.create': 'Créer',
|
||||
'collab.notes.website': 'Site web',
|
||||
'collab.notes.websitePlaceholder': 'https://...',
|
||||
'collab.notes.websitePlaceholder': 'https://…',
|
||||
'collab.notes.attachFiles': 'Joindre des fichiers',
|
||||
'collab.notes.noCategoriesYet': 'Aucune catégorie',
|
||||
'collab.notes.emptyDesc': 'Créez une note pour commencer',
|
||||
|
||||
Reference in New Issue
Block a user