Spaces:
Sleeping
Sleeping
Upload folder using huggingface_hub (part 8)
Browse filesThis view is limited to 50 files because it contains too many changes. See raw diff
- shared/src/i18n/fr/inspector.ts +22 -0
- shared/src/i18n/fr/journey.ts +246 -0
- shared/src/i18n/fr/login.ts +106 -0
- shared/src/i18n/fr/map.ts +17 -0
- shared/src/i18n/fr/members.ts +24 -0
- shared/src/i18n/fr/memories.ts +84 -0
- shared/src/i18n/fr/nav.ts +20 -0
- shared/src/i18n/fr/notif.ts +45 -0
- shared/src/i18n/fr/notifications.ts +39 -0
- shared/src/i18n/fr/oauth.ts +123 -0
- shared/src/i18n/fr/packing.ts +186 -0
- shared/src/i18n/fr/pdf.ts +10 -0
- shared/src/i18n/fr/perm.ts +65 -0
- shared/src/i18n/fr/photos.ts +25 -0
- shared/src/i18n/fr/places.ts +98 -0
- shared/src/i18n/fr/planner.ts +69 -0
- shared/src/i18n/fr/register.ts +27 -0
- shared/src/i18n/fr/reservations.ts +163 -0
- shared/src/i18n/fr/settings.ts +351 -0
- shared/src/i18n/fr/share.ts +16 -0
- shared/src/i18n/fr/shared.ts +21 -0
- shared/src/i18n/fr/stats.ts +13 -0
- shared/src/i18n/fr/system_notice.ts +63 -0
- shared/src/i18n/fr/todo.ts +41 -0
- shared/src/i18n/fr/transport.ts +10 -0
- shared/src/i18n/fr/trip.ts +31 -0
- shared/src/i18n/fr/trips.ts +17 -0
- shared/src/i18n/fr/undo.ts +22 -0
- shared/src/i18n/fr/vacay.ts +109 -0
- shared/src/i18n/gr/admin.ts +403 -0
- shared/src/i18n/gr/airport.ts +6 -0
- shared/src/i18n/gr/atlas.ts +61 -0
- shared/src/i18n/gr/backup.ts +79 -0
- shared/src/i18n/gr/budget.ts +117 -0
- shared/src/i18n/gr/categories.ts +26 -0
- shared/src/i18n/gr/collab.ts +77 -0
- shared/src/i18n/gr/common.ts +55 -0
- shared/src/i18n/gr/dashboard.ts +171 -0
- shared/src/i18n/gr/day.ts +27 -0
- shared/src/i18n/gr/dayplan.ts +62 -0
- shared/src/i18n/gr/externalNotifications.ts +64 -0
- shared/src/i18n/gr/files.ts +64 -0
- shared/src/i18n/gr/index.ts +86 -0
- shared/src/i18n/gr/inspector.ts +22 -0
- shared/src/i18n/gr/journey.ts +247 -0
- shared/src/i18n/gr/login.ts +107 -0
- shared/src/i18n/gr/map.ts +17 -0
- shared/src/i18n/gr/members.ts +24 -0
- shared/src/i18n/gr/memories.ts +85 -0
- shared/src/i18n/gr/nav.ts +20 -0
shared/src/i18n/fr/inspector.ts
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import type { TranslationStrings } from '../types';
|
| 2 |
+
|
| 3 |
+
const inspector: TranslationStrings = {
|
| 4 |
+
'inspector.opened': 'Ouvert',
|
| 5 |
+
'inspector.closed': 'Fermé',
|
| 6 |
+
'inspector.openingHours': "Horaires d'ouverture",
|
| 7 |
+
'inspector.showHours': 'Afficher les horaires',
|
| 8 |
+
'inspector.files': 'Fichiers',
|
| 9 |
+
'inspector.filesCount': '{count} fichiers',
|
| 10 |
+
'inspector.removeFromDay': 'Retirer du jour',
|
| 11 |
+
'inspector.remove': 'Supprimer',
|
| 12 |
+
'inspector.addToDay': 'Ajouter au jour',
|
| 13 |
+
'inspector.confirmedRes': 'Réservation confirmée',
|
| 14 |
+
'inspector.pendingRes': 'Réservation en attente',
|
| 15 |
+
'inspector.google': 'Ouvrir dans Google Maps',
|
| 16 |
+
'inspector.website': 'Ouvrir le site web',
|
| 17 |
+
'inspector.addRes': 'Réservation',
|
| 18 |
+
'inspector.editRes': 'Modifier la réservation',
|
| 19 |
+
'inspector.participants': 'Participants',
|
| 20 |
+
'inspector.trackStats': 'Données du parcours',
|
| 21 |
+
};
|
| 22 |
+
export default inspector;
|
shared/src/i18n/fr/journey.ts
ADDED
|
@@ -0,0 +1,246 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import type { TranslationStrings } from '../types';
|
| 2 |
+
|
| 3 |
+
const journey: TranslationStrings = {
|
| 4 |
+
'journey.search.placeholder': 'Rechercher des journaux…',
|
| 5 |
+
'journey.search.noResults': 'Aucun journal ne correspond à « {query} »',
|
| 6 |
+
'journey.title': 'Journal de voyage',
|
| 7 |
+
'journey.subtitle': 'Suivez vos voyages en temps réel',
|
| 8 |
+
'journey.new': 'Nouveau journal',
|
| 9 |
+
'journey.create': 'Créer',
|
| 10 |
+
'journey.titlePlaceholder': 'Où allez-vous ?',
|
| 11 |
+
'journey.empty': 'Aucun journal pour le moment',
|
| 12 |
+
'journey.emptyHint': 'Commencez à documenter votre prochain voyage',
|
| 13 |
+
'journey.deleted': 'Journal supprimé',
|
| 14 |
+
'journey.createError': 'Impossible de créer le journal',
|
| 15 |
+
'journey.deleteError': 'Impossible de supprimer le journal',
|
| 16 |
+
'journey.deleteConfirmTitle': 'Supprimer',
|
| 17 |
+
'journey.deleteConfirmMessage':
|
| 18 |
+
'Supprimer « {title} » ? Cette action est irréversible.',
|
| 19 |
+
'journey.deleteConfirmGeneric': 'Êtes-vous sûr de vouloir supprimer ceci ?',
|
| 20 |
+
'journey.notFound': 'Journal introuvable',
|
| 21 |
+
'journey.photos': 'Photos',
|
| 22 |
+
'journey.timelineEmpty': 'Aucune étape pour le moment',
|
| 23 |
+
'journey.timelineEmptyHint':
|
| 24 |
+
'Ajoutez un check-in ou écrivez une entrée de journal pour commencer',
|
| 25 |
+
'journey.status.draft': 'Brouillon',
|
| 26 |
+
'journey.status.active': 'Actif',
|
| 27 |
+
'journey.status.completed': 'Terminé',
|
| 28 |
+
'journey.status.upcoming': 'À venir',
|
| 29 |
+
'journey.status.archived': 'Archivé',
|
| 30 |
+
'journey.checkin.add': 'Check-in',
|
| 31 |
+
'journey.checkin.namePlaceholder': 'Nom du lieu',
|
| 32 |
+
'journey.checkin.notesPlaceholder': 'Notes (facultatif)',
|
| 33 |
+
'journey.checkin.save': 'Enregistrer',
|
| 34 |
+
'journey.checkin.error': "Impossible d'enregistrer le check-in",
|
| 35 |
+
'journey.entry.add': 'Journal',
|
| 36 |
+
'journey.entry.edit': "Modifier l'entrée",
|
| 37 |
+
'journey.entry.titlePlaceholder': 'Titre (facultatif)',
|
| 38 |
+
'journey.entry.bodyPlaceholder': "Que s'est-il passé aujourd'hui ?",
|
| 39 |
+
'journey.entry.save': 'Enregistrer',
|
| 40 |
+
'journey.entry.error': "Impossible d'enregistrer l'entrée",
|
| 41 |
+
'journey.photo.add': 'Photo',
|
| 42 |
+
'journey.photo.uploadError': 'Échec du téléversement',
|
| 43 |
+
'journey.share.share': 'Partager',
|
| 44 |
+
'journey.share.public': 'Public',
|
| 45 |
+
'journey.share.linkCopied': 'Lien public copié',
|
| 46 |
+
'journey.share.disabled': 'Partage public désactivé',
|
| 47 |
+
'journey.editor.titlePlaceholder': 'Donnez un nom à ce moment...',
|
| 48 |
+
'journey.editor.bodyPlaceholder': "Racontez l'histoire de cette journée...",
|
| 49 |
+
'journey.editor.placePlaceholder': 'Lieu (facultatif)',
|
| 50 |
+
'journey.editor.tagsPlaceholder':
|
| 51 |
+
'Tags : pépite cachée, meilleur repas, à revisiter...',
|
| 52 |
+
'journey.visibility.private': 'Privé',
|
| 53 |
+
'journey.visibility.shared': 'Partagé',
|
| 54 |
+
'journey.visibility.public': 'Public',
|
| 55 |
+
'journey.emptyState.title': 'Votre histoire commence ici',
|
| 56 |
+
'journey.emptyState.subtitle':
|
| 57 |
+
'Faites un check-in ou écrivez votre première entrée de journal',
|
| 58 |
+
'journey.frontpage.subtitle':
|
| 59 |
+
'Transformez vos voyages en histoires inoubliables',
|
| 60 |
+
'journey.frontpage.createJourney': 'Créer un journal',
|
| 61 |
+
'journey.frontpage.activeJourney': 'Journal actif',
|
| 62 |
+
'journey.frontpage.allJourneys': 'Tous les journaux',
|
| 63 |
+
'journey.frontpage.journeys': 'journaux',
|
| 64 |
+
'journey.frontpage.createNew': 'Créer un nouveau journal',
|
| 65 |
+
'journey.frontpage.createNewSub':
|
| 66 |
+
'Choisissez des voyages, écrivez des récits, partagez vos aventures',
|
| 67 |
+
'journey.frontpage.live': 'En direct',
|
| 68 |
+
'journey.frontpage.synced': 'Synchronisé',
|
| 69 |
+
'journey.frontpage.continueWriting': 'Continuer à écrire',
|
| 70 |
+
'journey.frontpage.updated': 'Mis à jour {time}',
|
| 71 |
+
'journey.frontpage.suggestionLabel': 'Voyage terminé récemment',
|
| 72 |
+
'journey.frontpage.suggestionText':
|
| 73 |
+
'Transformez <strong>{title}</strong> en journal de voyage',
|
| 74 |
+
'journey.frontpage.dismiss': 'Ignorer',
|
| 75 |
+
'journey.frontpage.journeyName': 'Nom du journal',
|
| 76 |
+
'journey.frontpage.namePlaceholder': 'ex. Asie du Sud-Est 2026',
|
| 77 |
+
'journey.frontpage.selectTrips': 'Sélectionner des voyages',
|
| 78 |
+
'journey.frontpage.tripsSelected': 'voyages sélectionnés',
|
| 79 |
+
'journey.frontpage.trips': 'voyages',
|
| 80 |
+
'journey.frontpage.placesImported': 'lieux seront importés',
|
| 81 |
+
'journey.frontpage.places': 'lieux',
|
| 82 |
+
'journey.detail.backToJourney': 'Retour au journal',
|
| 83 |
+
'journey.detail.syncedWithTrips': 'Synchronisé avec les voyages',
|
| 84 |
+
'journey.detail.addEntry': 'Ajouter une entrée',
|
| 85 |
+
'journey.detail.newEntry': 'Nouvelle entrée',
|
| 86 |
+
'journey.detail.editEntry': "Modifier l'entrée",
|
| 87 |
+
'journey.detail.noEntries': 'Aucune entrée pour le moment',
|
| 88 |
+
'journey.detail.noEntriesHint':
|
| 89 |
+
'Ajoutez un voyage pour commencer avec des entrées préremplies',
|
| 90 |
+
'journey.detail.noPhotos': 'Aucune photo pour le moment',
|
| 91 |
+
'journey.detail.noPhotosHint':
|
| 92 |
+
'Téléversez des photos dans les entrées ou parcourez votre bibliothèque Immich/Synology',
|
| 93 |
+
'journey.detail.journeyStats': 'Statistiques du journal',
|
| 94 |
+
'journey.detail.syncedTrips': 'Voyages synchronisés',
|
| 95 |
+
'journey.detail.noTripsLinked': 'Aucun voyage lié pour le moment',
|
| 96 |
+
'journey.detail.contributors': 'Contributeurs',
|
| 97 |
+
'journey.detail.readMore': 'Lire la suite',
|
| 98 |
+
'journey.detail.prosCons': 'Pour et contre',
|
| 99 |
+
'journey.detail.photos': 'photos',
|
| 100 |
+
'journey.detail.day': 'Jour {number}',
|
| 101 |
+
'journey.detail.places': 'lieux',
|
| 102 |
+
'journey.stats.days': 'Jours',
|
| 103 |
+
'journey.stats.cities': 'Villes',
|
| 104 |
+
'journey.stats.entries': 'Entrées',
|
| 105 |
+
'journey.stats.photos': 'Photos',
|
| 106 |
+
'journey.stats.places': 'Lieux',
|
| 107 |
+
'journey.skeletons.show': 'Afficher les suggestions',
|
| 108 |
+
'journey.skeletons.hide': 'Masquer les suggestions',
|
| 109 |
+
'journey.verdict.lovedIt': 'Adoré',
|
| 110 |
+
'journey.verdict.couldBeBetter': 'Pourrait être mieux',
|
| 111 |
+
'journey.synced.places': 'lieux',
|
| 112 |
+
'journey.synced.synced': 'synchronisé',
|
| 113 |
+
'journey.editor.discardChangesConfirm':
|
| 114 |
+
'Vous avez des modifications non enregistrées. Les ignorer ?',
|
| 115 |
+
'journey.editor.uploadFailed': 'Échec du téléversement des photos',
|
| 116 |
+
'journey.editor.uploadPhotos': 'Téléverser des photos',
|
| 117 |
+
'journey.editor.uploading': 'Envoi...',
|
| 118 |
+
'journey.editor.uploadingProgress': 'Téléversement {done}/{total}…',
|
| 119 |
+
'journey.editor.uploadPartialFailed':
|
| 120 |
+
'{failed} sur {total} photos ont échoué — sauvegardez à nouveau pour réessayer',
|
| 121 |
+
'journey.editor.fromGallery': 'Depuis la galerie',
|
| 122 |
+
'journey.editor.allPhotosAdded': 'Toutes les photos ont déjà été ajoutées',
|
| 123 |
+
'journey.editor.writeStory': 'Écrivez votre histoire...',
|
| 124 |
+
'journey.editor.prosCons': 'Pour et contre',
|
| 125 |
+
'journey.editor.pros': 'Pour',
|
| 126 |
+
'journey.editor.cons': 'Contre',
|
| 127 |
+
'journey.editor.proPlaceholder': 'Quelque chose de génial...',
|
| 128 |
+
'journey.editor.conPlaceholder': 'Pas si génial...',
|
| 129 |
+
'journey.editor.addAnother': 'Ajouter un autre',
|
| 130 |
+
'journey.editor.date': 'Date',
|
| 131 |
+
'journey.editor.location': 'Lieu',
|
| 132 |
+
'journey.editor.searchLocation': 'Rechercher un lieu...',
|
| 133 |
+
'journey.editor.mood': 'Humeur',
|
| 134 |
+
'journey.editor.weather': 'Météo',
|
| 135 |
+
'journey.editor.photoFirst': '1er',
|
| 136 |
+
'journey.editor.makeFirst': 'Mettre en 1er',
|
| 137 |
+
'journey.editor.searching': 'Recherche...',
|
| 138 |
+
'journey.mood.amazing': 'Incroyable',
|
| 139 |
+
'journey.mood.good': 'Bien',
|
| 140 |
+
'journey.mood.neutral': 'Neutre',
|
| 141 |
+
'journey.mood.rough': 'Difficile',
|
| 142 |
+
'journey.weather.sunny': 'Ensoleillé',
|
| 143 |
+
'journey.weather.partly': 'Partiellement nuageux',
|
| 144 |
+
'journey.weather.cloudy': 'Nuageux',
|
| 145 |
+
'journey.weather.rainy': 'Pluvieux',
|
| 146 |
+
'journey.weather.stormy': 'Orageux',
|
| 147 |
+
'journey.weather.cold': 'Neigeux',
|
| 148 |
+
'journey.trips.linkTrip': 'Lier un voyage',
|
| 149 |
+
'journey.trips.searchTrip': 'Rechercher un voyage',
|
| 150 |
+
'journey.trips.searchPlaceholder': 'Nom du voyage ou destination...',
|
| 151 |
+
'journey.trips.noTripsAvailable': 'Aucun voyage disponible',
|
| 152 |
+
'journey.trips.link': 'Lier',
|
| 153 |
+
'journey.trips.tripLinked': 'Voyage lié',
|
| 154 |
+
'journey.trips.linkFailed': 'Échec de la liaison du voyage',
|
| 155 |
+
'journey.trips.addTrip': 'Ajouter un voyage',
|
| 156 |
+
'journey.trips.unlinkTrip': 'Délier le voyage',
|
| 157 |
+
'journey.trips.unlinkMessage':
|
| 158 |
+
'Délier « {title} » ? Toutes les entrées et photos synchronisées de ce voyage seront définitivement supprimées. Cette action est irréversible.',
|
| 159 |
+
'journey.trips.unlink': 'Délier',
|
| 160 |
+
'journey.trips.tripUnlinked': 'Voyage délié',
|
| 161 |
+
'journey.trips.unlinkFailed': 'Échec de la suppression du lien',
|
| 162 |
+
'journey.trips.noTripsLinkedSettings': 'Aucun voyage lié',
|
| 163 |
+
'journey.contributors.invite': 'Inviter un contributeur',
|
| 164 |
+
'journey.contributors.searchUser': 'Rechercher un utilisateur',
|
| 165 |
+
'journey.contributors.searchPlaceholder': "Nom d'utilisateur ou e-mail...",
|
| 166 |
+
'journey.contributors.noUsers': 'Aucun utilisateur trouvé',
|
| 167 |
+
'journey.contributors.role': 'Rôle',
|
| 168 |
+
'journey.contributors.added': 'Contributeur ajouté',
|
| 169 |
+
'journey.contributors.addFailed': "Échec de l'ajout du contributeur",
|
| 170 |
+
'journey.share.publicShare': 'Partage public',
|
| 171 |
+
'journey.share.createLink': 'Créer un lien de partage',
|
| 172 |
+
'journey.share.linkCreated': 'Lien de partage créé',
|
| 173 |
+
'journey.share.createFailed': 'Échec de la création du lien',
|
| 174 |
+
'journey.share.copy': 'Copier',
|
| 175 |
+
'journey.share.copied': 'Copié !',
|
| 176 |
+
'journey.share.timeline': 'Chronologie',
|
| 177 |
+
'journey.share.gallery': 'Galerie',
|
| 178 |
+
'journey.share.map': 'Carte',
|
| 179 |
+
'journey.share.removeLink': 'Supprimer le lien de partage',
|
| 180 |
+
'journey.share.linkDeleted': 'Lien de partage supprimé',
|
| 181 |
+
'journey.share.deleteFailed': 'Échec de la suppression',
|
| 182 |
+
'journey.share.updateFailed': 'Échec de la mise à jour',
|
| 183 |
+
'journey.invite.role': 'Rôle',
|
| 184 |
+
'journey.invite.viewer': 'Lecteur',
|
| 185 |
+
'journey.invite.editor': 'Éditeur',
|
| 186 |
+
'journey.invite.invite': 'Inviter',
|
| 187 |
+
'journey.invite.inviting': 'Invitation...',
|
| 188 |
+
'journey.settings.title': 'Paramètres du journal',
|
| 189 |
+
'journey.settings.coverImage': 'Image de couverture',
|
| 190 |
+
'journey.settings.changeCover': 'Changer la couverture',
|
| 191 |
+
'journey.settings.addCover': 'Ajouter une image de couverture',
|
| 192 |
+
'journey.settings.name': 'Nom',
|
| 193 |
+
'journey.settings.subtitle': 'Sous-titre',
|
| 194 |
+
'journey.settings.subtitlePlaceholder': 'ex. Thaïlande, Vietnam et Cambodge',
|
| 195 |
+
'journey.settings.endJourney': 'Archiver le journal',
|
| 196 |
+
'journey.settings.reopenJourney': 'Restaurer le journal',
|
| 197 |
+
'journey.settings.archived': 'Journal archivé',
|
| 198 |
+
'journey.settings.reopened': 'Journal rouvert',
|
| 199 |
+
'journey.settings.endDescription':
|
| 200 |
+
"Masque l'indicateur En direct. Vous pouvez rouvrir à tout moment.",
|
| 201 |
+
'journey.settings.delete': 'Supprimer',
|
| 202 |
+
'journey.settings.deleteJourney': 'Supprimer le journal',
|
| 203 |
+
'journey.settings.deleteMessage':
|
| 204 |
+
'Supprimer « {title} » ? Toutes les entrées et photos seront perdues.',
|
| 205 |
+
'journey.settings.saved': 'Paramètres enregistrés',
|
| 206 |
+
'journey.settings.saveFailed': "Échec de l'enregistrement",
|
| 207 |
+
'journey.settings.coverUpdated': 'Couverture mise à jour',
|
| 208 |
+
'journey.settings.coverFailed': 'Échec du téléversement',
|
| 209 |
+
'journey.settings.failedToDelete': 'Échec de la suppression',
|
| 210 |
+
'journey.entries.deleteTitle': "Supprimer l'entrée",
|
| 211 |
+
'journey.photosUploaded': '{count} photos téléversées',
|
| 212 |
+
'journey.photosUploadFailed':
|
| 213 |
+
"Certaines photos n'ont pas pu être téléversées",
|
| 214 |
+
'journey.photosAdded': '{count} photos ajoutées',
|
| 215 |
+
'journey.public.notFound': 'Introuvable',
|
| 216 |
+
'journey.public.notFoundMessage':
|
| 217 |
+
"Ce journal n'existe pas ou le lien a expiré.",
|
| 218 |
+
'journey.public.readOnly': 'Lecture seule · Journal public',
|
| 219 |
+
'journey.public.tagline': 'Travel Resource & Exploration Kit',
|
| 220 |
+
'journey.public.sharedVia': 'Partagé via',
|
| 221 |
+
'journey.public.madeWith': 'Créé avec',
|
| 222 |
+
'journey.pdf.journeyBook': 'Carnet de voyage',
|
| 223 |
+
'journey.pdf.madeWith': 'Créé avec TREK',
|
| 224 |
+
'journey.pdf.day': 'Jour',
|
| 225 |
+
'journey.pdf.theEnd': 'Fin',
|
| 226 |
+
'journey.pdf.saveAsPdf': 'Enregistrer en PDF',
|
| 227 |
+
'journey.pdf.pages': 'pages',
|
| 228 |
+
'journey.picker.tripPeriod': 'Période du voyage',
|
| 229 |
+
'journey.picker.dateRange': 'Plage de dates',
|
| 230 |
+
'journey.picker.allPhotos': 'Toutes les photos',
|
| 231 |
+
'journey.picker.albums': 'Albums',
|
| 232 |
+
'journey.picker.selected': 'sélectionnés',
|
| 233 |
+
'journey.picker.addTo': 'Ajouter à',
|
| 234 |
+
'journey.picker.newGallery': 'Nouvelle galerie',
|
| 235 |
+
'journey.picker.selectAll': 'Tout sélectionner',
|
| 236 |
+
'journey.picker.deselectAll': 'Tout désélectionner',
|
| 237 |
+
'journey.picker.noAlbums': 'Aucun album trouvé',
|
| 238 |
+
'journey.picker.selectDate': 'Sélectionner une date',
|
| 239 |
+
'journey.picker.search': 'Rechercher',
|
| 240 |
+
'journey.detail.journeyTab': 'Journey', // en-fallback
|
| 241 |
+
'journey.contributors.remove': 'Remove contributor', // en-fallback
|
| 242 |
+
'journey.contributors.removeConfirm': 'Remove {username} from this journey?', // en-fallback
|
| 243 |
+
'journey.contributors.removed': 'Contributor removed', // en-fallback
|
| 244 |
+
'journey.contributors.removeFailed': 'Failed to remove contributor', // en-fallback
|
| 245 |
+
};
|
| 246 |
+
export default journey;
|
shared/src/i18n/fr/login.ts
ADDED
|
@@ -0,0 +1,106 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import type { TranslationStrings } from '../types';
|
| 2 |
+
|
| 3 |
+
const login: TranslationStrings = {
|
| 4 |
+
'login.error': 'Échec de la connexion. Veuillez vérifier vos identifiants.',
|
| 5 |
+
'login.tagline': 'Vos voyages.\nVotre organisation.',
|
| 6 |
+
'login.description':
|
| 7 |
+
'Planifiez vos voyages en collaboration avec des cartes interactives, des budgets et la synchronisation en temps réel.',
|
| 8 |
+
'login.features.maps': 'Cartes interactives',
|
| 9 |
+
'login.features.mapsDesc': 'Google Places, itinéraires et regroupement',
|
| 10 |
+
'login.features.realtime': 'Synchronisation en temps réel',
|
| 11 |
+
'login.features.realtimeDesc': 'Planifiez ensemble via WebSocket',
|
| 12 |
+
'login.features.budget': 'Suivi du budget',
|
| 13 |
+
'login.features.budgetDesc': 'Catégories, graphiques et coûts par personne',
|
| 14 |
+
'login.features.collab': 'Collaboration',
|
| 15 |
+
'login.features.collabDesc': 'Multi-utilisateurs avec voyages partagés',
|
| 16 |
+
'login.features.packing': 'Listes de bagages',
|
| 17 |
+
'login.features.packingDesc': 'Catégories, progression et suggestions',
|
| 18 |
+
'login.features.bookings': 'Réservations',
|
| 19 |
+
'login.features.bookingsDesc': 'Vols, hôtels, restaurants et plus',
|
| 20 |
+
'login.features.files': 'Documents',
|
| 21 |
+
'login.features.filesDesc': 'Importez et gérez vos documents',
|
| 22 |
+
'login.features.routes': 'Itinéraires intelligents',
|
| 23 |
+
'login.features.routesDesc': 'Optimisation automatique et export Google Maps',
|
| 24 |
+
'login.selfHosted':
|
| 25 |
+
'Auto-hébergé · Open Source · Vos données restent les vôtres',
|
| 26 |
+
'login.title': 'Connexion',
|
| 27 |
+
'login.subtitle': 'Bon retour',
|
| 28 |
+
'login.signingIn': 'Connexion en cours…',
|
| 29 |
+
'login.signIn': 'Se connecter',
|
| 30 |
+
'login.createAdmin': 'Créer un compte administrateur',
|
| 31 |
+
'login.createAdminHint':
|
| 32 |
+
'Configurez le premier compte administrateur pour TREK.',
|
| 33 |
+
'login.setNewPassword': 'Définir un nouveau mot de passe',
|
| 34 |
+
'login.setNewPasswordHint':
|
| 35 |
+
'Vous devez changer votre mot de passe avant de continuer.',
|
| 36 |
+
'login.createAccount': 'Créer un compte',
|
| 37 |
+
'login.createAccountHint': 'Créez un nouveau compte.',
|
| 38 |
+
'login.creating': 'Création…',
|
| 39 |
+
'login.noAccount': 'Pas encore de compte ?',
|
| 40 |
+
'login.hasAccount': 'Vous avez déjà un compte ?',
|
| 41 |
+
'login.register': "S'inscrire",
|
| 42 |
+
'login.emailPlaceholder': 'votre@email.com',
|
| 43 |
+
'login.username': "Nom d'utilisateur",
|
| 44 |
+
'login.oidc.registrationDisabled':
|
| 45 |
+
'Les inscriptions sont désactivées. Contactez votre administrateur.',
|
| 46 |
+
'login.oidc.noEmail': 'Aucun e-mail reçu du fournisseur.',
|
| 47 |
+
'login.mfaTitle': 'Authentification à deux facteurs',
|
| 48 |
+
'login.mfaSubtitle':
|
| 49 |
+
"Entrez le code à 6 chiffres de votre application d'authentification.",
|
| 50 |
+
'login.mfaCodeLabel': 'Code de vérification',
|
| 51 |
+
'login.mfaCodeRequired':
|
| 52 |
+
"Entrez le code de votre application d'authentification.",
|
| 53 |
+
'login.mfaHint':
|
| 54 |
+
'Ouvrez Google Authenticator, Authy ou une autre application TOTP.',
|
| 55 |
+
'login.mfaBack': '← Retour à la connexion',
|
| 56 |
+
'login.mfaVerify': 'Vérifier',
|
| 57 |
+
'login.invalidInviteLink': "Lien d'invitation invalide ou expiré",
|
| 58 |
+
'login.oidcFailed': 'Échec de connexion OIDC',
|
| 59 |
+
'login.usernameRequired': "Le nom d'utilisateur est obligatoire",
|
| 60 |
+
'login.passwordMinLength':
|
| 61 |
+
'Le mot de passe doit comporter au moins 8 caractères',
|
| 62 |
+
'login.forgotPassword': 'Mot de passe oublié ?',
|
| 63 |
+
'login.rememberMe': 'Se souvenir de moi',
|
| 64 |
+
'login.forgotPasswordTitle': 'Réinitialiser votre mot de passe',
|
| 65 |
+
'login.forgotPasswordBody':
|
| 66 |
+
"Entrez l'adresse e-mail associée à votre compte. Si un compte existe, nous enverrons un lien de réinitialisation.",
|
| 67 |
+
'login.forgotPasswordSubmit': 'Envoyer le lien',
|
| 68 |
+
'login.forgotPasswordSentTitle': 'Vérifiez vos e-mails',
|
| 69 |
+
'login.forgotPasswordSentBody':
|
| 70 |
+
'Si un compte existe pour cette adresse, un lien de réinitialisation est en route. Il expire dans 60 minutes.',
|
| 71 |
+
'login.forgotPasswordSmtpHintOff':
|
| 72 |
+
"Remarque : votre administrateur n'a pas configuré SMTP. Le lien de réinitialisation sera écrit dans la console du serveur au lieu d'être envoyé par e-mail.",
|
| 73 |
+
'login.backToLogin': 'Retour à la connexion',
|
| 74 |
+
'login.newPassword': 'Nouveau mot de passe',
|
| 75 |
+
'login.confirmPassword': 'Confirmer le nouveau mot de passe',
|
| 76 |
+
'login.passwordsDontMatch': 'Les mots de passe ne correspondent pas',
|
| 77 |
+
'login.mfaCode': 'Code 2FA',
|
| 78 |
+
'login.resetPasswordTitle': 'Définir un nouveau mot de passe',
|
| 79 |
+
'login.resetPasswordBody':
|
| 80 |
+
"Choisissez un mot de passe fort que vous n'avez pas encore utilisé ici. 8 caractères minimum.",
|
| 81 |
+
'login.resetPasswordMfaBody':
|
| 82 |
+
'Entrez votre code 2FA ou un code de secours pour finaliser la réinitialisation.',
|
| 83 |
+
'login.resetPasswordSubmit': 'Réinitialiser',
|
| 84 |
+
'login.resetPasswordVerify': 'Vérifier et réinitialiser',
|
| 85 |
+
'login.resetPasswordSuccessTitle': 'Mot de passe mis à jour',
|
| 86 |
+
'login.resetPasswordSuccessBody':
|
| 87 |
+
'Vous pouvez maintenant vous connecter avec votre nouveau mot de passe.',
|
| 88 |
+
'login.resetPasswordInvalidLink': 'Lien de réinitialisation invalide',
|
| 89 |
+
'login.resetPasswordInvalidLinkBody':
|
| 90 |
+
'Ce lien est manquant ou invalide. Demandez-en un nouveau pour continuer.',
|
| 91 |
+
'login.resetPasswordFailed':
|
| 92 |
+
'Échec de la réinitialisation. Le lien a peut-être expiré.',
|
| 93 |
+
'login.oidc.tokenFailed': "L'authentification a échoué.",
|
| 94 |
+
'login.oidc.invalidState': 'Session invalide. Veuillez réessayer.',
|
| 95 |
+
'login.demoFailed': 'Échec de la connexion démo',
|
| 96 |
+
'login.oidcSignIn': 'Se connecter avec {name}',
|
| 97 |
+
'login.oidcOnly':
|
| 98 |
+
"L'authentification par mot de passe est désactivée. Veuillez vous connecter via votre fournisseur SSO.",
|
| 99 |
+
'login.oidcLoggedOut':
|
| 100 |
+
'Vous avez été déconnecté. Reconnectez-vous via votre fournisseur SSO.',
|
| 101 |
+
'login.demoHint': 'Essayez la démo — aucune inscription nécessaire',
|
| 102 |
+
'login.passkey.signIn': 'Se connecter avec une passkey',
|
| 103 |
+
'login.passkey.failed':
|
| 104 |
+
'Échec de la connexion par passkey. Veuillez réessayer.',
|
| 105 |
+
};
|
| 106 |
+
export default login;
|
shared/src/i18n/fr/map.ts
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import type { TranslationStrings } from '../types';
|
| 2 |
+
|
| 3 |
+
const map: TranslationStrings = {
|
| 4 |
+
'map.connections': 'Connexions',
|
| 5 |
+
'map.showConnections': 'Afficher les itinéraires',
|
| 6 |
+
'map.hideConnections': 'Masquer les itinéraires',
|
| 7 |
+
'poi.searchThisArea': 'Rechercher dans cette zone',
|
| 8 |
+
'poi.cat.restaurants': 'Restaurants',
|
| 9 |
+
'poi.cat.cafes': 'Cafés',
|
| 10 |
+
'poi.cat.bars': 'Bars & vie nocturne',
|
| 11 |
+
'poi.cat.hotels': 'Hébergement',
|
| 12 |
+
'poi.cat.sights': 'Sites touristiques',
|
| 13 |
+
'poi.cat.museums': 'Musées & culture',
|
| 14 |
+
'poi.cat.nature': 'Nature & parcs',
|
| 15 |
+
'poi.cat.activities': 'Activités',
|
| 16 |
+
};
|
| 17 |
+
export default map;
|
shared/src/i18n/fr/members.ts
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import type { TranslationStrings } from '../types';
|
| 2 |
+
|
| 3 |
+
const members: TranslationStrings = {
|
| 4 |
+
'members.shareTrip': 'Partager le voyage',
|
| 5 |
+
'members.inviteUser': 'Inviter un utilisateur',
|
| 6 |
+
'members.selectUser': 'Sélectionner un utilisateur…',
|
| 7 |
+
'members.invite': 'Inviter',
|
| 8 |
+
'members.allHaveAccess': 'Tous les utilisateurs ont déjà accès.',
|
| 9 |
+
'members.access': 'Accès',
|
| 10 |
+
'members.person': 'personne',
|
| 11 |
+
'members.persons': 'personnes',
|
| 12 |
+
'members.you': 'vous',
|
| 13 |
+
'members.owner': 'Propriétaire',
|
| 14 |
+
'members.leaveTrip': 'Quitter le voyage',
|
| 15 |
+
'members.removeAccess': "Retirer l'accès",
|
| 16 |
+
'members.confirmLeave': "Quitter le voyage ? Vous perdrez l'accès.",
|
| 17 |
+
'members.confirmRemove': "Retirer l'accès à cet utilisateur ?",
|
| 18 |
+
'members.loadError': 'Impossible de charger les membres',
|
| 19 |
+
'members.added': 'ajouté',
|
| 20 |
+
'members.addError': "Échec de l'ajout",
|
| 21 |
+
'members.removed': 'Membre retiré',
|
| 22 |
+
'members.removeError': 'Échec de la suppression',
|
| 23 |
+
};
|
| 24 |
+
export default members;
|
shared/src/i18n/fr/memories.ts
ADDED
|
@@ -0,0 +1,84 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import type { TranslationStrings } from '../types';
|
| 2 |
+
|
| 3 |
+
const memories: TranslationStrings = {
|
| 4 |
+
'memories.title': 'Photos',
|
| 5 |
+
'memories.notConnected': 'Immich non connecté',
|
| 6 |
+
'memories.notConnectedHint':
|
| 7 |
+
'Connectez votre instance Immich dans les paramètres pour voir vos photos de voyage ici.',
|
| 8 |
+
'memories.notConnectedMultipleHint':
|
| 9 |
+
'Connectez un de ces fournisseurs de photos : {provider_names} dans les Paramètres pour pouvoir ajouter des photos à ce voyage.',
|
| 10 |
+
'memories.noDates':
|
| 11 |
+
'Ajoutez des dates à votre voyage pour charger les photos.',
|
| 12 |
+
'memories.noPhotos': 'Aucune photo trouvée',
|
| 13 |
+
'memories.noPhotosHint':
|
| 14 |
+
'Aucune photo trouvée dans Immich pour la période de ce voyage.',
|
| 15 |
+
'memories.photosFound': 'photos',
|
| 16 |
+
'memories.fromOthers': "d'autres",
|
| 17 |
+
'memories.sharePhotos': 'Partager les photos',
|
| 18 |
+
'memories.sharing': 'Partagé',
|
| 19 |
+
'memories.reviewTitle': 'Vérifier vos photos',
|
| 20 |
+
'memories.reviewHint': 'Cliquez sur les photos pour les exclure du partage.',
|
| 21 |
+
'memories.shareCount': 'Partager {count} photos',
|
| 22 |
+
'memories.providerUrl': 'URL du serveur',
|
| 23 |
+
'memories.providerApiKey': 'Clé API',
|
| 24 |
+
'memories.providerUsername': "Nom d'utilisateur",
|
| 25 |
+
'memories.providerPassword': 'Mot de passe',
|
| 26 |
+
'memories.providerOTP': 'Code MFA (si activé)',
|
| 27 |
+
'memories.skipSSLVerification': 'Ignorer la vérification du certificat SSL',
|
| 28 |
+
'memories.immichAutoUpload':
|
| 29 |
+
'Répliquer les photos du journey vers Immich au téléversement',
|
| 30 |
+
'memories.providerUrlHintSynology':
|
| 31 |
+
"Incluez le chemin de l'application Photos dans l'URL, ex. https://nas:5001/photo",
|
| 32 |
+
'memories.testConnection': 'Tester la connexion',
|
| 33 |
+
'memories.testShort': 'Tester',
|
| 34 |
+
'memories.testFirst': 'Testez la connexion avant de sauvegarder',
|
| 35 |
+
'memories.connected': 'Connecté',
|
| 36 |
+
'memories.disconnected': 'Non connecté',
|
| 37 |
+
'memories.connectionSuccess': 'Connecté à Immich',
|
| 38 |
+
'memories.connectionError': 'Impossible de se connecter à Immich',
|
| 39 |
+
'memories.saved': 'Paramètres {provider_name} enregistrés',
|
| 40 |
+
'memories.providerDisconnectedBanner':
|
| 41 |
+
'Votre connexion {provider_name} est perdue. Reconnectez-vous dans les Paramètres pour voir les photos.',
|
| 42 |
+
'memories.saveError':
|
| 43 |
+
"Impossible d'enregistrer les paramètres de {provider_name}",
|
| 44 |
+
'memories.saveRouteNotConfigured':
|
| 45 |
+
"La route de sauvegarde n'est pas configurée pour ce fournisseur",
|
| 46 |
+
'memories.testRouteNotConfigured':
|
| 47 |
+
"La route de test n'est pas configurée pour ce fournisseur",
|
| 48 |
+
'memories.fillRequiredFields':
|
| 49 |
+
'Veuillez remplir tous les champs obligatoires',
|
| 50 |
+
'memories.oldest': 'Plus anciennes',
|
| 51 |
+
'memories.newest': 'Plus récentes',
|
| 52 |
+
'memories.allLocations': 'Tous les lieux',
|
| 53 |
+
'memories.addPhotos': 'Ajouter des photos',
|
| 54 |
+
'memories.linkAlbum': 'Lier un album',
|
| 55 |
+
'memories.selectAlbum': 'Choisir un album Immich',
|
| 56 |
+
'memories.selectAlbumMultiple': 'Sélectionner un album',
|
| 57 |
+
'memories.noAlbums': 'Aucun album trouvé',
|
| 58 |
+
'memories.syncAlbum': 'Synchroniser',
|
| 59 |
+
'memories.unlinkAlbum': 'Délier',
|
| 60 |
+
'memories.photos': 'photos',
|
| 61 |
+
'memories.selectPhotos': 'Sélectionner des photos depuis Immich',
|
| 62 |
+
'memories.selectPhotosMultiple': 'Sélectionner des photos',
|
| 63 |
+
'memories.selectHint': 'Appuyez sur les photos pour les sélectionner.',
|
| 64 |
+
'memories.selected': 'sélectionné(s)',
|
| 65 |
+
'memories.addSelected': 'Ajouter {count} photos',
|
| 66 |
+
'memories.alreadyAdded': 'Ajouté',
|
| 67 |
+
'memories.private': 'Privé',
|
| 68 |
+
'memories.stopSharing': 'Arrêter le partage',
|
| 69 |
+
'memories.tripDates': 'Dates du voyage',
|
| 70 |
+
'memories.allPhotos': 'Toutes les photos',
|
| 71 |
+
'memories.confirmShareTitle': 'Partager avec les membres du voyage ?',
|
| 72 |
+
'memories.confirmShareHint':
|
| 73 |
+
'{count} photos seront visibles par tous les membres de ce voyage. Vous pourrez rendre des photos individuelles privées plus tard.',
|
| 74 |
+
'memories.confirmShareButton': 'Partager les photos',
|
| 75 |
+
'memories.error.loadAlbums': 'Impossible de charger les albums',
|
| 76 |
+
'memories.error.linkAlbum': "Impossible de lier l'album",
|
| 77 |
+
'memories.error.unlinkAlbum': "Impossible de dissocier l'album",
|
| 78 |
+
'memories.error.syncAlbum': "Impossible de synchroniser l'album",
|
| 79 |
+
'memories.error.loadPhotos': 'Impossible de charger les photos',
|
| 80 |
+
'memories.error.addPhotos': "Impossible d'ajouter les photos",
|
| 81 |
+
'memories.error.removePhoto': 'Impossible de supprimer la photo',
|
| 82 |
+
'memories.error.toggleSharing': 'Impossible de mettre à jour le partage',
|
| 83 |
+
};
|
| 84 |
+
export default memories;
|
shared/src/i18n/fr/nav.ts
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import type { TranslationStrings } from '../types';
|
| 2 |
+
|
| 3 |
+
const nav: TranslationStrings = {
|
| 4 |
+
'nav.trip': 'Voyage',
|
| 5 |
+
'nav.share': 'Partager',
|
| 6 |
+
'nav.settings': 'Paramètres',
|
| 7 |
+
'nav.admin': 'Admin',
|
| 8 |
+
'nav.logout': 'Déconnexion',
|
| 9 |
+
'nav.lightMode': 'Mode clair',
|
| 10 |
+
'nav.darkMode': 'Mode sombre',
|
| 11 |
+
'nav.autoMode': 'Mode auto',
|
| 12 |
+
'nav.administrator': 'Administrateur',
|
| 13 |
+
'nav.myTrips': 'Mes voyages',
|
| 14 |
+
'nav.profile': 'Profil',
|
| 15 |
+
'nav.bottomSettings': 'Paramètres',
|
| 16 |
+
'nav.bottomAdmin': 'Administration',
|
| 17 |
+
'nav.bottomLogout': 'Déconnexion',
|
| 18 |
+
'nav.bottomAdminBadge': 'Admin',
|
| 19 |
+
};
|
| 20 |
+
export default nav;
|
shared/src/i18n/fr/notif.ts
ADDED
|
@@ -0,0 +1,45 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import type { TranslationStrings } from '../types';
|
| 2 |
+
|
| 3 |
+
const notif: TranslationStrings = {
|
| 4 |
+
'notif.test.title': '[Test] Notification',
|
| 5 |
+
'notif.test.simple.text': 'Ceci est une simple notification de test.',
|
| 6 |
+
'notif.test.boolean.text': 'Acceptez-vous cette notification de test ?',
|
| 7 |
+
'notif.test.navigate.text':
|
| 8 |
+
'Cliquez ci-dessous pour accéder au tableau de bord.',
|
| 9 |
+
'notif.trip_invite.title': 'Invitation au voyage',
|
| 10 |
+
'notif.trip_invite.text': '{actor} vous a invité à {trip}',
|
| 11 |
+
'notif.booking_change.title': 'Réservation mise à jour',
|
| 12 |
+
'notif.booking_change.text':
|
| 13 |
+
'{actor} a mis à jour une réservation dans {trip}',
|
| 14 |
+
'notif.trip_reminder.title': 'Rappel de voyage',
|
| 15 |
+
'notif.trip_reminder.text': 'Votre voyage {trip} approche !',
|
| 16 |
+
'notif.todo_due.title': 'Tâche à échéance',
|
| 17 |
+
'notif.todo_due.text': '{todo} dans {trip} est due le {due}',
|
| 18 |
+
'notif.vacay_invite.title': 'Invitation Vacay Fusion',
|
| 19 |
+
'notif.vacay_invite.text':
|
| 20 |
+
'{actor} vous invite à fusionner les plans de vacances',
|
| 21 |
+
'notif.photos_shared.title': 'Photos partagées',
|
| 22 |
+
'notif.photos_shared.text': '{actor} a partagé {count} photo(s) dans {trip}',
|
| 23 |
+
'notif.collab_message.title': 'Nouveau message',
|
| 24 |
+
'notif.collab_message.text': '{actor} a envoyé un message dans {trip}',
|
| 25 |
+
'notif.packing_tagged.title': 'Affectation bagages',
|
| 26 |
+
'notif.packing_tagged.text':
|
| 27 |
+
'{actor} vous a assigné à {category} dans {trip}',
|
| 28 |
+
'notif.version_available.title': 'Nouvelle version disponible',
|
| 29 |
+
'notif.version_available.text': 'TREK {version} est maintenant disponible',
|
| 30 |
+
'notif.action.view_trip': 'Voir le voyage',
|
| 31 |
+
'notif.action.view_collab': 'Voir les messages',
|
| 32 |
+
'notif.action.view_packing': 'Voir les bagages',
|
| 33 |
+
'notif.action.view_photos': 'Voir les photos',
|
| 34 |
+
'notif.action.view_vacay': 'Voir Vacay',
|
| 35 |
+
'notif.action.view_admin': "Aller à l'admin",
|
| 36 |
+
'notif.action.view': 'Voir',
|
| 37 |
+
'notif.action.accept': 'Accepter',
|
| 38 |
+
'notif.action.decline': 'Refuser',
|
| 39 |
+
'notif.generic.title': 'Notification',
|
| 40 |
+
'notif.generic.text': 'Vous avez une nouvelle notification',
|
| 41 |
+
'notif.dev.unknown_event.title': '[DEV] Événement inconnu',
|
| 42 |
+
'notif.dev.unknown_event.text':
|
| 43 |
+
'Le type d\'événement "{event}" n\'est pas enregistré dans EVENT_NOTIFICATION_CONFIG',
|
| 44 |
+
};
|
| 45 |
+
export default notif;
|
shared/src/i18n/fr/notifications.ts
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import type { TranslationStrings } from '../types';
|
| 2 |
+
|
| 3 |
+
const notifications: TranslationStrings = {
|
| 4 |
+
'notifications.title': 'Notifications',
|
| 5 |
+
'notifications.markAllRead': 'Tout marquer comme lu',
|
| 6 |
+
'notifications.deleteAll': 'Tout supprimer',
|
| 7 |
+
'notifications.showAll': 'Voir toutes les notifications',
|
| 8 |
+
'notifications.empty': 'Aucune notification',
|
| 9 |
+
'notifications.emptyDescription': 'Vous êtes à jour !',
|
| 10 |
+
'notifications.all': 'Toutes',
|
| 11 |
+
'notifications.unreadOnly': 'Non lues',
|
| 12 |
+
'notifications.markRead': 'Marquer comme lu',
|
| 13 |
+
'notifications.markUnread': 'Marquer comme non lu',
|
| 14 |
+
'notifications.delete': 'Supprimer',
|
| 15 |
+
'notifications.system': 'Système',
|
| 16 |
+
'notifications.synologySessionCleared.title': 'Synology Photos déconnecté',
|
| 17 |
+
'notifications.synologySessionCleared.text':
|
| 18 |
+
'Votre serveur ou compte a changé — allez dans Paramètres pour tester à nouveau votre connexion.',
|
| 19 |
+
'notifications.test.title': 'Notification test de {actor}',
|
| 20 |
+
'notifications.test.text': 'Ceci est une simple notification de test.',
|
| 21 |
+
'notifications.test.booleanTitle': '{actor} demande votre approbation',
|
| 22 |
+
'notifications.test.booleanText': 'Notification de test booléenne.',
|
| 23 |
+
'notifications.test.accept': 'Approuver',
|
| 24 |
+
'notifications.test.decline': 'Refuser',
|
| 25 |
+
'notifications.test.navigateTitle': 'Allez voir quelque chose',
|
| 26 |
+
'notifications.test.navigateText': 'Notification de test de navigation.',
|
| 27 |
+
'notifications.test.goThere': 'Y aller',
|
| 28 |
+
'notifications.test.adminTitle': 'Diffusion admin',
|
| 29 |
+
'notifications.test.adminText':
|
| 30 |
+
'{actor} a envoyé une notification de test à tous les admins.',
|
| 31 |
+
'notifications.test.tripTitle': '{actor} a publié dans votre voyage',
|
| 32 |
+
'notifications.test.tripText':
|
| 33 |
+
'Notification de test pour le voyage "{trip}".',
|
| 34 |
+
'notifications.versionAvailable.title': 'Mise à jour disponible',
|
| 35 |
+
'notifications.versionAvailable.text':
|
| 36 |
+
'TREK {version} est maintenant disponible.',
|
| 37 |
+
'notifications.versionAvailable.button': 'Voir les détails',
|
| 38 |
+
};
|
| 39 |
+
export default notifications;
|
shared/src/i18n/fr/oauth.ts
ADDED
|
@@ -0,0 +1,123 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import type { TranslationStrings } from '../types';
|
| 2 |
+
|
| 3 |
+
const oauth: TranslationStrings = {
|
| 4 |
+
'oauth.scope.group.trips': 'Voyages',
|
| 5 |
+
'oauth.scope.group.places': 'Lieux',
|
| 6 |
+
'oauth.scope.group.atlas': 'Atlas',
|
| 7 |
+
'oauth.scope.group.packing': 'Bagages',
|
| 8 |
+
'oauth.scope.group.todos': 'Tâches',
|
| 9 |
+
'oauth.scope.group.budget': 'Budget',
|
| 10 |
+
'oauth.scope.group.reservations': 'Réservations',
|
| 11 |
+
'oauth.scope.group.collab': 'Collaboration',
|
| 12 |
+
'oauth.scope.group.notifications': 'Notifications',
|
| 13 |
+
'oauth.scope.group.vacay': 'Congés',
|
| 14 |
+
'oauth.scope.group.geo': 'Géo',
|
| 15 |
+
'oauth.scope.group.weather': 'Météo',
|
| 16 |
+
'oauth.scope.group.journey': 'Journal de voyage',
|
| 17 |
+
'oauth.scope.trips:read.label': 'Voir les voyages et itinéraires',
|
| 18 |
+
'oauth.scope.trips:read.description':
|
| 19 |
+
'Lire les voyages, jours, notes et membres',
|
| 20 |
+
'oauth.scope.trips:write.label': 'Modifier les voyages et itinéraires',
|
| 21 |
+
'oauth.scope.trips:write.description':
|
| 22 |
+
'Créer et mettre à jour les voyages, jours, notes et gérer les membres',
|
| 23 |
+
'oauth.scope.trips:delete.label': 'Supprimer des voyages',
|
| 24 |
+
'oauth.scope.trips:delete.description':
|
| 25 |
+
'Supprimer définitivement des voyages entiers — cette action est irréversible',
|
| 26 |
+
'oauth.scope.trips:share.label': 'Gérer les liens de partage',
|
| 27 |
+
'oauth.scope.trips:share.description':
|
| 28 |
+
'Créer, modifier et révoquer des liens de partage publics',
|
| 29 |
+
'oauth.scope.places:read.label': 'Voir les lieux et données cartographiques',
|
| 30 |
+
'oauth.scope.places:read.description':
|
| 31 |
+
'Lire les lieux, affectations de jours, étiquettes et catégories',
|
| 32 |
+
'oauth.scope.places:write.label': 'Gérer les lieux',
|
| 33 |
+
'oauth.scope.places:write.description':
|
| 34 |
+
'Créer, modifier et supprimer des lieux, affectations et étiquettes',
|
| 35 |
+
'oauth.scope.atlas:read.label': "Voir l'Atlas",
|
| 36 |
+
'oauth.scope.atlas:read.description':
|
| 37 |
+
'Lire les pays visités, régions et liste de souhaits',
|
| 38 |
+
'oauth.scope.atlas:write.label': "Gérer l'Atlas",
|
| 39 |
+
'oauth.scope.atlas:write.description':
|
| 40 |
+
'Marquer des pays et régions visités, gérer la liste de souhaits',
|
| 41 |
+
'oauth.scope.packing:read.label': 'Voir les listes de bagages',
|
| 42 |
+
'oauth.scope.packing:read.description':
|
| 43 |
+
'Lire les articles, sacs et assignations de catégories',
|
| 44 |
+
'oauth.scope.packing:write.label': 'Gérer les listes de bagages',
|
| 45 |
+
'oauth.scope.packing:write.description':
|
| 46 |
+
'Ajouter, modifier, supprimer, cocher et réordonner les articles et sacs',
|
| 47 |
+
'oauth.scope.todos:read.label': 'Voir les listes de tâches',
|
| 48 |
+
'oauth.scope.todos:read.description':
|
| 49 |
+
'Lire les tâches et assignations de catégories',
|
| 50 |
+
'oauth.scope.todos:write.label': 'Gérer les listes de tâches',
|
| 51 |
+
'oauth.scope.todos:write.description':
|
| 52 |
+
'Créer, modifier, cocher, supprimer et réordonner les tâches',
|
| 53 |
+
'oauth.scope.budget:read.label': 'Voir le budget',
|
| 54 |
+
'oauth.scope.budget:read.description':
|
| 55 |
+
'Lire les dépenses et la répartition du budget',
|
| 56 |
+
'oauth.scope.budget:write.label': 'Gérer le budget',
|
| 57 |
+
'oauth.scope.budget:write.description':
|
| 58 |
+
'Créer, modifier et supprimer des dépenses',
|
| 59 |
+
'oauth.scope.reservations:read.label': 'Voir les réservations',
|
| 60 |
+
'oauth.scope.reservations:read.description':
|
| 61 |
+
"Lire les réservations et détails d'hébergement",
|
| 62 |
+
'oauth.scope.reservations:write.label': 'Gérer les réservations',
|
| 63 |
+
'oauth.scope.reservations:write.description':
|
| 64 |
+
'Créer, modifier, supprimer et réordonner les réservations',
|
| 65 |
+
'oauth.scope.collab:read.label': 'Voir la collaboration',
|
| 66 |
+
'oauth.scope.collab:read.description':
|
| 67 |
+
'Lire les notes, sondages et messages collaboratifs',
|
| 68 |
+
'oauth.scope.collab:write.label': 'Gérer la collaboration',
|
| 69 |
+
'oauth.scope.collab:write.description':
|
| 70 |
+
'Créer, modifier et supprimer des notes, sondages et messages',
|
| 71 |
+
'oauth.scope.notifications:read.label': 'Voir les notifications',
|
| 72 |
+
'oauth.scope.notifications:read.description':
|
| 73 |
+
'Lire les notifications et le nombre de non-lus',
|
| 74 |
+
'oauth.scope.notifications:write.label': 'Gérer les notifications',
|
| 75 |
+
'oauth.scope.notifications:write.description':
|
| 76 |
+
'Marquer les notifications comme lues et y répondre',
|
| 77 |
+
'oauth.scope.vacay:read.label': 'Voir les plans de congés',
|
| 78 |
+
'oauth.scope.vacay:read.description':
|
| 79 |
+
'Lire les données, entrées et statistiques de congés',
|
| 80 |
+
'oauth.scope.vacay:write.label': 'Gérer les plans de congés',
|
| 81 |
+
'oauth.scope.vacay:write.description':
|
| 82 |
+
"Créer et gérer les entrées de congés, jours fériés et plans d'équipe",
|
| 83 |
+
'oauth.scope.geo:read.label': 'Cartes et géocodage',
|
| 84 |
+
'oauth.scope.geo:read.description':
|
| 85 |
+
'Chercher des lieux, résoudre des URL cartographiques et géocoder des coordonnées',
|
| 86 |
+
'oauth.scope.weather:read.label': 'Prévisions météo',
|
| 87 |
+
'oauth.scope.weather:read.description':
|
| 88 |
+
'Obtenir les prévisions météo pour les lieux et dates de voyage',
|
| 89 |
+
'oauth.scope.journey:read.label': 'Voir les journaux de voyage',
|
| 90 |
+
'oauth.scope.journey:read.description':
|
| 91 |
+
'Lire les journaux de voyage, les entrées et la liste des contributeurs',
|
| 92 |
+
'oauth.scope.journey:write.label': 'Gérer les journaux de voyage',
|
| 93 |
+
'oauth.scope.journey:write.description':
|
| 94 |
+
'Créer, modifier et supprimer les journaux de voyage et leurs entrées',
|
| 95 |
+
'oauth.scope.journey:share.label': 'Gérer les liens de journaux de voyage',
|
| 96 |
+
'oauth.scope.journey:share.description':
|
| 97 |
+
'Créer, modifier et révoquer des liens de partage publics pour les journaux de voyage',
|
| 98 |
+
'oauth.authorize.authorizing': 'Authorizing…', // en-fallback
|
| 99 |
+
'oauth.authorize.loading': 'Loading…', // en-fallback
|
| 100 |
+
'oauth.authorize.errorTitle': 'Authorization Error', // en-fallback
|
| 101 |
+
'oauth.authorize.loginTitle': 'Sign in to continue', // en-fallback
|
| 102 |
+
'oauth.authorize.loginDescription':
|
| 103 |
+
'{client} wants access to your TREK account. Please sign in first.', // en-fallback
|
| 104 |
+
'oauth.authorize.loginButton': 'Sign in to TREK', // en-fallback
|
| 105 |
+
'oauth.authorize.requestLabel': 'Authorization Request', // en-fallback
|
| 106 |
+
'oauth.authorize.requestDescription':
|
| 107 |
+
'This application is requesting access to your TREK account.', // en-fallback
|
| 108 |
+
'oauth.authorize.trustNote':
|
| 109 |
+
'Only grant access to applications you trust. Your data stays on your server.', // en-fallback
|
| 110 |
+
'oauth.authorize.selectScope': 'Select at least one scope', // en-fallback
|
| 111 |
+
'oauth.authorize.approveOneScope': 'Approve ({count} scope)', // en-fallback
|
| 112 |
+
'oauth.authorize.approveManyScopes': 'Approve ({count} scopes)', // en-fallback
|
| 113 |
+
'oauth.authorize.approveAccess': 'Approve Access', // en-fallback
|
| 114 |
+
'oauth.authorize.deny': 'Deny', // en-fallback
|
| 115 |
+
'oauth.authorize.choosePermissions': 'Choose which permissions to grant', // en-fallback
|
| 116 |
+
'oauth.authorize.permissionsRequested': 'Permissions requested', // en-fallback
|
| 117 |
+
'oauth.authorize.alwaysIncluded': 'Always included', // en-fallback
|
| 118 |
+
'oauth.authorize.alwaysTool.listTrips':
|
| 119 |
+
'List your trips so the AI can discover trip IDs', // en-fallback
|
| 120 |
+
'oauth.authorize.alwaysTool.getTripSummary':
|
| 121 |
+
'Read a trip overview needed to use any other tool', // en-fallback
|
| 122 |
+
};
|
| 123 |
+
export default oauth;
|
shared/src/i18n/fr/packing.ts
ADDED
|
@@ -0,0 +1,186 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import type { TranslationStrings } from '../types';
|
| 2 |
+
|
| 3 |
+
const packing: TranslationStrings = {
|
| 4 |
+
'packing.title': 'Liste de bagages',
|
| 5 |
+
'packing.empty': 'La liste de bagages est vide',
|
| 6 |
+
'packing.import': 'Importer',
|
| 7 |
+
'packing.importTitle': 'Importer la liste',
|
| 8 |
+
'packing.importHint':
|
| 9 |
+
'Un élément par ligne. Catégorie et quantité optionnelles séparées par virgule, point-virgule ou tabulation : Nom, Catégorie, Quantité',
|
| 10 |
+
'packing.importPlaceholder':
|
| 11 |
+
'Brosse à dents\nCrème solaire, Hygiène\nT-Shirts, Vêtements, 5\nPasseport, Documents',
|
| 12 |
+
'packing.importCsv': 'Charger CSV/TXT',
|
| 13 |
+
'packing.importAction': 'Importer {count}',
|
| 14 |
+
'packing.importSuccess': '{count} éléments importés',
|
| 15 |
+
'packing.importError': "Échec de l'import",
|
| 16 |
+
'packing.importEmpty': 'Aucun élément à importer',
|
| 17 |
+
'packing.progress': '{packed} sur {total} emballés ({percent} %)',
|
| 18 |
+
'packing.clearChecked': 'Supprimer {count} cochés',
|
| 19 |
+
'packing.clearCheckedShort': 'Supprimer {count}',
|
| 20 |
+
'packing.suggestions': 'Suggestions',
|
| 21 |
+
'packing.suggestionsTitle': 'Ajouter des suggestions',
|
| 22 |
+
'packing.allSuggested': 'Toutes les suggestions ajoutées',
|
| 23 |
+
'packing.allPacked': 'Tout est emballé !',
|
| 24 |
+
'packing.addPlaceholder': 'Ajouter un nouvel article…',
|
| 25 |
+
'packing.categoryPlaceholder': 'Catégorie…',
|
| 26 |
+
'packing.filterAll': 'Tous',
|
| 27 |
+
'packing.filterOpen': 'À faire',
|
| 28 |
+
'packing.filterDone': 'Fait',
|
| 29 |
+
'packing.emptyTitle': 'La liste de bagages est vide',
|
| 30 |
+
'packing.emptyHint': 'Ajoutez des articles ou utilisez les suggestions',
|
| 31 |
+
'packing.emptyFiltered': 'Aucun article ne correspond à ce filtre',
|
| 32 |
+
'packing.menuRename': 'Renommer',
|
| 33 |
+
'packing.menuCheckAll': 'Tout cocher',
|
| 34 |
+
'packing.menuUncheckAll': 'Tout décocher',
|
| 35 |
+
'packing.menuDeleteCat': 'Supprimer la catégorie',
|
| 36 |
+
'packing.addItem': 'Ajouter un article',
|
| 37 |
+
'packing.addItemPlaceholder': "Nom de l'article...",
|
| 38 |
+
'packing.addCategory': 'Ajouter une catégorie',
|
| 39 |
+
'packing.newCategoryPlaceholder': 'Nom de catégorie (ex. Vêtements)',
|
| 40 |
+
'packing.applyTemplate': 'Appliquer un modèle',
|
| 41 |
+
'packing.template': 'Modèle',
|
| 42 |
+
'packing.templateApplied': '{count} articles ajoutés depuis le modèle',
|
| 43 |
+
'packing.templateError': "Erreur lors de l'application du modèle",
|
| 44 |
+
'packing.saveAsTemplate': 'Enregistrer comme modèle',
|
| 45 |
+
'packing.templateName': 'Nom du modèle',
|
| 46 |
+
'packing.templateSaved': 'Liste de voyage enregistrée comme modèle',
|
| 47 |
+
'packing.noMembers': 'Aucun membre',
|
| 48 |
+
'packing.bags': 'Bagages',
|
| 49 |
+
'packing.noBag': 'Non assigné',
|
| 50 |
+
'packing.totalWeight': 'Poids total',
|
| 51 |
+
'packing.bagName': 'Nom...',
|
| 52 |
+
'packing.addBag': 'Ajouter un bagage',
|
| 53 |
+
'packing.changeCategory': 'Changer de catégorie',
|
| 54 |
+
'packing.confirm.clearChecked':
|
| 55 |
+
'Voulez-vous vraiment supprimer {count} articles cochés ?',
|
| 56 |
+
'packing.confirm.deleteCat':
|
| 57 |
+
'Voulez-vous vraiment supprimer la catégorie « {name} » avec {count} articles ?',
|
| 58 |
+
'packing.defaultCategory': 'Autre',
|
| 59 |
+
'packing.toast.saveError': "Échec de l'enregistrement",
|
| 60 |
+
'packing.toast.deleteError': 'Échec de la suppression',
|
| 61 |
+
'packing.toast.renameError': 'Échec du renommage',
|
| 62 |
+
'packing.toast.addError': "Échec de l'ajout",
|
| 63 |
+
'packing.suggestions.items': [
|
| 64 |
+
{
|
| 65 |
+
name: 'Passeport',
|
| 66 |
+
category: 'Documents',
|
| 67 |
+
},
|
| 68 |
+
{
|
| 69 |
+
name: "Carte d'identité",
|
| 70 |
+
category: 'Documents',
|
| 71 |
+
},
|
| 72 |
+
{
|
| 73 |
+
name: 'Assurance voyage',
|
| 74 |
+
category: 'Documents',
|
| 75 |
+
},
|
| 76 |
+
{
|
| 77 |
+
name: "Billets d'avion",
|
| 78 |
+
category: 'Documents',
|
| 79 |
+
},
|
| 80 |
+
{
|
| 81 |
+
name: 'Carte bancaire',
|
| 82 |
+
category: 'Finances',
|
| 83 |
+
},
|
| 84 |
+
{
|
| 85 |
+
name: 'Espèces',
|
| 86 |
+
category: 'Finances',
|
| 87 |
+
},
|
| 88 |
+
{
|
| 89 |
+
name: 'Visa',
|
| 90 |
+
category: 'Documents',
|
| 91 |
+
},
|
| 92 |
+
{
|
| 93 |
+
name: 'T-shirts',
|
| 94 |
+
category: 'Vêtements',
|
| 95 |
+
},
|
| 96 |
+
{
|
| 97 |
+
name: 'Pantalons',
|
| 98 |
+
category: 'Vêtements',
|
| 99 |
+
},
|
| 100 |
+
{
|
| 101 |
+
name: 'Sous-vêtements',
|
| 102 |
+
category: 'Vêtements',
|
| 103 |
+
},
|
| 104 |
+
{
|
| 105 |
+
name: 'Chaussettes',
|
| 106 |
+
category: 'Vêtements',
|
| 107 |
+
},
|
| 108 |
+
{
|
| 109 |
+
name: 'Veste',
|
| 110 |
+
category: 'Vêtements',
|
| 111 |
+
},
|
| 112 |
+
{
|
| 113 |
+
name: 'Pyjama',
|
| 114 |
+
category: 'Vêtements',
|
| 115 |
+
},
|
| 116 |
+
{
|
| 117 |
+
name: 'Maillot de bain',
|
| 118 |
+
category: 'Vêtements',
|
| 119 |
+
},
|
| 120 |
+
{
|
| 121 |
+
name: 'Imperméable',
|
| 122 |
+
category: 'Vêtements',
|
| 123 |
+
},
|
| 124 |
+
{
|
| 125 |
+
name: 'Chaussures confortables',
|
| 126 |
+
category: 'Vêtements',
|
| 127 |
+
},
|
| 128 |
+
{
|
| 129 |
+
name: 'Brosse à dents',
|
| 130 |
+
category: 'Hygiène',
|
| 131 |
+
},
|
| 132 |
+
{
|
| 133 |
+
name: 'Dentifrice',
|
| 134 |
+
category: 'Hygiène',
|
| 135 |
+
},
|
| 136 |
+
{
|
| 137 |
+
name: 'Shampooing',
|
| 138 |
+
category: 'Hygiène',
|
| 139 |
+
},
|
| 140 |
+
{
|
| 141 |
+
name: 'Déodorant',
|
| 142 |
+
category: 'Hygiène',
|
| 143 |
+
},
|
| 144 |
+
{
|
| 145 |
+
name: 'Crème solaire',
|
| 146 |
+
category: 'Hygiène',
|
| 147 |
+
},
|
| 148 |
+
{
|
| 149 |
+
name: 'Rasoir',
|
| 150 |
+
category: 'Hygiène',
|
| 151 |
+
},
|
| 152 |
+
{
|
| 153 |
+
name: 'Chargeur',
|
| 154 |
+
category: 'Électronique',
|
| 155 |
+
},
|
| 156 |
+
{
|
| 157 |
+
name: 'Batterie externe',
|
| 158 |
+
category: 'Électronique',
|
| 159 |
+
},
|
| 160 |
+
{
|
| 161 |
+
name: 'Écouteurs',
|
| 162 |
+
category: 'Électronique',
|
| 163 |
+
},
|
| 164 |
+
{
|
| 165 |
+
name: 'Adaptateur de voyage',
|
| 166 |
+
category: 'Électronique',
|
| 167 |
+
},
|
| 168 |
+
{
|
| 169 |
+
name: 'Appareil photo',
|
| 170 |
+
category: 'Électronique',
|
| 171 |
+
},
|
| 172 |
+
{
|
| 173 |
+
name: 'Antidouleurs',
|
| 174 |
+
category: 'Santé',
|
| 175 |
+
},
|
| 176 |
+
{
|
| 177 |
+
name: 'Pansements',
|
| 178 |
+
category: 'Santé',
|
| 179 |
+
},
|
| 180 |
+
{
|
| 181 |
+
name: 'Désinfectant',
|
| 182 |
+
category: 'Santé',
|
| 183 |
+
},
|
| 184 |
+
],
|
| 185 |
+
};
|
| 186 |
+
export default packing;
|
shared/src/i18n/fr/pdf.ts
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import type { TranslationStrings } from '../types';
|
| 2 |
+
|
| 3 |
+
const pdf: TranslationStrings = {
|
| 4 |
+
'pdf.travelPlan': 'Plan de voyage',
|
| 5 |
+
'pdf.planned': 'Planifié',
|
| 6 |
+
'pdf.costLabel': 'Coût EUR',
|
| 7 |
+
'pdf.preview': 'Aperçu PDF',
|
| 8 |
+
'pdf.saveAsPdf': 'Enregistrer en PDF',
|
| 9 |
+
};
|
| 10 |
+
export default pdf;
|
shared/src/i18n/fr/perm.ts
ADDED
|
@@ -0,0 +1,65 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import type { TranslationStrings } from '../types';
|
| 2 |
+
|
| 3 |
+
const perm: TranslationStrings = {
|
| 4 |
+
'perm.title': 'Paramètres des permissions',
|
| 5 |
+
'perm.subtitle':
|
| 6 |
+
"Contrôlez qui peut effectuer des actions dans l'application",
|
| 7 |
+
'perm.saved': 'Paramètres des permissions enregistrés',
|
| 8 |
+
'perm.resetDefaults': 'Réinitialiser par défaut',
|
| 9 |
+
'perm.customized': 'personnalisé',
|
| 10 |
+
'perm.level.admin': 'Administrateur uniquement',
|
| 11 |
+
'perm.level.tripOwner': 'Propriétaire du voyage',
|
| 12 |
+
'perm.level.tripMember': 'Membres du voyage',
|
| 13 |
+
'perm.level.everybody': 'Tout le monde',
|
| 14 |
+
'perm.cat.trip': 'Gestion des voyages',
|
| 15 |
+
'perm.cat.members': 'Gestion des membres',
|
| 16 |
+
'perm.cat.files': 'Fichiers',
|
| 17 |
+
'perm.cat.content': 'Contenu et planning',
|
| 18 |
+
'perm.cat.extras': 'Budget, bagages et collaboration',
|
| 19 |
+
'perm.action.trip_create': 'Créer des voyages',
|
| 20 |
+
'perm.action.trip_edit': 'Modifier les détails du voyage',
|
| 21 |
+
'perm.action.trip_delete': 'Supprimer des voyages',
|
| 22 |
+
'perm.action.trip_archive': 'Archiver / désarchiver des voyages',
|
| 23 |
+
'perm.action.trip_cover_upload': "Télécharger l'image de couverture",
|
| 24 |
+
'perm.action.member_manage': 'Ajouter / supprimer des membres',
|
| 25 |
+
'perm.action.file_upload': 'Télécharger des fichiers',
|
| 26 |
+
'perm.action.file_edit': 'Modifier les métadonnées des fichiers',
|
| 27 |
+
'perm.action.file_delete': 'Supprimer des fichiers',
|
| 28 |
+
'perm.action.place_edit': 'Ajouter / modifier / supprimer des lieux',
|
| 29 |
+
'perm.action.day_edit': 'Modifier les jours, notes et affectations',
|
| 30 |
+
'perm.action.reservation_edit': 'Gérer les réservations',
|
| 31 |
+
'perm.action.budget_edit': 'Gérer le budget',
|
| 32 |
+
'perm.action.packing_edit': 'Gérer les listes de bagages',
|
| 33 |
+
'perm.action.collab_edit': 'Collaboration (notes, sondages, chat)',
|
| 34 |
+
'perm.action.share_manage': 'Gérer les liens de partage',
|
| 35 |
+
'perm.actionHint.trip_create': 'Qui peut créer de nouveaux voyages',
|
| 36 |
+
'perm.actionHint.trip_edit':
|
| 37 |
+
'Qui peut modifier le nom, les dates, la description et la devise du voyage',
|
| 38 |
+
'perm.actionHint.trip_delete': 'Qui peut supprimer définitivement un voyage',
|
| 39 |
+
'perm.actionHint.trip_archive': 'Qui peut archiver ou désarchiver un voyage',
|
| 40 |
+
'perm.actionHint.trip_cover_upload':
|
| 41 |
+
"Qui peut télécharger ou modifier l'image de couverture",
|
| 42 |
+
'perm.actionHint.member_manage':
|
| 43 |
+
'Qui peut inviter ou supprimer des membres du voyage',
|
| 44 |
+
'perm.actionHint.file_upload':
|
| 45 |
+
'Qui peut télécharger des fichiers vers un voyage',
|
| 46 |
+
'perm.actionHint.file_edit':
|
| 47 |
+
'Qui peut modifier les descriptions et liens des fichiers',
|
| 48 |
+
'perm.actionHint.file_delete':
|
| 49 |
+
'Qui peut déplacer des fichiers vers la corbeille ou les supprimer définitivement',
|
| 50 |
+
'perm.actionHint.place_edit':
|
| 51 |
+
'Qui peut ajouter, modifier ou supprimer des lieux',
|
| 52 |
+
'perm.actionHint.day_edit':
|
| 53 |
+
'Qui peut modifier les jours, notes de jours et affectations de lieux',
|
| 54 |
+
'perm.actionHint.reservation_edit':
|
| 55 |
+
'Qui peut créer, modifier ou supprimer des réservations',
|
| 56 |
+
'perm.actionHint.budget_edit':
|
| 57 |
+
'Qui peut créer, modifier ou supprimer des éléments de budget',
|
| 58 |
+
'perm.actionHint.packing_edit':
|
| 59 |
+
'Qui peut gérer les articles de bagages et les sacs',
|
| 60 |
+
'perm.actionHint.collab_edit':
|
| 61 |
+
'Qui peut créer des notes, des sondages et envoyer des messages',
|
| 62 |
+
'perm.actionHint.share_manage':
|
| 63 |
+
'Qui peut créer ou supprimer des liens de partage publics',
|
| 64 |
+
};
|
| 65 |
+
export default perm;
|
shared/src/i18n/fr/photos.ts
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import type { TranslationStrings } from '../types';
|
| 2 |
+
|
| 3 |
+
const photos: TranslationStrings = {
|
| 4 |
+
'photos.title': 'Photos',
|
| 5 |
+
'photos.subtitle': '{count} photos pour {trip}',
|
| 6 |
+
'photos.dropHere': 'Déposez des photos ici...',
|
| 7 |
+
'photos.dropHereActive': 'Déposez des photos ici',
|
| 8 |
+
'photos.captionForAll': 'Légende (pour tous)',
|
| 9 |
+
'photos.captionPlaceholder': 'Légende optionnelle...',
|
| 10 |
+
'photos.addCaption': 'Ajouter une légende...',
|
| 11 |
+
'photos.allDays': 'Tous les jours',
|
| 12 |
+
'photos.noPhotos': 'Aucune photo',
|
| 13 |
+
'photos.uploadHint': 'Importez vos photos de voyage',
|
| 14 |
+
'photos.clickToSelect': 'ou cliquez pour sélectionner',
|
| 15 |
+
'photos.linkPlace': 'Lier au lieu',
|
| 16 |
+
'photos.noPlace': 'Aucun lieu',
|
| 17 |
+
'photos.uploadN': '{n} photo(s) importée(s)',
|
| 18 |
+
'photos.linkDay': 'Lier le jour',
|
| 19 |
+
'photos.noDay': 'Aucun jour',
|
| 20 |
+
'photos.dayLabel': 'Jour {number}',
|
| 21 |
+
'photos.photoSelected': 'Photo sélectionnée',
|
| 22 |
+
'photos.photosSelected': 'Photos sélectionnées',
|
| 23 |
+
'photos.fileTypeHint': "JPG, PNG, WebP · max. 10 Mo · jusqu'à 30 photos",
|
| 24 |
+
};
|
| 25 |
+
export default photos;
|
shared/src/i18n/fr/places.ts
ADDED
|
@@ -0,0 +1,98 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import type { TranslationStrings } from '../types';
|
| 2 |
+
|
| 3 |
+
const places: TranslationStrings = {
|
| 4 |
+
'places.addPlace': 'Ajouter un lieu/activité',
|
| 5 |
+
'places.importFile': 'Importer un fichier',
|
| 6 |
+
'places.sidebarDrop': 'Déposer pour importer',
|
| 7 |
+
'places.importFileHint':
|
| 8 |
+
'Importez des fichiers .gpx, .kml ou .kmz depuis des outils comme Google My Maps, Google Earth ou un traceur GPS.',
|
| 9 |
+
'places.importFileDropHere':
|
| 10 |
+
'Cliquez pour sélectionner un fichier ou glissez-déposez ici',
|
| 11 |
+
'places.importFileDropActive': 'Déposez le fichier pour le sélectionner',
|
| 12 |
+
'places.importFileUnsupported':
|
| 13 |
+
'Type de fichier non pris en charge. Utilisez .gpx, .kml ou .kmz.',
|
| 14 |
+
'places.importFileTooLarge':
|
| 15 |
+
'Le fichier est trop volumineux. La taille maximale est de {maxMb} MB.',
|
| 16 |
+
'places.importFileError': 'Importation échouée',
|
| 17 |
+
'places.importAllSkipped': 'Tous les lieux étaient déjà dans le voyage.',
|
| 18 |
+
'places.gpxImported': '{count} lieux importés depuis GPX',
|
| 19 |
+
'places.gpxImportTypes': 'Que voulez-vous importer?',
|
| 20 |
+
'places.gpxImportWaypoints': 'Points de passage',
|
| 21 |
+
'places.gpxImportRoutes': 'Itinéraires',
|
| 22 |
+
'places.gpxImportTracks': 'Traces (avec géométrie)',
|
| 23 |
+
'places.gpxImportNoneSelected': 'Sélectionnez au moins un type à importer.',
|
| 24 |
+
'places.kmlImportTypes': 'Que souhaitez-vous importer ?',
|
| 25 |
+
'places.kmlImportPoints': 'Points (Placemarks)',
|
| 26 |
+
'places.kmlImportPaths': 'Chemins (LineStrings)',
|
| 27 |
+
'places.kmlImportNoneSelected': 'Sélectionnez au moins un type.',
|
| 28 |
+
'places.selectionCount': '{count} sélectionné(s)',
|
| 29 |
+
'places.deleteSelected': 'Supprimer la sélection',
|
| 30 |
+
'places.kmlKmzImported': '{count} lieux importés depuis KMZ/KML',
|
| 31 |
+
'places.urlResolved': "Lieu importé depuis l'URL",
|
| 32 |
+
'places.importList': 'Import de liste',
|
| 33 |
+
'places.kmlKmzSummaryValues':
|
| 34 |
+
'Placemarks : {total} • Importés : {created} • Ignorés : {skipped}',
|
| 35 |
+
'places.importGoogleList': 'Liste Google',
|
| 36 |
+
'places.importNaverList': 'Liste Naver',
|
| 37 |
+
'places.googleListHint':
|
| 38 |
+
'Collez un lien de liste Google Maps partagée pour importer tous les lieux.',
|
| 39 |
+
'places.googleListImported': '{count} lieux importés depuis "{list}"',
|
| 40 |
+
'places.googleListError': "Impossible d'importer la liste Google Maps",
|
| 41 |
+
'places.naverListHint':
|
| 42 |
+
'Collez un lien de liste Naver Maps partagée pour importer tous les lieux.',
|
| 43 |
+
'places.naverListImported': '{count} lieux importés depuis "{list}"',
|
| 44 |
+
'places.naverListError': "Impossible d'importer la liste Naver Maps",
|
| 45 |
+
'places.viewDetails': 'Voir les détails',
|
| 46 |
+
'places.assignToDay': 'Ajouter à quel jour ?',
|
| 47 |
+
'places.all': 'Tous',
|
| 48 |
+
'places.unplanned': 'Non planifiés',
|
| 49 |
+
'places.filterTracks': 'Traces',
|
| 50 |
+
'places.search': 'Rechercher des lieux…',
|
| 51 |
+
'places.allCategories': 'Toutes les catégories',
|
| 52 |
+
'places.categoriesSelected': 'catégories',
|
| 53 |
+
'places.clearFilter': 'Effacer le filtre',
|
| 54 |
+
'places.count': '{count} lieux',
|
| 55 |
+
'places.countSingular': '1 lieu',
|
| 56 |
+
'places.allPlanned': 'Tous les lieux sont planifiés',
|
| 57 |
+
'places.noneFound': 'Aucun lieu trouvé',
|
| 58 |
+
'places.editPlace': 'Modifier le lieu',
|
| 59 |
+
'places.formName': 'Nom',
|
| 60 |
+
'places.formNamePlaceholder': 'ex. Tour Eiffel',
|
| 61 |
+
'places.formDescription': 'Description',
|
| 62 |
+
'places.formDescriptionPlaceholder': 'Brève description…',
|
| 63 |
+
'places.formAddress': 'Adresse',
|
| 64 |
+
'places.formAddressPlaceholder': 'Rue, ville, pays',
|
| 65 |
+
'places.formLat': 'Latitude (ex. 48.8566)',
|
| 66 |
+
'places.formLng': 'Longitude (ex. 2.3522)',
|
| 67 |
+
'places.formCategory': 'Catégorie',
|
| 68 |
+
'places.noCategory': 'Sans catégorie',
|
| 69 |
+
'places.categoryNamePlaceholder': 'Nom de la catégorie',
|
| 70 |
+
'places.formTime': 'Heure',
|
| 71 |
+
'places.startTime': 'Début',
|
| 72 |
+
'places.endTime': 'Fin',
|
| 73 |
+
'places.endTimeBeforeStart':
|
| 74 |
+
"L'heure de fin est antérieure à l'heure de début",
|
| 75 |
+
'places.timeCollision': 'Chevauchement horaire avec :',
|
| 76 |
+
'places.formWebsite': 'Site web',
|
| 77 |
+
'places.formNotes': 'Notes',
|
| 78 |
+
'places.formNotesPlaceholder': 'Notes personnelles…',
|
| 79 |
+
'places.formReservation': 'Réservation',
|
| 80 |
+
'places.reservationNotesPlaceholder':
|
| 81 |
+
'Notes de réservation, numéro de confirmation…',
|
| 82 |
+
'places.mapsSearchPlaceholder': 'Rechercher des lieux…',
|
| 83 |
+
'places.mapsSearchError': 'La recherche de lieu a échoué.',
|
| 84 |
+
'places.loadingDetails': 'Chargement des détails du lieu…',
|
| 85 |
+
'places.osmHint':
|
| 86 |
+
'Recherche via OpenStreetMap (pas de photos, horaires ni notes). Ajoutez une clé API Google dans les paramètres pour plus de détails.',
|
| 87 |
+
'places.osmActive':
|
| 88 |
+
'Recherche via OpenStreetMap (pas de photos, notes ni horaires). Ajoutez une clé API Google dans les paramètres pour des données enrichies.',
|
| 89 |
+
'places.categoryCreateError': 'Impossible de créer la catégorie',
|
| 90 |
+
'places.nameRequired': 'Veuillez saisir un nom',
|
| 91 |
+
'places.saveError': "Échec de l'enregistrement",
|
| 92 |
+
'places.duplicateExists': "'{name}' est déjà dans ce voyage.",
|
| 93 |
+
'places.addAnyway': 'Ajouter quand même',
|
| 94 |
+
'places.enrichOnImport': 'Enrichir les lieux via Google',
|
| 95 |
+
'places.enrichOnImportHint':
|
| 96 |
+
'Recherche chaque lieu importé pour ajouter photos, adresse et coordonnées. Utilise votre clé Google Maps.',
|
| 97 |
+
};
|
| 98 |
+
export default places;
|
shared/src/i18n/fr/planner.ts
ADDED
|
@@ -0,0 +1,69 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import type { TranslationStrings } from '../types';
|
| 2 |
+
|
| 3 |
+
const planner: TranslationStrings = {
|
| 4 |
+
'planner.places': 'Lieux',
|
| 5 |
+
'planner.bookings': 'Réservations',
|
| 6 |
+
'planner.packingList': 'Liste de bagages',
|
| 7 |
+
'planner.documents': 'Documents',
|
| 8 |
+
'planner.dayPlan': 'Plan du jour',
|
| 9 |
+
'planner.reservations': 'Réservations',
|
| 10 |
+
'planner.minTwoPlaces': 'Au moins 2 lieux avec coordonnées nécessaires',
|
| 11 |
+
'planner.noGeoPlaces': 'Aucun lieu avec coordonnées disponible',
|
| 12 |
+
'planner.routeCalculated': 'Itinéraire calculé',
|
| 13 |
+
'planner.routeCalcFailed': "L'itinéraire n'a pas pu être calculé",
|
| 14 |
+
'planner.routeError': "Erreur lors du calcul de l'itinéraire",
|
| 15 |
+
'planner.icsExportFailed': "Échec de l'export ICS",
|
| 16 |
+
'planner.routeOptimized': 'Itinéraire optimisé',
|
| 17 |
+
'planner.reservationUpdated': 'Réservation mise à jour',
|
| 18 |
+
'planner.reservationAdded': 'Réservation ajoutée',
|
| 19 |
+
'planner.confirmDeleteReservation': 'Supprimer la réservation ?',
|
| 20 |
+
'planner.reservationDeleted': 'Réservation supprimée',
|
| 21 |
+
'planner.days': 'Jours',
|
| 22 |
+
'planner.allPlaces': 'Tous les lieux',
|
| 23 |
+
'planner.totalPlaces': '{n} lieux au total',
|
| 24 |
+
'planner.noDaysPlanned': 'Aucun jour planifié',
|
| 25 |
+
'planner.editTrip': 'Modifier le voyage →',
|
| 26 |
+
'planner.placeOne': '1 lieu',
|
| 27 |
+
'planner.placeN': '{n} lieux',
|
| 28 |
+
'planner.addNote': 'Ajouter une note',
|
| 29 |
+
'planner.noEntries': 'Aucune entrée pour ce jour',
|
| 30 |
+
'planner.addPlace': 'Ajouter un lieu ou une activité',
|
| 31 |
+
'planner.addPlaceShort': '+ Ajouter un lieu ou une activité',
|
| 32 |
+
'planner.resPending': 'Réservation en attente · ',
|
| 33 |
+
'planner.resConfirmed': 'Réservation confirmée · ',
|
| 34 |
+
'planner.notePlaceholder': 'Note…',
|
| 35 |
+
'planner.noteTimePlaceholder': 'Heure (facultatif)',
|
| 36 |
+
'planner.noteExamplePlaceholder':
|
| 37 |
+
'ex. S3 à 14h30 depuis la gare centrale, ferry depuis le quai 7, pause déjeuner…',
|
| 38 |
+
'planner.totalCost': 'Coût total',
|
| 39 |
+
'planner.searchPlaces': 'Rechercher des lieux…',
|
| 40 |
+
'planner.allCategories': 'Toutes les catégories',
|
| 41 |
+
'planner.noPlacesFound': 'Aucun lieu trouvé',
|
| 42 |
+
'planner.addFirstPlace': 'Ajouter un premier lieu',
|
| 43 |
+
'planner.noReservations': 'Aucune réservation',
|
| 44 |
+
'planner.addFirstReservation': 'Ajouter une première réservation',
|
| 45 |
+
'planner.new': 'Nouveau',
|
| 46 |
+
'planner.addToDay': '+ Jour',
|
| 47 |
+
'planner.calculating': 'Calcul…',
|
| 48 |
+
'planner.route': 'Itinéraire',
|
| 49 |
+
'planner.optimize': 'Optimiser',
|
| 50 |
+
'planner.openGoogleMaps': 'Ouvrir dans Google Maps',
|
| 51 |
+
'planner.selectDayHint':
|
| 52 |
+
'Sélectionnez un jour dans la liste de gauche pour voir le plan du jour',
|
| 53 |
+
'planner.noPlacesForDay': 'Aucun lieu pour ce jour',
|
| 54 |
+
'planner.addPlacesLink': 'Ajouter des lieux →',
|
| 55 |
+
'planner.minTotal': 'min. total',
|
| 56 |
+
'planner.noReservation': 'Pas de réservation',
|
| 57 |
+
'planner.removeFromDay': 'Retirer du jour',
|
| 58 |
+
'planner.addToThisDay': 'Ajouter au jour',
|
| 59 |
+
'planner.overview': 'Aperçu',
|
| 60 |
+
'planner.noDays': 'Aucun jour',
|
| 61 |
+
'planner.editTripToAddDays': 'Modifiez le voyage pour ajouter des jours',
|
| 62 |
+
'planner.dayCount': '{n} jours',
|
| 63 |
+
'planner.clickToUnlock': 'Cliquez pour déverrouiller',
|
| 64 |
+
'planner.keepPosition':
|
| 65 |
+
"Maintenir la position lors de l'optimisation de l'itinéraire",
|
| 66 |
+
'planner.dayDetails': 'Détails du jour',
|
| 67 |
+
'planner.dayN': 'Jour {n}',
|
| 68 |
+
};
|
| 69 |
+
export default planner;
|
shared/src/i18n/fr/register.ts
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import type { TranslationStrings } from '../types';
|
| 2 |
+
|
| 3 |
+
const register: TranslationStrings = {
|
| 4 |
+
'register.passwordMismatch': 'Les mots de passe ne correspondent pas',
|
| 5 |
+
'register.passwordTooShort':
|
| 6 |
+
'Le mot de passe doit comporter au moins 8 caractères',
|
| 7 |
+
'register.failed': "Échec de l'inscription",
|
| 8 |
+
'register.getStarted': 'Commencer',
|
| 9 |
+
'register.subtitle':
|
| 10 |
+
'Créez un compte et commencez à planifier vos voyages de rêve.',
|
| 11 |
+
'register.feature1': 'Plans de voyage illimités',
|
| 12 |
+
'register.feature2': 'Vue carte interactive',
|
| 13 |
+
'register.feature3': 'Gérez les lieux et catégories',
|
| 14 |
+
'register.feature4': 'Suivez les réservations',
|
| 15 |
+
'register.feature5': 'Créez des listes de bagages',
|
| 16 |
+
'register.feature6': 'Stockez photos et fichiers',
|
| 17 |
+
'register.createAccount': 'Créer un compte',
|
| 18 |
+
'register.startPlanning': 'Commencez à planifier vos voyages',
|
| 19 |
+
'register.minChars': 'Min. 6 caractères',
|
| 20 |
+
'register.confirmPassword': 'Confirmer le mot de passe',
|
| 21 |
+
'register.repeatPassword': 'Répéter le mot de passe',
|
| 22 |
+
'register.registering': 'Inscription en cours…',
|
| 23 |
+
'register.register': "S'inscrire",
|
| 24 |
+
'register.hasAccount': 'Vous avez déjà un compte ?',
|
| 25 |
+
'register.signIn': 'Se connecter',
|
| 26 |
+
};
|
| 27 |
+
export default register;
|
shared/src/i18n/fr/reservations.ts
ADDED
|
@@ -0,0 +1,163 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import type { TranslationStrings } from '../types';
|
| 2 |
+
|
| 3 |
+
const reservations: TranslationStrings = {
|
| 4 |
+
'reservations.title': 'Réservations',
|
| 5 |
+
'reservations.empty': 'Aucune réservation',
|
| 6 |
+
'reservations.emptyHint':
|
| 7 |
+
'Ajoutez des réservations pour les vols, hôtels et plus',
|
| 8 |
+
'reservations.add': 'Ajouter une réservation',
|
| 9 |
+
'reservations.addManual': 'Réservation manuelle',
|
| 10 |
+
'reservations.placeHint':
|
| 11 |
+
'Conseil : les réservations sont mieux créées directement depuis un lieu pour les lier à votre plan du jour.',
|
| 12 |
+
'reservations.confirmed': 'Confirmée',
|
| 13 |
+
'reservations.pending': 'En attente',
|
| 14 |
+
'reservations.summary': '{confirmed} confirmées, {pending} en attente',
|
| 15 |
+
'reservations.fromPlan': 'Du plan',
|
| 16 |
+
'reservations.showFiles': 'Afficher les fichiers',
|
| 17 |
+
'reservations.editTitle': 'Modifier la réservation',
|
| 18 |
+
'reservations.status': 'Statut',
|
| 19 |
+
'reservations.datetime': 'Date et heure',
|
| 20 |
+
'reservations.startTime': 'Heure de début',
|
| 21 |
+
'reservations.endTime': 'Heure de fin',
|
| 22 |
+
'reservations.date': 'Date',
|
| 23 |
+
'reservations.time': 'Heure',
|
| 24 |
+
'reservations.timeAlt': 'Heure (alternative, ex. 19h30)',
|
| 25 |
+
'reservations.notes': 'Notes',
|
| 26 |
+
'reservations.notesPlaceholder': 'Notes supplémentaires…',
|
| 27 |
+
'reservations.meta.airline': 'Compagnie aérienne',
|
| 28 |
+
'reservations.meta.flightNumber': 'N° de vol',
|
| 29 |
+
'reservations.meta.from': 'De',
|
| 30 |
+
'reservations.meta.to': 'À',
|
| 31 |
+
'reservations.layover.route': 'Itinéraire',
|
| 32 |
+
'reservations.layover.stop': 'Escale',
|
| 33 |
+
'reservations.layover.addStop': 'Ajouter une escale',
|
| 34 |
+
'reservations.layover.connection': 'Correspondance',
|
| 35 |
+
'reservations.layover.layover': 'Escale',
|
| 36 |
+
'reservations.needsReview': 'Vérifier',
|
| 37 |
+
'reservations.needsReviewHint':
|
| 38 |
+
"L'aéroport n'a pas pu être identifié automatiquement — veuillez confirmer l'emplacement.",
|
| 39 |
+
'reservations.searchLocation': 'Rechercher une gare, un port, une adresse…',
|
| 40 |
+
'reservations.meta.trainNumber': 'N° de train',
|
| 41 |
+
'reservations.meta.platform': 'Quai',
|
| 42 |
+
'reservations.meta.seat': 'Place',
|
| 43 |
+
'reservations.meta.checkIn': 'Arrivée',
|
| 44 |
+
'reservations.meta.checkInUntil': "Check-in jusqu'à",
|
| 45 |
+
'reservations.meta.checkOut': 'Départ',
|
| 46 |
+
'reservations.meta.linkAccommodation': 'Hébergement',
|
| 47 |
+
'reservations.meta.pickAccommodation': 'Lier à un hébergement',
|
| 48 |
+
'reservations.meta.noAccommodation': 'Aucun',
|
| 49 |
+
'reservations.meta.hotelPlace': 'Hébergement',
|
| 50 |
+
'reservations.meta.pickHotel': 'Sélectionner un hébergement',
|
| 51 |
+
'reservations.meta.fromDay': 'Du',
|
| 52 |
+
'reservations.meta.toDay': 'Au',
|
| 53 |
+
'reservations.meta.selectDay': 'Sélectionner un jour',
|
| 54 |
+
'reservations.type.flight': 'Vol',
|
| 55 |
+
'reservations.type.hotel': 'Hébergement',
|
| 56 |
+
'reservations.type.restaurant': 'Restaurant',
|
| 57 |
+
'reservations.type.train': 'Train',
|
| 58 |
+
'reservations.type.car': 'Voiture',
|
| 59 |
+
'reservations.type.cruise': 'Croisière',
|
| 60 |
+
'reservations.type.event': 'Événement',
|
| 61 |
+
'reservations.type.tour': 'Visite',
|
| 62 |
+
'reservations.type.other': 'Autre',
|
| 63 |
+
'reservations.type.bus': 'Bus',
|
| 64 |
+
'reservations.type.ferry': 'Ferry',
|
| 65 |
+
'reservations.type.bicycle': 'Vélo',
|
| 66 |
+
'reservations.type.taxi': 'Taxi',
|
| 67 |
+
'reservations.type.transport_other': 'Autre',
|
| 68 |
+
'reservations.confirm.delete':
|
| 69 |
+
'Voulez-vous vraiment supprimer la réservation « {name} » ?',
|
| 70 |
+
'reservations.confirm.deleteTitle': 'Supprimer la réservation ?',
|
| 71 |
+
'reservations.confirm.deleteBody': '« {name} » sera définitivement supprimé.',
|
| 72 |
+
'reservations.toast.updated': 'Réservation mise à jour',
|
| 73 |
+
'reservations.toast.removed': 'Réservation supprimée',
|
| 74 |
+
'reservations.toast.fileUploaded': 'Fichier importé',
|
| 75 |
+
'reservations.toast.uploadError': "Échec de l'import",
|
| 76 |
+
'reservations.newTitle': 'Nouvelle réservation',
|
| 77 |
+
'reservations.bookingType': 'Type de réservation',
|
| 78 |
+
'reservations.titleLabel': 'Titre',
|
| 79 |
+
'reservations.titlePlaceholder': 'ex. Lufthansa LH123, Hôtel Adlon, …',
|
| 80 |
+
'reservations.locationAddress': 'Lieu / Adresse',
|
| 81 |
+
'reservations.locationPlaceholder': 'Adresse, aéroport, hôtel…',
|
| 82 |
+
'reservations.confirmationCode': 'Code de réservation',
|
| 83 |
+
'reservations.confirmationPlaceholder': 'ex. ABC12345',
|
| 84 |
+
'reservations.day': 'Jour',
|
| 85 |
+
'reservations.noDay': 'Aucun jour',
|
| 86 |
+
'reservations.place': 'Lieu',
|
| 87 |
+
'reservations.noPlace': 'Aucun lieu',
|
| 88 |
+
'reservations.pendingSave': 'sera enregistré…',
|
| 89 |
+
'reservations.uploading': 'Importation…',
|
| 90 |
+
'reservations.attachFile': 'Joindre un fichier',
|
| 91 |
+
'reservations.linkExisting': 'Lier un fichier existant',
|
| 92 |
+
'reservations.toast.saveError': "Échec de l'enregistrement",
|
| 93 |
+
'reservations.toast.updateError': 'Échec de la mise à jour',
|
| 94 |
+
'reservations.toast.deleteError': 'Échec de la suppression',
|
| 95 |
+
'reservations.confirm.remove': 'Supprimer la réservation pour « {name} » ?',
|
| 96 |
+
'reservations.linkAssignment': "Lier à l'affectation du jour",
|
| 97 |
+
'reservations.pickAssignment': 'Sélectionnez une affectation de votre plan…',
|
| 98 |
+
'reservations.noAssignment': 'Aucun lien (autonome)',
|
| 99 |
+
'reservations.price': 'Prix',
|
| 100 |
+
'reservations.budgetCategory': 'Catégorie budgétaire',
|
| 101 |
+
'reservations.budgetCategoryPlaceholder': 'ex. Transport, Hébergement',
|
| 102 |
+
'reservations.budgetCategoryAuto': 'Auto (selon le type de réservation)',
|
| 103 |
+
'reservations.budgetHint':
|
| 104 |
+
"Une entrée budgétaire sera créée automatiquement lors de l'enregistrement.",
|
| 105 |
+
'reservations.departureDate': 'Départ',
|
| 106 |
+
'reservations.arrivalDate': 'Arrivée',
|
| 107 |
+
'reservations.departureTime': 'Heure dép.',
|
| 108 |
+
'reservations.arrivalTime': 'Heure arr.',
|
| 109 |
+
'reservations.pickupDate': 'Prise en charge',
|
| 110 |
+
'reservations.returnDate': 'Restitution',
|
| 111 |
+
'reservations.pickupTime': 'Heure prise en charge',
|
| 112 |
+
'reservations.returnTime': 'Heure restitution',
|
| 113 |
+
'reservations.endDate': 'Date de fin',
|
| 114 |
+
'reservations.meta.departureTimezone': 'TZ dép.',
|
| 115 |
+
'reservations.meta.arrivalTimezone': 'TZ arr.',
|
| 116 |
+
'reservations.span.departure': 'Départ',
|
| 117 |
+
'reservations.span.arrival': 'Arrivée',
|
| 118 |
+
'reservations.span.inTransit': 'En transit',
|
| 119 |
+
'reservations.span.pickup': 'Prise en charge',
|
| 120 |
+
'reservations.span.return': 'Restitution',
|
| 121 |
+
'reservations.span.active': 'Actif',
|
| 122 |
+
'reservations.span.start': 'Début',
|
| 123 |
+
'reservations.span.end': 'Fin',
|
| 124 |
+
'reservations.span.ongoing': 'En cours',
|
| 125 |
+
'reservations.validation.endBeforeStart':
|
| 126 |
+
'La date/heure de fin doit être postérieure à la date/heure de début',
|
| 127 |
+
'reservations.addBooking': 'Ajouter une réservation',
|
| 128 |
+
'reservations.import.title': 'Importer des confirmations de réservation',
|
| 129 |
+
'reservations.import.cta': 'Importer depuis un fichier',
|
| 130 |
+
'reservations.import.dropHere': 'Déposez les fichiers de confirmation de réservation ici ou cliquez pour sélectionner',
|
| 131 |
+
'reservations.import.dropActive': 'Déposez les fichiers pour importer',
|
| 132 |
+
'reservations.import.acceptedFormats': "Acceptés : EML, PDF, PKPass, HTML, TXT (max. 10 Mo chacun, jusqu'à 5 fichiers)",
|
| 133 |
+
'reservations.import.parsing': 'Analyse des fichiers…',
|
| 134 |
+
'reservations.import.previewHeading': '{count} réservation(s) trouvée(s)',
|
| 135 |
+
'reservations.import.previewEmpty': "Aucune réservation n'a pu être extraite des fichiers envoyés.",
|
| 136 |
+
'reservations.import.removeItem': 'Supprimer',
|
| 137 |
+
'reservations.import.confirm': 'Importer {count} réservation(s)',
|
| 138 |
+
'reservations.import.back': 'Retour',
|
| 139 |
+
'reservations.import.success': '{count} réservation(s) importée(s)',
|
| 140 |
+
'reservations.import.partialFailure': '{created} importée(s), {failed} échouée(s)',
|
| 141 |
+
'reservations.import.error': 'Analyse échouée. Assurez-vous que le fichier est une confirmation de réservation valide.',
|
| 142 |
+
'reservations.import.unavailable': "L'import de réservations n'est pas disponible sur ce serveur.",
|
| 143 |
+
'reservations.import.unsupportedFormat': 'Format de fichier non pris en charge. Utilisez EML, PDF, PKPass, HTML ou TXT.',
|
| 144 |
+
'reservations.import.fileTooLarge': 'Le fichier « {name} » dépasse la limite de 10 Mo.',
|
| 145 |
+
'reservations.airtrail.title': 'Importer depuis AirTrail',
|
| 146 |
+
'reservations.airtrail.cta': 'AirTrail',
|
| 147 |
+
'reservations.airtrail.synced': 'AirTrail',
|
| 148 |
+
'reservations.airtrail.syncedHint': 'Synchronisé depuis AirTrail — les modifications restent synchronisées dans les deux sens.',
|
| 149 |
+
'reservations.airtrail.notSynced': 'Non synchronisé',
|
| 150 |
+
'reservations.airtrail.notSyncedHint': "Ce vol a été supprimé dans AirTrail et n'est plus synchronisé.",
|
| 151 |
+
'reservations.airtrail.loadError': 'Impossible de charger vos vols AirTrail.',
|
| 152 |
+
'reservations.airtrail.imported': '{count} vol(s) importé(s)',
|
| 153 |
+
'reservations.airtrail.skippedDuplicate': '{count} déjà dans ce voyage, ignoré(s)',
|
| 154 |
+
'reservations.airtrail.nothingImported': 'Rien à importer.',
|
| 155 |
+
'reservations.airtrail.importError': "Échec de l'importation. Veuillez réessayer.",
|
| 156 |
+
'reservations.airtrail.undo': 'Importer depuis AirTrail',
|
| 157 |
+
'reservations.airtrail.alreadyImported': 'Importé',
|
| 158 |
+
'reservations.airtrail.duringTrip': 'Pendant ce voyage',
|
| 159 |
+
'reservations.airtrail.otherFlights': 'Autres vols',
|
| 160 |
+
'reservations.airtrail.empty': 'Aucun vol trouvé dans votre compte AirTrail.',
|
| 161 |
+
'reservations.airtrail.importCta': 'Importer {count}',
|
| 162 |
+
};
|
| 163 |
+
export default reservations;
|
shared/src/i18n/fr/settings.ts
ADDED
|
@@ -0,0 +1,351 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import type { TranslationStrings } from '../types';
|
| 2 |
+
|
| 3 |
+
const settings: TranslationStrings = {
|
| 4 |
+
'settings.title': 'Paramètres',
|
| 5 |
+
'settings.subtitle': 'Configurez vos paramètres personnels',
|
| 6 |
+
'settings.tabs.display': 'Affichage',
|
| 7 |
+
'settings.tabs.map': 'Carte',
|
| 8 |
+
'settings.tabs.notifications': 'Notifications',
|
| 9 |
+
'settings.tabs.integrations': 'Intégrations',
|
| 10 |
+
'settings.tabs.account': 'Compte',
|
| 11 |
+
'settings.tabs.offline': 'Offline',
|
| 12 |
+
'settings.tabs.about': 'À propos',
|
| 13 |
+
'settings.map': 'Carte',
|
| 14 |
+
'settings.mapTemplate': 'Modèle de carte',
|
| 15 |
+
'settings.mapTemplatePlaceholder.select': 'Sélectionner un modèle…',
|
| 16 |
+
'settings.mapDefaultHint': 'Laissez vide pour OpenStreetMap (par défaut)',
|
| 17 |
+
'settings.mapTemplatePlaceholder':
|
| 18 |
+
'https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png',
|
| 19 |
+
'settings.mapHint': "Modèle d'URL pour les tuiles de carte",
|
| 20 |
+
'settings.mapProvider': 'Fournisseur de carte',
|
| 21 |
+
'settings.mapProviderHint':
|
| 22 |
+
'Affecte les cartes Trip Planner et Journey. Atlas utilise toujours Leaflet.',
|
| 23 |
+
'settings.mapLeafletSubtitle': 'Classique 2D, toutes tuiles raster',
|
| 24 |
+
'settings.mapMapboxSubtitle': 'Tuiles vectorielles, bâtiments 3D & terrain',
|
| 25 |
+
'settings.mapExperimental': 'Expérimental',
|
| 26 |
+
'settings.mapMapboxToken': "Jeton d'accès Mapbox",
|
| 27 |
+
'settings.mapMapboxTokenHint': 'Jeton public (pk.*) depuis',
|
| 28 |
+
'settings.mapMapboxTokenLink': "mapbox.com → Jetons d'accès",
|
| 29 |
+
'settings.mapStyle': 'Style de carte',
|
| 30 |
+
'settings.mapStylePlaceholder': 'Sélectionner un style Mapbox',
|
| 31 |
+
'settings.mapStyleHint': 'Preset ou votre propre URL mapbox://styles/USER/ID',
|
| 32 |
+
'settings.map3dBuildings': 'Bâtiments 3D & terrain',
|
| 33 |
+
'settings.map3dHint':
|
| 34 |
+
'Inclinaison + extrusions 3D réelles des bâtiments — fonctionne avec tous les styles, y compris satellite.',
|
| 35 |
+
'settings.mapHighQuality': 'Mode haute qualité',
|
| 36 |
+
'settings.mapHighQualityHint':
|
| 37 |
+
'Anticrénelage + projection globe pour des bords plus nets et une vue réaliste du monde.',
|
| 38 |
+
'settings.mapHighQualityWarning':
|
| 39 |
+
'Peut affecter les performances sur les appareils moins puissants.',
|
| 40 |
+
'settings.mapTipLabel': 'Astuce :',
|
| 41 |
+
'settings.mapTip':
|
| 42 |
+
'Clic droit et glisser pour pivoter/incliner la carte. Clic milieu pour ajouter un lieu (le clic droit est réservé à la rotation).',
|
| 43 |
+
'settings.latitude': 'Latitude',
|
| 44 |
+
'settings.longitude': 'Longitude',
|
| 45 |
+
'settings.saveMap': 'Enregistrer la carte',
|
| 46 |
+
'settings.apiKeys': 'Clés API',
|
| 47 |
+
'settings.mapsKey': 'Clé API Google Maps',
|
| 48 |
+
'settings.mapsKeyHint':
|
| 49 |
+
"Pour la recherche de lieux. Nécessite l'API Places (New). Obtenez-la sur console.cloud.google.com",
|
| 50 |
+
'settings.weatherKey': 'Clé API OpenWeatherMap',
|
| 51 |
+
'settings.weatherKeyHint':
|
| 52 |
+
'Pour les données météo. Gratuit sur openweathermap.org/api',
|
| 53 |
+
'settings.keyPlaceholder': 'Saisir la clé…',
|
| 54 |
+
'settings.configured': 'Configuré',
|
| 55 |
+
'settings.saveKeys': 'Enregistrer les clés',
|
| 56 |
+
'settings.display': 'Affichage',
|
| 57 |
+
'settings.colorMode': 'Mode de couleur',
|
| 58 |
+
'settings.light': 'Clair',
|
| 59 |
+
'settings.dark': 'Sombre',
|
| 60 |
+
'settings.auto': 'Auto',
|
| 61 |
+
'settings.language': 'Langue',
|
| 62 |
+
'settings.temperature': 'Unité de température',
|
| 63 |
+
'settings.timeFormat': "Format de l'heure",
|
| 64 |
+
'settings.blurBookingCodes': 'Masquer les codes de réservation',
|
| 65 |
+
'settings.optimizeFromAccommodation':
|
| 66 |
+
"Optimiser l'itinéraire depuis l'hébergement",
|
| 67 |
+
'settings.optimizeFromAccommodationHint':
|
| 68 |
+
"Lors de l'optimisation d'une journée, commencez l'itinéraire à l'hôtel où vous vous réveillez et terminez-le à celui où vous arrivez le soir.",
|
| 69 |
+
'settings.notifications': 'Notifications',
|
| 70 |
+
'settings.notifyTripInvite': 'Invitations de voyage',
|
| 71 |
+
'settings.notifyBookingChange': 'Modifications de réservation',
|
| 72 |
+
'settings.notifyTripReminder': 'Rappels de voyage',
|
| 73 |
+
'settings.notifyTodoDue': 'Tâche à échéance',
|
| 74 |
+
'settings.notifyVacayInvite': 'Invitations de fusion Vacay',
|
| 75 |
+
'settings.notifyPhotosShared': 'Photos partagées (Immich)',
|
| 76 |
+
'settings.notifyCollabMessage': 'Messages de chat (Collab)',
|
| 77 |
+
'settings.notifyPackingTagged': 'Liste de bagages : attributions',
|
| 78 |
+
'settings.notifyWebhook': 'Notifications webhook',
|
| 79 |
+
'settings.notificationsDisabled':
|
| 80 |
+
"Les notifications ne sont pas configurées. Demandez à un administrateur d'activer les notifications par e-mail ou webhook.",
|
| 81 |
+
'settings.notificationsActive': 'Canal actif',
|
| 82 |
+
'settings.notificationsManagedByAdmin':
|
| 83 |
+
'Les événements de notification sont configurés par votre administrateur.',
|
| 84 |
+
'settings.on': 'Activé',
|
| 85 |
+
'settings.off': 'Désactivé',
|
| 86 |
+
'settings.mcp.title': 'Configuration MCP',
|
| 87 |
+
'settings.mcp.endpoint': 'Point de terminaison MCP',
|
| 88 |
+
'settings.mcp.clientConfig': 'Configuration du client',
|
| 89 |
+
'settings.mcp.clientConfigHint':
|
| 90 |
+
'Remplacez <your_token> par un token API de la liste ci-dessous. Le chemin vers npx devra peut-être être ajusté selon votre système (ex. C:\\PROGRA~1\\nodejs\\npx.cmd sous Windows).',
|
| 91 |
+
'settings.mcp.clientConfigHintOAuth':
|
| 92 |
+
"Remplacez <your_client_id> et <your_client_secret> par les identifiants affichés dans le client OAuth 2.1 créé ci-dessus. mcp-remote ouvrira votre navigateur pour finaliser l'autorisation lors de la première connexion. Le chemin vers npx devra peut-être être ajusté selon votre système (ex. C:\\PROGRA~1\\nodejs\\npx.cmd sous Windows).",
|
| 93 |
+
'settings.mcp.copy': 'Copier',
|
| 94 |
+
'settings.mcp.copied': 'Copié !',
|
| 95 |
+
'settings.mcp.apiTokens': 'Tokens API',
|
| 96 |
+
'settings.mcp.createToken': 'Créer un token',
|
| 97 |
+
'settings.mcp.noTokens':
|
| 98 |
+
"Aucun token pour l'instant. Créez-en un pour connecter des clients MCP.",
|
| 99 |
+
'settings.mcp.tokenCreatedAt': 'Créé',
|
| 100 |
+
'settings.mcp.tokenUsedAt': 'Utilisé',
|
| 101 |
+
'settings.mcp.deleteTokenTitle': 'Supprimer le token',
|
| 102 |
+
'settings.mcp.deleteTokenMessage':
|
| 103 |
+
"Ce token cessera de fonctionner immédiatement. Tout client MCP l'utilisant perdra l'accès.",
|
| 104 |
+
'settings.mcp.modal.createTitle': 'Créer un token API',
|
| 105 |
+
'settings.mcp.modal.tokenName': 'Nom du token',
|
| 106 |
+
'settings.mcp.modal.tokenNamePlaceholder':
|
| 107 |
+
'ex. Claude Desktop, Ordinateur pro',
|
| 108 |
+
'settings.mcp.modal.creating': 'Création…',
|
| 109 |
+
'settings.mcp.modal.create': 'Créer le token',
|
| 110 |
+
'settings.mcp.modal.createdTitle': 'Token créé',
|
| 111 |
+
'settings.mcp.modal.createdWarning':
|
| 112 |
+
"Ce token ne sera affiché qu'une seule fois. Copiez-le et conservez-le maintenant — il ne pourra pas être récupéré.",
|
| 113 |
+
'settings.mcp.modal.done': 'Terminé',
|
| 114 |
+
'settings.mcp.toast.created': 'Token créé',
|
| 115 |
+
'settings.mcp.toast.createError': 'Impossible de créer le token',
|
| 116 |
+
'settings.mcp.toast.deleted': 'Token supprimé',
|
| 117 |
+
'settings.mcp.toast.deleteError': 'Impossible de supprimer le token',
|
| 118 |
+
'settings.mcp.apiTokensDeprecated':
|
| 119 |
+
'Les tokens API sont dépréciés et seront supprimés dans une prochaine version. Veuillez utiliser les clients OAuth 2.1 à la place.',
|
| 120 |
+
'settings.oauth.clients': 'Clients OAuth 2.1',
|
| 121 |
+
'settings.oauth.clientsHint':
|
| 122 |
+
'Enregistrez des clients OAuth 2.1 pour permettre à des applications MCP tierces (Claude Web, Cursor, etc.) de se connecter sans tokens statiques.',
|
| 123 |
+
'settings.oauth.createClient': 'Nouveau client',
|
| 124 |
+
'settings.oauth.noClients': 'Aucun client OAuth enregistré.',
|
| 125 |
+
'settings.oauth.clientId': 'ID client',
|
| 126 |
+
'settings.oauth.clientSecret': 'Secret client',
|
| 127 |
+
'settings.oauth.deleteClient': 'Supprimer le client',
|
| 128 |
+
'settings.oauth.deleteClientMessage':
|
| 129 |
+
"Ce client et toutes les sessions actives seront définitivement supprimés. Toute application l'utilisant perdra immédiatement l'accès.",
|
| 130 |
+
'settings.oauth.rotateSecret': 'Renouveler le secret',
|
| 131 |
+
'settings.oauth.rotateSecretMessage':
|
| 132 |
+
'Un nouveau secret client sera généré et toutes les sessions existantes seront immédiatement invalidées. Mettez à jour votre application avant de fermer cette fenêtre.',
|
| 133 |
+
'settings.oauth.rotateSecretConfirm': 'Renouveler',
|
| 134 |
+
'settings.oauth.rotateSecretConfirming': 'Renouvellement…',
|
| 135 |
+
'settings.oauth.rotateSecretDoneTitle': 'Nouveau secret généré',
|
| 136 |
+
'settings.oauth.rotateSecretDoneWarning':
|
| 137 |
+
"Ce secret n'est affiché qu'une seule fois. Copiez-le maintenant et mettez à jour votre application — toutes les sessions précédentes ont été invalidées.",
|
| 138 |
+
'settings.oauth.activeSessions': 'Sessions OAuth actives',
|
| 139 |
+
'settings.oauth.sessionScopes': 'Portées',
|
| 140 |
+
'settings.oauth.sessionExpires': 'Expire',
|
| 141 |
+
'settings.oauth.revoke': 'Révoquer',
|
| 142 |
+
'settings.oauth.revokeSession': 'Révoquer la session',
|
| 143 |
+
'settings.oauth.revokeSessionMessage':
|
| 144 |
+
"Cela révoquera immédiatement l'accès pour cette session OAuth.",
|
| 145 |
+
'settings.oauth.modal.createTitle': 'Enregistrer un client OAuth',
|
| 146 |
+
'settings.oauth.modal.presets': 'Préréglages rapides',
|
| 147 |
+
'settings.oauth.modal.clientName': "Nom de l'application",
|
| 148 |
+
'settings.oauth.modal.clientNamePlaceholder': 'ex. Claude Web, Mon app MCP',
|
| 149 |
+
'settings.oauth.modal.redirectUris': 'URIs de redirection',
|
| 150 |
+
'settings.oauth.modal.redirectUrisPlaceholder':
|
| 151 |
+
'https://your-app.com/callback\nhttps://your-app.com/auth',
|
| 152 |
+
'settings.oauth.modal.redirectUrisHint':
|
| 153 |
+
'Une URI par ligne. HTTPS requis (localhost exempté). Correspondance exacte.',
|
| 154 |
+
'settings.oauth.modal.scopes': 'Portées autorisées',
|
| 155 |
+
'settings.oauth.modal.scopesHint':
|
| 156 |
+
"list_trips et get_trip_summary sont toujours disponibles — aucune portée requise. Ils permettent à l'IA de découvrir les IDs de voyage nécessaires.",
|
| 157 |
+
'settings.oauth.modal.selectAll': 'Tout sélectionner',
|
| 158 |
+
'settings.oauth.modal.deselectAll': 'Tout désélectionner',
|
| 159 |
+
'settings.oauth.modal.creating': 'Enregistrement…',
|
| 160 |
+
'settings.oauth.modal.create': 'Enregistrer le client',
|
| 161 |
+
'settings.oauth.modal.createdTitle': 'Client enregistré',
|
| 162 |
+
'settings.oauth.modal.createdWarning':
|
| 163 |
+
"Le secret client n'est affiché qu'une seule fois. Copiez-le maintenant — il ne peut pas être récupéré.",
|
| 164 |
+
'settings.oauth.toast.createError':
|
| 165 |
+
"Impossible d'enregistrer le client OAuth",
|
| 166 |
+
'settings.oauth.toast.deleted': 'Client OAuth supprimé',
|
| 167 |
+
'settings.oauth.toast.deleteError': 'Impossible de supprimer le client OAuth',
|
| 168 |
+
'settings.oauth.toast.revoked': 'Session révoquée',
|
| 169 |
+
'settings.oauth.toast.revokeError': 'Impossible de révoquer la session',
|
| 170 |
+
'settings.oauth.toast.rotateError':
|
| 171 |
+
'Impossible de renouveler le secret client',
|
| 172 |
+
'settings.oauth.modal.machineClient':
|
| 173 |
+
'Client machine (sans connexion navigateur)',
|
| 174 |
+
'settings.oauth.modal.machineClientHint':
|
| 175 |
+
'Utilise le grant client_credentials — aucune URI de redirection requise. Le token est émis directement via client_id + client_secret et agit en votre nom dans les portées sélectionnées.',
|
| 176 |
+
'settings.oauth.modal.machineClientUsage':
|
| 177 |
+
'Obtenir un token : POST /oauth/token avec grant_type=client_credentials, client_id et client_secret. Sans navigateur, sans token de rafraîchissement.',
|
| 178 |
+
'settings.oauth.badge.machine': 'machine',
|
| 179 |
+
'settings.account': 'Compte',
|
| 180 |
+
'settings.about': 'À propos',
|
| 181 |
+
'settings.about.reportBug': 'Signaler un bug',
|
| 182 |
+
'settings.about.reportBugHint': 'Un problème ? Faites-le nous savoir',
|
| 183 |
+
'settings.about.featureRequest': 'Proposer une fonctionnalité',
|
| 184 |
+
'settings.about.featureRequestHint': 'Suggérez une nouvelle fonctionnalité',
|
| 185 |
+
'settings.about.wikiHint': 'Documentation et guides',
|
| 186 |
+
'settings.about.supporters.badge': 'Soutiens Mensuels',
|
| 187 |
+
'settings.about.supporters.title': 'Compagnons de voyage pour TREK',
|
| 188 |
+
'settings.about.supporters.subtitle':
|
| 189 |
+
"Pendant que tu planifies ton prochain itinéraire, ces personnes aident à planifier l'avenir de TREK. Leur contribution mensuelle va directement au développement et aux heures réellement passées — pour que TREK reste Open Source.",
|
| 190 |
+
'settings.about.supporters.since': 'soutien depuis {date}',
|
| 191 |
+
'settings.about.supporters.tierEmpty': 'Sois le premier',
|
| 192 |
+
'settings.about.supporter.tier.noReturnTicket': 'No Return Ticket',
|
| 193 |
+
'settings.about.supporter.tier.lostLuggageVip': 'Lost Luggage VIP',
|
| 194 |
+
'settings.about.supporter.tier.businessClassDreamer':
|
| 195 |
+
'Business Class Dreamer',
|
| 196 |
+
'settings.about.supporter.tier.budgetTraveller': 'Budget Traveller',
|
| 197 |
+
'settings.about.supporter.tier.hostelBunkmate': 'Hostel Bunkmate',
|
| 198 |
+
'settings.about.description':
|
| 199 |
+
'TREK est un planificateur de voyage auto-hébergé qui vous aide à organiser vos voyages de la première idée au dernier souvenir. Planification journalière, budget, listes de bagages, photos et bien plus — le tout au même endroit, sur votre propre serveur.',
|
| 200 |
+
'settings.about.madeWith': 'Fait avec',
|
| 201 |
+
'settings.about.madeBy':
|
| 202 |
+
'par Maurice et une communauté open-source grandissante.',
|
| 203 |
+
'settings.username': "Nom d'utilisateur",
|
| 204 |
+
'settings.email': 'E-mail',
|
| 205 |
+
'settings.role': 'Rôle',
|
| 206 |
+
'settings.roleAdmin': 'Administrateur',
|
| 207 |
+
'settings.oidcLinked': 'Lié avec',
|
| 208 |
+
'settings.changePassword': 'Changer le mot de passe',
|
| 209 |
+
'settings.mustChangePassword':
|
| 210 |
+
'Vous devez changer votre mot de passe avant de continuer. Veuillez définir un nouveau mot de passe ci-dessous.',
|
| 211 |
+
'settings.currentPassword': 'Mot de passe actuel',
|
| 212 |
+
'settings.currentPasswordRequired': 'Le mot de passe actuel est requis',
|
| 213 |
+
'settings.newPassword': 'Nouveau mot de passe',
|
| 214 |
+
'settings.confirmPassword': 'Confirmer le nouveau mot de passe',
|
| 215 |
+
'settings.updatePassword': 'Mettre à jour le mot de passe',
|
| 216 |
+
'settings.passwordRequired':
|
| 217 |
+
'Veuillez saisir le mot de passe actuel et le nouveau',
|
| 218 |
+
'settings.passwordTooShort':
|
| 219 |
+
'Le mot de passe doit comporter au moins 8 caractères',
|
| 220 |
+
'settings.passwordMismatch': 'Les mots de passe ne correspondent pas',
|
| 221 |
+
'settings.passwordWeak':
|
| 222 |
+
'Le mot de passe doit contenir des majuscules, des minuscules, un chiffre et un caractère spécial',
|
| 223 |
+
'settings.passwordChanged': 'Mot de passe modifié avec succès',
|
| 224 |
+
'settings.deleteAccount': 'Supprimer le compte',
|
| 225 |
+
'settings.deleteAccountTitle': 'Supprimer votre compte ?',
|
| 226 |
+
'settings.deleteAccountWarning':
|
| 227 |
+
'Votre compte ainsi que tous vos voyages, lieux et fichiers seront définitivement supprimés. Cette action est irréversible.',
|
| 228 |
+
'settings.deleteAccountConfirm': 'Supprimer définitivement',
|
| 229 |
+
'settings.deleteBlockedTitle': 'Suppression impossible',
|
| 230 |
+
'settings.deleteBlockedMessage':
|
| 231 |
+
"Vous êtes le seul administrateur. Promouvez un autre utilisateur en tant qu'administrateur avant de supprimer votre compte.",
|
| 232 |
+
'settings.roleUser': 'Utilisateur',
|
| 233 |
+
'settings.saveProfile': 'Enregistrer le profil',
|
| 234 |
+
'settings.mfa.title': 'Authentification à deux facteurs (2FA)',
|
| 235 |
+
'settings.mfa.description':
|
| 236 |
+
"Ajoute une étape supplémentaire lors de la connexion. Utilisez une application d'authentification (Google Authenticator, Authy, etc.).",
|
| 237 |
+
'settings.mfa.requiredByPolicy':
|
| 238 |
+
"Votre administrateur exige l'authentification à deux facteurs. Configurez une application d'authentification ci-dessous avant de continuer.",
|
| 239 |
+
'settings.mfa.backupTitle': 'Codes de secours',
|
| 240 |
+
'settings.mfa.backupDescription':
|
| 241 |
+
"Utilisez ces codes à usage unique si vous perdez l'accès à votre application d'authentification.",
|
| 242 |
+
'settings.mfa.backupWarning':
|
| 243 |
+
"Enregistrez ces codes maintenant. Chaque code n'est utilisable qu'une seule fois.",
|
| 244 |
+
'settings.mfa.backupCopy': 'Copier les codes',
|
| 245 |
+
'settings.mfa.backupDownload': 'Télécharger TXT',
|
| 246 |
+
'settings.mfa.backupPrint': 'Imprimer / PDF',
|
| 247 |
+
'settings.mfa.backupCopied': 'Codes de secours copiés',
|
| 248 |
+
'settings.mfa.enabled': '2FA est activé sur votre compte.',
|
| 249 |
+
'settings.mfa.disabled': "2FA n'est pas activé.",
|
| 250 |
+
'settings.mfa.setup': "Configurer l'authentificateur",
|
| 251 |
+
'settings.mfa.scanQr':
|
| 252 |
+
'Scannez ce code QR avec votre application ou entrez la clé manuellement.',
|
| 253 |
+
'settings.mfa.secretLabel': 'Clé secrète (saisie manuelle)',
|
| 254 |
+
'settings.mfa.codePlaceholder': 'Code à 6 chiffres',
|
| 255 |
+
'settings.mfa.enable': 'Activer 2FA',
|
| 256 |
+
'settings.mfa.cancelSetup': 'Annuler',
|
| 257 |
+
'settings.mfa.disableTitle': 'Désactiver 2FA',
|
| 258 |
+
'settings.mfa.disableHint':
|
| 259 |
+
'Entrez votre mot de passe et un code actuel de votre authentificateur.',
|
| 260 |
+
'settings.mfa.disable': 'Désactiver 2FA',
|
| 261 |
+
'settings.mfa.toastEnabled': 'Authentification à deux facteurs activée',
|
| 262 |
+
'settings.mfa.toastDisabled': 'Authentification à deux facteurs désactivée',
|
| 263 |
+
'settings.mfa.demoBlocked': 'Non disponible en mode démo',
|
| 264 |
+
'settings.toast.mapSaved': 'Paramètres de carte enregistrés',
|
| 265 |
+
'settings.toast.keysSaved': 'Clés API enregistrées',
|
| 266 |
+
'settings.toast.displaySaved': "Paramètres d'affichage enregistrés",
|
| 267 |
+
'settings.toast.profileSaved': 'Profil enregistré',
|
| 268 |
+
'settings.uploadAvatar': 'Importer une photo de profil',
|
| 269 |
+
'settings.removeAvatar': 'Supprimer la photo de profil',
|
| 270 |
+
'settings.avatarUploaded': 'Photo de profil mise à jour',
|
| 271 |
+
'settings.avatarRemoved': 'Photo de profil supprimée',
|
| 272 |
+
'settings.avatarError': "Échec de l'import",
|
| 273 |
+
'settings.bookingLabels': 'Étiquettes des itinéraires',
|
| 274 |
+
'settings.bookingLabelsHint':
|
| 275 |
+
"Affiche les noms des gares / aéroports sur la carte. Si désactivé, seule l'icône est affichée.",
|
| 276 |
+
'settings.notifyVersionAvailable': 'Nouvelle version disponible',
|
| 277 |
+
'settings.notificationPreferences.noChannels':
|
| 278 |
+
"Aucun canal de notification n'est configuré. Demandez à un administrateur de configurer les notifications par e-mail ou webhook.",
|
| 279 |
+
'settings.webhookUrl.label': 'URL du webhook',
|
| 280 |
+
'settings.webhookUrl.placeholder': 'https://discord.com/api/webhooks/...',
|
| 281 |
+
'settings.webhookUrl.hint':
|
| 282 |
+
'Entrez votre URL de webhook Discord, Slack ou personnalisée pour recevoir des notifications.',
|
| 283 |
+
'settings.webhookUrl.saved': 'URL du webhook enregistrée',
|
| 284 |
+
'settings.webhookUrl.test': 'Tester',
|
| 285 |
+
'settings.webhookUrl.testSuccess': 'Webhook de test envoyé avec succès',
|
| 286 |
+
'settings.webhookUrl.testFailed': 'Échec du webhook de test',
|
| 287 |
+
'settings.ntfyUrl.topicLabel': 'Sujet Ntfy',
|
| 288 |
+
'settings.ntfyUrl.topicPlaceholder': 'my-trek-alerts',
|
| 289 |
+
'settings.ntfyUrl.serverLabel': 'URL du serveur Ntfy (optionnel)',
|
| 290 |
+
'settings.ntfyUrl.serverPlaceholder': 'https://ntfy.sh',
|
| 291 |
+
'settings.ntfyUrl.hint':
|
| 292 |
+
'Entrez votre sujet Ntfy pour recevoir des notifications push. Laissez le serveur vide pour utiliser la valeur par défaut configurée par votre administrateur.',
|
| 293 |
+
'settings.ntfyUrl.tokenLabel': "Jeton d'accès (optionnel)",
|
| 294 |
+
'settings.ntfyUrl.tokenHint':
|
| 295 |
+
'Requis pour les sujets protégés par mot de passe.',
|
| 296 |
+
'settings.ntfyUrl.saved': 'Paramètres Ntfy enregistrés',
|
| 297 |
+
'settings.ntfyUrl.test': 'Tester',
|
| 298 |
+
'settings.ntfyUrl.testSuccess':
|
| 299 |
+
'Notification de test Ntfy envoyée avec succès',
|
| 300 |
+
'settings.ntfyUrl.testFailed': 'Échec de la notification de test Ntfy',
|
| 301 |
+
'settings.ntfyUrl.tokenCleared': "Jeton d'accès effacé",
|
| 302 |
+
'settings.notificationPreferences.inapp': 'In-App',
|
| 303 |
+
'settings.notificationPreferences.webhook': 'Webhook',
|
| 304 |
+
'settings.notificationPreferences.email': 'Email',
|
| 305 |
+
'settings.notificationPreferences.ntfy': 'Ntfy',
|
| 306 |
+
"settings.currency": "Currency",
|
| 307 |
+
"settings.currencyHint": "All amounts in Costs are converted to and shown in this currency.",
|
| 308 |
+
'settings.passkey.title': 'Passkeys',
|
| 309 |
+
'settings.passkey.description':
|
| 310 |
+
"Connectez-vous plus rapidement et de façon résistante au phishing avec une passkey — votre empreinte digitale, votre visage, votre code PIN ou une clé matérielle. Votre mot de passe reste disponible en secours.",
|
| 311 |
+
'settings.passkey.notConfigured':
|
| 312 |
+
"Les passkeys sont activées mais ne sont pas encore entièrement configurées sur ce serveur. Demandez à votre administrateur de définir le domaine WebAuthn.",
|
| 313 |
+
'settings.passkey.add': 'Ajouter une passkey',
|
| 314 |
+
'settings.passkey.addTitle': 'Ajouter une passkey',
|
| 315 |
+
'settings.passkey.passwordPrompt':
|
| 316 |
+
"Confirmez votre mot de passe actuel, puis suivez les instructions de votre appareil.",
|
| 317 |
+
'settings.passkey.passwordRequired': 'Votre mot de passe actuel est requis.',
|
| 318 |
+
'settings.passkey.namePlaceholder': 'Nom (facultatif, ex. "iPhone")',
|
| 319 |
+
'settings.passkey.addedToast': 'Passkey ajoutée',
|
| 320 |
+
'settings.passkey.added': 'Ajoutée',
|
| 321 |
+
'settings.passkey.addError': "Impossible d'ajouter la passkey",
|
| 322 |
+
'settings.passkey.cancelled': 'Configuration de la passkey annulée',
|
| 323 |
+
'settings.passkey.deleted': 'Passkey supprimée',
|
| 324 |
+
'settings.passkey.deleteConfirm':
|
| 325 |
+
'Supprimer cette passkey ? Confirmez avec votre mot de passe.',
|
| 326 |
+
'settings.passkey.rename': 'Renommer',
|
| 327 |
+
'settings.passkey.defaultName': 'Passkey',
|
| 328 |
+
'settings.passkey.synced': 'Synchronisée',
|
| 329 |
+
'settings.passkey.deviceBound': 'Cet appareil',
|
| 330 |
+
'settings.passkey.lastUsed': 'Dernière utilisation',
|
| 331 |
+
'settings.passkey.neverUsed': 'Jamais utilisée',
|
| 332 |
+
'settings.mapPoiPill': 'Explorer les lieux sur la carte',
|
| 333 |
+
'settings.mapPoiPillHint': 'Afficher une pastille de catégorie sur la carte du voyage pour trouver à proximité des restaurants, hébergements et plus encore depuis OpenStreetMap.',
|
| 334 |
+
'settings.airtrail.title': 'AirTrail',
|
| 335 |
+
'settings.airtrail.hint': 'Connectez votre instance AirTrail auto-hébergée pour importer et synchroniser vos vols. Créez une clé API dans AirTrail sous Paramètres → Sécurité.',
|
| 336 |
+
'settings.airtrail.url': "URL de l'instance",
|
| 337 |
+
'settings.airtrail.apiKey': 'Clé API',
|
| 338 |
+
'settings.airtrail.apiKeyPlaceholder': 'Clé API Bearer',
|
| 339 |
+
'settings.airtrail.apiKeyHint': 'Générée dans AirTrail sous Paramètres → Sécurité. Stockée chiffrée.',
|
| 340 |
+
'settings.airtrail.allowInsecureTls': 'Autoriser les certificats auto-signés',
|
| 341 |
+
'settings.airtrail.allowInsecureTlsHint': 'À activer uniquement pour une instance de confiance sur votre propre réseau.',
|
| 342 |
+
'settings.airtrail.connected': 'Connecté',
|
| 343 |
+
'settings.airtrail.notConnected': 'Non connecté',
|
| 344 |
+
'settings.airtrail.toast.saved': 'Connexion AirTrail enregistrée',
|
| 345 |
+
'settings.airtrail.toast.saveError': "Impossible d'enregistrer la connexion",
|
| 346 |
+
'settings.airtrail.test.button': 'Tester la connexion',
|
| 347 |
+
'settings.airtrail.test.success': 'Connecté — {count} vol(s) trouvé(s)',
|
| 348 |
+
'settings.airtrail.test.failed': 'Échec de la connexion',
|
| 349 |
+
};
|
| 350 |
+
|
| 351 |
+
export default settings;
|
shared/src/i18n/fr/share.ts
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import type { TranslationStrings } from '../types';
|
| 2 |
+
|
| 3 |
+
const share: TranslationStrings = {
|
| 4 |
+
'share.linkTitle': 'Lien public',
|
| 5 |
+
'share.linkHint':
|
| 6 |
+
"Créez un lien que n'importe qui peut utiliser pour consulter ce voyage sans se connecter. Lecture seule — aucune modification possible.",
|
| 7 |
+
'share.createLink': 'Créer un lien',
|
| 8 |
+
'share.deleteLink': 'Supprimer le lien',
|
| 9 |
+
'share.createError': 'Impossible de créer le lien',
|
| 10 |
+
'share.permMap': 'Carte et plan',
|
| 11 |
+
'share.permBookings': 'Réservations',
|
| 12 |
+
'share.permPacking': 'Bagages',
|
| 13 |
+
'share.permBudget': 'Budget',
|
| 14 |
+
'share.permCollab': 'Chat',
|
| 15 |
+
};
|
| 16 |
+
export default share;
|
shared/src/i18n/fr/shared.ts
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import type { TranslationStrings } from '../types';
|
| 2 |
+
|
| 3 |
+
const shared: TranslationStrings = {
|
| 4 |
+
'shared.expired': 'Lien expiré ou invalide',
|
| 5 |
+
'shared.expiredHint': "Ce lien de partage n'est plus actif.",
|
| 6 |
+
'shared.readOnly': 'Vue en lecture seule',
|
| 7 |
+
'shared.tabPlan': 'Plan',
|
| 8 |
+
'shared.tabBookings': 'Réservations',
|
| 9 |
+
'shared.tabPacking': 'Bagages',
|
| 10 |
+
'shared.tabBudget': 'Budget',
|
| 11 |
+
'shared.tabChat': 'Chat',
|
| 12 |
+
'shared.days': 'jours',
|
| 13 |
+
'shared.places': 'lieux',
|
| 14 |
+
'shared.other': 'Autre',
|
| 15 |
+
'shared.totalBudget': 'Budget total',
|
| 16 |
+
'shared.messages': 'messages',
|
| 17 |
+
'shared.sharedVia': 'Partagé via',
|
| 18 |
+
'shared.confirmed': 'Confirmé',
|
| 19 |
+
'shared.pending': 'En attente',
|
| 20 |
+
};
|
| 21 |
+
export default shared;
|
shared/src/i18n/fr/stats.ts
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import type { TranslationStrings } from '../types';
|
| 2 |
+
|
| 3 |
+
const stats: TranslationStrings = {
|
| 4 |
+
'stats.countries': 'Pays',
|
| 5 |
+
'stats.cities': 'Villes',
|
| 6 |
+
'stats.trips': 'Voyages',
|
| 7 |
+
'stats.places': 'Lieux',
|
| 8 |
+
'stats.worldProgress': 'Progression mondiale',
|
| 9 |
+
'stats.visited': 'visités',
|
| 10 |
+
'stats.remaining': 'restants',
|
| 11 |
+
'stats.visitedCountries': 'Pays visités',
|
| 12 |
+
};
|
| 13 |
+
export default stats;
|
shared/src/i18n/fr/system_notice.ts
ADDED
|
@@ -0,0 +1,63 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import type { TranslationStrings } from '../types';
|
| 2 |
+
|
| 3 |
+
const system_notice: TranslationStrings = {
|
| 4 |
+
'system_notice.welcome_v1.title': 'Bienvenue sur TREK',
|
| 5 |
+
'system_notice.welcome_v1.body':
|
| 6 |
+
'Votre planificateur de voyage tout-en-un. Créez des itinéraires, partagez vos voyages et restez organisé — en ligne ou hors ligne.',
|
| 7 |
+
'system_notice.welcome_v1.cta_label': 'Planifier un voyage',
|
| 8 |
+
'system_notice.welcome_v1.hero_alt':
|
| 9 |
+
"Destination de voyage pittoresque avec l'interface TREK",
|
| 10 |
+
'system_notice.welcome_v1.highlight_plan': 'Itinéraires jour par jour',
|
| 11 |
+
'system_notice.welcome_v1.highlight_share': 'Collaborez avec vos partenaires',
|
| 12 |
+
'system_notice.welcome_v1.highlight_offline':
|
| 13 |
+
'Fonctionne hors ligne sur mobile',
|
| 14 |
+
'system_notice.dev_test_modal.title': '[Dev] Test notice',
|
| 15 |
+
'system_notice.dev_test_modal.body': 'This is a dev-only test notice.',
|
| 16 |
+
'system_notice.pager.prev': 'Avis précédent',
|
| 17 |
+
'system_notice.pager.next': 'Avis suivant',
|
| 18 |
+
'system_notice.pager.counter': '{current} / {total}',
|
| 19 |
+
'system_notice.pager.goto': "Aller à l'avis {n}",
|
| 20 |
+
'system_notice.pager.position': 'Avis {current} sur {total}',
|
| 21 |
+
'system_notice.v3_photos.title': 'Les photos ont bougé dans 3.0',
|
| 22 |
+
'system_notice.v3_photos.body':
|
| 23 |
+
"**Photos** dans le planificateur ont été supprimées. Tes photos sont en sécurité — TREK n'a jamais modifié ta bibliothèque Immich ou Synology.\n\nLes photos vivent désormais dans l'addon **Journey**. Journey est optionnel — s'il n'est pas encore disponible, demande à ton admin de l'activer dans Admin → Modules.",
|
| 24 |
+
'system_notice.v3_journey.title': 'Découvrez Journey — journal de voyage',
|
| 25 |
+
'system_notice.v3_journey.body':
|
| 26 |
+
'Documente tes voyages sous forme de récits enrichis avec chronologies, galeries photos et cartes interactives.',
|
| 27 |
+
'system_notice.v3_journey.cta_label': 'Ouvrir Journey',
|
| 28 |
+
'system_notice.v3_journey.highlight_timeline':
|
| 29 |
+
'Chronologie et galerie par jour',
|
| 30 |
+
'system_notice.v3_journey.highlight_photos':
|
| 31 |
+
'Import depuis Immich ou Synology',
|
| 32 |
+
'system_notice.v3_journey.highlight_share':
|
| 33 |
+
'Partage public — sans connexion requise',
|
| 34 |
+
'system_notice.v3_journey.highlight_export': 'Export en livre photo PDF',
|
| 35 |
+
'system_notice.v3_features.title': 'Plus de nouveautés en 3.0',
|
| 36 |
+
'system_notice.v3_features.body':
|
| 37 |
+
'Quelques autres choses à savoir sur cette version.',
|
| 38 |
+
'system_notice.v3_features.highlight_dashboard':
|
| 39 |
+
'Tableau de bord repensé mobile-first',
|
| 40 |
+
'system_notice.v3_features.highlight_offline':
|
| 41 |
+
'Mode hors ligne complet en PWA',
|
| 42 |
+
'system_notice.v3_features.highlight_search':
|
| 43 |
+
'Autocomplétion des lieux en temps réel',
|
| 44 |
+
'system_notice.v3_features.highlight_import':
|
| 45 |
+
'Importer des lieux depuis KMZ/KML',
|
| 46 |
+
'system_notice.v3_mcp.title': 'MCP : mise à niveau OAuth 2.1',
|
| 47 |
+
'system_notice.v3_mcp.body':
|
| 48 |
+
"L'intégration MCP a été entièrement repensée. OAuth 2.1 est désormais la méthode d'authentification recommandée. Les tokens statiques (trek_…) sont dépréciés et seront supprimés dans une future version.",
|
| 49 |
+
'system_notice.v3_mcp.highlight_oauth': 'OAuth 2.1 recommandé (mcp-remote)',
|
| 50 |
+
'system_notice.v3_mcp.highlight_scopes':
|
| 51 |
+
'24 scopes de permissions granulaires',
|
| 52 |
+
'system_notice.v3_mcp.highlight_deprecated':
|
| 53 |
+
'Tokens statiques trek_ dépréciés',
|
| 54 |
+
'system_notice.v3_mcp.highlight_tools': 'Outils et prompts étendus',
|
| 55 |
+
'system_notice.v3_thankyou.title': 'Un mot personnel de ma part',
|
| 56 |
+
'system_notice.v3_thankyou.body':
|
| 57 |
+
"Avant de continuer — je veux prendre un instant.\n\nTREK a commencé comme un projet perso que j'ai construit pour mes propres voyages. Je n'aurais jamais imaginé qu'il grandirait au point que 4 000 d'entre vous lui fassent confiance pour planifier vos aventures. Chaque étoile, chaque issue, chaque demande de fonctionnalité — je les lis toutes, et ce sont elles qui me font tenir pendant les nuits blanches entre un travail à temps plein et l'université.\n\nJe veux que vous sachiez : TREK sera toujours open source, toujours auto-hébergé, toujours à vous. Pas de tracking, pas d'abonnements, pas de conditions cachées. Juste un outil construit par quelqu'un qui aime voyager autant que vous.\n\nUn merci tout particulier à [jubnl](https://github.com/jubnl) — tu es devenu un collaborateur incroyable. Une grande partie de ce qui rend la 3.0 géniale porte ton empreinte. Merci d'avoir cru en ce projet quand il était encore brut.\n\nEt à chacun d'entre vous qui a signalé un bug, traduit une chaîne, partagé TREK avec un ami ou simplement l'a utilisé pour planifier un voyage — **merci**. Vous êtes la raison pour laquelle tout ceci existe.\n\nÀ de nombreuses autres aventures ensemble.\n\n— Maurice\n\n---\n\n[Rejoins la communauté sur Discord](https://discord.gg/7Q6M6jDwzf)\n\nSi TREK rend tes voyages meilleurs, un [petit café](https://ko-fi.com/mauriceboe) aide toujours à garder les lumières allumées.",
|
| 58 |
+
'system_notice.v3014_whitespace_collision.title':
|
| 59 |
+
'Action requise : conflit de compte utilisateur',
|
| 60 |
+
'system_notice.v3014_whitespace_collision.body':
|
| 61 |
+
"La mise à niveau 3.0.14 a détecté un ou plusieurs conflits de nom d'utilisateur ou d'adresse e-mail causés par des espaces en début ou en fin de valeur dans les comptes enregistrés. Les comptes concernés ont été renommés automatiquement. Consultez les journaux du serveur pour les lignes commençant par **[migration] WHITESPACE COLLISION** afin d'identifier les comptes nécessitant une vérification.",
|
| 62 |
+
};
|
| 63 |
+
export default system_notice;
|
shared/src/i18n/fr/todo.ts
ADDED
|
@@ -0,0 +1,41 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import type { TranslationStrings } from '../types';
|
| 2 |
+
|
| 3 |
+
const todo: TranslationStrings = {
|
| 4 |
+
'todo.subtab.packing': 'Liste de bagages',
|
| 5 |
+
'todo.subtab.todo': 'À faire',
|
| 6 |
+
'todo.completed': 'terminé(s)',
|
| 7 |
+
'todo.filter.all': 'Tout',
|
| 8 |
+
'todo.filter.open': 'En cours',
|
| 9 |
+
'todo.filter.done': 'Terminé',
|
| 10 |
+
'todo.uncategorized': 'Sans catégorie',
|
| 11 |
+
'todo.namePlaceholder': 'Nom de la tâche',
|
| 12 |
+
'todo.descriptionPlaceholder': 'Description (facultative)',
|
| 13 |
+
'todo.unassigned': 'Non assigné',
|
| 14 |
+
'todo.noCategory': 'Aucune catégorie',
|
| 15 |
+
'todo.hasDescription': 'Avec description',
|
| 16 |
+
'todo.addItem': 'Nouvelle tâche',
|
| 17 |
+
'todo.sidebar.sortBy': 'Trier par',
|
| 18 |
+
'todo.priority': 'Priorité',
|
| 19 |
+
'todo.newCategoryLabel': 'nouvelle',
|
| 20 |
+
'todo.newCategory': 'Nom de la catégorie',
|
| 21 |
+
'todo.addCategory': 'Ajouter une catégorie',
|
| 22 |
+
'todo.newItem': 'Nouvelle tâche',
|
| 23 |
+
'todo.empty':
|
| 24 |
+
"Aucune tâche pour l'instant. Ajoutez une tâche pour commencer !",
|
| 25 |
+
'todo.filter.my': 'Mes tâches',
|
| 26 |
+
'todo.filter.overdue': 'En retard',
|
| 27 |
+
'todo.sidebar.tasks': 'Tâches',
|
| 28 |
+
'todo.sidebar.categories': 'Catégories',
|
| 29 |
+
'todo.detail.title': 'Tâche',
|
| 30 |
+
'todo.detail.description': 'Description',
|
| 31 |
+
'todo.detail.category': 'Catégorie',
|
| 32 |
+
'todo.detail.dueDate': "Date d'échéance",
|
| 33 |
+
'todo.detail.assignedTo': 'Assigné à',
|
| 34 |
+
'todo.detail.delete': 'Supprimer',
|
| 35 |
+
'todo.detail.save': 'Enregistrer les modifications',
|
| 36 |
+
'todo.detail.create': 'Créer la tâche',
|
| 37 |
+
'todo.detail.priority': 'Priorité',
|
| 38 |
+
'todo.detail.noPriority': 'Aucune',
|
| 39 |
+
'todo.sortByPrio': 'Priorité',
|
| 40 |
+
};
|
| 41 |
+
export default todo;
|
shared/src/i18n/fr/transport.ts
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import type { TranslationStrings } from '../types';
|
| 2 |
+
|
| 3 |
+
const transport: TranslationStrings = {
|
| 4 |
+
'transport.addTransport': 'Ajouter un transport',
|
| 5 |
+
'transport.modalTitle.create': 'Ajouter un transport',
|
| 6 |
+
'transport.modalTitle.edit': 'Modifier le transport',
|
| 7 |
+
'transport.title': 'Transports',
|
| 8 |
+
'transport.addManual': 'Transport manuel',
|
| 9 |
+
};
|
| 10 |
+
export default transport;
|
shared/src/i18n/fr/trip.ts
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import type { TranslationStrings } from '../types';
|
| 2 |
+
|
| 3 |
+
const trip: TranslationStrings = {
|
| 4 |
+
'trip.tabs.plan': 'Plan',
|
| 5 |
+
'trip.tabs.transports': 'Transports',
|
| 6 |
+
'trip.tabs.reservations': 'Réservations',
|
| 7 |
+
'trip.tabs.reservationsShort': 'Résa',
|
| 8 |
+
'trip.tabs.packing': 'Liste de bagages',
|
| 9 |
+
'trip.tabs.packingShort': 'Bagages',
|
| 10 |
+
'trip.tabs.lists': 'Listes',
|
| 11 |
+
'trip.tabs.listsShort': 'Listes',
|
| 12 |
+
'trip.tabs.budget': "Costs",
|
| 13 |
+
'trip.tabs.files': 'Fichiers',
|
| 14 |
+
'trip.loading': 'Chargement du voyage…',
|
| 15 |
+
'trip.loadingPhotos': 'Chargement des photos des lieux...',
|
| 16 |
+
'trip.mobilePlan': 'Plan',
|
| 17 |
+
'trip.mobilePlaces': 'Lieux',
|
| 18 |
+
'trip.toast.placeUpdated': 'Lieu mis à jour',
|
| 19 |
+
'trip.toast.placeAdded': 'Lieu ajouté',
|
| 20 |
+
'trip.toast.placeDeleted': 'Lieu supprimé',
|
| 21 |
+
'trip.toast.selectDay': "Veuillez d'abord sélectionner un jour",
|
| 22 |
+
'trip.toast.assignedToDay': 'Lieu attribué au planning',
|
| 23 |
+
'trip.toast.reorderError': 'Échec de la réorganisation',
|
| 24 |
+
'trip.toast.reservationUpdated': 'Réservation mise à jour',
|
| 25 |
+
'trip.toast.reservationAdded': 'Réservation ajoutée',
|
| 26 |
+
'trip.toast.deleted': 'Supprimé',
|
| 27 |
+
'trip.confirm.deletePlace': 'Voulez-vous vraiment supprimer ce lieu ?',
|
| 28 |
+
'trip.confirm.deletePlaces': 'Supprimer {count} lieux?',
|
| 29 |
+
'trip.toast.placesDeleted': '{count} lieux supprimés',
|
| 30 |
+
};
|
| 31 |
+
export default trip;
|
shared/src/i18n/fr/trips.ts
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import type { TranslationStrings } from '../types';
|
| 2 |
+
|
| 3 |
+
const trips: TranslationStrings = {
|
| 4 |
+
'trips.memberRemoved': '{username} supprimé',
|
| 5 |
+
'trips.memberRemoveError': 'Échec de la suppression',
|
| 6 |
+
'trips.memberAdded': '{username} ajouté',
|
| 7 |
+
'trips.memberAddError': "Échec de l'ajout",
|
| 8 |
+
'trips.reminder': 'Rappel',
|
| 9 |
+
'trips.reminderNone': 'Aucun',
|
| 10 |
+
'trips.reminderDay': 'jour',
|
| 11 |
+
'trips.reminderDays': 'jours',
|
| 12 |
+
'trips.reminderCustom': 'Personnalisé',
|
| 13 |
+
'trips.reminderDaysBefore': 'jours avant le départ',
|
| 14 |
+
'trips.reminderDisabledHint':
|
| 15 |
+
'Les rappels de voyage sont désactivés. Activez-les dans Admin > Paramètres > Notifications.',
|
| 16 |
+
};
|
| 17 |
+
export default trips;
|
shared/src/i18n/fr/undo.ts
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import type { TranslationStrings } from '../types';
|
| 2 |
+
|
| 3 |
+
const undo: TranslationStrings = {
|
| 4 |
+
'undo.button': 'Annuler',
|
| 5 |
+
'undo.tooltip': 'Annuler : {action}',
|
| 6 |
+
'undo.assignPlace': 'Lieu ajouté au jour',
|
| 7 |
+
'undo.removeAssignment': 'Lieu retiré du jour',
|
| 8 |
+
'undo.reorder': 'Lieux réorganisés',
|
| 9 |
+
'undo.optimize': 'Itinéraire optimisé',
|
| 10 |
+
'undo.deletePlace': 'Lieu supprimé',
|
| 11 |
+
'undo.deletePlaces': 'Lieux supprimés',
|
| 12 |
+
'undo.moveDay': 'Lieu déplacé vers un autre jour',
|
| 13 |
+
'undo.lock': 'Verrouillage du lieu modifié',
|
| 14 |
+
'undo.importGpx': 'Import GPX',
|
| 15 |
+
'undo.importKeyholeMarkup': 'Import KMZ/KML',
|
| 16 |
+
'undo.importGoogleList': 'Import Google Maps',
|
| 17 |
+
'undo.importNaverList': 'Import Naver Maps',
|
| 18 |
+
'undo.addPlace': 'Lieu ajouté',
|
| 19 |
+
'undo.done': 'Annulé : {action}',
|
| 20 |
+
'undo.importBooking': 'Import de confirmation de réservation',
|
| 21 |
+
};
|
| 22 |
+
export default undo;
|
shared/src/i18n/fr/vacay.ts
ADDED
|
@@ -0,0 +1,109 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import type { TranslationStrings } from '../types';
|
| 2 |
+
|
| 3 |
+
const vacay: TranslationStrings = {
|
| 4 |
+
'vacay.subtitle': 'Planifiez et gérez vos jours de congés',
|
| 5 |
+
'vacay.settings': 'Paramètres',
|
| 6 |
+
'vacay.year': 'Année',
|
| 7 |
+
'vacay.addYear': "Ajouter l'année suivante",
|
| 8 |
+
'vacay.addPrevYear': "Ajouter l'année précédente",
|
| 9 |
+
'vacay.removeYear': "Supprimer l'année",
|
| 10 |
+
'vacay.removeYearConfirm': 'Supprimer {year} ?',
|
| 11 |
+
'vacay.removeYearHint':
|
| 12 |
+
"Toutes les entrées de vacances et jours fériés d'entreprise de cette année seront définitivement supprimés.",
|
| 13 |
+
'vacay.remove': 'Supprimer',
|
| 14 |
+
'vacay.persons': 'Personnes',
|
| 15 |
+
'vacay.noPersons': 'Aucune personne ajoutée',
|
| 16 |
+
'vacay.addPerson': 'Ajouter une personne',
|
| 17 |
+
'vacay.editPerson': 'Modifier la personne',
|
| 18 |
+
'vacay.removePerson': 'Supprimer la personne',
|
| 19 |
+
'vacay.removePersonConfirm': 'Supprimer {name} ?',
|
| 20 |
+
'vacay.removePersonHint':
|
| 21 |
+
'Toutes les entrées de vacances de cette personne seront définitivement supprimées.',
|
| 22 |
+
'vacay.personName': 'Nom',
|
| 23 |
+
'vacay.personNamePlaceholder': 'Saisir le nom',
|
| 24 |
+
'vacay.color': 'Couleur',
|
| 25 |
+
'vacay.add': 'Ajouter',
|
| 26 |
+
'vacay.legend': 'Légende',
|
| 27 |
+
'vacay.publicHoliday': 'Jour férié',
|
| 28 |
+
'vacay.companyHoliday': "Jour férié d'entreprise",
|
| 29 |
+
'vacay.weekend': 'Week-end',
|
| 30 |
+
'vacay.modeVacation': 'Vacances',
|
| 31 |
+
'vacay.modeCompany': "Jour férié d'entreprise",
|
| 32 |
+
'vacay.entitlement': 'Droits',
|
| 33 |
+
'vacay.entitlementDays': 'Jours',
|
| 34 |
+
'vacay.used': 'Utilisés',
|
| 35 |
+
'vacay.remaining': 'Restants',
|
| 36 |
+
'vacay.carriedOver': 'de {year}',
|
| 37 |
+
'vacay.weekendDays': 'Jours de week-end',
|
| 38 |
+
'vacay.mon': 'Lun',
|
| 39 |
+
'vacay.tue': 'Mar',
|
| 40 |
+
'vacay.wed': 'Mer',
|
| 41 |
+
'vacay.thu': 'Jeu',
|
| 42 |
+
'vacay.fri': 'Ven',
|
| 43 |
+
'vacay.sat': 'Sam',
|
| 44 |
+
'vacay.sun': 'Dim',
|
| 45 |
+
'vacay.blockWeekends': 'Bloquer les week-ends',
|
| 46 |
+
'vacay.blockWeekendsHint':
|
| 47 |
+
'Empêcher les entrées de vacances les samedis et dimanches',
|
| 48 |
+
'vacay.publicHolidays': 'Jours fériés',
|
| 49 |
+
'vacay.publicHolidaysHint': 'Marquer les jours fériés dans le calendrier',
|
| 50 |
+
'vacay.selectCountry': 'Sélectionner un pays',
|
| 51 |
+
'vacay.selectRegion': 'Sélectionner une région (facultatif)',
|
| 52 |
+
'vacay.companyHolidays': "Jours fériés d'entreprise",
|
| 53 |
+
'vacay.companyHolidaysHint':
|
| 54 |
+
"Autoriser le marquage des jours fériés d'entreprise",
|
| 55 |
+
'vacay.companyHolidaysNoDeduct':
|
| 56 |
+
"Les jours fériés d'entreprise ne sont pas déduits des jours de vacances.",
|
| 57 |
+
'vacay.weekStart': 'La semaine commence le',
|
| 58 |
+
'vacay.weekStartHint':
|
| 59 |
+
'Choisissez si la semaine commence le lundi ou le dimanche',
|
| 60 |
+
'vacay.carryOver': 'Report',
|
| 61 |
+
'vacay.carryOverHint':
|
| 62 |
+
"Reporter automatiquement les jours de vacances restants à l'année suivante",
|
| 63 |
+
'vacay.sharing': 'Partage',
|
| 64 |
+
'vacay.sharingHint':
|
| 65 |
+
"Partagez votre plan de vacances avec d'autres utilisateurs TREK",
|
| 66 |
+
'vacay.owner': 'Propriétaire',
|
| 67 |
+
'vacay.shareEmailPlaceholder': "E-mail de l'utilisateur TREK",
|
| 68 |
+
'vacay.shareSuccess': 'Plan partagé avec succès',
|
| 69 |
+
'vacay.shareError': 'Impossible de partager le plan',
|
| 70 |
+
'vacay.dissolve': 'Séparer les calendriers',
|
| 71 |
+
'vacay.dissolveHint':
|
| 72 |
+
'Séparer à nouveau les calendriers. Vos entrées seront conservées.',
|
| 73 |
+
'vacay.dissolveAction': 'Dissoudre',
|
| 74 |
+
'vacay.dissolved': 'Calendrier séparé',
|
| 75 |
+
'vacay.fusedWith': 'Partagé avec',
|
| 76 |
+
'vacay.you': 'vous',
|
| 77 |
+
'vacay.noData': 'Aucune donnée',
|
| 78 |
+
'vacay.changeColor': 'Changer la couleur',
|
| 79 |
+
'vacay.inviteUser': 'Inviter un utilisateur',
|
| 80 |
+
'vacay.inviteHint':
|
| 81 |
+
'Invitez un autre utilisateur TREK à partager un calendrier de vacances combiné.',
|
| 82 |
+
'vacay.selectUser': 'Sélectionner un utilisateur',
|
| 83 |
+
'vacay.sendInvite': "Envoyer l'invitation",
|
| 84 |
+
'vacay.inviteSent': 'Invitation envoyée',
|
| 85 |
+
'vacay.inviteError': "Impossible d'envoyer l'invitation",
|
| 86 |
+
'vacay.pending': 'en attente',
|
| 87 |
+
'vacay.noUsersAvailable': 'Aucun utilisateur disponible',
|
| 88 |
+
'vacay.accept': 'Accepter',
|
| 89 |
+
'vacay.decline': 'Refuser',
|
| 90 |
+
'vacay.acceptFusion': 'Accepter et fusionner',
|
| 91 |
+
'vacay.inviteTitle': 'Demande de fusion',
|
| 92 |
+
'vacay.inviteWantsToFuse':
|
| 93 |
+
'souhaite partager un calendrier de vacances avec vous.',
|
| 94 |
+
'vacay.fuseInfo1':
|
| 95 |
+
'Vous verrez tous les deux toutes les entrées de vacances dans un calendrier partagé.',
|
| 96 |
+
'vacay.fuseInfo2':
|
| 97 |
+
"Les deux parties peuvent créer et modifier des entrées pour l'autre.",
|
| 98 |
+
'vacay.fuseInfo3':
|
| 99 |
+
'Les deux parties peuvent supprimer des entrées et modifier les droits aux vacances.',
|
| 100 |
+
'vacay.fuseInfo4':
|
| 101 |
+
"Les paramètres comme les jours fériés et les jours d'entreprise sont partagés.",
|
| 102 |
+
'vacay.fuseInfo5':
|
| 103 |
+
"La fusion peut être dissoute à tout moment par l'une ou l'autre partie. Vos entrées seront préservées.",
|
| 104 |
+
'vacay.addCalendar': 'Ajouter un calendrier',
|
| 105 |
+
'vacay.calendarColor': 'Couleur',
|
| 106 |
+
'vacay.calendarLabel': 'Libellé',
|
| 107 |
+
'vacay.noCalendars': 'Aucun calendrier',
|
| 108 |
+
};
|
| 109 |
+
export default vacay;
|
shared/src/i18n/gr/admin.ts
ADDED
|
@@ -0,0 +1,403 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import type { TranslationStrings } from '../types';
|
| 2 |
+
|
| 3 |
+
const admin: TranslationStrings = {
|
| 4 |
+
'admin.notifications.title': 'Ειδοποιήσεις',
|
| 5 |
+
'admin.notifications.hint':
|
| 6 |
+
'Επιλέξτε ένα κανάλι ειδοποιήσεων. Μόνο ένα μπορεί να είναι ενεργό κάθε φορά.',
|
| 7 |
+
'admin.notifications.none': 'Απενεργοποιημένο',
|
| 8 |
+
'admin.notifications.email': 'Email (SMTP)',
|
| 9 |
+
'admin.notifications.webhook': 'Webhook',
|
| 10 |
+
'admin.notifications.ntfy': 'Ntfy',
|
| 11 |
+
'admin.ntfy.hint':
|
| 12 |
+
'Επιτρέψτε στους χρήστες να διαμορφώνουν τα δικά τους θέματα ntfy για push ειδοποιήσεις. Ορίστε τον προεπιλεγμένο server παρακάτω για να προ-συμπληρώνει τις ρυθμίσεις χρηστών.',
|
| 13 |
+
'admin.notifications.save': 'Αποθήκευση ρυθμίσεων ειδοποιήσεων',
|
| 14 |
+
'admin.notifications.saved': 'Οι ρυθμίσεις ειδοποιήσεων αποθηκεύτηκαν',
|
| 15 |
+
'admin.notifications.testWebhook': 'Αποστολή δοκιμαστικού webhook',
|
| 16 |
+
'admin.notifications.testWebhookSuccess':
|
| 17 |
+
'Η δοκιμή webhook στάλθηκε επιτυχώς',
|
| 18 |
+
'admin.notifications.testWebhookFailed': 'Η δοκιμή webhook απέτυχε',
|
| 19 |
+
'admin.notifications.testNtfy': 'Αποστολή δοκιμαστικού ntfy',
|
| 20 |
+
'admin.notifications.testNtfySuccess': 'Η δοκιμή ntfy στάλθηκε επιτυχώς',
|
| 21 |
+
'admin.notifications.testNtfyFailed': 'Η δοκιμή ntfy απέτυχε',
|
| 22 |
+
'admin.notifications.emailPanel.title': 'Email (SMTP)',
|
| 23 |
+
'admin.notifications.webhookPanel.title': 'Webhook',
|
| 24 |
+
'admin.notifications.inappPanel.title': 'Εντός εφαρμογής',
|
| 25 |
+
'admin.notifications.inappPanel.hint':
|
| 26 |
+
'Οι ειδοποιήσεις εντός εφαρμογής είναι πάντα ενεργές και δεν μπορούν να απενεργοποιηθούν καθολικά.',
|
| 27 |
+
'admin.notifications.adminWebhookPanel.title': 'Webhook Διαχειριστή',
|
| 28 |
+
'admin.notifications.adminWebhookPanel.hint':
|
| 29 |
+
'Αυτό το webhook χρησιμοποιείται αποκλειστικά για ειδοποιήσεις διαχειριστή (π.χ. ειδοποιήσεις έκδοσης). Είναι ξεχωριστό από τα webhooks των χρηστών και ενεργοποιείται πάντα όταν έχει οριστεί.',
|
| 30 |
+
'admin.notifications.adminWebhookPanel.saved':
|
| 31 |
+
'Το URL του webhook διαχειριστή αποθηκεύτηκε',
|
| 32 |
+
'admin.notifications.adminWebhookPanel.testSuccess':
|
| 33 |
+
'Η δοκιμή webhook στάλθηκε επιτυχώς',
|
| 34 |
+
'admin.notifications.adminWebhookPanel.testFailed':
|
| 35 |
+
'Η δοκιμή webhook απέτυχε',
|
| 36 |
+
'admin.notifications.adminWebhookPanel.alwaysOnHint':
|
| 37 |
+
'Το webhook διαχειριστή ενεργοποιείται πάντα όταν έχει διαμορφωθεί ένα URL',
|
| 38 |
+
'admin.notifications.adminNtfyPanel.title': 'Ntfy Διαχειριστή',
|
| 39 |
+
'admin.notifications.adminNtfyPanel.hint':
|
| 40 |
+
'Αυτό το θέμα ntfy χρησιμοποιείται αποκλειστικά για ειδοποιήσεις διαχειριστή (π.χ. ειδοποιήσεις έκδοσης). Είναι ξεχωριστό από τα θέματα των χρηστών και ενεργοποιείται πάντα όταν έχει διαμορφωθεί.',
|
| 41 |
+
'admin.notifications.adminNtfyPanel.serverLabel': 'URL Ntfy Server',
|
| 42 |
+
'admin.notifications.adminNtfyPanel.serverHint':
|
| 43 |
+
'Χρησιμοποιείται επίσης ως ο προεπιλεγμένος server για τις ντόπιες ntfy ειδοποιήσεις χρηστών. Αφήστε κενό για προεπιλογή ntfy.sh. Οι χρήστες μπορούν να το παρακάμψουν στις δικές τους ρυθμίσεις.',
|
| 44 |
+
'admin.notifications.adminNtfyPanel.serverPlaceholder': 'https://ntfy.sh',
|
| 45 |
+
'admin.notifications.adminNtfyPanel.topicLabel': 'Θέμα Διαχειριστή',
|
| 46 |
+
'admin.notifications.adminNtfyPanel.topicPlaceholder': 'trek-admin-alerts',
|
| 47 |
+
'admin.notifications.adminNtfyPanel.tokenLabel': 'Access Token (προαιρετικό)',
|
| 48 |
+
'admin.notifications.adminNtfyPanel.tokenCleared':
|
| 49 |
+
'Το access token διαχειριστή εκκαθαρίστηκε',
|
| 50 |
+
'admin.notifications.adminNtfyPanel.saved':
|
| 51 |
+
'Οι ρυθμίσεις ntfy διαχειριστή αποθηκεύτηκαν',
|
| 52 |
+
'admin.notifications.adminNtfyPanel.test': 'Αποστολή δοκιμαστικού ntfy',
|
| 53 |
+
'admin.notifications.adminNtfyPanel.testSuccess':
|
| 54 |
+
'Η δοκιμή ntfy στάλθηκε επιτυχώς',
|
| 55 |
+
'admin.notifications.adminNtfyPanel.testFailed': 'Η δοκιμή ntfy απέτυχε',
|
| 56 |
+
'admin.notifications.adminNtfyPanel.alwaysOnHint':
|
| 57 |
+
'Το ntfy διαχειριστή ενεργοποιείται πάντα όταν έχει διαμ��ρφωθεί ένα θέμα',
|
| 58 |
+
'admin.notifications.adminNotificationsHint':
|
| 59 |
+
'Διαμορφώστε ποια κανάλια παραδίδουν ειδοποιήσεις μόνο για διαχειριστές (π.χ. ειδοποιήσεις έκδοσης).',
|
| 60 |
+
'admin.notifications.tripReminders.title': 'Υπενθυμίσεις Ταξιδιού',
|
| 61 |
+
'admin.notifications.tripReminders.hint':
|
| 62 |
+
'Αποστολή ειδοποίησης υπενθύμισης πριν την έναρξη ενός ταξιδιού (απαιτεί να έχουν οριστεί ημέρες υπενθύμισης στο ταξίδι).',
|
| 63 |
+
'admin.notifications.tripReminders.enabled':
|
| 64 |
+
'Οι υπενθυμίσεις ταξιδιού ενεργοποιήθηκαν',
|
| 65 |
+
'admin.notifications.tripReminders.disabled':
|
| 66 |
+
'Οι υπενθυμίσεις ταξιδιού απενεργοποιήθηκαν',
|
| 67 |
+
'admin.smtp.title': 'Email & Ειδοποιήσεις',
|
| 68 |
+
'admin.smtp.hint': 'Διαμόρφωση SMTP για αποστολή ειδοποιήσεων email.',
|
| 69 |
+
'admin.smtp.testButton': 'Αποστολή δοκιμαστικού email',
|
| 70 |
+
'admin.webhook.hint':
|
| 71 |
+
'Επιτρέψτε στους χρήστες να διαμορφώνουν τα δικά τους webhook URLs για ειδοποιήσεις (Discord, Slack, κ.λπ.).',
|
| 72 |
+
'admin.smtp.testSuccess': 'Το δοκιμαστικό email στάλθηκε επιτυχώς',
|
| 73 |
+
'admin.smtp.testFailed': 'Το δοκιμαστικό email απέτυχε',
|
| 74 |
+
'admin.title': 'Διαχείριση',
|
| 75 |
+
'admin.subtitle': 'Διαχείριση χρηστών και ρυθμίσεις συστήματος',
|
| 76 |
+
'admin.tabs.users': 'Χρήστες',
|
| 77 |
+
'admin.tabs.categories': 'Κατηγορίες',
|
| 78 |
+
'admin.tabs.backup': 'Αντίγραφο ασφαλείας',
|
| 79 |
+
'admin.tabs.notifications': 'Ειδοποιήσεις',
|
| 80 |
+
'admin.tabs.audit': 'Έλεγχος',
|
| 81 |
+
'admin.stats.users': 'Χρήστες',
|
| 82 |
+
'admin.stats.trips': 'Ταξίδια',
|
| 83 |
+
'admin.stats.places': 'Τόποι',
|
| 84 |
+
'admin.stats.photos': 'Φωτογραφίες',
|
| 85 |
+
'admin.stats.files': 'Αρχεία',
|
| 86 |
+
'admin.table.user': 'Χρήστης',
|
| 87 |
+
'admin.table.email': 'Email',
|
| 88 |
+
'admin.table.role': 'Ρόλος',
|
| 89 |
+
'admin.table.created': 'Δημιουργήθηκε',
|
| 90 |
+
'admin.table.lastLogin': 'Τελευταία Σύνδεση',
|
| 91 |
+
'admin.table.actions': 'Ενέργειες',
|
| 92 |
+
'admin.you': '(Εσείς)',
|
| 93 |
+
'admin.editUser': 'Επεξεργασία Χρήστη',
|
| 94 |
+
'admin.newPassword': 'Νέος Κωδικός',
|
| 95 |
+
'admin.newPasswordHint': 'Αφήστε κενό για να διατηρηθεί ο τρέχων κωδικός',
|
| 96 |
+
'admin.deleteUser':
|
| 97 |
+
'Διαγραφή χρήστη "{name}"; Όλα τα ταξίδια θα διαγραφούν μόνιμα.',
|
| 98 |
+
'admin.deleteUserTitle': 'Διαγραφή χρήστη',
|
| 99 |
+
'admin.newPasswordPlaceholder': 'Εισάγετε νέο κωδικό…',
|
| 100 |
+
'admin.toast.loadError': 'Αποτυχία φόρτωσης δεδομένων διαχείρισης',
|
| 101 |
+
'admin.toast.userUpdated': 'Ο χρήστης ενημερώθηκε',
|
| 102 |
+
'admin.toast.updateError': 'Αποτυχία ενημέρωσης',
|
| 103 |
+
'admin.toast.userDeleted': 'Ο χρήστης διαγράφηκε',
|
| 104 |
+
'admin.toast.deleteError': 'Αποτυχία διαγραφής',
|
| 105 |
+
'admin.toast.cannotDeleteSelf':
|
| 106 |
+
'Δεν μπορείτε να διαγράψετε τον δικό σας λογαριασμό',
|
| 107 |
+
'admin.toast.userCreated': 'Ο χρήστης δημιουργήθηκε',
|
| 108 |
+
'admin.toast.createError': 'Αποτυχία δημιουργίας χρήστη',
|
| 109 |
+
'admin.toast.fieldsRequired':
|
| 110 |
+
'Το όνομα χρήστη, το email και ο κωδικός είναι υποχρεωτικά',
|
| 111 |
+
'admin.createUser': 'Δημιουργία Χρήστη',
|
| 112 |
+
'admin.invite.title': 'Σύνδεσμοι Πρόσκλησης',
|
| 113 |
+
'admin.invite.subtitle': 'Δημιουργία συνδέσμων εγγραφής μίας χρήσης',
|
| 114 |
+
'admin.invite.create': 'Δημιουργία Συνδέσμου',
|
| 115 |
+
'admin.invite.createAndCopy': 'Δημιουργία & Αντιγραφή',
|
| 116 |
+
'admin.invite.empty': 'Δεν έχουν δημιουργηθεί σύνδεσμοι πρόσκλησης ακόμη',
|
| 117 |
+
'admin.invite.maxUses': 'Μέγ. Χρήσεις',
|
| 118 |
+
'admin.invite.expiry': 'Λήγει μετά από',
|
| 119 |
+
'admin.invite.uses': 'χρησιμοποιήθηκε',
|
| 120 |
+
'admin.invite.expiresAt': 'λήγει',
|
| 121 |
+
'admin.invite.createdBy': 'από',
|
| 122 |
+
'admin.invite.active': 'Ενεργός',
|
| 123 |
+
'admin.invite.expired': 'Έληξε',
|
| 124 |
+
'admin.invite.usedUp': 'Εξαντλήθηκε',
|
| 125 |
+
'admin.invite.copied': 'Ο σύνδεσμος πρόσκλησης αντιγράφηκε στο πρόχειρο',
|
| 126 |
+
'admin.invite.copyLink': 'Αντιγραφή συνδέσμου',
|
| 127 |
+
'admin.invite.deleted': 'Ο σύνδεσμος πρόσκλησης διαγράφηκε',
|
| 128 |
+
'admin.invite.createError': 'Αποτυχία δημιουργίας συνδέσμου πρόσκλησης',
|
| 129 |
+
'admin.invite.deleteError': 'Αποτυχία διαγραφής συνδέσμου πρόσκλησης',
|
| 130 |
+
'admin.tabs.settings': 'Ρυθμίσεις',
|
| 131 |
+
'admin.allowRegistration': 'Να επιτρέπονται οι εγγραφές',
|
| 132 |
+
'admin.allowRegistrationHint':
|
| 133 |
+
'Οι νέοι χρήστες μπορούν να εγγράφονται μόνοι τους',
|
| 134 |
+
'admin.authMethods': 'Μέθοδοι Ελέγχου Ταυτότητας',
|
| 135 |
+
'admin.passwordLogin': 'Σύνδεση με Κωδικό',
|
| 136 |
+
'admin.passwordLoginHint':
|
| 137 |
+
'Επιτρέψτε στους χρήστες να συνδέονται με email και κωδικό',
|
| 138 |
+
'admin.passwordRegistration': 'Εγγραφή με Κωδικό',
|
| 139 |
+
'admin.passwordRegistrationHint':
|
| 140 |
+
'Επιτρέψτε σε νέους χρήστες να εγγράφονται με email και κωδικό',
|
| 141 |
+
'admin.oidcLogin': 'Σύνδεση SSO',
|
| 142 |
+
'admin.oidcLoginHint': 'Επιτρέψτε στους χρήστες να συνδέονται με SSO',
|
| 143 |
+
'admin.oidcRegistration': 'Αυτόματη Δημιουργία SSO',
|
| 144 |
+
'admin.oidcRegistrationHint':
|
| 145 |
+
'Αυτόματη δημιουργία λογαριασμών για νέους χρήστες SSO',
|
| 146 |
+
'admin.envOverrideHint':
|
| 147 |
+
'Οι ρυθμίσεις σύνδεσης με κωδικό ελέγχονται από τη μεταβλητή περιβάλλοντος OIDC_ONLY και δεν μπορούν να αλλάξουν εδώ.',
|
| 148 |
+
'admin.lockoutWarning':
|
| 149 |
+
'Πρέπει να παραμείνει ενεργοποιημένη τουλάχιστον μία μέθοδος σύνδεσης',
|
| 150 |
+
'admin.requireMfa': 'Απαίτηση ελέγχου ταυτότητας δύο παραγόντων (2FA)',
|
| 151 |
+
'admin.requireMfaHint':
|
| 152 |
+
'Οι χρήστες χωρίς 2FA πρέπει να ολοκληρώσουν τη ρύθμιση στις Ρυθμίσεις πριν χρησιμοποιήσουν την εφαρμογή.',
|
| 153 |
+
'admin.apiKeys': 'Κλειδιά API',
|
| 154 |
+
'admin.apiKeysHint':
|
| 155 |
+
'Προαιρετικά. Ενεργοποιεί εκτεταμένα δεδομένα τόπων όπως φωτογραφίες και καιρό.',
|
| 156 |
+
'admin.mapsKey': 'Google Maps API Key',
|
| 157 |
+
'admin.mapsKeyHint':
|
| 158 |
+
'Απαιτείται για αναζήτηση τόπων. Λάβετε το από console.cloud.google.com',
|
| 159 |
+
'admin.mapsKeyHintLong':
|
| 160 |
+
'Χωρίς κλειδί API, χρησιμοποιείται το OpenStreetMap για αναζήτηση τόπων. Με κλειδί Google API, μπορούν επίσης να φορτωθούν φωτογραφίες, βαθμολογίες και ώρες λειτουργίας. Λάβετε ένα στο console.cloud.google.com.',
|
| 161 |
+
'admin.recommended': 'Συνιστάται',
|
| 162 |
+
'admin.weatherKey': 'OpenWeatherMap API Key',
|
| 163 |
+
'admin.weatherKeyHint': 'Για δεδομένα καιρού. Δωρεάν στο openweathermap.org',
|
| 164 |
+
'admin.validateKey': 'Δοκιμή',
|
| 165 |
+
'admin.keyValid': 'Συνδέθηκε',
|
| 166 |
+
'admin.keyInvalid': 'Μη έγκυρο',
|
| 167 |
+
'admin.keySaved': 'Τα κλειδιά API αποθηκεύτηκαν',
|
| 168 |
+
'admin.oidcTitle': 'Ενιαία Σύνδεση (OIDC)',
|
| 169 |
+
'admin.oidcSubtitle':
|
| 170 |
+
'Επιτρέψτε τη σύνδεση μέσω εξωτερικών παρόχων όπως Google, Apple, Authentik ή Keycloak.',
|
| 171 |
+
'admin.oidcDisplayName': 'Εμφανιζόμενο Όνομα',
|
| 172 |
+
'admin.oidcIssuer': 'Issuer URL',
|
| 173 |
+
'admin.oidcIssuerHint':
|
| 174 |
+
'Το OpenID Connect Issuer URL του παρόχου. π.χ. https://accounts.google.com',
|
| 175 |
+
'admin.oidcSaved': 'Η διαμόρφωση OIDC αποθηκεύτηκε',
|
| 176 |
+
'admin.oidcOnlyMode': 'Απενεργοποίηση ελέγχου ταυτότητας με κωδικό',
|
| 177 |
+
'admin.oidcOnlyModeHint':
|
| 178 |
+
'Όταν είναι ενεργοποιημένο, επιτρέπεται μόνο η σύνδεση SSO. Η σύνδεση και εγγραφή με κωδικό αποκλείονται.',
|
| 179 |
+
'admin.fileTypes': 'Επιτρεπόμενοι Τύποι Αρχείων',
|
| 180 |
+
'admin.fileTypesHint':
|
| 181 |
+
'Ρυθμίστε ποιους τύπους αρχείων μπορούν να μεταφορτώνουν οι χρήστες.',
|
| 182 |
+
'admin.fileTypesFormat':
|
| 183 |
+
'Επεκτάσεις χωρισμένες με κόμμα (π.χ. jpg,png,pdf,doc). Χρησιμοποιήστε * για να επιτρέπονται όλοι οι τύποι.',
|
| 184 |
+
'admin.fileTypesSaved': 'Οι ρυθμίσεις τύπων αρχείων αποθηκεύτηκαν',
|
| 185 |
+
'admin.placesPhotos.title': 'Φωτογραφίες Τόπων',
|
| 186 |
+
'admin.placesPhotos.subtitle':
|
| 187 |
+
'Λήψη φωτογραφιών από το Google Places API. Απενεργοποιήστε για εξοικονόμηση ποσοστώσης API. Οι φωτογραφίες Wikimedia δεν επηρεάζονται.',
|
| 188 |
+
'admin.placesAutocomplete.title': 'Αυτόματη Συμπλήρωση Τόπων',
|
| 189 |
+
'admin.placesAutocomplete.subtitle':
|
| 190 |
+
'Χρήση του Google Places API για προτάσεις αναζήτησης. Απενεργοποιήστε για εξοικονόμηση ποσοστώσης API.',
|
| 191 |
+
'admin.placesDetails.title': 'Λεπτομέρειες Τόπου',
|
| 192 |
+
'admin.placesDetails.subtitle':
|
| 193 |
+
'Λήψη λεπτομερών πληροφοριών τόπου (ώρες, βαθμολογία, ιστοσελίδα) από το Google Places API. Απενεργοποιήστε για εξοικονόμηση ποσοστώσης API.',
|
| 194 |
+
'admin.bagTracking.title': 'Παρακολούθηση Αποσκευών',
|
| 195 |
+
'admin.bagTracking.subtitle':
|
| 196 |
+
'Ενεργοποίηση βάρους και ανάθεσης τσάντας για αντικείμενα πακεταρίσματος',
|
| 197 |
+
'admin.collab.chat.title': 'Συνομιλία',
|
| 198 |
+
'admin.collab.chat.subtitle':
|
| 199 |
+
'Μηνύματα πραγματικού χρόνου για συνεργασία ταξιδιού',
|
| 200 |
+
'admin.collab.notes.title': 'Σημειώσεις',
|
| 201 |
+
'admin.collab.notes.subtitle': 'Κοινόχρηστες σημειώσεις και έγγραφα',
|
| 202 |
+
'admin.collab.polls.title': 'Δημοσκοπήσεις',
|
| 203 |
+
'admin.collab.polls.subtitle': 'Ομαδικές δημοσκοπήσεις και ψηφοφορίες',
|
| 204 |
+
'admin.collab.whatsnext.title': 'Τι Ακολουθεί',
|
| 205 |
+
'admin.collab.whatsnext.subtitle':
|
| 206 |
+
'Προτάσεις δραστηριοτήτων και επόμενα βήματα',
|
| 207 |
+
'admin.tabs.config': 'Εξατομίκευση',
|
| 208 |
+
'admin.tabs.defaults': 'Προεπιλογές Χρήστη',
|
| 209 |
+
'admin.defaultSettings.title': 'Προεπιλεγμένες Ρυθμίσεις Χρήστη',
|
| 210 |
+
'admin.defaultSettings.description':
|
| 211 |
+
'Ορίστε προεπιλογές για όλη την υπηρεσία. Οι χρήστες που δεν έχουν αλλάξει μια ρύθμιση θα βλέπουν αυτές τις τιμές. Οι δικές τους αλλαγές έχουν πάντα προτεραιότητα.',
|
| 212 |
+
'admin.defaultSettings.saved': 'Η προεπιλογή αποθηκεύτηκε',
|
| 213 |
+
'admin.defaultSettings.reset': 'Επαναφορά στην ενσωματωμένη προεπιλογή',
|
| 214 |
+
'admin.defaultSettings.resetToBuiltIn': 'επαναφορά',
|
| 215 |
+
'admin.tabs.templates': 'Πρότυπα Πακεταρίσματος',
|
| 216 |
+
'admin.packingTemplates.title': 'Πρότυπα Πακεταρίσματος',
|
| 217 |
+
'admin.packingTemplates.subtitle':
|
| 218 |
+
'Δημιουργήστε επαναχρησιμοποιήσιμες λίστες πακεταρίσματος για τα ταξίδια σας',
|
| 219 |
+
'admin.packingTemplates.create': 'Νέο Πρότυπο',
|
| 220 |
+
'admin.packingTemplates.namePlaceholder':
|
| 221 |
+
'Όνομα προτύπου (π.χ. Διακοπές στην Παραλία)',
|
| 222 |
+
'admin.packingTemplates.empty': 'Δεν έχουν δημιουργηθεί πρότυπα ακόμη',
|
| 223 |
+
'admin.packingTemplates.items': 'αντικείμενα',
|
| 224 |
+
'admin.packingTemplates.categories': 'κατηγορίες',
|
| 225 |
+
'admin.packingTemplates.itemName': 'Όνομα αντικειμένου',
|
| 226 |
+
'admin.packingTemplates.itemCategory': 'Κατηγορία',
|
| 227 |
+
'admin.packingTemplates.categoryName': 'Όνομα κατηγορίας (π.χ. Ρούχα)',
|
| 228 |
+
'admin.packingTemplates.addCategory': 'Προσθήκη κατηγορίας',
|
| 229 |
+
'admin.packingTemplates.created': 'Το πρότυπο δημιουργήθηκε',
|
| 230 |
+
'admin.packingTemplates.deleted': 'Το πρότυπο διαγράφηκε',
|
| 231 |
+
'admin.packingTemplates.loadError': 'Αποτυχία φόρτωσης προτύπων',
|
| 232 |
+
'admin.packingTemplates.createError': 'Αποτυχία δημιουργίας προτύπου',
|
| 233 |
+
'admin.packingTemplates.deleteError': 'Αποτυχία διαγραφής προτύπου',
|
| 234 |
+
'admin.packingTemplates.saveError': 'Αποτυχία αποθήκευσης',
|
| 235 |
+
'admin.tabs.addons': 'Πρόσθετα',
|
| 236 |
+
'admin.addons.title': 'Πρόσθετα',
|
| 237 |
+
'admin.addons.subtitle':
|
| 238 |
+
'Ενεργοποιήστε ή απενεργοποιήστε λειτουργίες για να εξατομικεύσετε την εμπειρία σας στο TREK.',
|
| 239 |
+
'admin.addons.catalog.packing.name': 'Λίστες',
|
| 240 |
+
'admin.addons.catalog.packing.description':
|
| 241 |
+
'Λίστες πακεταρίσματος και εργασίες προς εκτέλεση για τα ταξίδια σας',
|
| 242 |
+
'admin.addons.catalog.budget.name': 'Προϋπολογισμός',
|
| 243 |
+
'admin.addons.catalog.budget.description':
|
| 244 |
+
'Παρακολουθήστε τα έξοδα και σχεδιάστε τον προϋπολογισμό του ταξιδιού σας',
|
| 245 |
+
'admin.addons.catalog.documents.name': 'Έγγραφα',
|
| 246 |
+
'admin.addons.catalog.documents.description':
|
| 247 |
+
'Αποθηκεύστε και διαχειριστείτε ταξιδιωτικά έγγραφα',
|
| 248 |
+
'admin.addons.catalog.vacay.name': 'Vacay',
|
| 249 |
+
'admin.addons.catalog.vacay.description':
|
| 250 |
+
'Προσωπικός σχεδιαστής διακοπών με προβολή ημερολογίου',
|
| 251 |
+
'admin.addons.catalog.atlas.name': 'Atlas',
|
| 252 |
+
'admin.addons.catalog.atlas.description':
|
| 253 |
+
'Παγκόσμιος χάρτης με χώρες που έχετε επισκεφθεί και ταξιδιωτικά στατιστικά',
|
| 254 |
+
'admin.addons.catalog.collab.name': 'Collab',
|
| 255 |
+
'admin.addons.catalog.collab.description':
|
| 256 |
+
'Σημειώσεις, δημοσκοπήσεις και συνομιλία πραγματικού χρόνου για σχεδιασμό ταξιδιού',
|
| 257 |
+
'admin.addons.catalog.memories.name': 'Φωτογραφίες (Immich)',
|
| 258 |
+
'admin.addons.catalog.memories.description':
|
| 259 |
+
'Μοιραστείτε φωτογραφίες ταξιδιού μέσω της δικής σας εγκατάστασης Immich',
|
| 260 |
+
'admin.addons.catalog.mcp.name': 'MCP',
|
| 261 |
+
'admin.addons.catalog.mcp.description':
|
| 262 |
+
'Model Context Protocol για ενσωμάτωση βοηθού AI',
|
| 263 |
+
'admin.addons.subtitleBefore':
|
| 264 |
+
'Ενεργοποιήστε ή απενεργοποιήστε λειτουργίες για να εξατομικεύσετε την εμπειρία σας στο ',
|
| 265 |
+
'admin.addons.subtitleAfter': '.',
|
| 266 |
+
'admin.addons.enabled': 'Ενεργοποιημένο',
|
| 267 |
+
'admin.addons.disabled': 'Απενεργοποιημένο',
|
| 268 |
+
'admin.addons.type.trip': 'Ταξίδι',
|
| 269 |
+
'admin.addons.type.global': 'Καθολικό',
|
| 270 |
+
'admin.addons.type.integration': 'Ενσωμάτωση',
|
| 271 |
+
'admin.addons.tripHint': 'Διαθέσιμο ως καρτέλα μέσα σε κάθε ταξίδι',
|
| 272 |
+
'admin.addons.globalHint':
|
| 273 |
+
'Διαθέσιμο ως αυτόνομη ενότητα στην κύρια πλοήγηση',
|
| 274 |
+
'admin.addons.integrationHint':
|
| 275 |
+
'Υπηρεσίες backend και ενσωματώσεις API χωρίς ειδική σελίδα',
|
| 276 |
+
'admin.addons.toast.updated': 'Το πρόσθετο ενημερώθηκε',
|
| 277 |
+
'admin.addons.toast.error': 'Αποτυχία ενημέρωσης προσθέτου',
|
| 278 |
+
'admin.addons.noAddons': 'Δεν υπάρχουν διαθέσιμα πρόσθετα',
|
| 279 |
+
'admin.weather.title': 'Δεδομένα Καιρού',
|
| 280 |
+
'admin.weather.badge': 'Από 24 Μαρτίου 2026',
|
| 281 |
+
'admin.weather.description':
|
| 282 |
+
'Το TREK χρησιμοποιεί το Open-Meteo ως πηγή δεδομένων καιρού. Το Open-Meteo είναι μια δωρεάν, ανοιχτού κώδικα υπηρεσία καιρού — δεν απαιτείται κλειδί API.',
|
| 283 |
+
'admin.weather.forecast': 'Πρόγνωση 16 ημερών',
|
| 284 |
+
'admin.weather.forecastDesc': 'Προηγουμένως 5 ημέρες (OpenWeatherMap)',
|
| 285 |
+
'admin.weather.climate': 'Ιστορικά δεδομένα κλίματος',
|
| 286 |
+
'admin.weather.climateDesc':
|
| 287 |
+
'Μέσοι όροι από τα τελευταία 85 χρόνια για ημέρες πέρα από την πρόγνωση 16 ημερών',
|
| 288 |
+
'admin.weather.requests': '10.000 αιτήματα / ημέρα',
|
| 289 |
+
'admin.weather.requestsDesc': 'Δωρεάν, δεν απαιτείται κλειδί API',
|
| 290 |
+
'admin.weather.locationHint':
|
| 291 |
+
'Ο καιρός βασίζεται στον πρώτο τόπο με συντεταγμένες σε κάθε ημέρα. Αν δεν έχει ανατεθεί τόπος σε μια ημέρα, χρησιμοποιείται ως αναφορά οποιοσδήποτε τόπος από τη λίστα.',
|
| 292 |
+
'admin.tabs.mcpTokens': 'Πρόσβαση MCP',
|
| 293 |
+
'admin.mcpTokens.title': 'Πρόσβαση MCP',
|
| 294 |
+
'admin.mcpTokens.subtitle':
|
| 295 |
+
'Διαχείριση συνεδριών OAuth και διακριτικών API για όλους τους χρήστες',
|
| 296 |
+
'admin.mcpTokens.sectionTitle': 'Διακριτικά API',
|
| 297 |
+
'admin.mcpTokens.owner': 'Κάτοχος',
|
| 298 |
+
'admin.mcpTokens.tokenName': 'Όνομα Διακριτικού',
|
| 299 |
+
'admin.mcpTokens.created': 'Δημιουργήθηκε',
|
| 300 |
+
'admin.mcpTokens.lastUsed': 'Τελευταία Χρήση',
|
| 301 |
+
'admin.mcpTokens.never': 'Ποτέ',
|
| 302 |
+
'admin.mcpTokens.empty': 'Δεν έχουν δημιουργηθεί διακριτικά MCP ακόμη',
|
| 303 |
+
'admin.mcpTokens.deleteTitle': 'Διαγραφή Διακριτικού',
|
| 304 |
+
'admin.mcpTokens.deleteMessage':
|
| 305 |
+
'Αυτό θα ανακαλέσει το διακριτικό άμεσα. Ο χρήστης θα χάσει την πρόσβαση MCP μέσω αυτού του διακριτικού.',
|
| 306 |
+
'admin.mcpTokens.deleteSuccess': 'Το διακριτικό διαγράφηκε',
|
| 307 |
+
'admin.mcpTokens.deleteError': 'Αποτυχία διαγραφής διακριτικού',
|
| 308 |
+
'admin.mcpTokens.loadError': 'Αποτυχία φόρτωσης διακριτικών',
|
| 309 |
+
'admin.oauthSessions.sectionTitle': 'Συνεδρίες OAuth',
|
| 310 |
+
'admin.oauthSessions.clientName': 'Πελάτης',
|
| 311 |
+
'admin.oauthSessions.owner': 'Κάτοχος',
|
| 312 |
+
'admin.oauthSessions.scopes': 'Scopes',
|
| 313 |
+
'admin.oauthSessions.created': 'Δημιουργήθηκε',
|
| 314 |
+
'admin.oauthSessions.empty': 'Δεν υπάρχουν ενεργές συνεδρίες OAuth',
|
| 315 |
+
'admin.oauthSessions.revokeTitle': 'Ανάκληση Συνεδρίας',
|
| 316 |
+
'admin.oauthSessions.revokeMessage':
|
| 317 |
+
'Αυτό θα ανακαλέσει τη συνεδρία OAuth άμεσα. Ο πελάτης θα χάσει την πρόσβαση MCP.',
|
| 318 |
+
'admin.oauthSessions.revokeSuccess': 'Η συνεδρία ανακλήθηκε',
|
| 319 |
+
'admin.oauthSessions.revokeError': 'Αποτυχία ανάκλησης συνεδρίας',
|
| 320 |
+
'admin.oauthSessions.loadError': 'Αποτυχία φόρτωσης συνεδριών OAuth',
|
| 321 |
+
'admin.tabs.github': 'GitHub',
|
| 322 |
+
'admin.audit.subtitle':
|
| 323 |
+
'Συμβάντα ασφαλείας και διαχείρισης (αντίγραφα ασφαλείας, χρήστες, MFA, ρυθμίσεις).',
|
| 324 |
+
'admin.audit.empty': 'Δεν υπάρχουν εγγραφές ελέγχου ακόμη.',
|
| 325 |
+
'admin.audit.refresh': 'Ανανέωση',
|
| 326 |
+
'admin.audit.loadMore': 'Φόρτωση περισσότερων',
|
| 327 |
+
'admin.audit.showing': '{count} φορτώθηκαν · {total} σύνολο',
|
| 328 |
+
'admin.audit.col.time': 'Ώρα',
|
| 329 |
+
'admin.audit.col.user': 'Χρήστης',
|
| 330 |
+
'admin.audit.col.action': 'Ενέργεια',
|
| 331 |
+
'admin.audit.col.resource': 'Πόρος',
|
| 332 |
+
'admin.audit.col.ip': 'IP',
|
| 333 |
+
'admin.audit.col.details': 'Λεπτομέρειες',
|
| 334 |
+
'admin.github.title': 'Ιστορικό Εκδόσεων',
|
| 335 |
+
'admin.github.subtitle': 'Τελευταίες ενημερώσεις από {repo}',
|
| 336 |
+
'admin.github.latest': 'Τελευταία',
|
| 337 |
+
'admin.github.prerelease': 'Προ-έκδοση',
|
| 338 |
+
'admin.github.showDetails': 'Εμφάνιση λεπτομερειών',
|
| 339 |
+
'admin.github.hideDetails': 'Απόκρυψη λεπτομερειών',
|
| 340 |
+
'admin.github.loadMore': 'Φόρτωση περισσότερων',
|
| 341 |
+
'admin.github.loading': 'Φόρτωση...',
|
| 342 |
+
'admin.github.error': 'Αποτυχία φόρτωσης εκδόσεων',
|
| 343 |
+
'admin.github.by': 'από',
|
| 344 |
+
'admin.github.support': 'Βοηθά να συνεχίσω την ανάπτυξη του TREK',
|
| 345 |
+
'admin.update.available': 'Διαθέσιμη ενημέρωση',
|
| 346 |
+
'admin.update.text':
|
| 347 |
+
'Το TREK {version} είναι διαθέσιμο. Εκτελείτε το {current}.',
|
| 348 |
+
'admin.update.button': 'Προβολή στο GitHub',
|
| 349 |
+
'admin.update.install': 'Εγκατάσταση Ενημέρωσης',
|
| 350 |
+
'admin.update.confirmTitle': 'Εγκατάσταση Ενημέρωσης;',
|
| 351 |
+
'admin.update.confirmText':
|
| 352 |
+
'Το TREK θα ενημερωθεί από {current} σε {version}. Ο server θα επανεκκινήσει αυτόματα στη συνέχεια.',
|
| 353 |
+
'admin.update.dataInfo':
|
| 354 |
+
'Όλα τα δεδομένα σας (ταξίδια, χρήστες, κλειδιά API, μεταφορτώσεις, Vacay, Atlas, προϋπολογισμοί) θα διατηρηθούν.',
|
| 355 |
+
'admin.update.warning':
|
| 356 |
+
'Η εφαρμογή θα είναι σύντομα μη διαθέσιμη κατά την επανεκκίνηση.',
|
| 357 |
+
'admin.update.confirm': 'Ενημέρωση Τώρα',
|
| 358 |
+
'admin.update.installing': 'Ενημέρωση…',
|
| 359 |
+
'admin.update.success': 'Η ενημέρωση εγκαταστάθηκε! Ο server επανεκκινεί…',
|
| 360 |
+
'admin.update.failed': 'Η ενημέρωση απέτυχε',
|
| 361 |
+
'admin.update.backupHint':
|
| 362 |
+
'Συνιστούμε να δημιουργήσετε ένα αντίγραφο ασφαλείας πριν την ενημέρωση.',
|
| 363 |
+
'admin.update.backupLink': 'Μετάβαση στο Αντίγραφο Ασφαλείας',
|
| 364 |
+
'admin.update.howTo': 'Πώς να Ενημερώσετε',
|
| 365 |
+
'admin.update.dockerText':
|
| 366 |
+
'Η εγκατάστασή σας TREK εκτελείται σε Docker. Για να ενημερωθείτε στο {version}, εκτελέστε τις ακόλουθες εντολές στον server σας:',
|
| 367 |
+
'admin.update.reloadHint':
|
| 368 |
+
'Παρακαλώ ανανεώστε τη σελίδα σε λίγα δευτερόλεπτα.',
|
| 369 |
+
'admin.tabs.permissions': 'Δικαιώματα',
|
| 370 |
+
'admin.addons.catalog.journey.name': 'Ταξίδι',
|
| 371 |
+
'admin.addons.catalog.journey.description':
|
| 372 |
+
'Παρακολούθηση ταξιδιών & ημερολόγιο ταξιδιών με αφίξεις, φωτογραφίες και καθημερινές ιστορίες',
|
| 373 |
+
'admin.passkey.title': 'Σύνδεση με passkey',
|
| 374 |
+
'admin.passkey.cardHint':
|
| 375 |
+
'Επιτρέψτε στους χρήστες να συνδέονται με passkeys (WebAuthn). Απενεργοποιημένο από προεπιλογή.',
|
| 376 |
+
'admin.passkey.login': 'Ενεργοποίηση σύνδεσης με passkey',
|
| 377 |
+
'admin.passkey.loginHint':
|
| 378 |
+
'Εμφανίστε μια επιλογή "Σύνδεση με passkey" και επιτρέψτε στους χρήστες να καταχωρούν passkeys στις ρυθμίσεις τους.',
|
| 379 |
+
'admin.passkey.notConfigured':
|
| 380 |
+
'Δεν αναλύεται ακόμη κανένας τομέας WebAuthn για αυτή την εγκατάσταση. Ορίστε το APP_URL ή το Relying Party ID παρακάτω — τα passkeys παραμένουν κρυφά μέχρι τότε.',
|
| 381 |
+
'admin.passkey.rpId': 'Relying Party ID (τομέας)',
|
| 382 |
+
'admin.passkey.rpIdHint':
|
| 383 |
+
'Ο σκέτος τομέας στον οποίο δεσμεύονται τα passkeys, π.χ. trek.example.org. Αφήστε το κενό για να παραχθεί από το APP_URL. Η μεταγενέστερη αλλαγή του ακυρώνει τα υπάρχοντα passkeys.',
|
| 384 |
+
'admin.passkey.origins': 'Επιτρεπόμενες προελεύσεις',
|
| 385 |
+
'admin.passkey.originsHint':
|
| 386 |
+
'Πλήρεις προελεύσεις χωρισμένες με κόμμα, π.χ. https://trek.example.org. Αφήστε το κενό για χρήση του APP_URL.',
|
| 387 |
+
'admin.passkey.reset': 'Επαναφορά passkeys',
|
| 388 |
+
'admin.passkey.resetHint':
|
| 389 |
+
'Αφαιρέστε όλα τα passkeys αυτού του χρήστη (π.χ. σε περίπτωση χαμένης συσκευής). Μπορούν ακόμη να συνδεθούν με τον κωδικό τους.',
|
| 390 |
+
'admin.passkey.resetConfirm': 'Αφαίρεση όλων των passkeys για τον/την {name};',
|
| 391 |
+
'admin.passkey.resetDone': 'Αφαιρέθηκαν {count} passkey(s)',
|
| 392 |
+
'admin.defaultSettings.mapProvider': 'Μηχανή χάρτη',
|
| 393 |
+
'admin.defaultSettings.mapProviderHint': 'Ο προεπιλεγμένος χάρτης για όλους σε αυτή την εγκατάσταση. Κάθε χρήστης μπορεί να τον αλλάξει στις δικές του ρυθμίσεις.',
|
| 394 |
+
'admin.defaultSettings.providerLeaflet': 'Τυπικός (δωρεάν)',
|
| 395 |
+
'admin.defaultSettings.providerMapbox': 'Mapbox (3D)',
|
| 396 |
+
'admin.defaultSettings.mapboxToken': 'Κοινόχρηστο διακριτικό Mapbox',
|
| 397 |
+
'admin.defaultSettings.mapboxTokenHint': 'Χρησιμοποιείται για κάθε χρήστη που δεν έχει εισαγάγει το δικό του διακριτικό — έτσι ολόκληρη η εγκατάσταση αποκτά Mapbox χωρίς να μοιράζεται το κλειδί ξεχωριστά. Αποθηκεύεται κρυπτογραφημένο.',
|
| 398 |
+
'admin.defaultSettings.mapboxStyle': 'Στυλ χάρτη',
|
| 399 |
+
'admin.defaultSettings.mapboxStylePlaceholder': 'Επιλέξτε ένα στυλ…',
|
| 400 |
+
'admin.defaultSettings.mapbox3d': 'Κτίρια & ανάγλυφο 3D',
|
| 401 |
+
'admin.defaultSettings.mapboxQuality': 'Λειτουργία υψηλής ποιότητας',
|
| 402 |
+
};
|
| 403 |
+
export default admin;
|
shared/src/i18n/gr/airport.ts
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import type { TranslationStrings } from '../types';
|
| 2 |
+
|
| 3 |
+
const airport: TranslationStrings = {
|
| 4 |
+
'airport.searchPlaceholder': 'Κωδικός αεροδρομίου ή πόλη (π.χ. FRA)',
|
| 5 |
+
};
|
| 6 |
+
export default airport;
|
shared/src/i18n/gr/atlas.ts
ADDED
|
@@ -0,0 +1,61 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import type { TranslationStrings } from '../types';
|
| 2 |
+
|
| 3 |
+
const atlas: TranslationStrings = {
|
| 4 |
+
'atlas.subtitle': 'Το ταξιδιωτικό σας αποτύπωμα σε όλο τον κόσμο',
|
| 5 |
+
'atlas.countries': 'Χώρες',
|
| 6 |
+
'atlas.trips': 'Ταξίδια',
|
| 7 |
+
'atlas.places': 'Μέρη',
|
| 8 |
+
'atlas.unmark': 'Αφαίρεση',
|
| 9 |
+
'atlas.confirmMark': 'Σήμανση αυτής της χώρας ως επισκεφθείσας;',
|
| 10 |
+
'atlas.confirmUnmark': 'Αφαίρεση αυτής της χώρας από τη λίστα επισκεφθέντων;',
|
| 11 |
+
'atlas.confirmUnmarkRegion':
|
| 12 |
+
'Αφαίρεση αυτής της περιοχής από τη λίστα επισκεφθέντων;',
|
| 13 |
+
'atlas.markVisited': 'Σήμανση ως επισκεφθείσα',
|
| 14 |
+
'atlas.markVisitedHint': 'Προσθέστε αυτή τη χώρα στη λίστα επισκεφθέντων',
|
| 15 |
+
'atlas.markRegionVisitedHint':
|
| 16 |
+
'Προσθέστε αυτή την περιοχή στη λίστα επισκεφθέντων',
|
| 17 |
+
'atlas.addToBucket': 'Προσθήκη στη λίστα επιθυμιών',
|
| 18 |
+
'atlas.addPoi': 'Προσθήκη μέρους',
|
| 19 |
+
'atlas.searchCountry': 'Αναζήτηση χώρας...',
|
| 20 |
+
'atlas.bucketNamePlaceholder': 'Όνομα (χώρα, πόλη, μέρος...)',
|
| 21 |
+
'atlas.month': 'Μήνας',
|
| 22 |
+
'atlas.year': 'Έτος',
|
| 23 |
+
'atlas.addToBucketHint': 'Αποθηκεύστε ως μέρος που θέλετε να επισκεφθείτε',
|
| 24 |
+
'atlas.bucketWhen': 'Πότε σκοπεύετε να το επισκεφθείτε;',
|
| 25 |
+
'atlas.statsTab': 'Στατιστικά',
|
| 26 |
+
'atlas.bucketTab': 'Λίστα Επιθυμιών',
|
| 27 |
+
'atlas.addBucket': 'Προσθήκη στη λίστα επιθυμιών',
|
| 28 |
+
'atlas.bucketNotesPlaceholder': 'Σημειώσεις (προαιρετικό)',
|
| 29 |
+
'atlas.bucketEmpty': 'Η λίστα επιθυμιών σας είναι κενή',
|
| 30 |
+
'atlas.bucketEmptyHint': 'Προσθέστε μέρη που ονειρεύεστε να επισκεφθείτε',
|
| 31 |
+
'atlas.days': 'Ημέρες',
|
| 32 |
+
'atlas.visitedCountries': 'Επισκεφθείσες Χώρες',
|
| 33 |
+
'atlas.cities': 'Πόλεις',
|
| 34 |
+
'atlas.noData': 'Δεν υπάρχουν ταξιδιωτικά δεδομένα ακόμη',
|
| 35 |
+
'atlas.noDataHint':
|
| 36 |
+
'Δημιουργήστε ένα ταξίδι και προσθέστε μέρη για να δείτε τον παγκόσμιο χάρτη σας',
|
| 37 |
+
'atlas.lastTrip': 'Τελευταίο ταξίδι',
|
| 38 |
+
'atlas.nextTrip': 'Επόμενο ταξίδι',
|
| 39 |
+
'atlas.daysLeft': 'ημέρες απομένουν',
|
| 40 |
+
'atlas.streak': 'Σερί',
|
| 41 |
+
'atlas.years': 'έτη',
|
| 42 |
+
'atlas.yearInRow': 'έτος στη σειρά',
|
| 43 |
+
'atlas.yearsInRow': 'έτη στη σειρά',
|
| 44 |
+
'atlas.tripIn': 'ταξίδι σε',
|
| 45 |
+
'atlas.tripsIn': 'ταξίδια σε',
|
| 46 |
+
'atlas.since': 'από',
|
| 47 |
+
'atlas.europe': 'Ευρώπη',
|
| 48 |
+
'atlas.asia': 'Ασία',
|
| 49 |
+
'atlas.northAmerica': 'Β. Αμερική',
|
| 50 |
+
'atlas.southAmerica': 'Ν. Αμερική',
|
| 51 |
+
'atlas.africa': 'Αφρική',
|
| 52 |
+
'atlas.oceania': 'Ωκεανία',
|
| 53 |
+
'atlas.other': 'Άλλο',
|
| 54 |
+
'atlas.firstVisit': 'Πρώτο ταξίδι',
|
| 55 |
+
'atlas.lastVisitLabel': 'Τελευταίο ταξίδι',
|
| 56 |
+
'atlas.tripSingular': 'Ταξίδι',
|
| 57 |
+
'atlas.tripPlural': 'Ταξίδια',
|
| 58 |
+
'atlas.placeVisited': 'Μέρος που επισκεφθήκατε',
|
| 59 |
+
'atlas.placesVisited': 'Μέρη που επισκεφθήκατε',
|
| 60 |
+
};
|
| 61 |
+
export default atlas;
|
shared/src/i18n/gr/backup.ts
ADDED
|
@@ -0,0 +1,79 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import type { TranslationStrings } from '../types';
|
| 2 |
+
|
| 3 |
+
const backup: TranslationStrings = {
|
| 4 |
+
'backup.title': 'Αντίγραφο Ασφαλείας Δεδομένων',
|
| 5 |
+
'backup.subtitle': 'Βάση δεδομένων και όλα τα μεταφορτωμένα αρχεία',
|
| 6 |
+
'backup.refresh': 'Ανανέωση',
|
| 7 |
+
'backup.upload': 'Μεταφόρτωση Αντιγράφου',
|
| 8 |
+
'backup.uploading': 'Μεταφόρτωση…',
|
| 9 |
+
'backup.create': 'Δημιουργία Αντιγράφου',
|
| 10 |
+
'backup.creating': 'Δημιουργία…',
|
| 11 |
+
'backup.empty': 'Δεν υπάρχουν αντίγραφα ασφαλείας ακόμη',
|
| 12 |
+
'backup.createFirst': 'Δημιουργία πρώτου αντιγράφου',
|
| 13 |
+
'backup.download': 'Λήψη',
|
| 14 |
+
'backup.restore': 'Επαναφορά',
|
| 15 |
+
'backup.confirm.restore':
|
| 16 |
+
'Επαναφορά αντιγράφου "{name}";\n\nΌλα τα τρέχοντα δεδομένα θα αντικατασταθούν με το αντίγραφο.',
|
| 17 |
+
'backup.confirm.uploadRestore':
|
| 18 |
+
'Μεταφόρτωση και επαναφορά αρχείου αντιγράφου "{name}";\n\nΌλα τα τρέχοντα δεδομένα θα αντικατασταθούν.',
|
| 19 |
+
'backup.confirm.delete': 'Διαγραφή αντιγράφου "{name}";',
|
| 20 |
+
'backup.toast.loadError': 'Αποτυχία φόρτωσης αντιγράφων',
|
| 21 |
+
'backup.toast.created': 'Το αντίγραφο δημιουργήθηκε επιτυχώς',
|
| 22 |
+
'backup.toast.createError': 'Αποτυχία δημιουργίας αντιγράφου',
|
| 23 |
+
'backup.toast.restored':
|
| 24 |
+
'Το αντίγραφο επαναφέρθηκε. Η σελίδα θα επαναφορτωθεί…',
|
| 25 |
+
'backup.toast.restoreError': 'Αποτυχία επαναφοράς',
|
| 26 |
+
'backup.toast.uploadError': 'Αποτυχία μεταφόρτωσης',
|
| 27 |
+
'backup.toast.deleted': 'Το αντίγραφο διαγράφηκε',
|
| 28 |
+
'backup.toast.deleteError': 'Αποτυχία διαγραφής',
|
| 29 |
+
'backup.toast.downloadError': 'Η λήψη απέτυχε',
|
| 30 |
+
'backup.toast.settingsSaved':
|
| 31 |
+
'Οι ρυθμίσεις αυτόματου αντιγράφου αποθηκεύτηκαν',
|
| 32 |
+
'backup.toast.settingsError': 'Αποτυχία αποθήκευσης ρυθμίσεων',
|
| 33 |
+
'backup.auto.title': 'Αυτόματο Αντίγραφο',
|
| 34 |
+
'backup.auto.subtitle': 'Αυτόματο αντίγραφο ασφαλείας με χρονοπρόγραμμα',
|
| 35 |
+
'backup.auto.enable': 'Ενεργοποίηση αυτόματου αντιγράφου',
|
| 36 |
+
'backup.auto.enableHint':
|
| 37 |
+
'Τα αντίγραφα θα δημιουργούνται αυτόματα στο επιλεγμένο χρονοπρόγραμμα',
|
| 38 |
+
'backup.auto.interval': 'Διάστημα',
|
| 39 |
+
'backup.auto.hour': 'Εκτέλεση την ώρα',
|
| 40 |
+
'backup.auto.hourHint': 'Τοπική ώρα διακομιστή (μορφή {format})',
|
| 41 |
+
'backup.auto.dayOfWeek': 'Ημέρα εβδομάδας',
|
| 42 |
+
'backup.auto.dayOfMonth': 'Ημέρα μήνα',
|
| 43 |
+
'backup.auto.dayOfMonthHint':
|
| 44 |
+
'Περιορίζεται σε 1–28 για συμβατότητα με όλους τους μήνες',
|
| 45 |
+
'backup.auto.scheduleSummary': 'Χρονοπρόγραμμα',
|
| 46 |
+
'backup.auto.summaryDaily': 'Κάθε ημέρα στις {hour}:00',
|
| 47 |
+
'backup.auto.summaryWeekly': 'Κάθε {day} στις {hour}:00',
|
| 48 |
+
'backup.auto.summaryMonthly': 'Ημέρα {day} κάθε μήνα στις {hour}:00',
|
| 49 |
+
'backup.auto.envLocked': 'Docker',
|
| 50 |
+
'backup.auto.envLockedHint':
|
| 51 |
+
'Το αυτόματο αντίγραφο είναι ρυθμισμένο μέσω μεταβλητών περιβάλλοντος Docker. Για να αλλάξετε αυτές τις ρυθμίσεις, ενημερώστε το docker-compose.yml και επανεκκινήστε το container.',
|
| 52 |
+
'backup.auto.copyEnv': 'Αντιγραφή μεταβλητών Docker',
|
| 53 |
+
'backup.auto.envCopied': 'Οι μεταβλητές Docker αντιγράφηκαν στο πρόχειρο',
|
| 54 |
+
'backup.auto.keepLabel': 'Διαγραφή παλιών αντιγράφων μετά από',
|
| 55 |
+
'backup.dow.sunday': 'Κυρ',
|
| 56 |
+
'backup.dow.monday': 'Δευ',
|
| 57 |
+
'backup.dow.tuesday': 'Τρι',
|
| 58 |
+
'backup.dow.wednesday': 'Τετ',
|
| 59 |
+
'backup.dow.thursday': 'Πεμ',
|
| 60 |
+
'backup.dow.friday': 'Παρ',
|
| 61 |
+
'backup.dow.saturday': 'Σαβ',
|
| 62 |
+
'backup.interval.hourly': 'Ωριαία',
|
| 63 |
+
'backup.interval.daily': 'Ημερήσια',
|
| 64 |
+
'backup.interval.weekly': 'Εβδομαδιαία',
|
| 65 |
+
'backup.interval.monthly': 'Μηνιαία',
|
| 66 |
+
'backup.keep.1day': '1 ημέρα',
|
| 67 |
+
'backup.keep.3days': '3 ημέρες',
|
| 68 |
+
'backup.keep.7days': '7 ημέρες',
|
| 69 |
+
'backup.keep.14days': '14 ημέρες',
|
| 70 |
+
'backup.keep.30days': '30 ημέρες',
|
| 71 |
+
'backup.keep.forever': 'Διατήρηση για πάντα',
|
| 72 |
+
'backup.restoreConfirmTitle': 'Επαναφορά Αντιγράφου;',
|
| 73 |
+
'backup.restoreWarning':
|
| 74 |
+
'Όλα τα τρέχοντα δεδομένα (ταξίδια, τοποθεσίες, χρήστες, μεταφορτώσεις) θα αντικατασταθούν μόνιμα με το αντίγραφο. Αυτή η ενέργεια δεν μπορεί να αναιρεθεί.',
|
| 75 |
+
'backup.restoreTip':
|
| 76 |
+
'Συμβουλή: Δημιουργήστε ένα αντίγραφο της τρέχουσας κατάστασης πριν την επαναφορά.',
|
| 77 |
+
'backup.restoreConfirm': 'Ναι, επαναφορά',
|
| 78 |
+
};
|
| 79 |
+
export default backup;
|
shared/src/i18n/gr/budget.ts
ADDED
|
@@ -0,0 +1,117 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import type { TranslationStrings } from '../types';
|
| 2 |
+
|
| 3 |
+
const budget: TranslationStrings = {
|
| 4 |
+
'budget.title': 'Προϋπολογισμός',
|
| 5 |
+
'budget.exportCsv': 'Εξαγωγή CSV',
|
| 6 |
+
'budget.emptyTitle': 'Δεν έχει δημιουργηθεί προϋπολογισμός ακόμη',
|
| 7 |
+
'budget.emptyText':
|
| 8 |
+
'Δημιουργήστε κατηγορίες και εγγραφές για να σχεδιάσετε τον ταξιδιωτικό σας προϋπολογισμό',
|
| 9 |
+
'budget.emptyPlaceholder': 'Εισαγάγετε όνομα κατηγορίας...',
|
| 10 |
+
'budget.createCategory': 'Δημιουργία Κατηγορίας',
|
| 11 |
+
'budget.category': 'Κατηγορία',
|
| 12 |
+
'budget.categoryName': 'Όνομα Κατηγορίας',
|
| 13 |
+
'budget.table.name': 'Όνομα',
|
| 14 |
+
'budget.table.total': 'Σύνολο',
|
| 15 |
+
'budget.table.persons': 'Άτομα',
|
| 16 |
+
'budget.table.days': 'Ημέρες',
|
| 17 |
+
'budget.table.perPerson': 'Ανά Άτομο',
|
| 18 |
+
'budget.table.perDay': 'Ανά Ημέρα',
|
| 19 |
+
'budget.table.perPersonDay': 'Α.Α. / Ημέρα',
|
| 20 |
+
'budget.table.note': 'Σημείωση',
|
| 21 |
+
'budget.table.date': 'Ημερομηνία',
|
| 22 |
+
'budget.newEntry': 'Νέα Εγγραφή',
|
| 23 |
+
'budget.defaultEntry': 'Νέα Εγγραφή',
|
| 24 |
+
'budget.defaultCategory': 'Νέα Κατηγορία',
|
| 25 |
+
'budget.total': 'Σύνολο',
|
| 26 |
+
'budget.totalBudget': 'Συνολικός Προϋπολογισμός',
|
| 27 |
+
'budget.byCategory': 'Ανά Κατηγορία',
|
| 28 |
+
'budget.editTooltip': 'Κάντε κλικ για επεξεργασία',
|
| 29 |
+
'budget.linkedToReservation':
|
| 30 |
+
'Συνδεδεμένο με κράτηση — επεξεργαστείτε το όνομα εκεί',
|
| 31 |
+
'budget.confirm.deleteCategory':
|
| 32 |
+
'Είστε σίγουροι ότι θέλετε να διαγράψετε την κατηγορία "{name}" με {count} εγγραφές;',
|
| 33 |
+
'budget.deleteCategory': 'Διαγραφή Κατηγορίας',
|
| 34 |
+
'budget.perPerson': 'Ανά Άτομο',
|
| 35 |
+
'budget.paid': 'Πληρωμένο',
|
| 36 |
+
'budget.open': 'Ανοιχτό',
|
| 37 |
+
'budget.noMembers': 'Δεν έχουν ανατεθεί μέλη',
|
| 38 |
+
'budget.settlement': 'Εκκαθάριση',
|
| 39 |
+
'budget.settlementInfo':
|
| 40 |
+
'Κάντε κλικ στο avatar ενός μέλους σε μια εγγραφή προϋπολογισμού για να το επισημάνετε πράσινο — αυτό σημαίνει ότι πλήρωσε. Η εκκαθάριση δείχνει στη συνέχεια ποιος χρωστάει σε ποιον και πόσα.',
|
| 41 |
+
'budget.netBalances': 'Καθαρά Υπόλοιπα',
|
| 42 |
+
'budget.categoriesLabel': 'κατηγορίες',
|
| 43 |
+
"costs.you": "Εσείς",
|
| 44 |
+
"costs.youShort": "Ε",
|
| 45 |
+
"costs.youLower": "εσείς",
|
| 46 |
+
"costs.youOwe": "Χρωστάτε",
|
| 47 |
+
"costs.youOweSub": "Πρέπει να πληρώσετε άλλους",
|
| 48 |
+
"costs.youreOwed": "Σας χρωστούν",
|
| 49 |
+
"costs.youreOwedSub": "Άλλοι πρέπει να σας πληρώσουν",
|
| 50 |
+
"costs.totalSpend": "Συνολικές δαπάνες ταξιδιού",
|
| 51 |
+
"costs.totalSpendSub": "Όλων των ταξιδιωτών",
|
| 52 |
+
"costs.to": "Προς",
|
| 53 |
+
"costs.from": "Από",
|
| 54 |
+
"costs.allSettled": "Έχετε εξοφλήσει τα πάντα",
|
| 55 |
+
"costs.nothingOwed": "Δεν σας χρωστάει κανείς",
|
| 56 |
+
"costs.yourShare": "Το μερίδιό σας",
|
| 57 |
+
"costs.youPaid": "Πληρώσατε",
|
| 58 |
+
"costs.expenses": "Έξοδα",
|
| 59 |
+
"costs.entries": "{count} εγγραφές",
|
| 60 |
+
"costs.searchPlaceholder": "Αναζήτηση εξόδων…",
|
| 61 |
+
"costs.filter.all": "Όλα",
|
| 62 |
+
"costs.filter.mine": "Πληρωμένα από εμένα",
|
| 63 |
+
"costs.filter.owed": "Μου χρωστούν",
|
| 64 |
+
"costs.addExpense": "Προσθήκη εξόδου",
|
| 65 |
+
"costs.editExpense": "Επεξεργασία εξόδου",
|
| 66 |
+
"costs.noMatch": "Κανένα έξοδο δεν ταιριάζει με την αναζήτησή σας.",
|
| 67 |
+
"costs.emptyText": "Δεν υπάρχουν έξοδα ακόμη. Προσθέστε το πρώτο σας.",
|
| 68 |
+
"costs.spent": "{amount} δαπάνη",
|
| 69 |
+
"costs.noDate": "Χωρίς ημερομηνία",
|
| 70 |
+
"costs.noOnePaid": "Δεν πλήρωσε κανείς ακόμη",
|
| 71 |
+
"costs.youLent": "δανείσατε {amount}",
|
| 72 |
+
"costs.youBorrowed": "δανειστήκατε {amount}",
|
| 73 |
+
"costs.settleUp": "Εξόφληση",
|
| 74 |
+
"costs.history": "Ιστορικό",
|
| 75 |
+
"costs.everyoneSquare": "Όλοι είναι ξεκάθαροι",
|
| 76 |
+
"costs.nothingOutstanding": "Δεν υπάρχουν εκκρεμείς πληρωμές αυτή τη στιγμή.",
|
| 77 |
+
"costs.pay": "πληρώνει",
|
| 78 |
+
"costs.pays": "πληρώνει",
|
| 79 |
+
"costs.settle": "Εξόφληση",
|
| 80 |
+
"costs.balances": "Υπόλοιπα",
|
| 81 |
+
"costs.byCategory": "Ανά κατηγορία",
|
| 82 |
+
"costs.noCategories": "Δεν υπάρχουν έξοδα ακόμη.",
|
| 83 |
+
"costs.settleHistory": "Ιστορικό εξοφλήσεων",
|
| 84 |
+
"costs.noSettlements": "Δεν υπάρχουν εξοφλημένες πληρωμές ακό��η.",
|
| 85 |
+
"costs.paymentsSettled": "{count} πληρωμές εξοφλήθηκαν",
|
| 86 |
+
"costs.paid": "πλήρωσε",
|
| 87 |
+
"costs.undo": "Αναίρεση",
|
| 88 |
+
"costs.whatFor": "Για τι ήταν;",
|
| 89 |
+
"costs.namePlaceholder": "π.χ. Δείπνο, σουβενίρ, βενζίνη…",
|
| 90 |
+
"costs.totalAmount": "Συνολικό ποσό",
|
| 91 |
+
"costs.currency": "Νόμισμα",
|
| 92 |
+
"costs.day": "Ημέρα",
|
| 93 |
+
"costs.rateLabel": "1 {from} σε {to}",
|
| 94 |
+
"costs.category": "Κατηγορία",
|
| 95 |
+
"costs.whoPaid": "Ποιος πλήρωσε;",
|
| 96 |
+
"costs.splitBetween": "Ισόποση κατανομή μεταξύ",
|
| 97 |
+
"costs.pickSomeone": "Επιλέξτε τουλάχιστον ένα άτομο για τον διαμοιρασμό.",
|
| 98 |
+
"costs.splitSummary": "Κατανομή σε {count} μέρη · {amount} το καθένα",
|
| 99 |
+
"costs.cat.accommodation": "Διαμονή",
|
| 100 |
+
"costs.cat.food": "Φαγητό & ποτό",
|
| 101 |
+
"costs.cat.groceries": "Ψώνια σούπερ μάρκετ",
|
| 102 |
+
"costs.cat.transport": "Μεταφορά",
|
| 103 |
+
"costs.cat.flights": "Πτήσεις",
|
| 104 |
+
"costs.cat.activities": "Δραστηριότητες",
|
| 105 |
+
"costs.cat.sightseeing": "Αξιοθέατα",
|
| 106 |
+
"costs.cat.shopping": "Ψώνια",
|
| 107 |
+
"costs.cat.fees": "Τέλη & εισιτήρια",
|
| 108 |
+
"costs.cat.health": "Υγεία",
|
| 109 |
+
"costs.cat.tips": "Φιλοδωρήματα",
|
| 110 |
+
"costs.cat.other": "Άλλα",
|
| 111 |
+
"costs.daysCount": "{count} ημέρες",
|
| 112 |
+
"costs.travelers": "{count} ταξιδιώτες",
|
| 113 |
+
"costs.liveRate": "ζωντανή ισοτιμία",
|
| 114 |
+
"costs.settleAll": "Εξόφληση όλων",
|
| 115 |
+
};
|
| 116 |
+
|
| 117 |
+
export default budget;
|
shared/src/i18n/gr/categories.ts
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import type { TranslationStrings } from '../types';
|
| 2 |
+
|
| 3 |
+
const categories: TranslationStrings = {
|
| 4 |
+
'categories.title': 'Κατηγορίες',
|
| 5 |
+
'categories.subtitle': 'Διαχείριση κατηγοριών για τοποθεσίες',
|
| 6 |
+
'categories.new': 'Νέα Κατηγορία',
|
| 7 |
+
'categories.empty': 'Δεν υπάρχουν κατηγορίες ακόμη',
|
| 8 |
+
'categories.namePlaceholder': 'Όνομα κατηγορίας',
|
| 9 |
+
'categories.icon': 'Εικονίδιο',
|
| 10 |
+
'categories.color': 'Χρώμα',
|
| 11 |
+
'categories.customColor': 'Επιλογή προσαρμοσμένου χρώματος',
|
| 12 |
+
'categories.preview': 'Προεπισκόπηση',
|
| 13 |
+
'categories.defaultName': 'Κατηγορία',
|
| 14 |
+
'categories.update': 'Ενημέρωση',
|
| 15 |
+
'categories.create': 'Δημιουργία',
|
| 16 |
+
'categories.confirm.delete':
|
| 17 |
+
'Διαγραφή κατηγορίας; Οι τοποθεσίες σε αυτή την κατηγορία δεν θα διαγραφούν.',
|
| 18 |
+
'categories.toast.loadError': 'Αποτυχία φόρτωσης κατηγοριών',
|
| 19 |
+
'categories.toast.nameRequired': 'Παρακαλώ εισάγετε όνομα',
|
| 20 |
+
'categories.toast.updated': 'Η κατηγορία ενημερώθηκε',
|
| 21 |
+
'categories.toast.created': 'Η κατηγορία δημιουργήθηκε',
|
| 22 |
+
'categories.toast.saveError': 'Αποτυχία αποθήκευσης',
|
| 23 |
+
'categories.toast.deleted': 'Η κατηγορία διαγράφηκε',
|
| 24 |
+
'categories.toast.deleteError': 'Αποτυχία διαγραφής',
|
| 25 |
+
};
|
| 26 |
+
export default categories;
|
shared/src/i18n/gr/collab.ts
ADDED
|
@@ -0,0 +1,77 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import type { TranslationStrings } from '../types';
|
| 2 |
+
|
| 3 |
+
const collab: TranslationStrings = {
|
| 4 |
+
'collab.tabs.chat': 'Συνομιλία',
|
| 5 |
+
'collab.tabs.notes': 'Σημειώσεις',
|
| 6 |
+
'collab.tabs.polls': 'Δημοσκοπήσεις',
|
| 7 |
+
'collab.whatsNext.title': 'Τι Επόμενο',
|
| 8 |
+
'collab.whatsNext.today': 'Σήμερα',
|
| 9 |
+
'collab.whatsNext.tomorrow': 'Αύριο',
|
| 10 |
+
'collab.whatsNext.empty': 'Καμία επερχόμενη δραστηριότητα',
|
| 11 |
+
'collab.whatsNext.until': 'έως',
|
| 12 |
+
'collab.whatsNext.emptyHint': 'Οι δραστηριότητες με ώρες θα εμφανίζονται εδώ',
|
| 13 |
+
'collab.chat.send': 'Αποστολή',
|
| 14 |
+
'collab.chat.placeholder': 'Πληκτρολογήστε ένα μήνυμα...',
|
| 15 |
+
'collab.chat.empty': 'Ξεκινήστε τη συζήτηση',
|
| 16 |
+
'collab.chat.emptyHint':
|
| 17 |
+
'Τα μηνύματα κοινοποιούνται σε όλα τα μέλη του ταξιδιού',
|
| 18 |
+
'collab.chat.emptyDesc':
|
| 19 |
+
'Μοιραστείτε ιδέες, σχέδια και ενημερώσεις με την ταξιδιωτική σας ομάδα',
|
| 20 |
+
'collab.chat.today': 'Σήμερα',
|
| 21 |
+
'collab.chat.yesterday': 'Χθες',
|
| 22 |
+
'collab.chat.deletedMessage': 'διέγραψε ένα μήνυμα',
|
| 23 |
+
'collab.chat.reply': 'Απάντηση',
|
| 24 |
+
'collab.chat.loadMore': 'Φόρτωση παλαιότερων μηνυμάτων',
|
| 25 |
+
'collab.chat.justNow': 'μόλις τώρα',
|
| 26 |
+
'collab.chat.minutesAgo': '{n}λ πριν',
|
| 27 |
+
'collab.chat.hoursAgo': '{n}ω πριν',
|
| 28 |
+
'collab.notes.title': 'Σημειώσεις',
|
| 29 |
+
'collab.notes.new': 'Νέα Σημείωση',
|
| 30 |
+
'collab.notes.empty': 'Δεν υπάρχουν σημειώσεις ακόμη',
|
| 31 |
+
'collab.notes.emptyHint': 'Ξεκινήστε να καταγράφετε ιδέες και σχέδια',
|
| 32 |
+
'collab.notes.all': 'Όλες',
|
| 33 |
+
'collab.notes.titlePlaceholder': 'Τίτλος σημείωσης',
|
| 34 |
+
'collab.notes.contentPlaceholder': 'Γράψτε κάτι...',
|
| 35 |
+
'collab.notes.categoryPlaceholder': 'Κατηγορία',
|
| 36 |
+
'collab.notes.newCategory': 'Νέα κατηγορία...',
|
| 37 |
+
'collab.notes.category': 'Κατηγορία',
|
| 38 |
+
'collab.notes.noCategory': 'Χωρίς κατηγορία',
|
| 39 |
+
'collab.notes.color': 'Χρώμα',
|
| 40 |
+
'collab.notes.save': 'Αποθήκευση',
|
| 41 |
+
'collab.notes.cancel': 'Ακύρωση',
|
| 42 |
+
'collab.notes.edit': 'Επεξεργασία',
|
| 43 |
+
'collab.notes.delete': 'Διαγραφή',
|
| 44 |
+
'collab.notes.confirmDeleteTitle': 'Διαγραφή σημείωσης;',
|
| 45 |
+
'collab.notes.confirmDeleteBody': 'Αυτή η σημείωση θα διαγραφεί οριστικά.',
|
| 46 |
+
'collab.notes.pin': 'Καρφίτσωμα',
|
| 47 |
+
'collab.notes.unpin': 'Ξεκαρφίτσωμα',
|
| 48 |
+
'collab.notes.daysAgo': '{n}η πριν',
|
| 49 |
+
'collab.notes.categorySettings': 'Διαχείριση Κατηγοριών',
|
| 50 |
+
'collab.notes.create': 'Δημιουργία',
|
| 51 |
+
'collab.notes.website': 'Ιστότοπος',
|
| 52 |
+
'collab.notes.websitePlaceholder': 'https://...',
|
| 53 |
+
'collab.notes.attachFiles': 'Επισύναψη αρχείων',
|
| 54 |
+
'collab.notes.noCategoriesYet': 'Δεν υπάρχουν κατηγορίες ακόμη',
|
| 55 |
+
'collab.notes.emptyDesc': 'Δημιουργήστε μια σημείωση για να ξεκινήσετε',
|
| 56 |
+
'collab.polls.title': 'Δημοσκοπήσεις',
|
| 57 |
+
'collab.polls.new': 'Νέα Δημοσκόπηση',
|
| 58 |
+
'collab.polls.empty': 'Δεν υπάρχουν δημοσκοπήσεις ακόμη',
|
| 59 |
+
'collab.polls.emptyHint': 'Ρωτήστε την ομάδα και ψηφίστε μαζί',
|
| 60 |
+
'collab.polls.question': 'Ερώτηση',
|
| 61 |
+
'collab.polls.questionPlaceholder': 'Τι πρέπει να κάνουμε;',
|
| 62 |
+
'collab.polls.addOption': '+ Προσθήκη επιλογής',
|
| 63 |
+
'collab.polls.optionPlaceholder': 'Επιλογή {n}',
|
| 64 |
+
'collab.polls.create': 'Δημιουργία Δημοσκόπησης',
|
| 65 |
+
'collab.polls.close': 'Κλείσιμο',
|
| 66 |
+
'collab.polls.closed': 'Κλειστή',
|
| 67 |
+
'collab.polls.votes': '{n} ψήφοι',
|
| 68 |
+
'collab.polls.vote': '{n} ψήφος',
|
| 69 |
+
'collab.polls.multipleChoice': 'Πολλαπλή επιλογή',
|
| 70 |
+
'collab.polls.multiChoice': 'Πολλαπλή επιλογή',
|
| 71 |
+
'collab.polls.deadline': 'Προθεσμία',
|
| 72 |
+
'collab.polls.option': 'Επιλογή',
|
| 73 |
+
'collab.polls.options': 'Επιλογές',
|
| 74 |
+
'collab.polls.delete': 'Διαγραφή',
|
| 75 |
+
'collab.polls.closedSection': 'Κλειστές',
|
| 76 |
+
};
|
| 77 |
+
export default collab;
|
shared/src/i18n/gr/common.ts
ADDED
|
@@ -0,0 +1,55 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import type { TranslationStrings } from '../types';
|
| 2 |
+
|
| 3 |
+
const common: TranslationStrings = {
|
| 4 |
+
'common.save': 'Αποθήκευση',
|
| 5 |
+
'common.showMore': 'Εμφάνιση περισσότερων',
|
| 6 |
+
'common.showLess': 'Εμφάνιση λιγότερων',
|
| 7 |
+
'common.cancel': 'Ακύρωση',
|
| 8 |
+
'common.clear': 'Εκκαθάριση',
|
| 9 |
+
'common.delete': 'Διαγραφή',
|
| 10 |
+
'common.edit': 'Επεξεργασία',
|
| 11 |
+
'common.add': 'Προσθήκη',
|
| 12 |
+
'common.loading': 'Φόρτωση...',
|
| 13 |
+
'common.import': 'Εισαγωγή',
|
| 14 |
+
'common.select': 'Επιλογή',
|
| 15 |
+
'common.selectAll': 'Επιλογή όλων',
|
| 16 |
+
'common.deselectAll': 'Απο-επιλογή όλων',
|
| 17 |
+
'common.error': 'Σφάλμα',
|
| 18 |
+
'common.unknownError': 'Άγνωστο σφάλμα',
|
| 19 |
+
'common.tooManyAttempts':
|
| 20 |
+
'Πολλαπλές προσπάθειες. Παρακαλώ δοκιμάστε αργότερα.',
|
| 21 |
+
'common.back': 'Πίσω',
|
| 22 |
+
'common.all': 'Όλα',
|
| 23 |
+
'common.close': 'Κλείσιμο',
|
| 24 |
+
'common.open': 'Άνοιγμα',
|
| 25 |
+
'common.upload': 'Μεταφόρτωση',
|
| 26 |
+
'common.search': 'Αναζήτηση',
|
| 27 |
+
'common.confirm': 'Επιβεβαίωση',
|
| 28 |
+
'common.ok': 'OK',
|
| 29 |
+
'common.yes': 'Ναι',
|
| 30 |
+
'common.no': 'Όχι',
|
| 31 |
+
'common.or': 'ή',
|
| 32 |
+
'common.none': 'Κανένα',
|
| 33 |
+
'common.date': 'Ημερομηνία',
|
| 34 |
+
'common.rename': 'Μετονομασία',
|
| 35 |
+
'common.discardChanges': 'Απόρριψη αλλαγών',
|
| 36 |
+
'common.discard': 'Απόρριψη',
|
| 37 |
+
'common.name': 'Όνομα',
|
| 38 |
+
'common.email': 'Email',
|
| 39 |
+
'common.password': 'Κωδικός',
|
| 40 |
+
'common.saving': 'Αποθήκευση...',
|
| 41 |
+
'common.justNow': 'Μόλις τώρα',
|
| 42 |
+
'common.hoursAgo': '{count} ώρες πρίν',
|
| 43 |
+
'common.daysAgo': '{count} μέρες πρίν',
|
| 44 |
+
'common.saved': 'Αποθηκεύτηκε',
|
| 45 |
+
'common.update': 'Ενημέρωση',
|
| 46 |
+
'common.change': 'Αλλαγή',
|
| 47 |
+
'common.uploading': 'Μεταφόρτωση...',
|
| 48 |
+
'common.backToPlanning': 'Πίσω στον Σχεδιασμό',
|
| 49 |
+
'common.reset': 'Επαναφορά',
|
| 50 |
+
'common.expand': 'Επέκταση',
|
| 51 |
+
'common.collapse': 'Σύμπτυξη',
|
| 52 |
+
'common.copy': 'Αντιγραφή',
|
| 53 |
+
'common.copied': 'Αντιγράφηκε',
|
| 54 |
+
};
|
| 55 |
+
export default common;
|
shared/src/i18n/gr/dashboard.ts
ADDED
|
@@ -0,0 +1,171 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import type { TranslationStrings } from '../types';
|
| 2 |
+
|
| 3 |
+
const dashboard: TranslationStrings = {
|
| 4 |
+
'dashboard.title': 'Τα Ταξίδια μου',
|
| 5 |
+
'dashboard.subtitle.loading': 'Φόρτωση των ταξιδιών...',
|
| 6 |
+
'dashboard.subtitle.trips': '{count} ταξίδια ({archived} αρχειοθετημένα)',
|
| 7 |
+
'dashboard.subtitle.empty': 'Ξεκινήστε το πρώτο σας ταξίδι',
|
| 8 |
+
'dashboard.subtitle.activeOne': '{count} ενεργό ταξίδι',
|
| 9 |
+
'dashboard.subtitle.activeMany': '{count} ενεργά ταξίδια',
|
| 10 |
+
'dashboard.subtitle.archivedSuffix': ' · {count} αρχειοθετημένα',
|
| 11 |
+
'dashboard.newTrip': 'Νέο Ταξίδι',
|
| 12 |
+
'dashboard.gridView': 'Προβολή στοιχείων',
|
| 13 |
+
'dashboard.listView': 'Προβολή λίστας',
|
| 14 |
+
'dashboard.currency': 'Συνάλλαγμα',
|
| 15 |
+
'dashboard.timezone': 'Ζώνες ώρας',
|
| 16 |
+
'dashboard.localTime': 'Τοπική',
|
| 17 |
+
'dashboard.timezoneCustomTitle': 'Προσαρμοσμένη Ζώνη ώρας',
|
| 18 |
+
'dashboard.timezoneCustomLabelPlaceholder': 'Επιθετικό (προαιρετικό)',
|
| 19 |
+
'dashboard.timezoneCustomTzPlaceholder': 'π.χ. Αμερική/Νέα Υόρκη',
|
| 20 |
+
'dashboard.timezoneCustomAdd': 'Προσθήκη',
|
| 21 |
+
'dashboard.timezoneCustomErrorEmpty': 'Εισάγετε μια ζώνη ώρας',
|
| 22 |
+
'dashboard.timezoneCustomErrorInvalid':
|
| 23 |
+
'Μη έγκυρη ζώνη ώρας. Χρησιμοποιήστε την μορφή π.χ. Europe/Berlin',
|
| 24 |
+
'dashboard.timezoneCustomErrorDuplicate': 'Έχει προστεθεί ήδη',
|
| 25 |
+
'dashboard.emptyTitle': 'Δεν υπάρχουν ταξίδια ακόμη',
|
| 26 |
+
'dashboard.emptyText':
|
| 27 |
+
'Δημιουργήστε το πρώτο σας ταξίδι και ξεκινήστε τα σχέδια!',
|
| 28 |
+
'dashboard.emptyButton': 'Δημιουργία Πρώτου Ταξίδιου',
|
| 29 |
+
'dashboard.nextTrip': 'Επόμενο Ταξίδι',
|
| 30 |
+
'dashboard.shared': 'Κοινοποιημένο',
|
| 31 |
+
'dashboard.sharedBy': 'Κοινοποιήθηκε από {name}',
|
| 32 |
+
'dashboard.days': 'Ημέρες',
|
| 33 |
+
'dashboard.places': 'Τόποι',
|
| 34 |
+
'dashboard.members': 'Μέλη',
|
| 35 |
+
'dashboard.archive': 'Αρχειοθήκευση',
|
| 36 |
+
'dashboard.copyTrip': 'Αντιγραφή',
|
| 37 |
+
'dashboard.copySuffix': 'αντιγραφή',
|
| 38 |
+
'dashboard.restore': 'Επαναφορά',
|
| 39 |
+
'dashboard.archived': 'Αρχειοθετημένο',
|
| 40 |
+
'dashboard.status.ongoing': 'Τρέχων',
|
| 41 |
+
'dashboard.status.today': 'Σήμερα',
|
| 42 |
+
'dashboard.status.tomorrow': 'Αύριο',
|
| 43 |
+
'dashboard.status.past': 'Παρελθόν',
|
| 44 |
+
'dashboard.status.daysLeft': '{count} μέρες έμειναν',
|
| 45 |
+
'dashboard.toast.loadError': 'Αποτυχία φόρτωσης ταξιδιών',
|
| 46 |
+
'dashboard.toast.created': 'Ταξίδι δημιουργήθηκε επιτυχώς!',
|
| 47 |
+
'dashboard.toast.createError': 'Αποτυχία δημιουργίας ταξιδιού',
|
| 48 |
+
'dashboard.toast.updated': 'Ταξίδι ενημερώθηκε!',
|
| 49 |
+
'dashboard.toast.updateError': 'Αποτυχία ενημέρωσης ταξιδιού',
|
| 50 |
+
'dashboard.toast.deleted': 'Ταξίδι διαγράφηκε',
|
| 51 |
+
'dashboard.toast.deleteError': 'Αποτυχία διαγραφής ταξιδιού',
|
| 52 |
+
'dashboard.toast.archived': 'Ταξίδι αρχειοθετήθηκε',
|
| 53 |
+
'dashboard.toast.archiveError': 'Αποτυχία αρχειοθήκευσης ταξιδιού',
|
| 54 |
+
'dashboard.toast.restored': 'Ταξίδι επαναφέρθηκε',
|
| 55 |
+
'dashboard.toast.restoreError': 'Αποτυχία επαναφοράς ταξιδιού',
|
| 56 |
+
'dashboard.toast.copied': 'Ταξίδι αντιγράφηκε!',
|
| 57 |
+
'dashboard.toast.copyError': 'Αποτυχία αντιγραφής ταξιδιού',
|
| 58 |
+
'dashboard.confirm.delete':
|
| 59 |
+
'Διαγραφή ταξιδιού "{title}"; Όλα τα τόποι και τα σχέδια θα διαγραφούν επίσης.',
|
| 60 |
+
'dashboard.confirm.copy.title': 'Αντιγραφή αυτού του ταξιδιού;',
|
| 61 |
+
'dashboard.confirm.copy.willCopy': 'Θα αντιγραφεί',
|
| 62 |
+
'dashboard.confirm.copy.will1': 'Μέρες, μέρη και σχέδια μέρας',
|
| 63 |
+
'dashboard.confirm.copy.will2': 'Καταλύματα και κρατήσεις',
|
| 64 |
+
'dashboard.confirm.copy.will3': 'Αντικείμενα budget και σειρά κατηγορίας',
|
| 65 |
+
'dashboard.confirm.copy.will4': 'Λίστα πακεταρίσματος (Μη ελεγμένα)',
|
| 66 |
+
'dashboard.confirm.copy.will5': 'TODOs (Μη ορισμένα & Μη ελεγμένα)',
|
| 67 |
+
'dashboard.confirm.copy.will6': 'Σημειώσεις μέρας',
|
| 68 |
+
'dashboard.confirm.copy.wontCopy': 'Δεν θα αντιγραφούν',
|
| 69 |
+
'dashboard.confirm.copy.wont1': 'Συνεργάτες & αναθέσεις μελών',
|
| 70 |
+
'dashboard.confirm.copy.wont2':
|
| 71 |
+
'Σημειώσεις συνεργασίας, ψηφοφορίες & μηνύματα',
|
| 72 |
+
'dashboard.confirm.copy.wont3': 'Αρχεία & φωτογραφίες',
|
| 73 |
+
'dashboard.confirm.copy.wont4': 'Σύνδεσμοι διαμοιρασμού',
|
| 74 |
+
'dashboard.confirm.copy.confirm': 'Αντιγραφή ταξιδιού',
|
| 75 |
+
'dashboard.editTrip': 'Επεξεργασία Ταξιδιού',
|
| 76 |
+
'dashboard.createTrip': 'Δημιουργία Νέου Ταξιδιού',
|
| 77 |
+
'dashboard.tripTitle': 'Τίτλος',
|
| 78 |
+
'dashboard.tripTitlePlaceholder': 'π.χ. Καλοκαίρι στην Ιαπωνία',
|
| 79 |
+
'dashboard.tripDescription': 'Περιγραφή',
|
| 80 |
+
'dashboard.tripDescriptionPlaceholder': 'Σχετικά με τι είναι αυτό το ταξίδι;',
|
| 81 |
+
'dashboard.startDate': 'Ημερομηνία Έναρξης',
|
| 82 |
+
'dashboard.endDate': 'Ημερομηνία Λήξης',
|
| 83 |
+
'dashboard.dayCount': 'Αριθμός Ημερών',
|
| 84 |
+
'dashboard.dayCountHint':
|
| 85 |
+
'Πόσες ημέρες να σχεδιαστούν όταν δεν έχουν οριστεί ημερομηνίες ταξιδιού.',
|
| 86 |
+
'dashboard.noDateHint':
|
| 87 |
+
'Δεν έχει οριστεί ημερομηνία — θα δημιουργηθούν 7 προεπιλεγμένες ημέρες. Μπορείτε να το αλλάξετε οποτεδήποτε.',
|
| 88 |
+
'dashboard.coverImage': 'Εικόνα Εξωφύλλου',
|
| 89 |
+
'dashboard.addCoverImage': 'Προσθήκη εικόνας εξωφύλλου (ή σύρετε & αποθέστε)',
|
| 90 |
+
'dashboard.addMembers': 'Συνταξιδιώτες',
|
| 91 |
+
'dashboard.addMember': 'Προσθήκη μέλους',
|
| 92 |
+
'dashboard.coverSaved': 'Η εικόνα εξωφύλλου αποθηκεύτηκε',
|
| 93 |
+
'dashboard.coverUploadError': 'Αποτυχία μεταφόρτωσης',
|
| 94 |
+
'dashboard.coverRemoveError': 'Αποτυχία αφαίρεσης',
|
| 95 |
+
'dashboard.titleRequired': 'Ο τίτλος είναι υποχρεωτικός',
|
| 96 |
+
'dashboard.endDateError':
|
| 97 |
+
'Η ημερομηνία λήξης πρέπει να είναι μετά την ημερομηνία έναρξης',
|
| 98 |
+
'dashboard.greeting.morning': 'Καλημέρα,',
|
| 99 |
+
'dashboard.greeting.afternoon': 'Καλό απόγευμα,',
|
| 100 |
+
'dashboard.greeting.evening': 'Καλησπέρα,',
|
| 101 |
+
'dashboard.mobile.liveNow': 'Ζωντανά Τώρα',
|
| 102 |
+
'dashboard.mobile.tripProgress': 'Πρόοδος ταξιδιού',
|
| 103 |
+
'dashboard.mobile.daysLeft': '{count} ημέρες ακόμα',
|
| 104 |
+
'dashboard.mobile.places': 'Τοποθεσίες',
|
| 105 |
+
'dashboard.mobile.buddies': 'Συνταξιδιώτες',
|
| 106 |
+
'dashboard.mobile.newTrip': 'Νέο Ταξίδι',
|
| 107 |
+
'dashboard.mobile.currency': 'Νόμισμα',
|
| 108 |
+
'dashboard.mobile.timezone': 'Ζώνη ώρας',
|
| 109 |
+
'dashboard.mobile.upcomingTrips': 'Επερχόμενα Ταξίδια',
|
| 110 |
+
'dashboard.mobile.yourTrips': 'Τα Ταξίδια σας',
|
| 111 |
+
'dashboard.mobile.trips': 'ταξίδια',
|
| 112 |
+
'dashboard.mobile.starts': 'Ξεκινά',
|
| 113 |
+
'dashboard.mobile.duration': 'Διάρκεια',
|
| 114 |
+
'dashboard.mobile.day': 'ημέρα',
|
| 115 |
+
'dashboard.mobile.days': 'ημέρες',
|
| 116 |
+
'dashboard.mobile.ongoing': 'Σε εξέλιξη',
|
| 117 |
+
'dashboard.mobile.startsToday': 'Ξεκινά σήμερα',
|
| 118 |
+
'dashboard.mobile.tomorrow': 'Αύριο',
|
| 119 |
+
'dashboard.mobile.inDays': 'Σε {count} ημέρες',
|
| 120 |
+
'dashboard.mobile.inMonths': 'Σε {count} μήνες',
|
| 121 |
+
'dashboard.mobile.completed': 'Ολοκληρώθηκε',
|
| 122 |
+
'dashboard.mobile.currencyConverter': 'Μετατροπέας Νομισμάτων',
|
| 123 |
+
'dashboard.newTripSub': 'Plan a new trip from scratch', // en-fallback
|
| 124 |
+
'dashboard.filter.planned': 'Planned', // en-fallback
|
| 125 |
+
'dashboard.hero.badgeLive': 'LIVE NOW', // en-fallback
|
| 126 |
+
'dashboard.hero.badgeToday': 'STARTS TODAY', // en-fallback
|
| 127 |
+
'dashboard.hero.badgeTomorrow': 'TOMORROW', // en-fallback
|
| 128 |
+
'dashboard.hero.badgeNext': 'UP NEXT', // en-fallback
|
| 129 |
+
'dashboard.hero.badgeRecent': 'RECENT', // en-fallback
|
| 130 |
+
'dashboard.hero.tripDates': 'Trip dates', // en-fallback
|
| 131 |
+
'dashboard.hero.noDates': 'No dates set', // en-fallback
|
| 132 |
+
'dashboard.hero.travelerOne': '{count} traveler', // en-fallback
|
| 133 |
+
'dashboard.hero.travelerMany': '{count} travelers', // en-fallback
|
| 134 |
+
'dashboard.hero.destinationOne': '{count} destination', // en-fallback
|
| 135 |
+
'dashboard.hero.destinationMany': '{count} destinations', // en-fallback
|
| 136 |
+
'dashboard.hero.dayUnitOne': 'day', // en-fallback
|
| 137 |
+
'dashboard.hero.dayUnitMany': 'days', // en-fallback
|
| 138 |
+
'dashboard.hero.dayLeft': 'Day left', // en-fallback
|
| 139 |
+
'dashboard.hero.daysLeft': 'Days left', // en-fallback
|
| 140 |
+
'dashboard.hero.lastDay': 'Last day', // en-fallback
|
| 141 |
+
'dashboard.hero.untilStart': 'Until start', // en-fallback
|
| 142 |
+
'dashboard.hero.startsIn': 'Trip starts in', // en-fallback
|
| 143 |
+
'dashboard.atlas.countriesVisited': 'Atlas · Countries visited', // en-fallback
|
| 144 |
+
'dashboard.atlas.ofTotal': 'of {total}', // en-fallback
|
| 145 |
+
'dashboard.atlas.tripsTotal': 'Trips total', // en-fallback
|
| 146 |
+
'dashboard.atlas.placesMapped': '{count} places mapped', // en-fallback
|
| 147 |
+
'dashboard.atlas.daysTraveled': 'Days traveled', // en-fallback
|
| 148 |
+
'dashboard.atlas.daysUnit': 'days', // en-fallback
|
| 149 |
+
'dashboard.atlas.acrossAllTrips': 'across all trips', // en-fallback
|
| 150 |
+
'dashboard.atlas.distanceFlown': 'Distance flown', // en-fallback
|
| 151 |
+
'dashboard.atlas.kmUnit': 'km', // en-fallback
|
| 152 |
+
'dashboard.atlas.aroundEquator': '≈ {count}× around the equator', // en-fallback
|
| 153 |
+
'dashboard.card.idea': 'Idea', // en-fallback
|
| 154 |
+
'dashboard.card.buddyOne': 'Buddy', // en-fallback
|
| 155 |
+
'dashboard.fx.from': 'From', // en-fallback
|
| 156 |
+
'dashboard.fx.to': 'To', // en-fallback
|
| 157 |
+
'dashboard.fx.unavailable': 'Rate unavailable', // en-fallback
|
| 158 |
+
'dashboard.tz.searchPlaceholder': 'Search timezone…', // en-fallback
|
| 159 |
+
'dashboard.tz.empty': 'No other timezones yet — add one with +', // en-fallback
|
| 160 |
+
'dashboard.upcoming.title': 'Upcoming reservations', // en-fallback
|
| 161 |
+
'dashboard.upcoming.empty': 'Nothing booked yet.', // en-fallback
|
| 162 |
+
'dashboard.aria.toggleView': 'Toggle view', // en-fallback
|
| 163 |
+
'dashboard.aria.filter': 'Filter', // en-fallback
|
| 164 |
+
'dashboard.aria.duplicate': 'Duplicate', // en-fallback
|
| 165 |
+
'dashboard.aria.refreshRates': 'Refresh rates', // en-fallback
|
| 166 |
+
'dashboard.aria.swapCurrencies': 'Swap currencies', // en-fallback
|
| 167 |
+
'dashboard.aria.addTimezone': 'Add timezone', // en-fallback
|
| 168 |
+
'dashboard.aria.removeTimezone': 'Remove {city}', // en-fallback
|
| 169 |
+
'dashboard.dayCountRequired': 'Ο αριθμός ημερών είναι υποχρεωτικός',
|
| 170 |
+
};
|
| 171 |
+
export default dashboard;
|
shared/src/i18n/gr/day.ts
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import type { TranslationStrings } from '../types';
|
| 2 |
+
|
| 3 |
+
const day: TranslationStrings = {
|
| 4 |
+
'day.precipProb': 'Πιθανότητα βροχής',
|
| 5 |
+
'day.precipitation': 'Κατακρημνίσματα',
|
| 6 |
+
'day.wind': 'Άνεμος',
|
| 7 |
+
'day.sunrise': 'Ανατολή',
|
| 8 |
+
'day.sunset': 'Δύση',
|
| 9 |
+
'day.hourlyForecast': 'Ωριαία Πρόγνωση',
|
| 10 |
+
'day.climateHint':
|
| 11 |
+
'Ιστορικοί μέσοι όροι — η πραγματική πρόγνωση είναι διαθέσιμη εντός 16 ημερών από αυτή την ημερομηνία.',
|
| 12 |
+
'day.noWeather':
|
| 13 |
+
'Δεν υπάρχουν διαθέσιμα δεδομένα καιρού. Προσθέστε μια τοποθεσία με συντεταγμένες.',
|
| 14 |
+
'day.overview': 'Ημερήσια Επισκόπηση',
|
| 15 |
+
'day.accommodation': 'Διαμονή',
|
| 16 |
+
'day.addAccommodation': 'Προσθήκη διαμονής',
|
| 17 |
+
'day.hotelDayRange': 'Εφαρμογή σε ημέρες',
|
| 18 |
+
'day.noPlacesForHotel': 'Προσθέστε πρώτα τοποθεσίες στο ταξίδι σας',
|
| 19 |
+
'day.allDays': 'Όλες',
|
| 20 |
+
'day.checkIn': 'Check-in',
|
| 21 |
+
'day.checkInUntil': 'Έως',
|
| 22 |
+
'day.checkOut': 'Check-out',
|
| 23 |
+
'day.confirmation': 'Επιβεβαίωση',
|
| 24 |
+
'day.editAccommodation': 'Επεξεργασία διαμονής',
|
| 25 |
+
'day.reservations': 'Κρατήσεις',
|
| 26 |
+
};
|
| 27 |
+
export default day;
|
shared/src/i18n/gr/dayplan.ts
ADDED
|
@@ -0,0 +1,62 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import type { TranslationStrings } from '../types';
|
| 2 |
+
|
| 3 |
+
const dayplan: TranslationStrings = {
|
| 4 |
+
'dayplan.icsTooltip': 'Εξαγωγή ημερολογίου (ICS)',
|
| 5 |
+
'dayplan.emptyDay': 'Δεν υπάρχουν προγραμματισμένα μέρη για αυτή την ημέρα',
|
| 6 |
+
'dayplan.cannotReorderTransport':
|
| 7 |
+
'Οι κρατήσεις με σταθερή ώρα δεν μπορούν να αναδιαταχθούν',
|
| 8 |
+
'dayplan.confirmRemoveTimeTitle': 'Αφαίρεση ώρας;',
|
| 9 |
+
'dayplan.confirmRemoveTimeBody':
|
| 10 |
+
'Αυτό το μέρος έχει σταθερή ώρα ({time}). Η μετακίνησή του θα αφαιρέσει την ώρα και θα επιτρέψει ελεύθερη ταξινόμηση.',
|
| 11 |
+
'dayplan.confirmRemoveTimeAction': 'Αφαίρεση ώρας & μετακίνηση',
|
| 12 |
+
'dayplan.confirmDeleteNoteTitle': 'Διαγραφή σημείωσης;',
|
| 13 |
+
'dayplan.confirmDeleteNoteBody':
|
| 14 |
+
'Αυτή η σημείωση θα διαγραφεί οριστικά.',
|
| 15 |
+
'dayplan.cannotDropOnTimed':
|
| 16 |
+
'Τα στοιχεία δεν μπορούν να τοποθετηθούν μεταξύ καταχωρήσεων με ώρα',
|
| 17 |
+
'dayplan.cannotBreakChronology':
|
| 18 |
+
'Αυτό θα έσπαγε τη χρονολογική σειρά των στοιχείων με ώρα και των κρατήσεων',
|
| 19 |
+
'dayplan.addNote': 'Προσθήκη Σημείωσης',
|
| 20 |
+
'dayplan.expandAll': 'Ανάπτυξη όλων των ημερών',
|
| 21 |
+
'dayplan.collapseAll': 'Σύμπτυξη όλων των ημερών',
|
| 22 |
+
'dayplan.editNote': 'Επεξεργασία Σημείωσης',
|
| 23 |
+
'dayplan.noteAdd': 'Προσθήκη Σημείωσης',
|
| 24 |
+
'dayplan.noteEdit': 'Επεξεργασία Σημείωσης',
|
| 25 |
+
'dayplan.noteTitle': 'Σημείωση',
|
| 26 |
+
'dayplan.noteSubtitle': 'Ημερήσια Σημείωση',
|
| 27 |
+
'dayplan.totalCost': 'Συνολικό Κόστος',
|
| 28 |
+
'dayplan.days': 'Ημέρες',
|
| 29 |
+
'dayplan.dayN': 'Ημέρα {n}',
|
| 30 |
+
'dayplan.calculating': 'Υπολογισμός...',
|
| 31 |
+
'dayplan.route': 'Διαδρομή',
|
| 32 |
+
'dayplan.optimize': 'Βελτιστοποίηση',
|
| 33 |
+
'dayplan.optimized': 'Η διαδρομή βελτιστοποιήθηκε',
|
| 34 |
+
'dayplan.routeError': 'Αποτυχία υπολογισμού διαδρομής',
|
| 35 |
+
'dayplan.toast.needTwoPlaces':
|
| 36 |
+
'Χρειάζονται τουλάχιστον δύο μέρη για βελτιστοποίηση διαδρομής',
|
| 37 |
+
'dayplan.toast.routeOptimized': 'Η διαδρομή βελτιστοποιήθηκε',
|
| 38 |
+
'dayplan.toast.routeOptimizedFromHotel':
|
| 39 |
+
'Η διαδρομή βελτιστοποιήθηκε από το κατάλυμά σας',
|
| 40 |
+
'dayplan.toast.noGeoPlaces':
|
| 41 |
+
'Δεν βρέθηκαν μέρη με συντεταγμένες για τον υπολογισμό διαδρομής',
|
| 42 |
+
'dayplan.confirmed': 'Επιβεβαιωμένο',
|
| 43 |
+
'dayplan.pendingRes': 'Εκκρεμές',
|
| 44 |
+
'dayplan.pdf': 'PDF',
|
| 45 |
+
'dayplan.pdfTooltip': 'Εξαγωγή ημερήσιου πλάνου ως PDF',
|
| 46 |
+
'dayplan.pdfError': 'Αποτυχία εξαγωγής PDF',
|
| 47 |
+
'dayplan.mobile.addPlace': 'Προσθήκη Τοποθεσίας',
|
| 48 |
+
'dayplan.mobile.searchPlaces': 'Αναζήτηση τοποθεσιών...',
|
| 49 |
+
'dayplan.mobile.allAssigned': 'Όλες οι τοποθεσίες έχουν ανατεθεί',
|
| 50 |
+
'dayplan.mobile.noMatch': 'Καμία αντιστοιχία',
|
| 51 |
+
'dayplan.mobile.createNew': 'Δημιουργία νέας τοποθεσίας',
|
| 52 |
+
'dayplan.reorderDays': 'Αναδιάταξη ημερών',
|
| 53 |
+
'dayplan.reorderTitle': 'Αναδιάταξη ημερών',
|
| 54 |
+
'dayplan.reorderHint': 'Τα μέρη, οι σημειώσεις και οι κρατήσεις μιας ημέρας μετακινούνται μαζί της.',
|
| 55 |
+
'dayplan.addDay': 'Προσθήκη ημέρας',
|
| 56 |
+
'dayplan.moveUp': 'Μετακίνηση πάνω',
|
| 57 |
+
'dayplan.moveDown': 'Μετακίνηση κάτω',
|
| 58 |
+
'dayplan.reorderUndo': 'Αναδιάταξη ημερών',
|
| 59 |
+
'dayplan.reorderError': 'Η αναδιάταξη των ημερών απέτυχε',
|
| 60 |
+
'dayplan.addDayError': 'Η προσθήκη ημέρας απέτυχε',
|
| 61 |
+
};
|
| 62 |
+
export default dayplan;
|
shared/src/i18n/gr/externalNotifications.ts
ADDED
|
@@ -0,0 +1,64 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import type { NotificationLocale } from '../externalNotifications/types';
|
| 2 |
+
|
| 3 |
+
const gr: NotificationLocale = {
|
| 4 |
+
email: {
|
| 5 |
+
footer:
|
| 6 |
+
'Λάβατε αυτό το μήνυμα επειδή έχετε ενεργοποιήσει τις ειδοποιήσεις στο TREK.',
|
| 7 |
+
manage: 'Διαχείριση προτιμήσεων στις Ρυθμίσεις',
|
| 8 |
+
madeWith: 'Δημιουργήθηκε με',
|
| 9 |
+
openTrek: 'Άνοιγμα TREK',
|
| 10 |
+
},
|
| 11 |
+
events: {
|
| 12 |
+
trip_invite: (p) => ({
|
| 13 |
+
title: `Πρόσκληση ταξιδιού: "${p.trip}"`,
|
| 14 |
+
body: `Ο/Η ${p.actor} προσκάλεσε ${p.invitee || 'ένα μέλος'} στο ταξίδι "${p.trip}".`,
|
| 15 |
+
}),
|
| 16 |
+
booking_change: (p) => ({
|
| 17 |
+
title: `Νέα κράτηση: ${p.booking}`,
|
| 18 |
+
body: `Ο/Η ${p.actor} πρόσθεσε μια νέα κράτηση "${p.booking}" (${p.type}) στο "${p.trip}".`,
|
| 19 |
+
}),
|
| 20 |
+
trip_reminder: (p) => ({
|
| 21 |
+
title: `Υπενθύμιση ταξιδιού: ${p.trip}`,
|
| 22 |
+
body: `Το ταξίδι σας "${p.trip}" πλησιάζει!`,
|
| 23 |
+
}),
|
| 24 |
+
todo_due: (p) => ({
|
| 25 |
+
title: `Εκκρεμότητα προς εκτέλεση: ${p.todo}`,
|
| 26 |
+
body: `Η εκκρεμότητα "${p.todo}" στο "${p.trip}" λήγει στις ${p.due}.`,
|
| 27 |
+
}),
|
| 28 |
+
vacay_invite: (p) => ({
|
| 29 |
+
title: 'Πρόσκληση συγχώνευσης διακοπών',
|
| 30 |
+
body: `Ο/Η ${p.actor} σας προσκάλεσε να συγχωνεύσετε τα σχέδια διακοπών σας. Ανοίξτε το TREK για να αποδεχτείτε ή να απορρίψετε.`,
|
| 31 |
+
}),
|
| 32 |
+
photos_shared: (p) => ({
|
| 33 |
+
title: `${p.count} φωτογραφίες κοινοποιήθηκαν`,
|
| 34 |
+
body: `Ο/Η ${p.actor} κοινοποίησε ${p.count} φωτογραφία/ες στο "${p.trip}".`,
|
| 35 |
+
}),
|
| 36 |
+
collab_message: (p) => ({
|
| 37 |
+
title: `Νέο μήνυμα στο "${p.trip}"`,
|
| 38 |
+
body: `${p.actor}: ${p.preview}`,
|
| 39 |
+
}),
|
| 40 |
+
packing_tagged: (p) => ({
|
| 41 |
+
title: `Λίστα συσκευασίας: ${p.category}`,
|
| 42 |
+
body: `Ο/Η ${p.actor} σας ανέθεσε στην κατηγορία "${p.category}" της λίστας συσκευασίας στο "${p.trip}".`,
|
| 43 |
+
}),
|
| 44 |
+
version_available: (p) => ({
|
| 45 |
+
title: 'Νέα έκδοση TREK διαθέσιμη',
|
| 46 |
+
body: `Η έκδοση TREK ${p.version} είναι τώρα διαθέσιμη. Επισκεφθείτε τον πίνακα διαχείρισης για να ενημερώσετε.`,
|
| 47 |
+
}),
|
| 48 |
+
synology_session_cleared: () => ({
|
| 49 |
+
title: 'Η σύνδεση Synology τερματίστηκε',
|
| 50 |
+
body: 'Ο λογαριασμός σας Synology ή το URL άλλαξε. Έχετε αποσυνδεθεί από το Synology Photos.',
|
| 51 |
+
}),
|
| 52 |
+
},
|
| 53 |
+
passwordReset: {
|
| 54 |
+
subject: 'Επαναφορά κωδικού πρόσβασης',
|
| 55 |
+
greeting: 'Γεια σας',
|
| 56 |
+
body: 'Λάβαμε ένα αίτημα επαναφοράς του κωδικού πρόσβασης για τον λογαριασμό σας στο TREK. Κάντε κλικ στο παρακάτω κουμπί για να ορίσετε νέο κωδικό πρόσβασης.',
|
| 57 |
+
ctaIntro: 'Επαναφορά κωδικού',
|
| 58 |
+
expiry: 'Αυτός ο σύνδεσμος λήγει σε 60 λεπτά.',
|
| 59 |
+
ignore:
|
| 60 |
+
'Εάν δεν ζητήσατε αυτή την αλλαγή, μπορείτε να αγνοήσετε αυτό το μήνυμα — ο κωδικός σας δεν θα αλλάξει.',
|
| 61 |
+
},
|
| 62 |
+
};
|
| 63 |
+
|
| 64 |
+
export default gr;
|
shared/src/i18n/gr/files.ts
ADDED
|
@@ -0,0 +1,64 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import type { TranslationStrings } from '../types';
|
| 2 |
+
|
| 3 |
+
const files: TranslationStrings = {
|
| 4 |
+
'files.title': 'Αρχεία',
|
| 5 |
+
'files.pageTitle': 'Αρχεία & Έγγραφα',
|
| 6 |
+
'files.subtitle': '{count} αρχεία για {trip}',
|
| 7 |
+
'files.download': 'Λήψη',
|
| 8 |
+
'files.openError': 'Δεν ήταν δυνατό το άνοιγμα του αρχείου',
|
| 9 |
+
'files.downloadPdf': 'Λήψη PDF',
|
| 10 |
+
'files.count': '{count} αρχεία',
|
| 11 |
+
'files.countSingular': '1 αρχείο',
|
| 12 |
+
'files.uploaded': '{count} μεταφορτώθηκαν',
|
| 13 |
+
'files.uploadError': 'Η μεταφόρτωση απέτυχε',
|
| 14 |
+
'files.dropzone': 'Αποθέστε αρχεία εδώ',
|
| 15 |
+
'files.dropzoneHint': 'ή κάντε κλικ για περιήγηση',
|
| 16 |
+
'files.allowedTypes':
|
| 17 |
+
'Εικόνες, PDF, DOC, DOCX, XLS, XLSX, TXT, CSV · Μέγ. 50 MB',
|
| 18 |
+
'files.uploading': 'Μεταφόρτωση...',
|
| 19 |
+
'files.filterAll': 'Όλα',
|
| 20 |
+
'files.filterPdf': 'PDF',
|
| 21 |
+
'files.filterImages': 'Εικόνες',
|
| 22 |
+
'files.filterDocs': 'Έγγραφα',
|
| 23 |
+
'files.filterCollab': 'Σημειώσεις Collab',
|
| 24 |
+
'files.sourceCollab': 'Από Σημειώσεις Collab',
|
| 25 |
+
'files.empty': 'Δεν υπάρχουν αρχεία ακόμη',
|
| 26 |
+
'files.emptyHint': 'Μεταφορτώστε αρχεία για να τα επισυνάψετε στο ταξίδι σας',
|
| 27 |
+
'files.openTab': 'Άνοιγμα σε νέα καρτέλα',
|
| 28 |
+
'files.confirm.delete':
|
| 29 |
+
'Είστε σίγουροι ότι θέλετε να διαγράψετε αυτό το αρχείο;',
|
| 30 |
+
'files.toast.deleted': 'Το αρχείο διαγράφηκε',
|
| 31 |
+
'files.toast.deleteError': 'Αποτυχία διαγραφής αρχείου',
|
| 32 |
+
'files.sourcePlan': 'Ημερήσιο Πλάνο',
|
| 33 |
+
'files.sourceBooking': 'Κράτηση',
|
| 34 |
+
'files.sourceTransport': 'Μεταφορά',
|
| 35 |
+
'files.attach': 'Επισύναψη',
|
| 36 |
+
'files.pasteHint':
|
| 37 |
+
'Μπορείτε επίσης να επικολλήσετε εικόνες από το πρόχειρο (Ctrl+V)',
|
| 38 |
+
'files.trash': 'Κάδος',
|
| 39 |
+
'files.trashEmpty': 'Ο κάδος είναι άδειος',
|
| 40 |
+
'files.emptyTrash': 'Άδειασμα Κάδου',
|
| 41 |
+
'files.restore': 'Επαναφορά',
|
| 42 |
+
'files.star': 'Επισήμανση',
|
| 43 |
+
'files.unstar': 'Αφαίρεση επισήμανσης',
|
| 44 |
+
'files.assign': 'Ανάθεση',
|
| 45 |
+
'files.assignTitle': 'Ανάθεση Αρχείου',
|
| 46 |
+
'files.assignPlace': 'Μέρος',
|
| 47 |
+
'files.assignBooking': 'Κράτηση',
|
| 48 |
+
'files.assignTransport': 'Μεταφορά',
|
| 49 |
+
'files.unassigned': 'Χωρίς ανάθεση',
|
| 50 |
+
'files.unlink': 'Αφαίρεση σύνδεσης',
|
| 51 |
+
'files.toast.trashed': 'Μετακινήθηκε στον κάδο',
|
| 52 |
+
'files.toast.restored': 'Το αρχείο επαναφέρθηκε',
|
| 53 |
+
'files.toast.trashEmptied': 'Ο κάδος αδειάστηκε',
|
| 54 |
+
'files.toast.assigned': 'Το αρχείο ανατέθηκε',
|
| 55 |
+
'files.toast.assignError': 'Η ανάθεση απέτυχε',
|
| 56 |
+
'files.toast.restoreError': 'Η επαναφορά απέτυχε',
|
| 57 |
+
'files.confirm.permanentDelete':
|
| 58 |
+
'Οριστική διαγραφή αυτού του αρχείου; Αυτή η ενέργεια δεν μπορεί να αναιρεθεί.',
|
| 59 |
+
'files.confirm.emptyTrash':
|
| 60 |
+
'Οριστική διαγραφή όλων των αρχείων στον κάδο; Αυτή η ενέργεια δεν μπορεί να αναιρεθεί.',
|
| 61 |
+
'files.noteLabel': 'Σημείωση',
|
| 62 |
+
'files.notePlaceholder': 'Προσθήκη σημείωσης...',
|
| 63 |
+
};
|
| 64 |
+
export default files;
|
shared/src/i18n/gr/index.ts
ADDED
|
@@ -0,0 +1,86 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import admin from './admin';
|
| 2 |
+
import airport from './airport';
|
| 3 |
+
import atlas from './atlas';
|
| 4 |
+
import backup from './backup';
|
| 5 |
+
import budget from './budget';
|
| 6 |
+
import categories from './categories';
|
| 7 |
+
import collab from './collab';
|
| 8 |
+
import common from './common';
|
| 9 |
+
import dashboard from './dashboard';
|
| 10 |
+
import day from './day';
|
| 11 |
+
import dayplan from './dayplan';
|
| 12 |
+
import files from './files';
|
| 13 |
+
import inspector from './inspector';
|
| 14 |
+
import journey from './journey';
|
| 15 |
+
import login from './login';
|
| 16 |
+
import map from './map';
|
| 17 |
+
import members from './members';
|
| 18 |
+
import memories from './memories';
|
| 19 |
+
import nav from './nav';
|
| 20 |
+
import notif from './notif';
|
| 21 |
+
import notifications from './notifications';
|
| 22 |
+
import oauth from './oauth';
|
| 23 |
+
import packing from './packing';
|
| 24 |
+
import pdf from './pdf';
|
| 25 |
+
import perm from './perm';
|
| 26 |
+
import photos from './photos';
|
| 27 |
+
import places from './places';
|
| 28 |
+
import planner from './planner';
|
| 29 |
+
import register from './register';
|
| 30 |
+
import reservations from './reservations';
|
| 31 |
+
import settings from './settings';
|
| 32 |
+
import share from './share';
|
| 33 |
+
import shared from './shared';
|
| 34 |
+
import stats from './stats';
|
| 35 |
+
import system_notice from './system_notice';
|
| 36 |
+
import todo from './todo';
|
| 37 |
+
import transport from './transport';
|
| 38 |
+
import trip from './trip';
|
| 39 |
+
import trips from './trips';
|
| 40 |
+
import undo from './undo';
|
| 41 |
+
import vacay from './vacay';
|
| 42 |
+
|
| 43 |
+
const locale = {
|
| 44 |
+
...common,
|
| 45 |
+
...trips,
|
| 46 |
+
...nav,
|
| 47 |
+
...dashboard,
|
| 48 |
+
...settings,
|
| 49 |
+
...admin,
|
| 50 |
+
...dayplan,
|
| 51 |
+
...share,
|
| 52 |
+
...shared,
|
| 53 |
+
...login,
|
| 54 |
+
...register,
|
| 55 |
+
...vacay,
|
| 56 |
+
...atlas,
|
| 57 |
+
...trip,
|
| 58 |
+
...places,
|
| 59 |
+
...inspector,
|
| 60 |
+
...reservations,
|
| 61 |
+
...airport,
|
| 62 |
+
...map,
|
| 63 |
+
...budget,
|
| 64 |
+
...files,
|
| 65 |
+
...packing,
|
| 66 |
+
...members,
|
| 67 |
+
...categories,
|
| 68 |
+
...backup,
|
| 69 |
+
...photos,
|
| 70 |
+
...pdf,
|
| 71 |
+
...planner,
|
| 72 |
+
...stats,
|
| 73 |
+
...day,
|
| 74 |
+
...memories,
|
| 75 |
+
...collab,
|
| 76 |
+
...perm,
|
| 77 |
+
...undo,
|
| 78 |
+
...notifications,
|
| 79 |
+
...todo,
|
| 80 |
+
...notif,
|
| 81 |
+
...journey,
|
| 82 |
+
...oauth,
|
| 83 |
+
...system_notice,
|
| 84 |
+
...transport,
|
| 85 |
+
};
|
| 86 |
+
export default locale;
|
shared/src/i18n/gr/inspector.ts
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import type { TranslationStrings } from '../types';
|
| 2 |
+
|
| 3 |
+
const inspector: TranslationStrings = {
|
| 4 |
+
'inspector.opened': 'Ανοιχτό',
|
| 5 |
+
'inspector.closed': 'Κλειστό',
|
| 6 |
+
'inspector.openingHours': 'Ώρες Λειτουργίας',
|
| 7 |
+
'inspector.showHours': 'Εμφάνιση ωρών λειτουργίας',
|
| 8 |
+
'inspector.files': 'Αρχεία',
|
| 9 |
+
'inspector.filesCount': '{count} αρχεία',
|
| 10 |
+
'inspector.remove': 'Αφαίρεση',
|
| 11 |
+
'inspector.removeFromDay': 'Αφαίρεση από την Ημέρα',
|
| 12 |
+
'inspector.addToDay': 'Προσθήκη στην Ημέρα',
|
| 13 |
+
'inspector.confirmedRes': 'Επιβεβαιωμένη Κράτηση',
|
| 14 |
+
'inspector.pendingRes': 'Εκκρεμής Κράτηση',
|
| 15 |
+
'inspector.google': 'Άνοιγμα στο Google Maps',
|
| 16 |
+
'inspector.website': 'Άνοιγμα Ιστοσελίδας',
|
| 17 |
+
'inspector.addRes': 'Κράτηση',
|
| 18 |
+
'inspector.editRes': 'Επεξεργασία Κράτησης',
|
| 19 |
+
'inspector.participants': 'Συμμετέχοντες',
|
| 20 |
+
'inspector.trackStats': 'Στατιστικά Διαδρομής',
|
| 21 |
+
};
|
| 22 |
+
export default inspector;
|
shared/src/i18n/gr/journey.ts
ADDED
|
@@ -0,0 +1,247 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import type { TranslationStrings } from '../types';
|
| 2 |
+
|
| 3 |
+
const journey: TranslationStrings = {
|
| 4 |
+
'journey.search.placeholder': 'Αναζήτηση ταξιδιών…',
|
| 5 |
+
'journey.search.noResults': 'Κανένα ταξίδι δεν ταιριάζει με «{query}»',
|
| 6 |
+
'journey.title': 'Ταξίδι',
|
| 7 |
+
'journey.subtitle': 'Παρακολουθήστε τα ταξίδια σας καθώς συμβαίνουν',
|
| 8 |
+
'journey.new': 'Νέο Ταξίδι',
|
| 9 |
+
'journey.create': 'Δημιουργία',
|
| 10 |
+
'journey.titlePlaceholder': 'Πού πηγαίνετε;',
|
| 11 |
+
'journey.empty': 'Δεν υπάρχουν ταξίδια ακόμα',
|
| 12 |
+
'journey.emptyHint': 'Ξεκινήστε να καταγράφετε το επόμενο ταξίδι σας',
|
| 13 |
+
'journey.deleted': 'Το ταξίδι διαγράφηκε',
|
| 14 |
+
'journey.createError': 'Δεν ήταν δυνατή η δημιουργία ταξιδιού',
|
| 15 |
+
'journey.deleteError': 'Δεν ήταν δυνατή η διαγραφή ταξιδιού',
|
| 16 |
+
'journey.deleteConfirmTitle': 'Διαγραφή',
|
| 17 |
+
'journey.deleteConfirmMessage':
|
| 18 |
+
'Διαγραφή «{title}»; Αυτό δεν μπορεί να αναιρεθεί.',
|
| 19 |
+
'journey.deleteConfirmGeneric': 'Είστε σίγουροι ότι θέλετε να το διαγράψετε;',
|
| 20 |
+
'journey.notFound': 'Το ταξίδι δεν βρέθηκε',
|
| 21 |
+
'journey.photos': 'Φωτογραφίες',
|
| 22 |
+
'journey.timelineEmpty': 'Δεν υπάρχουν στάσεις ακόμα',
|
| 23 |
+
'journey.timelineEmptyHint':
|
| 24 |
+
'Προσθέστε μια άφιξη ή γράψτε μια καταχώρηση ημερολογίου για να ξεκινήσετε',
|
| 25 |
+
'journey.status.draft': 'Πρόχειρο',
|
| 26 |
+
'journey.status.active': 'Ενεργό',
|
| 27 |
+
'journey.status.completed': 'Ολοκληρωμένο',
|
| 28 |
+
'journey.status.upcoming': 'Επερχόμενο',
|
| 29 |
+
'journey.status.archived': 'Αρχειοθετημένο',
|
| 30 |
+
'journey.checkin.add': 'Άφιξη',
|
| 31 |
+
'journey.checkin.namePlaceholder': 'Όνομα τοποθεσίας',
|
| 32 |
+
'journey.checkin.notesPlaceholder': 'Σημειώσεις (προαιρετικό)',
|
| 33 |
+
'journey.checkin.save': 'Αποθήκευση',
|
| 34 |
+
'journey.checkin.error': 'Δεν ήταν δυνατή η αποθήκευση άφιξης',
|
| 35 |
+
'journey.entry.add': 'Ημερολόγιο',
|
| 36 |
+
'journey.entry.edit': 'Επεξεργασία καταχώρησης',
|
| 37 |
+
'journey.entry.titlePlaceholder': 'Τίτλος (προαιρετικό)',
|
| 38 |
+
'journey.entry.bodyPlaceholder': 'Τι συνέβη σήμερα;',
|
| 39 |
+
'journey.entry.save': 'Αποθήκευση',
|
| 40 |
+
'journey.entry.error': 'Δεν ήταν δυνατή η αποθήκευση καταχώρησης',
|
| 41 |
+
'journey.photo.add': 'Φωτογραφία',
|
| 42 |
+
'journey.photo.uploadError': 'Η μεταφόρτωση απέτυχε',
|
| 43 |
+
'journey.share.share': 'Κοινοποίηση',
|
| 44 |
+
'journey.share.public': 'Δημόσιο',
|
| 45 |
+
'journey.share.linkCopied': 'Ο δημόσιος σύνδεσμος αντιγράφηκε',
|
| 46 |
+
'journey.share.disabled': 'Η δημόσια κοινοποίηση απενεργοποιήθηκε',
|
| 47 |
+
'journey.editor.titlePlaceholder': 'Δώστε ένα όνομα σε αυτή τη στιγμή...',
|
| 48 |
+
'journey.editor.bodyPlaceholder': 'Πείτε την ιστορία αυτής της ημέρας...',
|
| 49 |
+
'journey.editor.placePlaceholder': 'Τοποθεσία (προαιρετικό)',
|
| 50 |
+
'journey.editor.tagsPlaceholder':
|
| 51 |
+
'Ετικέτες: κρυμμένος θησαυρός, καλύτερο γεύμα, πρέπει να ξαναπάω...',
|
| 52 |
+
'journey.visibility.private': 'Ιδιωτικό',
|
| 53 |
+
'journey.visibility.shared': 'Κοινόχρηστο',
|
| 54 |
+
'journey.visibility.public': 'Δημόσιο',
|
| 55 |
+
'journey.emptyState.title': 'Η ιστορία σας ξεκινά εδώ',
|
| 56 |
+
'journey.emptyState.subtitle':
|
| 57 |
+
'Κάντε άφιξη σε ένα μέρος ή γράψτε την πρώτη σας καταχώρηση ημερολογίου',
|
| 58 |
+
'journey.frontpage.subtitle':
|
| 59 |
+
'Μετατρέψτε τα ταξίδια σας σε ιστορίες που δεν θα ξεχάσετε ποτέ',
|
| 60 |
+
'journey.frontpage.createJourney': 'Δημιουργία Ταξιδιού',
|
| 61 |
+
'journey.frontpage.activeJourney': 'Ενεργό Ταξίδι',
|
| 62 |
+
'journey.frontpage.allJourneys': 'Όλα τα Ταξίδια',
|
| 63 |
+
'journey.frontpage.journeys': 'ταξίδια',
|
| 64 |
+
'journey.frontpage.createNew': 'Δημιουργία νέου Ταξιδιού',
|
| 65 |
+
'journey.frontpage.createNewSub':
|
| 66 |
+
'Επιλέξτε ταξίδια, γράψτε ιστορίες, μοιραστείτε τις περιπέτειές σας',
|
| 67 |
+
'journey.frontpage.live': 'Ζωντανά',
|
| 68 |
+
'journey.frontpage.synced': 'Συγχρονισμένο',
|
| 69 |
+
'journey.frontpage.continueWriting': 'Συνέχιση γραφής',
|
| 70 |
+
'journey.frontpage.updated': 'Ενημερώθηκε {time}',
|
| 71 |
+
'journey.frontpage.suggestionLabel': 'Το ταξίδι μόλις τελείωσε',
|
| 72 |
+
'journey.frontpage.suggestionText':
|
| 73 |
+
'Μετατρέψτε το <strong>{title}</strong> σε Ταξίδι',
|
| 74 |
+
'journey.frontpage.dismiss': 'Απόρριψη',
|
| 75 |
+
'journey.frontpage.journeyName': 'Όνομα Ταξιδιού',
|
| 76 |
+
'journey.frontpage.namePlaceholder': 'π.χ. Νοτιοανατολική Ασία 2026',
|
| 77 |
+
'journey.frontpage.selectTrips': 'Επιλογή Ταξιδιών',
|
| 78 |
+
'journey.frontpage.tripsSelected': 'επιλεγμένα ταξίδια',
|
| 79 |
+
'journey.frontpage.trips': 'ταξίδια',
|
| 80 |
+
'journey.frontpage.placesImported': 'τοποθεσίες θα εισαχθούν',
|
| 81 |
+
'journey.frontpage.places': 'τοποθεσίες',
|
| 82 |
+
'journey.detail.backToJourney': 'Πίσω στο Ταξίδι',
|
| 83 |
+
'journey.detail.syncedWithTrips': 'Συγχρονισμένο με Ταξίδια',
|
| 84 |
+
'journey.detail.addEntry': 'Προσθήκη Καταχώρησης',
|
| 85 |
+
'journey.detail.newEntry': 'Νέα Καταχώρηση',
|
| 86 |
+
'journey.detail.editEntry': 'Επεξεργασία Καταχώρησης',
|
| 87 |
+
'journey.detail.noEntries': 'Δεν υπάρχουν καταχωρήσεις ακόμα',
|
| 88 |
+
'journey.detail.noEntriesHint':
|
| 89 |
+
'Προσθέστε ένα ταξίδι για να ξεκινήσετε με προτεινόμενες καταχωρήσεις',
|
| 90 |
+
'journey.detail.noPhotos': 'Δεν υπάρχουν φωτογραφίες ακόμα',
|
| 91 |
+
'journey.detail.noPhotosHint':
|
| 92 |
+
'Μεταφορτώστε φωτογραφίες σε καταχωρήσεις ή περιηγηθείτε τη βιβλιοθήκη Immich/Synology',
|
| 93 |
+
'journey.detail.journeyTab': 'Ταξίδι',
|
| 94 |
+
'journey.detail.journeyStats': 'Στατιστικά Ταξιδιού',
|
| 95 |
+
'journey.detail.syncedTrips': 'Συγχρονισμένα Ταξίδια',
|
| 96 |
+
'journey.detail.noTripsLinked': 'Δεν έχουν συνδεθεί ταξίδια ακόμα',
|
| 97 |
+
'journey.detail.contributors': 'Συνεισφέροντες',
|
| 98 |
+
'journey.detail.readMore': 'Διαβάστε περισσότερα',
|
| 99 |
+
'journey.detail.prosCons': 'Υπέρ & Κατά',
|
| 100 |
+
'journey.detail.photos': 'φωτογραφίες',
|
| 101 |
+
'journey.detail.day': 'Ημέρα {number}',
|
| 102 |
+
'journey.detail.places': 'τοποθεσίες',
|
| 103 |
+
'journey.stats.days': 'Ημέρες',
|
| 104 |
+
'journey.stats.cities': 'Πόλεις',
|
| 105 |
+
'journey.stats.entries': 'Καταχωρήσεις',
|
| 106 |
+
'journey.stats.photos': 'Φωτογραφίες',
|
| 107 |
+
'journey.stats.places': 'Τοποθεσίες',
|
| 108 |
+
'journey.skeletons.show': 'Εμφάνιση προτάσεων',
|
| 109 |
+
'journey.skeletons.hide': 'Απόκρυψη προτάσεων',
|
| 110 |
+
'journey.verdict.lovedIt': 'Το λάτρεψα',
|
| 111 |
+
'journey.verdict.couldBeBetter': 'Θα μπορούσε να ήταν καλύτερο',
|
| 112 |
+
'journey.synced.places': 'τοποθεσίες',
|
| 113 |
+
'journey.synced.synced': 'συγχρονισμένα',
|
| 114 |
+
'journey.editor.discardChangesConfirm':
|
| 115 |
+
'Έχετε μη αποθηκευμένες αλλαγές. Απόρριψη;',
|
| 116 |
+
'journey.editor.uploadFailed': 'Η μεταφόρτωση φωτογραφίας απέτυχε',
|
| 117 |
+
'journey.editor.uploadPhotos': 'Μεταφόρτωση φωτογραφιών',
|
| 118 |
+
'journey.editor.uploading': 'Μεταφόρτωση...',
|
| 119 |
+
'journey.editor.uploadingProgress': 'Μεταφόρτωση {done}/{total}.',
|
| 120 |
+
'journey.editor.uploadPartialFailed':
|
| 121 |
+
'{failed} από {total} φωτογραφίες απέτυχαν — αποθηκεύστε ξανά για να δοκιμάσετε εκ νέου',
|
| 122 |
+
'journey.editor.fromGallery': 'Από τη Συλλογή',
|
| 123 |
+
'journey.editor.allPhotosAdded': 'Όλες οι φωτογραφίες έχουν ήδη προστεθεί',
|
| 124 |
+
'journey.editor.writeStory': 'Γράψτε την ιστορία σας...',
|
| 125 |
+
'journey.editor.prosCons': 'Υπέρ & Κατά',
|
| 126 |
+
'journey.editor.pros': 'Υπέρ',
|
| 127 |
+
'journey.editor.cons': 'Κατά',
|
| 128 |
+
'journey.editor.proPlaceholder': 'Κάτι υπέροχο...',
|
| 129 |
+
'journey.editor.conPlaceholder': 'Όχι και τόσο καλό...',
|
| 130 |
+
'journey.editor.addAnother': 'Προσθήκη άλλου',
|
| 131 |
+
'journey.editor.date': 'Ημερομηνία',
|
| 132 |
+
'journey.editor.location': 'Τοποθεσία',
|
| 133 |
+
'journey.editor.searchLocation': 'Αναζήτηση τοποθεσίας...',
|
| 134 |
+
'journey.editor.mood': 'Διάθεση',
|
| 135 |
+
'journey.editor.weather': 'Καιρός',
|
| 136 |
+
'journey.editor.photoFirst': '1η',
|
| 137 |
+
'journey.editor.makeFirst': 'Ορισμός ως 1η',
|
| 138 |
+
'journey.editor.searching': 'Αναζήτηση...',
|
| 139 |
+
'journey.mood.amazing': 'Καταπληκτική',
|
| 140 |
+
'journey.mood.good': 'Καλή',
|
| 141 |
+
'journey.mood.neutral': 'Ουδέτερη',
|
| 142 |
+
'journey.mood.rough': 'Δύσκολη',
|
| 143 |
+
'journey.weather.sunny': 'Ηλιόλουστος',
|
| 144 |
+
'journey.weather.partly': 'Μερικώς συννεφιασμένος',
|
| 145 |
+
'journey.weather.cloudy': 'Συννεφιασμένος',
|
| 146 |
+
'journey.weather.rainy': 'Βροχερός',
|
| 147 |
+
'journey.weather.stormy': 'Καταιγιδοφόρος',
|
| 148 |
+
'journey.weather.cold': 'Χιονισμένος',
|
| 149 |
+
'journey.trips.linkTrip': 'Σύνδεση Ταξιδιού',
|
| 150 |
+
'journey.trips.searchTrip': 'Αναζήτηση Ταξιδιού',
|
| 151 |
+
'journey.trips.searchPlaceholder': 'Όνομα ταξιδιού ή προορισμός...',
|
| 152 |
+
'journey.trips.noTripsAvailable': 'Δεν υπάρχουν διαθέσιμα ταξίδια',
|
| 153 |
+
'journey.trips.link': 'Σύνδεση',
|
| 154 |
+
'journey.trips.tripLinked': 'Το ταξίδι συνδέθηκε',
|
| 155 |
+
'journey.trips.linkFailed': 'Αποτυχία σύνδεσης ταξιδιού',
|
| 156 |
+
'journey.trips.addTrip': 'Προσθήκη Ταξιδιού',
|
| 157 |
+
'journey.trips.unlinkTrip': 'Αποσύνδεση Ταξιδιού',
|
| 158 |
+
'journey.trips.unlinkMessage':
|
| 159 |
+
'Αποσύνδεση «{title}»; Όλες οι συγχρονισμένες καταχωρήσεις και φωτογραφίες αυτού του ταξιδιού θα διαγραφούν οριστικά. Αυτό δεν μπορεί να αναιρεθεί.',
|
| 160 |
+
'journey.trips.unlink': 'Αποσύνδεση',
|
| 161 |
+
'journey.trips.tripUnlinked': 'Το ταξίδι αποσυνδέθηκε',
|
| 162 |
+
'journey.trips.unlinkFailed': 'Αποτυχία αποσύνδεσης ταξιδιού',
|
| 163 |
+
'journey.trips.noTripsLinkedSettings': 'Δεν έχουν συνδεθεί ταξίδια',
|
| 164 |
+
'journey.contributors.invite': 'Πρόσκληση Συνεισφέροντα',
|
| 165 |
+
'journey.contributors.searchUser': 'Αναζήτηση Χρήστη',
|
| 166 |
+
'journey.contributors.searchPlaceholder': 'Όνομα χρήστη ή email...',
|
| 167 |
+
'journey.contributors.noUsers': 'Δεν βρέθηκαν χρήστες',
|
| 168 |
+
'journey.contributors.role': 'Ρόλος',
|
| 169 |
+
'journey.contributors.added': 'Ο συνεισφέρων προστέθηκε',
|
| 170 |
+
'journey.contributors.addFailed': 'Αποτυχία προσθήκης συνεισφέροντα',
|
| 171 |
+
'journey.contributors.remove': 'Αφαίρεση συνεισφέροντα',
|
| 172 |
+
'journey.contributors.removeConfirm':
|
| 173 |
+
'Αφαίρεση {username} από αυτό το ταξίδι;',
|
| 174 |
+
'journey.contributors.removed': 'Ο συνεισφέρων αφαιρέθηκε',
|
| 175 |
+
'journey.contributors.removeFailed': 'Αποτυχία αφαίρεσης συνεισφέροντα',
|
| 176 |
+
'journey.share.publicShare': 'Δημόσια Κοινοποίηση',
|
| 177 |
+
'journey.share.createLink': 'Δημιουργία συνδέσμου κοινής χρήσης',
|
| 178 |
+
'journey.share.linkCreated': 'Ο σύνδεσμος κοινής χρήσης δημιουργήθηκε',
|
| 179 |
+
'journey.share.createFailed': 'Αποτυχία δημιουργίας συνδέσμου',
|
| 180 |
+
'journey.share.copy': 'Αντιγραφή',
|
| 181 |
+
'journey.share.copied': 'Αντιγράφηκε!',
|
| 182 |
+
'journey.share.timeline': 'Χρονολόγιο',
|
| 183 |
+
'journey.share.gallery': 'Συλλογή',
|
| 184 |
+
'journey.share.map': 'Χάρτης',
|
| 185 |
+
'journey.share.removeLink': 'Αφαίρεση συνδέσμου κοινής χρήσης',
|
| 186 |
+
'journey.share.linkDeleted': 'Ο σύνδεσμος κοινής χρήσης διαγράφηκε',
|
| 187 |
+
'journey.share.deleteFailed': 'Αποτυχία διαγραφής',
|
| 188 |
+
'journey.share.updateFailed': 'Αποτυχία ενημέρωσης',
|
| 189 |
+
'journey.invite.role': 'Ρόλος',
|
| 190 |
+
'journey.invite.viewer': 'Θεατής',
|
| 191 |
+
'journey.invite.editor': 'Συντάκτης',
|
| 192 |
+
'journey.invite.invite': 'Πρόσκληση',
|
| 193 |
+
'journey.invite.inviting': 'Αποστολή πρόσκλησης...',
|
| 194 |
+
'journey.settings.title': 'Ρυθμίσεις Ταξιδιού',
|
| 195 |
+
'journey.settings.coverImage': 'Εικόνα Εξωφύλλου',
|
| 196 |
+
'journey.settings.changeCover': 'Αλλαγή εξωφύλλου',
|
| 197 |
+
'journey.settings.addCover': 'Προσθήκη εικόνας εξωφύλλου',
|
| 198 |
+
'journey.settings.name': 'Όνομα',
|
| 199 |
+
'journey.settings.subtitle': 'Υπότιτλος',
|
| 200 |
+
'journey.settings.subtitlePlaceholder': 'π.χ. Ταϊλάνδη, Βιετνάμ & Καμπότζη',
|
| 201 |
+
'journey.settings.endJourney': 'Αρχειοθέτηση Ταξιδιού',
|
| 202 |
+
'journey.settings.reopenJourney': 'Επαναφορά Ταξιδιού',
|
| 203 |
+
'journey.settings.archived': 'Το ταξίδι αρχειοθετήθηκε',
|
| 204 |
+
'journey.settings.reopened': 'Το ταξίδι επανενεργοποιήθηκε',
|
| 205 |
+
'journey.settings.endDescription':
|
| 206 |
+
'Αποκρύπτει το σήμα «Ζωντανά». Μπορείτε να το επαναφέρετε ανά πάσα στιγμή.',
|
| 207 |
+
'journey.settings.delete': 'Διαγραφή',
|
| 208 |
+
'journey.settings.deleteJourney': 'Διαγραφή Ταξιδιού',
|
| 209 |
+
'journey.settings.deleteMessage':
|
| 210 |
+
'Διαγραφή «{title}»; Όλες οι καταχωρήσεις και οι φωτογραφίες θα χαθούν.',
|
| 211 |
+
'journey.settings.saved': 'Οι ρυθμίσεις αποθηκεύτηκαν',
|
| 212 |
+
'journey.settings.saveFailed': 'Αποτυχία αποθήκευσης',
|
| 213 |
+
'journey.settings.coverUpdated': 'Το εξώφυλλο ενημερώθηκε',
|
| 214 |
+
'journey.settings.coverFailed': 'Η μεταφόρτωση απέτυχε',
|
| 215 |
+
'journey.settings.failedToDelete': 'Αποτυχία διαγραφής',
|
| 216 |
+
'journey.entries.deleteTitle': 'Διαγραφή Καταχώρησης',
|
| 217 |
+
'journey.photosUploaded': '{count} φ��τογραφίες μεταφορτώθηκαν',
|
| 218 |
+
'journey.photosUploadFailed':
|
| 219 |
+
'Ορισμένες φωτογραφίες απέτυχαν να μεταφορτωθούν',
|
| 220 |
+
'journey.photosAdded': '{count} φωτογραφίες προστέθηκαν',
|
| 221 |
+
'journey.public.notFound': 'Δεν Βρέθηκε',
|
| 222 |
+
'journey.public.notFoundMessage':
|
| 223 |
+
'Αυτό το ταξίδι δεν υπάρχει ή ο σύνδεσμος έχει λήξει.',
|
| 224 |
+
'journey.public.readOnly': 'Μόνο ανάγνωση · Δημόσιο Ταξίδι',
|
| 225 |
+
'journey.public.tagline': 'Travel Resource & Exploration Kit',
|
| 226 |
+
'journey.public.sharedVia': 'Κοινοποιήθηκε μέσω',
|
| 227 |
+
'journey.public.madeWith': 'Φτιαγμένο με',
|
| 228 |
+
'journey.pdf.journeyBook': 'Βιβλίο Ταξιδιού',
|
| 229 |
+
'journey.pdf.madeWith': 'Φτιαγμένο με TREK',
|
| 230 |
+
'journey.pdf.day': 'Ημέρα',
|
| 231 |
+
'journey.pdf.theEnd': 'Τέλος',
|
| 232 |
+
'journey.pdf.saveAsPdf': 'Αποθήκευση ως PDF',
|
| 233 |
+
'journey.pdf.pages': 'σελίδες',
|
| 234 |
+
'journey.picker.tripPeriod': 'Περίοδος Ταξιδιού',
|
| 235 |
+
'journey.picker.dateRange': 'Εύρος Ημερομηνιών',
|
| 236 |
+
'journey.picker.allPhotos': 'Όλες οι Φωτογραφίες',
|
| 237 |
+
'journey.picker.albums': 'Άλμπουμ',
|
| 238 |
+
'journey.picker.selected': 'επιλεγμένες',
|
| 239 |
+
'journey.picker.addTo': 'Προσθήκη σε',
|
| 240 |
+
'journey.picker.newGallery': 'Νέα Συλλογή',
|
| 241 |
+
'journey.picker.selectAll': 'Επιλογή όλων',
|
| 242 |
+
'journey.picker.deselectAll': 'Αποεπιλογή όλων',
|
| 243 |
+
'journey.picker.noAlbums': 'Δεν βρέθηκαν άλμπουμ',
|
| 244 |
+
'journey.picker.selectDate': 'Επιλογή ημερομηνίας',
|
| 245 |
+
'journey.picker.search': 'Αναζήτηση',
|
| 246 |
+
};
|
| 247 |
+
export default journey;
|
shared/src/i18n/gr/login.ts
ADDED
|
@@ -0,0 +1,107 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import type { TranslationStrings } from '../types';
|
| 2 |
+
|
| 3 |
+
const login: TranslationStrings = {
|
| 4 |
+
'login.error': 'Η σύνδεση απέτυχε. Παρακαλώ ελέγξτε τα στοιχεία σας.',
|
| 5 |
+
'login.tagline': 'Τα Ταξίδια σας.\nΤο Σχέδιό σας.',
|
| 6 |
+
'login.description':
|
| 7 |
+
'Σχεδιάστε ταξίδια συνεργατικά με διαδραστικούς χάρτες, προϋπολογισμούς και συγχρονισμό σε πραγματικό χρόνο.',
|
| 8 |
+
'login.features.maps': 'Διαδραστικοί Χάρτες',
|
| 9 |
+
'login.features.mapsDesc': 'Google Places, διαδρομές & ομαδοποίηση',
|
| 10 |
+
'login.features.realtime': 'Συγχρονισμός Πραγματικού Χρόνου',
|
| 11 |
+
'login.features.realtimeDesc': 'Σχεδιάστε μαζί μέσω WebSocket',
|
| 12 |
+
'login.features.budget': 'Παρακολούθηση Προϋπολογισμού',
|
| 13 |
+
'login.features.budgetDesc': 'Κατηγορίες, γραφήματα & κόστος ανά άτομο',
|
| 14 |
+
'login.features.collab': 'Συνεργασία',
|
| 15 |
+
'login.features.collabDesc': 'Πολλαπλοί χρήστες με κοινόχρηστα ταξίδια',
|
| 16 |
+
'login.features.packing': 'Λίστες Πακεταρίσματος',
|
| 17 |
+
'login.features.packingDesc': 'Κατηγορίες, πρόοδος & προτάσεις',
|
| 18 |
+
'login.features.bookings': 'Κρατήσεις',
|
| 19 |
+
'login.features.bookingsDesc': 'Πτήσεις, ξενοδοχεία, εστιατόρια & άλλα',
|
| 20 |
+
'login.features.files': 'Έγγραφα',
|
| 21 |
+
'login.features.filesDesc': 'Μεταφόρτωση & διαχείριση εγγράφων',
|
| 22 |
+
'login.features.routes': 'Έξυπνες Διαδρομές',
|
| 23 |
+
'login.features.routesDesc':
|
| 24 |
+
'Αυτόματη βελτιστοποίηση & εξαγωγή στο Google Maps',
|
| 25 |
+
'login.selfHosted':
|
| 26 |
+
'Self-hosted \u00B7 Open Source \u00B7 Τα δεδομένα σας παραμένουν δικά σας',
|
| 27 |
+
'login.title': 'Σύνδεση',
|
| 28 |
+
'login.subtitle': 'Καλώς ήρθατε πίσω',
|
| 29 |
+
'login.signingIn': 'Σύνδεση…',
|
| 30 |
+
'login.signIn': 'Σύνδεση',
|
| 31 |
+
'login.createAdmin': 'Δημιουργία Λογαριασμού Διαχειριστή',
|
| 32 |
+
'login.createAdminHint':
|
| 33 |
+
'Ρυθμίστε τον πρώτο λογαριασμό διαχειριστή για το TREK.',
|
| 34 |
+
'login.setNewPassword': 'Ορισμός Νέου Κωδικού',
|
| 35 |
+
'login.setNewPasswordHint':
|
| 36 |
+
'Πρέπει να αλλάξετε τον κωδικό σας πριν συνεχίσετε.',
|
| 37 |
+
'login.createAccount': 'Δημιουργία Λογαριασμού',
|
| 38 |
+
'login.createAccountHint': 'Καταχωρήστε έναν νέο λογαριασμό.',
|
| 39 |
+
'login.creating': 'Δημιουργία…',
|
| 40 |
+
'login.noAccount': 'Δεν έχετε λογαριασμό;',
|
| 41 |
+
'login.hasAccount': 'Έχετε ήδη λογαριασμό;',
|
| 42 |
+
'login.register': 'Εγγραφή',
|
| 43 |
+
'login.emailPlaceholder': 'your@email.com',
|
| 44 |
+
'login.username': 'Όνομα χρήστη',
|
| 45 |
+
'login.oidc.registrationDisabled':
|
| 46 |
+
'Η εγγραφή είναι απενεργοποιημένη. Επικοινωνήστε με τον διαχειριστή σας.',
|
| 47 |
+
'login.oidc.noEmail': 'Δεν ελήφθη email από τον πάροχο.',
|
| 48 |
+
'login.oidc.tokenFailed': 'Ο έλεγχος ταυτότητας απέτυχε.',
|
| 49 |
+
'login.oidc.invalidState': 'Μη έγκυρη συνεδρία. Παρακαλώ δοκιμάστε ξανά.',
|
| 50 |
+
'login.demoFailed': 'Η σύνδεση demo απέτυχε',
|
| 51 |
+
'login.oidcSignIn': 'Σύνδεση με {name}',
|
| 52 |
+
'login.oidcOnly':
|
| 53 |
+
'Ο έλεγχος ταυτότητας με κωδικό είναι απενεργοποιημένος. Παρακαλώ συνδεθείτε χρησιμοποιώντας τον πάροχο SSO σας.',
|
| 54 |
+
'login.oidcLoggedOut':
|
| 55 |
+
'Έχετε αποσυνδεθεί. Συνδεθείτε ξανά χρησιμοποιώντας τον πάροχο SSO σας.',
|
| 56 |
+
'login.demoHint': 'Δοκιμάστε το demo — δεν απαιτείται εγγραφή',
|
| 57 |
+
'login.mfaTitle': 'Έλεγχος ταυτότητας δύο παραγόντων',
|
| 58 |
+
'login.mfaSubtitle':
|
| 59 |
+
'Εισάγετε τον 6ψήφιο κωδικό από την εφαρμογή authenticator σας.',
|
| 60 |
+
'login.mfaCodeLabel': 'Κωδικός επαλήθευσης',
|
| 61 |
+
'login.mfaCodeRequired':
|
| 62 |
+
'Εισάγετε τον κωδικό από την εφαρμογή authenticator σας.',
|
| 63 |
+
'login.mfaHint':
|
| 64 |
+
'Ανοίξτε το Google Authenticator, Authy ή άλλη εφαρμογή TOTP.',
|
| 65 |
+
'login.mfaBack': '← Πίσω στη σύνδεση',
|
| 66 |
+
'login.mfaVerify': 'Επαλήθευση',
|
| 67 |
+
'login.invalidInviteLink': 'Μη έγκυρος ή ληγμένος σύνδεσμος πρόσκλησης',
|
| 68 |
+
'login.oidcFailed': 'Η σύνδεση OIDC απέτυχε',
|
| 69 |
+
'login.usernameRequired': 'Το όνομα χρήστη είναι υποχρεωτικό',
|
| 70 |
+
'login.passwordMinLength':
|
| 71 |
+
'Ο κωδικός πρέπει να έχει τουλάχιστον 8 χαρακτήρες',
|
| 72 |
+
'login.forgotPassword': 'Ξεχάσατε τον κωδικό;',
|
| 73 |
+
'login.rememberMe': 'Να με θυμάσαι',
|
| 74 |
+
'login.forgotPasswordTitle': 'Επαναφορά του κωδικού σας',
|
| 75 |
+
'login.forgotPasswordBody':
|
| 76 |
+
'Εισάγετε το email με το οποίο εγγραφήκατε. Αν υπάρχει λογαριασμός, θα στείλουμε έναν σύνδεσμο επαναφοράς.',
|
| 77 |
+
'login.forgotPasswordSubmit': 'Αποστολή συνδέσμου επαναφοράς',
|
| 78 |
+
'login.forgotPasswordSentTitle': 'Ελέγξτε το email σας',
|
| 79 |
+
'login.forgotPasswordSentBody':
|
| 80 |
+
"Αν υπάρχει λογαριασμός για αυτό το email, ένας σύνδεσμος επαναφοράς είναι καθ'οδόν. Λήγει σε 60 λεπτά.",
|
| 81 |
+
'login.forgotPasswordSmtpHintOff':
|
| 82 |
+
'Προσοχή: ο διαχειριστής σας δεν έχει διαμορφώσει SMTP, οπότε ο σύνδεσμος επαναφοράς θα γραφτεί στην κονσόλα του server αντί να σταλεί με email.',
|
| 83 |
+
'login.backToLogin': 'Πίσω στη σύνδεση',
|
| 84 |
+
'login.newPassword': 'Νέος κωδικός',
|
| 85 |
+
'login.confirmPassword': 'Επιβεβαίωση νέου κωδικού',
|
| 86 |
+
'login.passwordsDontMatch': 'Οι κωδικοί δεν ταιριάζουν',
|
| 87 |
+
'login.mfaCode': 'Κωδικός 2FA',
|
| 88 |
+
'login.resetPasswordTitle': 'Ορίστε έναν νέο κωδικό',
|
| 89 |
+
'login.resetPasswordBody':
|
| 90 |
+
'Επιλέξτε έναν ισχυρό κωδικό που δεν έχετε χρησιμοποιήσει εδώ ξανά. Ελάχιστο 8 χαρακτήρες.',
|
| 91 |
+
'login.resetPasswordMfaBody':
|
| 92 |
+
'Εισάγετε τον κωδικό 2FA ή έναν εφεδρικό κωδικό για να ολοκληρωθεί η επαναφορά.',
|
| 93 |
+
'login.resetPasswordSubmit': 'Επαναφορά κωδικού',
|
| 94 |
+
'login.resetPasswordVerify': 'Επαλήθευση & επαναφορά',
|
| 95 |
+
'login.resetPasswordSuccessTitle': 'Ο κωδικός ενημερώθηκε',
|
| 96 |
+
'login.resetPasswordSuccessBody':
|
| 97 |
+
'Μπορείτε τώρα να συνδεθείτε με τον νέο σας κωδικό.',
|
| 98 |
+
'login.resetPasswordInvalidLink': 'Μη έγκυρος σύνδεσμος επαναφοράς',
|
| 99 |
+
'login.resetPasswordInvalidLinkBody':
|
| 100 |
+
'Αυτός ο σύνδεσμος λείπει ή έχει χαλάσει. Ζητήστε έναν νέο για να συνεχίσετε.',
|
| 101 |
+
'login.resetPasswordFailed':
|
| 102 |
+
'Η επαναφορά απέτυχε. Ο σύνδεσμος μπορεί να έχει λήξει.',
|
| 103 |
+
'login.passkey.signIn': 'Σύνδεση με passkey',
|
| 104 |
+
'login.passkey.failed':
|
| 105 |
+
'Η σύνδεση με passkey απέτυχε. Παρακαλώ δοκιμάστε ξανά.',
|
| 106 |
+
};
|
| 107 |
+
export default login;
|
shared/src/i18n/gr/map.ts
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import type { TranslationStrings } from '../types';
|
| 2 |
+
|
| 3 |
+
const map: TranslationStrings = {
|
| 4 |
+
'map.connections': 'Συνδέσεις',
|
| 5 |
+
'map.showConnections': 'Εμφάνιση διαδρομών κρατήσεων',
|
| 6 |
+
'map.hideConnections': 'Απόκρυψη διαδρομών κρατήσεων',
|
| 7 |
+
'poi.searchThisArea': 'Αναζήτηση σε αυτήν την περιοχή',
|
| 8 |
+
'poi.cat.restaurants': 'Εστιατόρια',
|
| 9 |
+
'poi.cat.cafes': 'Καφέ',
|
| 10 |
+
'poi.cat.bars': 'Μπαρ & νυχτερινή ζωή',
|
| 11 |
+
'poi.cat.hotels': 'Διαμονή',
|
| 12 |
+
'poi.cat.sights': 'Αξιοθέατα',
|
| 13 |
+
'poi.cat.museums': 'Μουσεία & πολιτισμός',
|
| 14 |
+
'poi.cat.nature': 'Φύση & πάρκα',
|
| 15 |
+
'poi.cat.activities': 'Δραστηριότητες',
|
| 16 |
+
};
|
| 17 |
+
export default map;
|
shared/src/i18n/gr/members.ts
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import type { TranslationStrings } from '../types';
|
| 2 |
+
|
| 3 |
+
const members: TranslationStrings = {
|
| 4 |
+
'members.shareTrip': 'Κοινή Χρήση Ταξιδιού',
|
| 5 |
+
'members.inviteUser': 'Πρόσκληση Χρήστη',
|
| 6 |
+
'members.selectUser': 'Επιλέξτε χρήστη…',
|
| 7 |
+
'members.invite': 'Πρόσκληση',
|
| 8 |
+
'members.allHaveAccess': 'Όλοι οι χρήστες έχουν ήδη πρόσβαση.',
|
| 9 |
+
'members.access': 'Πρόσβαση',
|
| 10 |
+
'members.person': 'άτομο',
|
| 11 |
+
'members.persons': 'άτομα',
|
| 12 |
+
'members.you': 'εσείς',
|
| 13 |
+
'members.owner': 'Ιδιοκτήτης',
|
| 14 |
+
'members.leaveTrip': 'Αποχώρηση από ταξίδι',
|
| 15 |
+
'members.removeAccess': 'Αφαίρεση πρόσβασης',
|
| 16 |
+
'members.confirmLeave': 'Αποχώρηση από το ταξίδι; Θα χάσετε την πρόσβαση.',
|
| 17 |
+
'members.confirmRemove': 'Αφαίρεση πρόσβασης για αυτόν τον χρήστη;',
|
| 18 |
+
'members.loadError': 'Αποτυχία φόρτωσης μελών',
|
| 19 |
+
'members.added': 'προστέθηκε',
|
| 20 |
+
'members.addError': 'Αποτυχία προσθήκης',
|
| 21 |
+
'members.removed': 'Το μέλος αφαιρέθηκε',
|
| 22 |
+
'members.removeError': 'Αποτυχία αφαίρεσης',
|
| 23 |
+
};
|
| 24 |
+
export default members;
|
shared/src/i18n/gr/memories.ts
ADDED
|
@@ -0,0 +1,85 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import type { TranslationStrings } from '../types';
|
| 2 |
+
|
| 3 |
+
const memories: TranslationStrings = {
|
| 4 |
+
'memories.title': 'Φωτογραφίες',
|
| 5 |
+
'memories.notConnected': 'Το {provider_name} δεν είναι συνδεδεμένο',
|
| 6 |
+
'memories.notConnectedHint':
|
| 7 |
+
'Συνδέστε την υπηρεσία {provider_name} στις Ρυθμίσεις για να μπορείτε να προσθέτετε φωτογραφίες σε αυτό το ταξίδι.',
|
| 8 |
+
'memories.notConnectedMultipleHint':
|
| 9 |
+
'Συνδέστε οποιονδήποτε από αυτούς τους παρόχους φωτογραφιών: {provider_names} στις Ρυθμίσεις για να μπορείτε να προσθέτετε φωτογραφίες σε αυτό το ταξίδι.',
|
| 10 |
+
'memories.noDates':
|
| 11 |
+
'Προσθέστε ημερομηνίες στο ταξίδι σας για να φορτωθούν φωτογραφίες.',
|
| 12 |
+
'memories.noPhotos': 'Δεν βρέθηκαν φωτογραφίες',
|
| 13 |
+
'memories.noPhotosHint':
|
| 14 |
+
'Δεν βρέθηκαν φωτογραφίες στο {provider_name} για το εύρος ημερομηνιών αυτού του ταξιδιού.',
|
| 15 |
+
'memories.photosFound': 'φωτογραφίες',
|
| 16 |
+
'memories.fromOthers': 'από άλλους',
|
| 17 |
+
'memories.sharePhotos': 'Κοινή χρήση φωτογραφιών',
|
| 18 |
+
'memories.sharing': 'Κοινή χρήση',
|
| 19 |
+
'memories.reviewTitle': 'Ελέγξτε τις φωτογραφίες σας',
|
| 20 |
+
'memories.reviewHint':
|
| 21 |
+
'Κάντε κλικ στις φωτογραφίες για να τις εξαιρέσετε από την κοινή χρήση.',
|
| 22 |
+
'memories.shareCount': 'Κοινή χρήση {count} φωτογραφιών',
|
| 23 |
+
'memories.providerUrl': 'URL Διακομιστή',
|
| 24 |
+
'memories.providerApiKey': 'API Key',
|
| 25 |
+
'memories.providerUsername': 'Όνομα χρήστη',
|
| 26 |
+
'memories.providerPassword': 'Κωδικός',
|
| 27 |
+
'memories.providerOTP': 'Κωδικός MFA (αν είναι ενεργοποιημένος)',
|
| 28 |
+
'memories.skipSSLVerification': 'Παράλειψη επαλήθευσης πιστοποιητικού SSL',
|
| 29 |
+
'memories.immichAutoUpload':
|
| 30 |
+
'Αντικατοπτρισμός φωτογραφιών journey στο Immich κατά τη μεταφόρτωση',
|
| 31 |
+
'memories.providerUrlHintSynology':
|
| 32 |
+
'Συμπεριλάβετε τη διαδρομή της εφαρμογής Photos στο URL, π.χ. https://nas:5001/photo',
|
| 33 |
+
'memories.testConnection': 'Δοκιμή σύνδεσης',
|
| 34 |
+
'memories.testShort': 'Δοκιμή',
|
| 35 |
+
'memories.testFirst': 'Δοκιμάστε πρώτα τη σύνδεση',
|
| 36 |
+
'memories.connected': 'Συνδεδεμένο',
|
| 37 |
+
'memories.disconnected': 'Μη συνδεδεμένο',
|
| 38 |
+
'memories.connectionSuccess': 'Συνδέθηκε στο {provider_name}',
|
| 39 |
+
'memories.connectionError': 'Δεν ήταν δυνατή η σύνδεση στο {provider_name}',
|
| 40 |
+
'memories.saved': 'Οι ρυθμίσεις {provider_name} αποθηκεύτηκαν',
|
| 41 |
+
'memories.providerDisconnectedBanner':
|
| 42 |
+
'Η σύνδεση {provider_name} χάθηκε. Επανασυνδεθείτε στις Ρυθμίσεις για να δείτε φωτογραφίες.',
|
| 43 |
+
'memories.saveError':
|
| 44 |
+
'Δεν ήταν δυνατή η αποθήκευση των ρυθμίσεων {provider_name}',
|
| 45 |
+
'memories.addPhotos': 'Προσθήκη φωτογραφιών',
|
| 46 |
+
'memories.linkAlbum': 'Σύνδεση Άλμπουμ',
|
| 47 |
+
'memories.selectAlbum': 'Επιλογή Άλμπουμ {provider_name}',
|
| 48 |
+
'memories.selectAlbumMultiple': 'Επιλογή Άλμπουμ',
|
| 49 |
+
'memories.noAlbums': 'Δεν βρέθηκαν άλμπουμ',
|
| 50 |
+
'memories.syncAlbum': 'Συγχρονισμός άλμπουμ',
|
| 51 |
+
'memories.unlinkAlbum': 'Αποσύνδεση άλμπουμ',
|
| 52 |
+
'memories.photos': 'φωτογραφίες',
|
| 53 |
+
'memories.selectPhotos': 'Επιλογή φωτογραφιών από {provider_name}',
|
| 54 |
+
'memories.selectPhotosMultiple': 'Επιλογή Φωτογραφιών',
|
| 55 |
+
'memories.selectHint': 'Πατήστε στις φωτογραφίες για να τις επιλέξετε.',
|
| 56 |
+
'memories.selected': 'επιλεγμένες',
|
| 57 |
+
'memories.addSelected': 'Προσθήκη {count} φωτογραφιών',
|
| 58 |
+
'memories.alreadyAdded': 'Προστέθηκε',
|
| 59 |
+
'memories.private': 'Ιδιωτικό',
|
| 60 |
+
'memories.stopSharing': 'Διακοπή κοινής χρήσης',
|
| 61 |
+
'memories.oldest': 'Παλαιότερες πρώτα',
|
| 62 |
+
'memories.newest': 'Νεότερες πρώτα',
|
| 63 |
+
'memories.allLocations': 'Όλες οι τοποθεσίες',
|
| 64 |
+
'memories.tripDates': 'Ημερομηνίες ταξιδιού',
|
| 65 |
+
'memories.allPhotos': 'Όλες οι φωτογραφίες',
|
| 66 |
+
'memories.confirmShareTitle': 'Κοινή χρήση με τα μέλη του ταξιδιού;',
|
| 67 |
+
'memories.confirmShareHint':
|
| 68 |
+
'{count} φωτογραφίες θα είναι ορατές σε όλα τα μέλη αυτού του ταξιδιού. Μπορείτε να κάνετε μεμονωμένες φωτογραφίες ιδιωτικές αργότερα.',
|
| 69 |
+
'memories.confirmShareButton': 'Κοινή χρήση φωτογραφιών',
|
| 70 |
+
'memories.error.loadAlbums': 'Αποτυχία φόρτωσης άλμπουμ',
|
| 71 |
+
'memories.error.linkAlbum': 'Αποτυχία σύνδεσης άλμπουμ',
|
| 72 |
+
'memories.error.unlinkAlbum': 'Αποτυχία αποσύνδεσης άλμπουμ',
|
| 73 |
+
'memories.error.syncAlbum': 'Αποτυχία συγχρονισμού άλμπουμ',
|
| 74 |
+
'memories.error.loadPhotos': 'Αποτυχία φόρτωσης φωτογραφιών',
|
| 75 |
+
'memories.error.addPhotos': 'Αποτυχία προσθήκης φωτογραφιών',
|
| 76 |
+
'memories.error.removePhoto': 'Αποτυχία αφαίρεσης φωτογραφίας',
|
| 77 |
+
'memories.error.toggleSharing': 'Αποτυχία ενημέρωσης κοινής χρήσης',
|
| 78 |
+
'memories.saveRouteNotConfigured':
|
| 79 |
+
'Η διαδρομή αποθήκευσης δεν έχει ρυθμιστεί για αυτόν τον πάροχο',
|
| 80 |
+
'memories.testRouteNotConfigured':
|
| 81 |
+
'Η διαδρομή δοκιμής δεν έχει ρυθμιστεί για αυτόν τον πάροχο',
|
| 82 |
+
'memories.fillRequiredFields':
|
| 83 |
+
'Παρακαλώ συμπληρώστε όλα τα απαιτούμενα πεδία',
|
| 84 |
+
};
|
| 85 |
+
export default memories;
|
shared/src/i18n/gr/nav.ts
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import type { TranslationStrings } from '../types';
|
| 2 |
+
|
| 3 |
+
const nav: TranslationStrings = {
|
| 4 |
+
'nav.trip': 'Ταξίδι',
|
| 5 |
+
'nav.share': 'Διαμοιρασμός',
|
| 6 |
+
'nav.settings': 'Ρυθμίσεις',
|
| 7 |
+
'nav.admin': 'Διαχείριση',
|
| 8 |
+
'nav.logout': 'Αποσύνδεση',
|
| 9 |
+
'nav.lightMode': 'Light mode',
|
| 10 |
+
'nav.darkMode': 'Dark mode',
|
| 11 |
+
'nav.autoMode': 'Auto mode',
|
| 12 |
+
'nav.administrator': 'Διαχειριστής',
|
| 13 |
+
'nav.myTrips': 'Τα Ταξίδια μου',
|
| 14 |
+
'nav.profile': 'Προφίλ',
|
| 15 |
+
'nav.bottomSettings': 'Ρυθμίσεις',
|
| 16 |
+
'nav.bottomAdmin': 'Ρυθμίσεις Διαχειριστή',
|
| 17 |
+
'nav.bottomLogout': 'Αποσύνδεση',
|
| 18 |
+
'nav.bottomAdminBadge': 'Διαχειριστής',
|
| 19 |
+
};
|
| 20 |
+
export default nav;
|