* feat(i18n): add Greek translation (#1061)

* i18n: complete Turkish (tr) translation (#1075)

Fill in the remaining ~2100 UI strings in shared/src/i18n/tr so Turkish
matches the English catalog. Brand names, URLs, and technical placeholders
are left untranslated by design.

* chore: prettier + lint

* chore: enforce prettier & lint on shared package

---------

Co-authored-by: Dimitris Kafetzis <39215021+Dkafetzis@users.noreply.github.com>
Co-authored-by: Ahmet Yılmaz <70577707+sharkpaw@users.noreply.github.com>
This commit is contained in:
Julien G.
2026-05-27 17:53:55 +02:00
committed by GitHub
parent 4ff4435f8b
commit 17264ef745
87 changed files with 5177 additions and 2243 deletions
+53
View File
@@ -0,0 +1,53 @@
name: Lint & Prettier
on:
pull_request:
branches: [main, dev]
jobs:
lint:
runs-on: ubuntu-latest
permissions:
pull-requests: write
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: '24'
- name: Install dependencies
run: npm install
- name: Run lint & format check
id: checks
continue-on-error: true
run: |
cd shared
npm run lint
npm run format:check
- name: Comment on PR if checks failed
if: steps.checks.outcome == 'failure'
uses: actions/github-script@v7
with:
script: |
await github.rest.issues.createComment({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: context.issue.number,
body: [
'## ❌ Lint & Prettier check failed',
'',
'Please fix the issues locally by running the following commands inside the `shared` package:',
'',
'```bash',
'cd shared',
'npm run lint',
'npm run format',
'```',
'',
'Then commit and push the changes.',
].join('\n'),
});
- name: Fail the job if checks failed
if: steps.checks.outcome == 'failure'
run: exit 1
+1
View File
@@ -34,6 +34,7 @@ const localeLoaders: Record<SupportedLanguageCode, () => Promise<{ default: Tran
ja: () => import('@trek/shared/i18n/ja'),
ko: () => import('@trek/shared/i18n/ko'),
uk: () => import('@trek/shared/i18n/uk'),
gr: () => import('@trek/shared/i18n/gr'),
}
// Re-export pure helpers that live in shared so downstream consumers can import them
+1 -1
View File
@@ -91,7 +91,7 @@ describe('isRtlLanguage', () => {
describe('SUPPORTED_LANGUAGES', () => {
it('FE-COMP-I18N-009: contains expected entries with value/label shape', () => {
expect(Array.isArray(SUPPORTED_LANGUAGES)).toBe(true)
expect(SUPPORTED_LANGUAGES).toHaveLength(19)
expect(SUPPORTED_LANGUAGES).toHaveLength(20)
expect(SUPPORTED_LANGUAGES).toContainEqual(expect.objectContaining({ value: 'en', label: 'English' }))
expect(SUPPORTED_LANGUAGES).toContainEqual(expect.objectContaining({ value: 'tr', label: 'Türkçe' }))
expect(SUPPORTED_LANGUAGES).toContainEqual(expect.objectContaining({ value: 'ja', label: '日本語' }))
+374
View File
@@ -0,0 +1,374 @@
import type { TranslationStrings } from '../types';
const admin: TranslationStrings = {
'admin.notifications.title': 'Ειδοποιήσεις',
'admin.notifications.hint':
'Επιλέξτε ένα κανάλι ειδοποιήσεων. Μόνο ένα μπορεί να είναι ενεργό κάθε φορά.',
'admin.notifications.none': 'Απενεργοποιημένο',
'admin.notifications.email': 'Email (SMTP)',
'admin.notifications.webhook': 'Webhook',
'admin.notifications.ntfy': 'Ntfy',
'admin.ntfy.hint':
'Επιτρέψτε στους χρήστες να διαμορφώνουν τα δικά τους θέματα ntfy για push ειδοποιήσεις. Ορίστε τον προεπιλεγμένο server παρακάτω για να προ-συμπληρώνει τις ρυθμίσεις χρηστών.',
'admin.notifications.save': 'Αποθήκευση ρυθμίσεων ειδοποιήσεων',
'admin.notifications.saved': 'Οι ρυθμίσεις ειδοποιήσεων αποθηκεύτηκαν',
'admin.notifications.testWebhook': 'Αποστολή δοκιμαστικού webhook',
'admin.notifications.testWebhookSuccess':
'Η δοκιμή webhook στάλθηκε επιτυχώς',
'admin.notifications.testWebhookFailed': 'Η δοκιμή webhook απέτυχε',
'admin.notifications.testNtfy': 'Αποστολή δοκιμαστικού ntfy',
'admin.notifications.testNtfySuccess': 'Η δοκιμή ntfy στάλθηκε επιτυχώς',
'admin.notifications.testNtfyFailed': 'Η δοκιμή ntfy απέτυχε',
'admin.notifications.emailPanel.title': 'Email (SMTP)',
'admin.notifications.webhookPanel.title': 'Webhook',
'admin.notifications.inappPanel.title': 'Εντός εφαρμογής',
'admin.notifications.inappPanel.hint':
'Οι ειδοποιήσεις εντός εφαρμογής είναι πάντα ενεργές και δεν μπορούν να απενεργοποιηθούν καθολικά.',
'admin.notifications.adminWebhookPanel.title': 'Webhook Διαχειριστή',
'admin.notifications.adminWebhookPanel.hint':
'Αυτό το webhook χρησιμοποιείται αποκλειστικά για ειδοποιήσεις διαχειριστή (π.χ. ειδοποιήσεις έκδοσης). Είναι ξεχωριστό από τα webhooks των χρηστών και ενεργοποιείται πάντα όταν έχει οριστεί.',
'admin.notifications.adminWebhookPanel.saved':
'Το URL του webhook διαχειριστή αποθηκεύτηκε',
'admin.notifications.adminWebhookPanel.testSuccess':
'Η δοκιμή webhook στάλθηκε επιτυχώς',
'admin.notifications.adminWebhookPanel.testFailed':
'Η δοκιμή webhook απέτυχε',
'admin.notifications.adminWebhookPanel.alwaysOnHint':
'Το webhook διαχειριστή ενεργοποιείται πάντα όταν έχει διαμορφωθεί ένα URL',
'admin.notifications.adminNtfyPanel.title': 'Ntfy Διαχειριστή',
'admin.notifications.adminNtfyPanel.hint':
'Αυτό το θέμα ntfy χρησιμοποιείται αποκλειστικά για ειδοποιήσεις διαχειριστή (π.χ. ειδοποιήσεις έκδοσης). Είναι ξεχωριστό από τα θέματα των χρηστών και ενεργοποιείται πάντα όταν έχει διαμορφωθεί.',
'admin.notifications.adminNtfyPanel.serverLabel': 'URL Ntfy Server',
'admin.notifications.adminNtfyPanel.serverHint':
'Χρησιμοποιείται επίσης ως ο προεπιλεγμένος server για τις ντόπιες ntfy ειδοποιήσεις χρηστών. Αφήστε κενό για προεπιλογή ntfy.sh. Οι χρήστες μπορούν να το παρακάμψουν στις δικές τους ρυθμίσεις.',
'admin.notifications.adminNtfyPanel.serverPlaceholder': 'https://ntfy.sh',
'admin.notifications.adminNtfyPanel.topicLabel': 'Θέμα Διαχειριστή',
'admin.notifications.adminNtfyPanel.topicPlaceholder': 'trek-admin-alerts',
'admin.notifications.adminNtfyPanel.tokenLabel': 'Access Token (προαιρετικό)',
'admin.notifications.adminNtfyPanel.tokenCleared':
'Το access token διαχειριστή εκκαθαρίστηκε',
'admin.notifications.adminNtfyPanel.saved':
'Οι ρυθμίσεις ntfy διαχειριστή αποθηκεύτηκαν',
'admin.notifications.adminNtfyPanel.test': 'Αποστολή δοκιμαστικού ntfy',
'admin.notifications.adminNtfyPanel.testSuccess':
'Η δοκιμή ntfy στάλθηκε επιτυχώς',
'admin.notifications.adminNtfyPanel.testFailed': 'Η δοκιμή ntfy απέτυχε',
'admin.notifications.adminNtfyPanel.alwaysOnHint':
'Το ntfy διαχειριστή ενεργοποιείται πάντα όταν έχει διαμορφωθεί ένα θέμα',
'admin.notifications.adminNotificationsHint':
'Διαμορφώστε ποια κανάλια παραδίδουν ειδοποιήσεις μόνο για διαχειριστές (π.χ. ειδοποιήσεις έκδοσης).',
'admin.notifications.tripReminders.title': 'Υπενθυμίσεις Ταξιδιού',
'admin.notifications.tripReminders.hint':
'Αποστολή ειδοποίησης υπενθύμισης πριν την έναρξη ενός ταξιδιού (απαιτεί να έχουν οριστεί ημέρες υπενθύμισης στο ταξίδι).',
'admin.notifications.tripReminders.enabled':
'Οι υπενθυμίσεις ταξιδιού ενεργοποιήθηκαν',
'admin.notifications.tripReminders.disabled':
'Οι υπενθυμίσεις ταξιδιού απενεργοποιήθηκαν',
'admin.smtp.title': 'Email & Ειδοποιήσεις',
'admin.smtp.hint': 'Διαμόρφωση SMTP για αποστολή ειδοποιήσεων email.',
'admin.smtp.testButton': 'Αποστολή δοκιμαστικού email',
'admin.webhook.hint':
'Επιτρέψτε στους χρήστες να διαμορφώνουν τα δικά τους webhook URLs για ειδοποιήσεις (Discord, Slack, κ.λπ.).',
'admin.smtp.testSuccess': 'Το δοκιμαστικό email στάλθηκε επιτυχώς',
'admin.smtp.testFailed': 'Το δοκιμαστικό email απέτυχε',
'admin.title': 'Διαχείριση',
'admin.subtitle': 'Διαχείριση χρηστών και ρυθμίσεις συστήματος',
'admin.tabs.users': 'Χρήστες',
'admin.tabs.categories': 'Κατηγορίες',
'admin.tabs.backup': 'Αντίγραφο ασφαλείας',
'admin.tabs.notifications': 'Ειδοποιήσεις',
'admin.tabs.audit': 'Έλεγχος',
'admin.stats.users': 'Χρήστες',
'admin.stats.trips': 'Ταξίδια',
'admin.stats.places': 'Τόποι',
'admin.stats.photos': 'Φωτογραφίες',
'admin.stats.files': 'Αρχεία',
'admin.table.user': 'Χρήστης',
'admin.table.email': 'Email',
'admin.table.role': 'Ρόλος',
'admin.table.created': 'Δημιουργήθηκε',
'admin.table.lastLogin': 'Τελευταία Σύνδεση',
'admin.table.actions': 'Ενέργειες',
'admin.you': '(Εσείς)',
'admin.editUser': 'Επεξεργασία Χρήστη',
'admin.newPassword': 'Νέος Κωδικός',
'admin.newPasswordHint': 'Αφήστε κενό για να διατηρηθεί ο τρέχων κωδικός',
'admin.deleteUser':
'Διαγραφή χρήστη "{name}"; Όλα τα ταξίδια θα διαγραφούν μόνιμα.',
'admin.deleteUserTitle': 'Διαγραφή χρήστη',
'admin.newPasswordPlaceholder': 'Εισάγετε νέο κωδικό…',
'admin.toast.loadError': 'Αποτυχία φόρτωσης δεδομένων διαχείρισης',
'admin.toast.userUpdated': 'Ο χρήστης ενημερώθηκε',
'admin.toast.updateError': 'Αποτυχία ενημέρωσης',
'admin.toast.userDeleted': 'Ο χρήστης διαγράφηκε',
'admin.toast.deleteError': 'Αποτυχία διαγραφής',
'admin.toast.cannotDeleteSelf':
'Δεν μπορείτε να διαγράψετε τον δικό σας λογαριασμό',
'admin.toast.userCreated': 'Ο χρήστης δημιουργήθηκε',
'admin.toast.createError': 'Αποτυχία δημιουργίας χρήστη',
'admin.toast.fieldsRequired':
'Το όνομα χρήστη, το email και ο κωδικός είναι υποχρεωτικά',
'admin.createUser': 'Δημιουργία Χρήστη',
'admin.invite.title': 'Σύνδεσμοι Πρόσκλησης',
'admin.invite.subtitle': 'Δημιουργία συνδέσμων εγγραφής μίας χρήσης',
'admin.invite.create': 'Δημιουργία Συνδέσμου',
'admin.invite.createAndCopy': 'Δημιουργία & Αντιγραφή',
'admin.invite.empty': 'Δεν έχουν δημιουργηθεί σύνδεσμοι πρόσκλησης ακόμη',
'admin.invite.maxUses': 'Μέγ. Χρήσεις',
'admin.invite.expiry': 'Λήγει μετά από',
'admin.invite.uses': 'χρησιμοποιήθηκε',
'admin.invite.expiresAt': 'λήγει',
'admin.invite.createdBy': 'από',
'admin.invite.active': 'Ενεργός',
'admin.invite.expired': 'Έληξε',
'admin.invite.usedUp': 'Εξαντλήθηκε',
'admin.invite.copied': 'Ο σύνδεσμος πρόσκλησης αντιγράφηκε στο πρόχειρο',
'admin.invite.copyLink': 'Αντιγραφή συνδέσμου',
'admin.invite.deleted': 'Ο σύνδεσμος πρόσκλησης διαγράφηκε',
'admin.invite.createError': 'Αποτυχία δημιουργίας συνδέσμου πρόσκλησης',
'admin.invite.deleteError': 'Αποτυχία διαγραφής συνδέσμου πρόσκλησης',
'admin.tabs.settings': 'Ρυθμίσεις',
'admin.allowRegistration': 'Να επιτρέπονται οι εγγραφές',
'admin.allowRegistrationHint':
'Οι νέοι χρήστες μπορούν να εγγράφονται μόνοι τους',
'admin.authMethods': 'Μέθοδοι Ελέγχου Ταυτότητας',
'admin.passwordLogin': 'Σύνδεση με Κωδικό',
'admin.passwordLoginHint':
'Επιτρέψτε στους χρήστες να συνδέονται με email και κωδικό',
'admin.passwordRegistration': 'Εγγραφή με Κωδικό',
'admin.passwordRegistrationHint':
'Επιτρέψτε σε νέους χρήστες να εγγράφονται με email και κωδικό',
'admin.oidcLogin': 'Σύνδεση SSO',
'admin.oidcLoginHint': 'Επιτρέψτε στους χρήστες να συνδέονται με SSO',
'admin.oidcRegistration': 'Αυτόματη Δημιουργία SSO',
'admin.oidcRegistrationHint':
'Αυτόματη δημιουργία λογαριασμών για νέους χρήστες SSO',
'admin.envOverrideHint':
'Οι ρυθμίσεις σύνδεσης με κωδικό ελέγχονται από τη μεταβλητή περιβάλλοντος OIDC_ONLY και δεν μπορούν να αλλάξουν εδώ.',
'admin.lockoutWarning':
'Πρέπει να παραμείνει ενεργοποιημένη τουλάχιστον μία μέθοδος σύνδεσης',
'admin.requireMfa': 'Απαίτηση ελέγχου ταυτότητας δύο παραγόντων (2FA)',
'admin.requireMfaHint':
'Οι χρήστες χωρίς 2FA πρέπει να ολοκληρώσουν τη ρύθμιση στις Ρυθμίσεις πριν χρησιμοποιήσουν την εφαρμογή.',
'admin.apiKeys': 'Κλειδιά API',
'admin.apiKeysHint':
'Προαιρετικά. Ενεργοποιεί εκτεταμένα δεδομένα τόπων όπως φωτογραφίες και καιρό.',
'admin.mapsKey': 'Google Maps API Key',
'admin.mapsKeyHint':
'Απαιτείται για αναζήτηση τόπων. Λάβετε το από console.cloud.google.com',
'admin.mapsKeyHintLong':
'Χωρίς κλειδί API, χρησιμοποιείται το OpenStreetMap για αναζήτηση τόπων. Με κλειδί Google API, μπορούν επίσης να φορτωθούν φωτογραφίες, βαθμολογίες και ώρες λειτουργίας. Λάβετε ένα στο console.cloud.google.com.',
'admin.recommended': 'Συνιστάται',
'admin.weatherKey': 'OpenWeatherMap API Key',
'admin.weatherKeyHint': 'Για δεδομένα καιρού. Δωρεάν στο openweathermap.org',
'admin.validateKey': 'Δοκιμή',
'admin.keyValid': 'Συνδέθηκε',
'admin.keyInvalid': 'Μη έγκυρο',
'admin.keySaved': 'Τα κλειδιά API αποθηκεύτηκαν',
'admin.oidcTitle': 'Ενιαία Σύνδεση (OIDC)',
'admin.oidcSubtitle':
'Επιτρέψτε τη σύνδεση μέσω εξωτερικών παρόχων όπως Google, Apple, Authentik ή Keycloak.',
'admin.oidcDisplayName': 'Εμφανιζόμενο Όνομα',
'admin.oidcIssuer': 'Issuer URL',
'admin.oidcIssuerHint':
'Το OpenID Connect Issuer URL του παρόχου. π.χ. https://accounts.google.com',
'admin.oidcSaved': 'Η διαμόρφωση OIDC αποθηκεύτηκε',
'admin.oidcOnlyMode': 'Απενεργοποίηση ελέγχου ταυτότητας με κωδικό',
'admin.oidcOnlyModeHint':
'Όταν είναι ενεργοποιημένο, επιτρέπεται μόνο η σύνδεση SSO. Η σύνδεση και εγγραφή με κωδικό αποκλείονται.',
'admin.fileTypes': 'Επιτρεπόμενοι Τύποι Αρχείων',
'admin.fileTypesHint':
'Ρυθμίστε ποιους τύπους αρχείων μπορούν να μεταφορτώνουν οι χρήστες.',
'admin.fileTypesFormat':
'Επεκτάσεις χωρισμένες με κόμμα (π.χ. jpg,png,pdf,doc). Χρησιμοποιήστε * για να επιτρέπονται όλοι οι τύποι.',
'admin.fileTypesSaved': 'Οι ρυθμίσεις τύπων αρχείων αποθηκεύτηκαν',
'admin.placesPhotos.title': 'Φωτογραφίες Τόπων',
'admin.placesPhotos.subtitle':
'Λήψη φωτογραφιών από το Google Places API. Απενεργοποιήστε για εξοικονόμηση ποσοστώσης API. Οι φωτογραφίες Wikimedia δεν επηρεάζονται.',
'admin.placesAutocomplete.title': 'Αυτόματη Συμπλήρωση Τόπων',
'admin.placesAutocomplete.subtitle':
'Χρήση του Google Places API για προτάσεις αναζήτησης. Απενεργοποιήστε για εξοικονόμηση ποσοστώσης API.',
'admin.placesDetails.title': 'Λεπτομέρειες Τόπου',
'admin.placesDetails.subtitle':
'Λήψη λεπτομερών πληροφοριών τόπου (ώρες, βαθμολογία, ιστοσελίδα) από το Google Places API. Απενεργοποιήστε για εξοικονόμηση ποσοστώσης API.',
'admin.bagTracking.title': 'Παρακολούθηση Αποσκευών',
'admin.bagTracking.subtitle':
'Ενεργοποίηση βάρους και ανάθεσης τσάντας για αντικείμενα πακεταρίσματος',
'admin.collab.chat.title': 'Συνομιλία',
'admin.collab.chat.subtitle':
'Μηνύματα πραγματικού χρόνου για συνεργασία ταξιδιού',
'admin.collab.notes.title': 'Σημειώσεις',
'admin.collab.notes.subtitle': 'Κοινόχρηστες σημειώσεις και έγγραφα',
'admin.collab.polls.title': 'Δημοσκοπήσεις',
'admin.collab.polls.subtitle': 'Ομαδικές δημοσκοπήσεις και ψηφοφορίες',
'admin.collab.whatsnext.title': 'Τι Ακολουθεί',
'admin.collab.whatsnext.subtitle':
'Προτάσεις δραστηριοτήτων και επόμενα βήματα',
'admin.tabs.config': 'Εξατομίκευση',
'admin.tabs.defaults': 'Προεπιλογές Χρήστη',
'admin.defaultSettings.title': 'Προεπιλεγμένες Ρυθμίσεις Χρήστη',
'admin.defaultSettings.description':
'Ορίστε προεπιλογές για όλη την υπηρεσία. Οι χρήστες που δεν έχουν αλλάξει μια ρύθμιση θα βλέπουν αυτές τις τιμές. Οι δικές τους αλλαγές έχουν πάντα προτεραιότητα.',
'admin.defaultSettings.saved': 'Η προεπιλογή αποθηκεύτηκε',
'admin.defaultSettings.reset': 'Επαναφορά στην ενσωματωμένη προεπιλογή',
'admin.defaultSettings.resetToBuiltIn': 'επαναφορά',
'admin.tabs.templates': 'Πρότυπα Πακεταρίσματος',
'admin.packingTemplates.title': 'Πρότυπα Πακεταρίσματος',
'admin.packingTemplates.subtitle':
'Δημιουργήστε επαναχρησιμοποιήσιμες λίστες πακεταρίσματος για τα ταξίδια σας',
'admin.packingTemplates.create': 'Νέο Πρότυπο',
'admin.packingTemplates.namePlaceholder':
'Όνομα προτύπου (π.χ. Διακοπές στην Παραλία)',
'admin.packingTemplates.empty': 'Δεν έχουν δημιουργηθεί πρότυπα ακόμη',
'admin.packingTemplates.items': 'αντικείμενα',
'admin.packingTemplates.categories': 'κατηγορίες',
'admin.packingTemplates.itemName': 'Όνομα αντικειμένου',
'admin.packingTemplates.itemCategory': 'Κατηγορία',
'admin.packingTemplates.categoryName': 'Όνομα κατηγορίας (π.χ. Ρούχα)',
'admin.packingTemplates.addCategory': 'Προσθήκη κατηγορίας',
'admin.packingTemplates.created': 'Το πρότυπο δημιουργήθηκε',
'admin.packingTemplates.deleted': 'Το πρότυπο διαγράφηκε',
'admin.packingTemplates.loadError': 'Αποτυχία φόρτωσης προτύπων',
'admin.packingTemplates.createError': 'Αποτυχία δημιουργίας προτύπου',
'admin.packingTemplates.deleteError': 'Αποτυχία διαγραφής προτύπου',
'admin.packingTemplates.saveError': 'Αποτυχία αποθήκευσης',
'admin.tabs.addons': 'Πρόσθετα',
'admin.addons.title': 'Πρόσθετα',
'admin.addons.subtitle':
'Ενεργοποιήστε ή απενεργοποιήστε λειτουργίες για να εξατομικεύσετε την εμπειρία σας στο TREK.',
'admin.addons.catalog.packing.name': 'Λίστες',
'admin.addons.catalog.packing.description':
'Λίστες πακεταρίσματος και εργασίες προς εκτέλεση για τα ταξίδια σας',
'admin.addons.catalog.budget.name': 'Προϋπολογισμός',
'admin.addons.catalog.budget.description':
'Παρακολουθήστε τα έξοδα και σχεδιάστε τον προϋπολογισμό του ταξιδιού σας',
'admin.addons.catalog.documents.name': 'Έγγραφα',
'admin.addons.catalog.documents.description':
'Αποθηκεύστε και διαχειριστείτε ταξιδιωτικά έγγραφα',
'admin.addons.catalog.vacay.name': 'Vacay',
'admin.addons.catalog.vacay.description':
'Προσωπικός σχεδιαστής διακοπών με προβολή ημερολογίου',
'admin.addons.catalog.atlas.name': 'Atlas',
'admin.addons.catalog.atlas.description':
'Παγκόσμιος χάρτης με χώρες που έχετε επισκεφθεί και ταξιδιωτικά στατιστικά',
'admin.addons.catalog.collab.name': 'Collab',
'admin.addons.catalog.collab.description':
'Σημειώσεις, δημοσκοπήσεις και συνομιλία πραγματικού χρόνου για σχεδιασμό ταξιδιού',
'admin.addons.catalog.memories.name': 'Φωτογραφίες (Immich)',
'admin.addons.catalog.memories.description':
'Μοιραστείτε φωτογραφίες ταξιδιού μέσω της δικής σας εγκατάστασης Immich',
'admin.addons.catalog.mcp.name': 'MCP',
'admin.addons.catalog.mcp.description':
'Model Context Protocol για ενσωμάτωση βοηθού AI',
'admin.addons.subtitleBefore':
'Ενεργοποιήστε ή απενεργοποιήστε λειτουργίες για να εξατομικεύσετε την εμπειρία σας στο ',
'admin.addons.subtitleAfter': '.',
'admin.addons.enabled': 'Ενεργοποιημένο',
'admin.addons.disabled': 'Απενεργοποιημένο',
'admin.addons.type.trip': 'Ταξίδι',
'admin.addons.type.global': 'Καθολικό',
'admin.addons.type.integration': 'Ενσωμάτωση',
'admin.addons.tripHint': 'Διαθέσιμο ως καρτέλα μέσα σε κάθε ταξίδι',
'admin.addons.globalHint':
'Διαθέσιμο ως αυτόνομη ενότητα στην κύρια πλοήγηση',
'admin.addons.integrationHint':
'Υπηρεσίες backend και ενσωματώσεις API χωρίς ειδική σελίδα',
'admin.addons.toast.updated': 'Το πρόσθετο ενημερώθηκε',
'admin.addons.toast.error': 'Αποτυχία ενημέρωσης προσθέτου',
'admin.addons.noAddons': 'Δεν υπάρχουν διαθέσιμα πρόσθετα',
'admin.weather.title': 'Δεδομένα Καιρού',
'admin.weather.badge': 'Από 24 Μαρτίου 2026',
'admin.weather.description':
'Το TREK χρησιμοποιεί το Open-Meteo ως πηγή δεδομένων καιρού. Το Open-Meteo είναι μια δωρεάν, ανοιχτού κώδικα υπηρεσία καιρού — δεν απαιτείται κλειδί API.',
'admin.weather.forecast': 'Πρόγνωση 16 ημερών',
'admin.weather.forecastDesc': 'Προηγουμένως 5 ημέρες (OpenWeatherMap)',
'admin.weather.climate': 'Ιστορικά δεδομένα κλίματος',
'admin.weather.climateDesc':
'Μέσοι όροι από τα τελευταία 85 χρόνια για ημέρες πέρα από την πρόγνωση 16 ημερών',
'admin.weather.requests': '10.000 αιτήματα / ημέρα',
'admin.weather.requestsDesc': 'Δωρεάν, δεν απαιτείται κλειδί API',
'admin.weather.locationHint':
'Ο καιρός βασίζεται στον πρώτο τόπο με συντεταγμένες σε κάθε ημέρα. Αν δεν έχει ανατεθεί τόπος σε μια ημέρα, χρησιμοποιείται ως αναφορά οποιοσδήποτε τόπος από τη λίστα.',
'admin.tabs.mcpTokens': 'Πρόσβαση MCP',
'admin.mcpTokens.title': 'Πρόσβαση MCP',
'admin.mcpTokens.subtitle':
'Διαχείριση συνεδριών OAuth και διακριτικών API για όλους τους χρήστες',
'admin.mcpTokens.sectionTitle': 'Διακριτικά API',
'admin.mcpTokens.owner': 'Κάτοχος',
'admin.mcpTokens.tokenName': 'Όνομα Διακριτικού',
'admin.mcpTokens.created': 'Δημιουργήθηκε',
'admin.mcpTokens.lastUsed': 'Τελευταία Χρήση',
'admin.mcpTokens.never': 'Ποτέ',
'admin.mcpTokens.empty': 'Δεν έχουν δημιουργηθεί διακριτικά MCP ακόμη',
'admin.mcpTokens.deleteTitle': 'Διαγραφή Διακριτικού',
'admin.mcpTokens.deleteMessage':
'Αυτό θα ανακαλέσει το διακριτικό άμεσα. Ο χρήστης θα χάσει την πρόσβαση MCP μέσω αυτού του διακριτικού.',
'admin.mcpTokens.deleteSuccess': 'Το διακριτικό διαγράφηκε',
'admin.mcpTokens.deleteError': 'Αποτυχία διαγραφής διακριτικού',
'admin.mcpTokens.loadError': 'Αποτυχία φόρτωσης διακριτικών',
'admin.oauthSessions.sectionTitle': 'Συνεδρίες OAuth',
'admin.oauthSessions.clientName': 'Πελάτης',
'admin.oauthSessions.owner': 'Κάτοχος',
'admin.oauthSessions.scopes': 'Scopes',
'admin.oauthSessions.created': 'Δημιουργήθηκε',
'admin.oauthSessions.empty': 'Δεν υπάρχουν ενεργές συνεδρίες OAuth',
'admin.oauthSessions.revokeTitle': 'Ανάκληση Συνεδρίας',
'admin.oauthSessions.revokeMessage':
'Αυτό θα ανακαλέσει τη συνεδρία OAuth άμεσα. Ο πελάτης θα χάσει την πρόσβαση MCP.',
'admin.oauthSessions.revokeSuccess': 'Η συνεδρία ανακλήθηκε',
'admin.oauthSessions.revokeError': 'Αποτυχία ανάκλησης συνεδρίας',
'admin.oauthSessions.loadError': 'Αποτυχία φόρτωσης συνεδριών OAuth',
'admin.tabs.github': 'GitHub',
'admin.audit.subtitle':
'Συμβάντα ασφαλείας και διαχείρισης (αντίγραφα ασφαλείας, χρήστες, MFA, ρυθμίσεις).',
'admin.audit.empty': 'Δεν υπάρχουν εγγραφές ελέγχου ακόμη.',
'admin.audit.refresh': 'Ανανέωση',
'admin.audit.loadMore': 'Φόρτωση περισσότερων',
'admin.audit.showing': '{count} φορτώθηκαν · {total} σύνολο',
'admin.audit.col.time': 'Ώρα',
'admin.audit.col.user': 'Χρήστης',
'admin.audit.col.action': 'Ενέργεια',
'admin.audit.col.resource': 'Πόρος',
'admin.audit.col.ip': 'IP',
'admin.audit.col.details': 'Λεπτομέρειες',
'admin.github.title': 'Ιστορικό Εκδόσεων',
'admin.github.subtitle': 'Τελευταίες ενημερώσεις από {repo}',
'admin.github.latest': 'Τελευταία',
'admin.github.prerelease': 'Προ-έκδοση',
'admin.github.showDetails': 'Εμφάνιση λεπτομερειών',
'admin.github.hideDetails': 'Απόκρυψη λεπτομερειών',
'admin.github.loadMore': 'Φόρτωση περισσότερων',
'admin.github.loading': 'Φόρτωση...',
'admin.github.error': 'Αποτυχία φόρτωσης εκδόσεων',
'admin.github.by': 'από',
'admin.github.support': 'Βοηθά να συνεχίσω την ανάπτυξη του TREK',
'admin.update.available': 'Διαθέσιμη ενημέρωση',
'admin.update.text':
'Το TREK {version} είναι διαθέσιμο. Εκτελείτε το {current}.',
'admin.update.button': 'Προβολή στο GitHub',
'admin.update.install': 'Εγκατάσταση Ενημέρωσης',
'admin.update.confirmTitle': 'Εγκατάσταση Ενημέρωσης;',
'admin.update.confirmText':
'Το TREK θα ενημερωθεί από {current} σε {version}. Ο server θα επανεκκινήσει αυτόματα στη συνέχεια.',
'admin.update.dataInfo':
'Όλα τα δεδομένα σας (ταξίδια, χρήστες, κλειδιά API, μεταφορτώσεις, Vacay, Atlas, προϋπολογισμοί) θα διατηρηθούν.',
'admin.update.warning':
'Η εφαρμογή θα είναι σύντομα μη διαθέσιμη κατά την επανεκκίνηση.',
'admin.update.confirm': 'Ενημέρωση Τώρα',
'admin.update.installing': 'Ενημέρωση…',
'admin.update.success': 'Η ενημέρωση εγκαταστάθηκε! Ο server επανεκκινεί…',
'admin.update.failed': 'Η ενημέρωση απέτυχε',
'admin.update.backupHint':
'Συνιστούμε να δημιουργήσετε ένα αντίγραφο ασφαλείας πριν την ενημέρωση.',
'admin.update.backupLink': 'Μετάβαση στο Αντίγραφο Ασφαλείας',
'admin.update.howTo': 'Πώς να Ενημερώσετε',
'admin.update.dockerText':
'Η εγκατάστασή σας TREK εκτελείται σε Docker. Για να ενημερωθείτε στο {version}, εκτελέστε τις ακόλουθες εντολές στον server σας:',
'admin.update.reloadHint':
'Παρακαλώ ανανεώστε τη σελίδα σε λίγα δευτερόλεπτα.',
'admin.tabs.permissions': 'Δικαιώματα',
'admin.addons.catalog.journey.name': 'Ταξίδι',
'admin.addons.catalog.journey.description':
'Παρακολούθηση ταξιδιών & ημερολόγιο ταξιδιών με αφίξεις, φωτογραφίες και καθημερινές ιστορίες',
};
export default admin;
+6
View File
@@ -0,0 +1,6 @@
import type { TranslationStrings } from '../types';
const airport: TranslationStrings = {
'airport.searchPlaceholder': 'Κωδικός αεροδρομίου ή πόλη (π.χ. FRA)',
};
export default airport;
+61
View File
@@ -0,0 +1,61 @@
import type { TranslationStrings } from '../types';
const atlas: TranslationStrings = {
'atlas.subtitle': 'Το ταξιδιωτικό σας αποτύπωμα σε όλο τον κόσμο',
'atlas.countries': 'Χώρες',
'atlas.trips': 'Ταξίδια',
'atlas.places': 'Μέρη',
'atlas.unmark': 'Αφαίρεση',
'atlas.confirmMark': 'Σήμανση αυτής της χώρας ως επισκεφθείσας;',
'atlas.confirmUnmark': 'Αφαίρεση αυτής της χώρας από τη λίστα επισκεφθέντων;',
'atlas.confirmUnmarkRegion':
'Αφαίρεση αυτής της περιοχής από τη λίστα επισκεφθέντων;',
'atlas.markVisited': 'Σήμανση ως επισκεφθείσα',
'atlas.markVisitedHint': 'Προσθέστε αυτή τη χώρα στη λίστα επισκεφθέντων',
'atlas.markRegionVisitedHint':
'Προσθέστε αυτή την περιοχή στη λίστα επισκεφθέντων',
'atlas.addToBucket': 'Προσθήκη στη λίστα επιθυμιών',
'atlas.addPoi': 'Προσθήκη μέρους',
'atlas.searchCountry': 'Αναζήτηση χώρας...',
'atlas.bucketNamePlaceholder': 'Όνομα (χώρα, πόλη, μέρος...)',
'atlas.month': 'Μήνας',
'atlas.year': 'Έτος',
'atlas.addToBucketHint': 'Αποθηκεύστε ως μέρος που θέλετε να επισκεφθείτε',
'atlas.bucketWhen': 'Πότε σκοπεύετε να το επισκεφθείτε;',
'atlas.statsTab': 'Στατιστικά',
'atlas.bucketTab': 'Λίστα Επιθυμιών',
'atlas.addBucket': 'Προσθήκη στη λίστα επιθυμιών',
'atlas.bucketNotesPlaceholder': 'Σημειώσεις (προαιρετικό)',
'atlas.bucketEmpty': 'Η λίστα επιθυμιών σας είναι κενή',
'atlas.bucketEmptyHint': 'Προσθέστε μέρη που ονειρεύεστε να επισκεφθείτε',
'atlas.days': 'Ημέρες',
'atlas.visitedCountries': 'Επισκεφθείσες Χώρες',
'atlas.cities': 'Πόλεις',
'atlas.noData': 'Δεν υπάρχουν ταξιδιωτικά δεδομένα ακόμη',
'atlas.noDataHint':
'Δημιουργήστε ένα ταξίδι και προσθέστε μέρη για να δείτε τον παγκόσμιο χάρτη σας',
'atlas.lastTrip': 'Τελευταίο ταξίδι',
'atlas.nextTrip': 'Επόμενο ταξίδι',
'atlas.daysLeft': 'ημέρες απομένουν',
'atlas.streak': 'Σερί',
'atlas.years': 'έτη',
'atlas.yearInRow': 'έτος στη σειρά',
'atlas.yearsInRow': 'έτη στη σειρά',
'atlas.tripIn': 'ταξίδι σε',
'atlas.tripsIn': 'ταξίδια σε',
'atlas.since': 'από',
'atlas.europe': 'Ευρώπη',
'atlas.asia': 'Ασία',
'atlas.northAmerica': 'Β. Αμερική',
'atlas.southAmerica': 'Ν. Αμερική',
'atlas.africa': 'Αφρική',
'atlas.oceania': 'Ωκεανία',
'atlas.other': 'Άλλο',
'atlas.firstVisit': 'Πρώτο ταξίδι',
'atlas.lastVisitLabel': 'Τελευταίο ταξίδι',
'atlas.tripSingular': 'Ταξίδι',
'atlas.tripPlural': 'Ταξίδια',
'atlas.placeVisited': 'Μέρος που επισκεφθήκατε',
'atlas.placesVisited': 'Μέρη που επισκεφθήκατε',
};
export default atlas;
+79
View File
@@ -0,0 +1,79 @@
import type { TranslationStrings } from '../types';
const backup: TranslationStrings = {
'backup.title': 'Αντίγραφο Ασφαλείας Δεδομένων',
'backup.subtitle': 'Βάση δεδομένων και όλα τα μεταφορτωμένα αρχεία',
'backup.refresh': 'Ανανέωση',
'backup.upload': 'Μεταφόρτωση Αντιγράφου',
'backup.uploading': 'Μεταφόρτωση…',
'backup.create': 'Δημιουργία Αντιγράφου',
'backup.creating': 'Δημιουργία…',
'backup.empty': 'Δεν υπάρχουν αντίγραφα ασφαλείας ακόμη',
'backup.createFirst': 'Δημιουργία πρώτου αντιγράφου',
'backup.download': 'Λήψη',
'backup.restore': 'Επαναφορά',
'backup.confirm.restore':
'Επαναφορά αντιγράφου "{name}";\n\nΌλα τα τρέχοντα δεδομένα θα αντικατασταθούν με το αντίγραφο.',
'backup.confirm.uploadRestore':
'Μεταφόρτωση και επαναφορά αρχείου αντιγράφου "{name}";\n\nΌλα τα τρέχοντα δεδομένα θα αντικατασταθούν.',
'backup.confirm.delete': 'Διαγραφή αντιγράφου "{name}";',
'backup.toast.loadError': 'Αποτυχία φόρτωσης αντιγράφων',
'backup.toast.created': 'Το αντίγραφο δημιουργήθηκε επιτυχώς',
'backup.toast.createError': 'Αποτυχία δημιουργίας αντιγράφου',
'backup.toast.restored':
'Το αντίγραφο επαναφέρθηκε. Η σελίδα θα επαναφορτωθεί…',
'backup.toast.restoreError': 'Αποτυχία επαναφοράς',
'backup.toast.uploadError': 'Αποτυχία μεταφόρτωσης',
'backup.toast.deleted': 'Το αντίγραφο διαγράφηκε',
'backup.toast.deleteError': 'Αποτυχία διαγραφής',
'backup.toast.downloadError': 'Η λήψη απέτυχε',
'backup.toast.settingsSaved':
'Οι ρυθμίσεις αυτόματου αντιγράφου αποθηκεύτηκαν',
'backup.toast.settingsError': 'Αποτυχία αποθήκευσης ρυθμίσεων',
'backup.auto.title': 'Αυτόματο Αντίγραφο',
'backup.auto.subtitle': 'Αυτόματο αντίγραφο ασφαλείας με χρονοπρόγραμμα',
'backup.auto.enable': 'Ενεργοποίηση αυτόματου αντιγράφου',
'backup.auto.enableHint':
'Τα αντίγραφα θα δημιουργούνται αυτόματα στο επιλεγμένο χρονοπρόγραμμα',
'backup.auto.interval': 'Διάστημα',
'backup.auto.hour': 'Εκτέλεση την ώρα',
'backup.auto.hourHint': 'Τοπική ώρα διακομιστή (μορφή {format})',
'backup.auto.dayOfWeek': 'Ημέρα εβδομάδας',
'backup.auto.dayOfMonth': 'Ημέρα μήνα',
'backup.auto.dayOfMonthHint':
'Περιορίζεται σε 1–28 για συμβατότητα με όλους τους μήνες',
'backup.auto.scheduleSummary': 'Χρονοπρόγραμμα',
'backup.auto.summaryDaily': 'Κάθε ημέρα στις {hour}:00',
'backup.auto.summaryWeekly': 'Κάθε {day} στις {hour}:00',
'backup.auto.summaryMonthly': 'Ημέρα {day} κάθε μήνα στις {hour}:00',
'backup.auto.envLocked': 'Docker',
'backup.auto.envLockedHint':
'Το αυτόματο αντίγραφο είναι ρυθμισμένο μέσω μεταβλητών περιβάλλοντος Docker. Για να αλλάξετε αυτές τις ρυθμίσεις, ενημερώστε το docker-compose.yml και επανεκκινήστε το container.',
'backup.auto.copyEnv': 'Αντιγραφή μεταβλητών Docker',
'backup.auto.envCopied': 'Οι μεταβλητές Docker αντιγράφηκαν στο πρόχειρο',
'backup.auto.keepLabel': 'Διαγραφή παλιών αντιγράφων μετά από',
'backup.dow.sunday': 'Κυρ',
'backup.dow.monday': 'Δευ',
'backup.dow.tuesday': 'Τρι',
'backup.dow.wednesday': 'Τετ',
'backup.dow.thursday': 'Πεμ',
'backup.dow.friday': 'Παρ',
'backup.dow.saturday': 'Σαβ',
'backup.interval.hourly': 'Ωριαία',
'backup.interval.daily': 'Ημερήσια',
'backup.interval.weekly': 'Εβδομαδιαία',
'backup.interval.monthly': 'Μηνιαία',
'backup.keep.1day': '1 ημέρα',
'backup.keep.3days': '3 ημέρες',
'backup.keep.7days': '7 ημέρες',
'backup.keep.14days': '14 ημέρες',
'backup.keep.30days': '30 ημέρες',
'backup.keep.forever': 'Διατήρηση για πάντα',
'backup.restoreConfirmTitle': 'Επαναφορά Αντιγράφου;',
'backup.restoreWarning':
'Όλα τα τρέχοντα δεδομένα (ταξίδια, τοποθεσίες, χρήστες, μεταφορτώσεις) θα αντικατασταθούν μόνιμα με το αντίγραφο. Αυτή η ενέργεια δεν μπορεί να αναιρεθεί.',
'backup.restoreTip':
'Συμβουλή: Δημιουργήστε ένα αντίγραφο της τρέχουσας κατάστασης πριν την επαναφορά.',
'backup.restoreConfirm': 'Ναι, επαναφορά',
};
export default backup;
+44
View File
@@ -0,0 +1,44 @@
import type { TranslationStrings } from '../types';
const budget: TranslationStrings = {
'budget.title': 'Προϋπολογισμός',
'budget.exportCsv': 'Εξαγωγή CSV',
'budget.emptyTitle': 'Δεν έχει δημιουργηθεί προϋπολογισμός ακόμη',
'budget.emptyText':
'Δημιουργήστε κατηγορίες και εγγραφές για να σχεδιάσετε τον ταξιδιωτικό σας προϋπολογισμό',
'budget.emptyPlaceholder': 'Εισαγάγετε όνομα κατηγορίας...',
'budget.createCategory': 'Δημιουργία Κατηγορίας',
'budget.category': 'Κατηγορία',
'budget.categoryName': 'Όνομα Κατηγορίας',
'budget.table.name': 'Όνομα',
'budget.table.total': 'Σύνολο',
'budget.table.persons': 'Άτομα',
'budget.table.days': 'Ημέρες',
'budget.table.perPerson': 'Ανά Άτομο',
'budget.table.perDay': 'Ανά Ημέρα',
'budget.table.perPersonDay': 'Α.Α. / Ημέρα',
'budget.table.note': 'Σημείωση',
'budget.table.date': 'Ημερομηνία',
'budget.newEntry': 'Νέα Εγγραφή',
'budget.defaultEntry': 'Νέα Εγγραφή',
'budget.defaultCategory': 'Νέα Κατηγορία',
'budget.total': 'Σύνολο',
'budget.totalBudget': 'Συνολικός Προϋπολογισμός',
'budget.byCategory': 'Ανά Κατηγορία',
'budget.editTooltip': 'Κάντε κλικ για επεξεργασία',
'budget.linkedToReservation':
'Συνδεδεμένο με κράτηση — επεξεργαστείτε το όνομα εκεί',
'budget.confirm.deleteCategory':
'Είστε σίγουροι ότι θέλετε να διαγράψετε την κατηγορία "{name}" με {count} εγγραφές;',
'budget.deleteCategory': 'Διαγραφή Κατηγορίας',
'budget.perPerson': 'Ανά Άτομο',
'budget.paid': 'Πληρωμένο',
'budget.open': 'Ανοιχτό',
'budget.noMembers': 'Δεν έχουν ανατεθεί μέλη',
'budget.settlement': 'Εκκαθάριση',
'budget.settlementInfo':
'Κάντε κλικ στο avatar ενός μέλους σε μια εγγραφή προϋπολογισμού για να το επισημάνετε πράσινο — αυτό σημαίνει ότι πλήρωσε. Η εκκαθάριση δείχνει στη συνέχεια ποιος χρωστάει σε ποιον και πόσα.',
'budget.netBalances': 'Καθαρά Υπόλοιπα',
'budget.categoriesLabel': 'κατηγορίες',
};
export default budget;
+26
View File
@@ -0,0 +1,26 @@
import type { TranslationStrings } from '../types';
const categories: TranslationStrings = {
'categories.title': 'Κατηγορίες',
'categories.subtitle': 'Διαχείριση κατηγοριών για τοποθεσίες',
'categories.new': 'Νέα Κατηγορία',
'categories.empty': 'Δεν υπάρχουν κατηγορίες ακόμη',
'categories.namePlaceholder': 'Όνομα κατηγορίας',
'categories.icon': 'Εικονίδιο',
'categories.color': 'Χρώμα',
'categories.customColor': 'Επιλογή προσαρμοσμένου χρώματος',
'categories.preview': 'Προεπισκόπηση',
'categories.defaultName': 'Κατηγορία',
'categories.update': 'Ενημέρωση',
'categories.create': 'Δημιουργία',
'categories.confirm.delete':
'Διαγραφή κατηγορίας; Οι τοποθεσίες σε αυτή την κατηγορία δεν θα διαγραφούν.',
'categories.toast.loadError': 'Αποτυχία φόρτωσης κατηγοριών',
'categories.toast.nameRequired': 'Παρακαλώ εισάγετε όνομα',
'categories.toast.updated': 'Η κατηγορία ενημερώθηκε',
'categories.toast.created': 'Η κατηγορία δημιουργήθηκε',
'categories.toast.saveError': 'Αποτυχία αποθήκευσης',
'categories.toast.deleted': 'Η κατηγορία διαγράφηκε',
'categories.toast.deleteError': 'Αποτυχία διαγραφής',
};
export default categories;
+75
View File
@@ -0,0 +1,75 @@
import type { TranslationStrings } from '../types';
const collab: TranslationStrings = {
'collab.tabs.chat': 'Συνομιλία',
'collab.tabs.notes': 'Σημειώσεις',
'collab.tabs.polls': 'Δημοσκοπήσεις',
'collab.whatsNext.title': 'Τι Επόμενο',
'collab.whatsNext.today': 'Σήμερα',
'collab.whatsNext.tomorrow': 'Αύριο',
'collab.whatsNext.empty': 'Καμία επερχόμενη δραστηριότητα',
'collab.whatsNext.until': 'έως',
'collab.whatsNext.emptyHint': 'Οι δραστηριότητες με ώρες θα εμφανίζονται εδώ',
'collab.chat.send': 'Αποστολή',
'collab.chat.placeholder': 'Πληκτρολογήστε ένα μήνυμα...',
'collab.chat.empty': 'Ξεκινήστε τη συζήτηση',
'collab.chat.emptyHint':
'Τα μηνύματα κοινοποιούνται σε όλα τα μέλη του ταξιδιού',
'collab.chat.emptyDesc':
'Μοιραστείτε ιδέες, σχέδια και ενημερώσεις με την ταξιδιωτική σας ομάδα',
'collab.chat.today': 'Σήμερα',
'collab.chat.yesterday': 'Χθες',
'collab.chat.deletedMessage': 'διέγραψε ένα μήνυμα',
'collab.chat.reply': 'Απάντηση',
'collab.chat.loadMore': 'Φόρτωση παλαιότερων μηνυμάτων',
'collab.chat.justNow': 'μόλις τώρα',
'collab.chat.minutesAgo': '{n}λ πριν',
'collab.chat.hoursAgo': '{n}ω πριν',
'collab.notes.title': 'Σημειώσεις',
'collab.notes.new': 'Νέα Σημείωση',
'collab.notes.empty': 'Δεν υπάρχουν σημειώσεις ακόμη',
'collab.notes.emptyHint': 'Ξεκινήστε να καταγράφετε ιδέες και σχέδια',
'collab.notes.all': 'Όλες',
'collab.notes.titlePlaceholder': 'Τίτλος σημείωσης',
'collab.notes.contentPlaceholder': 'Γράψτε κάτι...',
'collab.notes.categoryPlaceholder': 'Κατηγορία',
'collab.notes.newCategory': 'Νέα κατηγορία...',
'collab.notes.category': 'Κατηγορία',
'collab.notes.noCategory': 'Χωρίς κατηγορία',
'collab.notes.color': 'Χρώμα',
'collab.notes.save': 'Αποθήκευση',
'collab.notes.cancel': 'Ακύρωση',
'collab.notes.edit': 'Επεξεργασία',
'collab.notes.delete': 'Διαγραφή',
'collab.notes.pin': 'Καρφίτσωμα',
'collab.notes.unpin': 'Ξεκαρφίτσωμα',
'collab.notes.daysAgo': '{n}η πριν',
'collab.notes.categorySettings': 'Διαχείριση Κατηγοριών',
'collab.notes.create': 'Δημιουργία',
'collab.notes.website': 'Ιστότοπος',
'collab.notes.websitePlaceholder': 'https://...',
'collab.notes.attachFiles': 'Επισύναψη αρχείων',
'collab.notes.noCategoriesYet': 'Δεν υπάρχουν κατηγορίες ακόμη',
'collab.notes.emptyDesc': 'Δημιουργήστε μια σημείωση για να ξεκινήσετε',
'collab.polls.title': 'Δημοσκοπήσεις',
'collab.polls.new': 'Νέα Δημοσκόπηση',
'collab.polls.empty': 'Δεν υπάρχουν δημοσκοπήσεις ακόμη',
'collab.polls.emptyHint': 'Ρωτήστε την ομάδα και ψηφίστε μαζί',
'collab.polls.question': 'Ερώτηση',
'collab.polls.questionPlaceholder': 'Τι πρέπει να κάνουμε;',
'collab.polls.addOption': '+ Προσθήκη επιλογής',
'collab.polls.optionPlaceholder': 'Επιλογή {n}',
'collab.polls.create': 'Δημιουργία Δημοσκόπησης',
'collab.polls.close': 'Κλείσιμο',
'collab.polls.closed': 'Κλειστή',
'collab.polls.votes': '{n} ψήφοι',
'collab.polls.vote': '{n} ψήφος',
'collab.polls.multipleChoice': 'Πολλαπλή επιλογή',
'collab.polls.multiChoice': 'Πολλαπλή επιλογή',
'collab.polls.deadline': 'Προθεσμία',
'collab.polls.option': 'Επιλογή',
'collab.polls.options': 'Επιλογές',
'collab.polls.delete': 'Διαγραφή',
'collab.polls.closedSection': 'Κλειστές',
};
export default collab;
+55
View File
@@ -0,0 +1,55 @@
import type { TranslationStrings } from '../types';
const common: TranslationStrings = {
'common.save': 'Αποθήκευση',
'common.showMore': 'Εμφάνιση περισσότερων',
'common.showLess': 'Εμφάνιση λιγότερων',
'common.cancel': 'Ακύρωση',
'common.clear': 'Εκκαθάριση',
'common.delete': 'Διαγραφή',
'common.edit': 'Επεξεργασία',
'common.add': 'Προσθήκη',
'common.loading': 'Φόρτωση...',
'common.import': 'Εισαγωγή',
'common.select': 'Επιλογή',
'common.selectAll': 'Επιλογή όλων',
'common.deselectAll': 'Απο-επιλογή όλων',
'common.error': 'Σφάλμα',
'common.unknownError': 'Άγνωστο σφάλμα',
'common.tooManyAttempts':
'Πολλαπλές προσπάθειες. Παρακαλώ δοκιμάστε αργότερα.',
'common.back': 'Πίσω',
'common.all': 'Όλα',
'common.close': 'Κλείσιμο',
'common.open': 'Άνοιγμα',
'common.upload': 'Μεταφόρτωση',
'common.search': 'Αναζήτηση',
'common.confirm': 'Επιβεβαίωση',
'common.ok': 'OK',
'common.yes': 'Ναι',
'common.no': 'Όχι',
'common.or': 'ή',
'common.none': 'Κανένα',
'common.date': 'Ημερομηνία',
'common.rename': 'Μετονομασία',
'common.discardChanges': 'Απόρριψη αλλαγών',
'common.discard': 'Απόρριψη',
'common.name': 'Όνομα',
'common.email': 'Email',
'common.password': 'Κωδικός',
'common.saving': 'Αποθήκευση...',
'common.justNow': 'Μόλις τώρα',
'common.hoursAgo': '{count} ώρες πρίν',
'common.daysAgo': '{count} μέρες πρίν',
'common.saved': 'Αποθηκεύτηκε',
'common.update': 'Ενημέρωση',
'common.change': 'Αλλαγή',
'common.uploading': 'Μεταφόρτωση...',
'common.backToPlanning': 'Πίσω στον Σχεδιασμό',
'common.reset': 'Επαναφορά',
'common.expand': 'Επέκταση',
'common.collapse': 'Σύμπτυξη',
'common.copy': 'Αντιγραφή',
'common.copied': 'Αντιγράφηκε',
};
export default common;
+124
View File
@@ -0,0 +1,124 @@
import type { TranslationStrings } from '../types';
const dashboard: TranslationStrings = {
'dashboard.title': 'Τα Ταξίδια μου',
'dashboard.subtitle.loading': 'Φόρτωση των ταξιδιών...',
'dashboard.subtitle.trips': '{count} ταξίδια ({archived} αρχειοθετημένα)',
'dashboard.subtitle.empty': 'Ξεκινήστε το πρώτο σας ταξίδι',
'dashboard.subtitle.activeOne': '{count} ενεργό ταξίδι',
'dashboard.subtitle.activeMany': '{count} ενεργά ταξίδια',
'dashboard.subtitle.archivedSuffix': ' · {count} αρχειοθετημένα',
'dashboard.newTrip': 'Νέο Ταξίδι',
'dashboard.gridView': 'Προβολή στοιχείων',
'dashboard.listView': 'Προβολή λίστας',
'dashboard.currency': 'Συνάλλαγμα',
'dashboard.timezone': 'Ζώνες ώρας',
'dashboard.localTime': 'Τοπική',
'dashboard.timezoneCustomTitle': 'Προσαρμοσμένη Ζώνη ώρας',
'dashboard.timezoneCustomLabelPlaceholder': 'Επιθετικό (προαιρετικό)',
'dashboard.timezoneCustomTzPlaceholder': 'π.χ. Αμερική/Νέα Υόρκη',
'dashboard.timezoneCustomAdd': 'Προσθήκη',
'dashboard.timezoneCustomErrorEmpty': 'Εισάγετε μια ζώνη ώρας',
'dashboard.timezoneCustomErrorInvalid':
'Μη έγκυρη ζώνη ώρας. Χρησιμοποιήστε την μορφή π.χ. Europe/Berlin',
'dashboard.timezoneCustomErrorDuplicate': 'Έχει προστεθεί ήδη',
'dashboard.emptyTitle': 'Δεν υπάρχουν ταξίδια ακόμη',
'dashboard.emptyText':
'Δημιουργήστε το πρώτο σας ταξίδι και ξεκινήστε τα σχέδια!',
'dashboard.emptyButton': 'Δημιουργία Πρώτου Ταξίδιου',
'dashboard.nextTrip': 'Επόμενο Ταξίδι',
'dashboard.shared': 'Κοινοποιημένο',
'dashboard.sharedBy': 'Κοινοποιήθηκε από {name}',
'dashboard.days': 'Ημέρες',
'dashboard.places': 'Τόποι',
'dashboard.members': 'Μέλη',
'dashboard.archive': 'Αρχειοθήκευση',
'dashboard.copyTrip': 'Αντιγραφή',
'dashboard.copySuffix': 'αντιγραφή',
'dashboard.restore': 'Επαναφορά',
'dashboard.archived': 'Αρχειοθετημένο',
'dashboard.status.ongoing': 'Τρέχων',
'dashboard.status.today': 'Σήμερα',
'dashboard.status.tomorrow': 'Αύριο',
'dashboard.status.past': 'Παρελθόν',
'dashboard.status.daysLeft': '{count} μέρες έμειναν',
'dashboard.toast.loadError': 'Αποτυχία φόρτωσης ταξιδιών',
'dashboard.toast.created': 'Ταξίδι δημιουργήθηκε επιτυχώς!',
'dashboard.toast.createError': 'Αποτυχία δημιουργίας ταξιδιού',
'dashboard.toast.updated': 'Ταξίδι ενημερώθηκε!',
'dashboard.toast.updateError': 'Αποτυχία ενημέρωσης ταξιδιού',
'dashboard.toast.deleted': 'Ταξίδι διαγράφηκε',
'dashboard.toast.deleteError': 'Αποτυχία διαγραφής ταξιδιού',
'dashboard.toast.archived': 'Ταξίδι αρχειοθετήθηκε',
'dashboard.toast.archiveError': 'Αποτυχία αρχειοθήκευσης ταξιδιού',
'dashboard.toast.restored': 'Ταξίδι επαναφέρθηκε',
'dashboard.toast.restoreError': 'Αποτυχία επαναφοράς ταξιδιού',
'dashboard.toast.copied': 'Ταξίδι αντιγράφηκε!',
'dashboard.toast.copyError': 'Αποτυχία αντιγραφής ταξιδιού',
'dashboard.confirm.delete':
'Διαγραφή ταξιδιού "{title}"; Όλα τα τόποι και τα σχέδια θα διαγραφούν επίσης.',
'dashboard.confirm.copy.title': 'Αντιγραφή αυτού του ταξιδιού;',
'dashboard.confirm.copy.willCopy': 'Θα αντιγραφεί',
'dashboard.confirm.copy.will1': 'Μέρες, μέρη και σχέδια μέρας',
'dashboard.confirm.copy.will2': 'Καταλύματα και κρατήσεις',
'dashboard.confirm.copy.will3': 'Αντικείμενα budget και σειρά κατηγορίας',
'dashboard.confirm.copy.will4': 'Λίστα πακεταρίσματος (Μη ελεγμένα)',
'dashboard.confirm.copy.will5': 'TODOs (Μη ορισμένα & Μη ελεγμένα)',
'dashboard.confirm.copy.will6': 'Σημειώσεις μέρας',
'dashboard.confirm.copy.wontCopy': 'Δεν θα αντιγραφούν',
'dashboard.confirm.copy.wont1': 'Συνεργάτες & αναθέσεις μελών',
'dashboard.confirm.copy.wont2':
'Σημειώσεις συνεργασίας, ψηφοφορίες & μηνύματα',
'dashboard.confirm.copy.wont3': 'Αρχεία & φωτογραφίες',
'dashboard.confirm.copy.wont4': 'Σύνδεσμοι διαμοιρασμού',
'dashboard.confirm.copy.confirm': 'Αντιγραφή ταξιδιού',
'dashboard.editTrip': 'Επεξεργασία Ταξιδιού',
'dashboard.createTrip': 'Δημιουργία Νέου Ταξιδιού',
'dashboard.tripTitle': 'Τίτλος',
'dashboard.tripTitlePlaceholder': 'π.χ. Καλοκαίρι στην Ιαπωνία',
'dashboard.tripDescription': 'Περιγραφή',
'dashboard.tripDescriptionPlaceholder': 'Σχετικά με τι είναι αυτό το ταξίδι;',
'dashboard.startDate': 'Ημερομηνία Έναρξης',
'dashboard.endDate': 'Ημερομηνία Λήξης',
'dashboard.dayCount': 'Αριθμός Ημερών',
'dashboard.dayCountHint':
'Πόσες ημέρες να σχεδιαστούν όταν δεν έχουν οριστεί ημερομηνίες ταξιδιού.',
'dashboard.noDateHint':
'Δεν έχει οριστεί ημερομηνία — θα δημιουργηθούν 7 προεπιλεγμένες ημέρες. Μπορείτε να το αλλάξετε οποτεδήποτε.',
'dashboard.coverImage': 'Εικόνα Εξωφύλλου',
'dashboard.addCoverImage': 'Προσθήκη εικόνας εξωφύλλου (ή σύρετε & αποθέστε)',
'dashboard.addMembers': 'Συνταξιδιώτες',
'dashboard.addMember': 'Προσθήκη μέλους',
'dashboard.coverSaved': 'Η εικόνα εξωφύλλου αποθηκεύτηκε',
'dashboard.coverUploadError': 'Αποτυχία μεταφόρτωσης',
'dashboard.coverRemoveError': 'Αποτυχία αφαίρεσης',
'dashboard.titleRequired': 'Ο τίτλος είναι υποχρεωτικός',
'dashboard.endDateError':
'Η ημερομηνία λήξης πρέπει να είναι μετά την ημερομηνία έναρξης',
'dashboard.greeting.morning': 'Καλημέρα,',
'dashboard.greeting.afternoon': 'Καλό απόγευμα,',
'dashboard.greeting.evening': 'Καλησπέρα,',
'dashboard.mobile.liveNow': 'Ζωντανά Τώρα',
'dashboard.mobile.tripProgress': 'Πρόοδος ταξιδιού',
'dashboard.mobile.daysLeft': '{count} ημέρες ακόμα',
'dashboard.mobile.places': 'Τοποθεσίες',
'dashboard.mobile.buddies': 'Συνταξιδιώτες',
'dashboard.mobile.newTrip': 'Νέο Ταξίδι',
'dashboard.mobile.currency': 'Νόμισμα',
'dashboard.mobile.timezone': 'Ζώνη ώρας',
'dashboard.mobile.upcomingTrips': 'Επερχόμενα Ταξίδια',
'dashboard.mobile.yourTrips': 'Τα Ταξίδια σας',
'dashboard.mobile.trips': 'ταξίδια',
'dashboard.mobile.starts': 'Ξεκινά',
'dashboard.mobile.duration': 'Διάρκεια',
'dashboard.mobile.day': 'ημέρα',
'dashboard.mobile.days': 'ημέρες',
'dashboard.mobile.ongoing': 'Σε εξέλιξη',
'dashboard.mobile.startsToday': 'Ξεκινά σήμερα',
'dashboard.mobile.tomorrow': 'Αύριο',
'dashboard.mobile.inDays': 'Σε {count} ημέρες',
'dashboard.mobile.inMonths': 'Σε {count} μήνες',
'dashboard.mobile.completed': 'Ολοκληρώθηκε',
'dashboard.mobile.currencyConverter': 'Μετατροπέας Νομισμάτων',
};
export default dashboard;
+27
View File
@@ -0,0 +1,27 @@
import type { TranslationStrings } from '../types';
const day: TranslationStrings = {
'day.precipProb': 'Πιθανότητα βροχής',
'day.precipitation': 'Κατακρημνίσματα',
'day.wind': 'Άνεμος',
'day.sunrise': 'Ανατολή',
'day.sunset': 'Δύση',
'day.hourlyForecast': 'Ωριαία Πρόγνωση',
'day.climateHint':
'Ιστορικοί μέσοι όροι — η πραγματική πρόγνωση είναι διαθέσιμη εντός 16 ημερών από αυτή την ημερομηνία.',
'day.noWeather':
'Δεν υπάρχουν διαθέσιμα δεδομένα καιρού. Προσθέστε μια τοποθεσία με συντεταγμένες.',
'day.overview': 'Ημερήσια Επισκόπηση',
'day.accommodation': 'Διαμονή',
'day.addAccommodation': 'Προσθήκη διαμονής',
'day.hotelDayRange': 'Εφαρμογή σε ημέρες',
'day.noPlacesForHotel': 'Προσθέστε πρώτα τοποθεσίες στο ταξίδι σας',
'day.allDays': 'Όλες',
'day.checkIn': 'Check-in',
'day.checkInUntil': 'Έως',
'day.checkOut': 'Check-out',
'day.confirmation': 'Επιβεβαίωση',
'day.editAccommodation': 'Επεξεργασία διαμονής',
'day.reservations': 'Κρατήσεις',
};
export default day;
+48
View File
@@ -0,0 +1,48 @@
import type { TranslationStrings } from '../types';
const dayplan: TranslationStrings = {
'dayplan.icsTooltip': 'Εξαγωγή ημερολογίου (ICS)',
'dayplan.emptyDay': 'Δεν υπάρχουν προγραμματισμένα μέρη για αυτή την ημέρα',
'dayplan.cannotReorderTransport':
'Οι κρατήσεις με σταθερή ώρα δεν μπορούν να αναδιαταχθούν',
'dayplan.confirmRemoveTimeTitle': 'Αφαίρεση ώρας;',
'dayplan.confirmRemoveTimeBody':
'Αυτό το μέρος έχει σταθερή ώρα ({time}). Η μετακίνησή του θα αφαιρέσει την ώρα και θα επιτρέψει ελεύθερη ταξινόμηση.',
'dayplan.confirmRemoveTimeAction': 'Αφαίρεση ώρας & μετακίνηση',
'dayplan.cannotDropOnTimed':
'Τα στοιχεία δεν μπορούν να τοποθετηθούν μεταξύ καταχωρήσεων με ώρα',
'dayplan.cannotBreakChronology':
'Αυτό θα έσπαγε τη χρονολογική σειρά των στοιχείων με ώρα και των κρατήσεων',
'dayplan.addNote': 'Προσθήκη Σημείωσης',
'dayplan.expandAll': 'Ανάπτυξη όλων των ημερών',
'dayplan.collapseAll': 'Σύμπτυξη όλων των ημερών',
'dayplan.editNote': 'Επεξεργασία Σημείωσης',
'dayplan.noteAdd': 'Προσθήκη Σημείωσης',
'dayplan.noteEdit': 'Επεξεργασία Σημείωσης',
'dayplan.noteTitle': 'Σημείωση',
'dayplan.noteSubtitle': 'Ημερήσια Σημείωση',
'dayplan.totalCost': 'Συνολικό Κόστος',
'dayplan.days': 'Ημέρες',
'dayplan.dayN': 'Ημέρα {n}',
'dayplan.calculating': 'Υπολογισμός...',
'dayplan.route': 'Διαδρομή',
'dayplan.optimize': 'Βελτιστοποίηση',
'dayplan.optimized': 'Η διαδρομή βελτιστοποιήθηκε',
'dayplan.routeError': 'Αποτυχία υπολογισμού διαδρομής',
'dayplan.toast.needTwoPlaces':
'Χρειάζονται τουλάχιστον δύο μέρη για βελτιστοποίηση διαδρομής',
'dayplan.toast.routeOptimized': 'Η διαδρομή βελτιστοποιήθηκε',
'dayplan.toast.noGeoPlaces':
'Δεν βρέθηκαν μέρη με συντεταγμένες για τον υπολογισμό διαδρομής',
'dayplan.confirmed': 'Επιβεβαιωμένο',
'dayplan.pendingRes': 'Εκκρεμές',
'dayplan.pdf': 'PDF',
'dayplan.pdfTooltip': 'Εξαγωγή ημερήσιου πλάνου ως PDF',
'dayplan.pdfError': 'Αποτυχία εξαγωγής PDF',
'dayplan.mobile.addPlace': 'Προσθήκη Τοποθεσίας',
'dayplan.mobile.searchPlaces': 'Αναζήτηση τοποθεσιών...',
'dayplan.mobile.allAssigned': 'Όλες οι τοποθεσίες έχουν ανατεθεί',
'dayplan.mobile.noMatch': 'Καμία αντιστοιχία',
'dayplan.mobile.createNew': 'Δημιουργία νέας τοποθεσίας',
};
export default dayplan;
+64
View File
@@ -0,0 +1,64 @@
import type { TranslationStrings } from '../types';
const files: TranslationStrings = {
'files.title': 'Αρχεία',
'files.pageTitle': 'Αρχεία & Έγγραφα',
'files.subtitle': '{count} αρχεία για {trip}',
'files.download': 'Λήψη',
'files.openError': 'Δεν ήταν δυνατό το άνοιγμα του αρχείου',
'files.downloadPdf': 'Λήψη PDF',
'files.count': '{count} αρχεία',
'files.countSingular': '1 αρχείο',
'files.uploaded': '{count} μεταφορτώθηκαν',
'files.uploadError': 'Η μεταφόρτωση απέτυχε',
'files.dropzone': 'Αποθέστε αρχεία εδώ',
'files.dropzoneHint': 'ή κάντε κλικ για περιήγηση',
'files.allowedTypes':
'Εικόνες, PDF, DOC, DOCX, XLS, XLSX, TXT, CSV · Μέγ. 50 MB',
'files.uploading': 'Μεταφόρτωση...',
'files.filterAll': 'Όλα',
'files.filterPdf': 'PDF',
'files.filterImages': 'Εικόνες',
'files.filterDocs': 'Έγγραφα',
'files.filterCollab': 'Σημειώσεις Collab',
'files.sourceCollab': 'Από Σημειώσεις Collab',
'files.empty': 'Δεν υπάρχουν αρχεία ακόμη',
'files.emptyHint': 'Μεταφορτώστε αρχεία για να τα επισυνάψετε στο ταξίδι σας',
'files.openTab': 'Άνοιγμα σε νέα καρτέλα',
'files.confirm.delete':
'Είστε σίγουροι ότι θέλετε να διαγράψετε αυτό το αρχείο;',
'files.toast.deleted': 'Το αρχείο διαγράφηκε',
'files.toast.deleteError': 'Αποτυχία διαγραφής αρχείου',
'files.sourcePlan': 'Ημερήσιο Πλάνο',
'files.sourceBooking': 'Κράτηση',
'files.sourceTransport': 'Μεταφορά',
'files.attach': 'Επισύναψη',
'files.pasteHint':
'Μπορείτε επίσης να επικολλήσετε εικόνες από το πρόχειρο (Ctrl+V)',
'files.trash': 'Κάδος',
'files.trashEmpty': 'Ο κάδος είναι άδειος',
'files.emptyTrash': 'Άδειασμα Κάδου',
'files.restore': 'Επαναφορά',
'files.star': 'Επισήμανση',
'files.unstar': 'Αφαίρεση επισήμανσης',
'files.assign': 'Ανάθεση',
'files.assignTitle': 'Ανάθεση Αρχείου',
'files.assignPlace': 'Μέρος',
'files.assignBooking': 'Κράτηση',
'files.assignTransport': 'Μεταφορά',
'files.unassigned': 'Χωρίς ανάθεση',
'files.unlink': 'Αφαίρεση σύνδεσης',
'files.toast.trashed': 'Μετακινήθηκε στον κάδο',
'files.toast.restored': 'Το αρχείο επαναφέρθηκε',
'files.toast.trashEmptied': 'Ο κάδος αδειάστηκε',
'files.toast.assigned': 'Το αρχείο ανατέθηκε',
'files.toast.assignError': 'Η ανάθεση απέτυχε',
'files.toast.restoreError': 'Η επαναφορά απέτυχε',
'files.confirm.permanentDelete':
'Οριστική διαγραφή αυτού του αρχείου; Αυτή η ενέργεια δεν μπορεί να αναιρεθεί.',
'files.confirm.emptyTrash':
'Οριστική διαγραφή όλων των αρχείων στον κάδο; Αυτή η ενέργεια δεν μπορεί να αναιρεθεί.',
'files.noteLabel': 'Σημείωση',
'files.notePlaceholder': 'Προσθήκη σημείωσης...',
};
export default files;
+86
View File
@@ -0,0 +1,86 @@
import admin from './admin';
import airport from './airport';
import atlas from './atlas';
import backup from './backup';
import budget from './budget';
import categories from './categories';
import collab from './collab';
import common from './common';
import dashboard from './dashboard';
import day from './day';
import dayplan from './dayplan';
import files from './files';
import inspector from './inspector';
import journey from './journey';
import login from './login';
import map from './map';
import members from './members';
import memories from './memories';
import nav from './nav';
import notif from './notif';
import notifications from './notifications';
import oauth from './oauth';
import packing from './packing';
import pdf from './pdf';
import perm from './perm';
import photos from './photos';
import places from './places';
import planner from './planner';
import register from './register';
import reservations from './reservations';
import settings from './settings';
import share from './share';
import shared from './shared';
import stats from './stats';
import system_notice from './system_notice';
import todo from './todo';
import transport from './transport';
import trip from './trip';
import trips from './trips';
import undo from './undo';
import vacay from './vacay';
const locale = {
...common,
...trips,
...nav,
...dashboard,
...settings,
...admin,
...dayplan,
...share,
...shared,
...login,
...register,
...vacay,
...atlas,
...trip,
...places,
...inspector,
...reservations,
...airport,
...map,
...budget,
...files,
...packing,
...members,
...categories,
...backup,
...photos,
...pdf,
...planner,
...stats,
...day,
...memories,
...collab,
...perm,
...undo,
...notifications,
...todo,
...notif,
...journey,
...oauth,
...system_notice,
...transport,
};
export default locale;
+22
View File
@@ -0,0 +1,22 @@
import type { TranslationStrings } from '../types';
const inspector: TranslationStrings = {
'inspector.opened': 'Ανοιχτό',
'inspector.closed': 'Κλειστό',
'inspector.openingHours': 'Ώρες Λειτουργίας',
'inspector.showHours': 'Εμφάνιση ωρών λειτουργίας',
'inspector.files': 'Αρχεία',
'inspector.filesCount': '{count} αρχεία',
'inspector.remove': 'Αφαίρεση',
'inspector.removeFromDay': 'Αφαίρεση από την Ημέρα',
'inspector.addToDay': 'Προσθήκη στην Ημέρα',
'inspector.confirmedRes': 'Επιβεβαιωμένη Κράτηση',
'inspector.pendingRes': 'Εκκρεμής Κράτηση',
'inspector.google': 'Άνοιγμα στο Google Maps',
'inspector.website': 'Άνοιγμα Ιστοσελίδας',
'inspector.addRes': 'Κράτηση',
'inspector.editRes': 'Επεξεργασία Κράτησης',
'inspector.participants': 'Συμμετέχοντες',
'inspector.trackStats': 'Στατιστικά Διαδρομής',
};
export default inspector;
+247
View File
@@ -0,0 +1,247 @@
import type { TranslationStrings } from '../types';
const journey: TranslationStrings = {
'journey.search.placeholder': 'Αναζήτηση ταξιδιών…',
'journey.search.noResults': 'Κανένα ταξίδι δεν ταιριάζει με «{query}»',
'journey.title': 'Ταξίδι',
'journey.subtitle': 'Παρακολουθήστε τα ταξίδια σας καθώς συμβαίνουν',
'journey.new': 'Νέο Ταξίδι',
'journey.create': 'Δημιουργία',
'journey.titlePlaceholder': 'Πού πηγαίνετε;',
'journey.empty': 'Δεν υπάρχουν ταξίδια ακόμα',
'journey.emptyHint': 'Ξεκινήστε να καταγράφετε το επόμενο ταξίδι σας',
'journey.deleted': 'Το ταξίδι διαγράφηκε',
'journey.createError': 'Δεν ήταν δυνατή η δημιουργία ταξιδιού',
'journey.deleteError': 'Δεν ήταν δυνατή η διαγραφή ταξιδιού',
'journey.deleteConfirmTitle': 'Διαγραφή',
'journey.deleteConfirmMessage':
'Διαγραφή «{title}»; Αυτό δεν μπορεί να αναιρεθεί.',
'journey.deleteConfirmGeneric': 'Είστε σίγουροι ότι θέλετε να το διαγράψετε;',
'journey.notFound': 'Το ταξίδι δεν βρέθηκε',
'journey.photos': 'Φωτογραφίες',
'journey.timelineEmpty': 'Δεν υπάρχουν στάσεις ακόμα',
'journey.timelineEmptyHint':
'Προσθέστε μια άφιξη ή γράψτε μια καταχώρηση ημερολογίου για να ξεκινήσετε',
'journey.status.draft': 'Πρόχειρο',
'journey.status.active': 'Ενεργό',
'journey.status.completed': 'Ολοκληρωμένο',
'journey.status.upcoming': 'Επερχόμενο',
'journey.status.archived': 'Αρχειοθετημένο',
'journey.checkin.add': 'Άφιξη',
'journey.checkin.namePlaceholder': 'Όνομα τοποθεσίας',
'journey.checkin.notesPlaceholder': 'Σημειώσεις (προαιρετικό)',
'journey.checkin.save': 'Αποθήκευση',
'journey.checkin.error': 'Δεν ήταν δυνατή η αποθήκευση άφιξης',
'journey.entry.add': 'Ημερολόγιο',
'journey.entry.edit': 'Επεξεργασία καταχώρησης',
'journey.entry.titlePlaceholder': 'Τίτλος (προαιρετικό)',
'journey.entry.bodyPlaceholder': 'Τι συνέβη σήμερα;',
'journey.entry.save': 'Αποθήκευση',
'journey.entry.error': 'Δεν ήταν δυνατή η αποθήκευση καταχώρησης',
'journey.photo.add': 'Φωτογραφία',
'journey.photo.uploadError': 'Η μεταφόρτωση απέτυχε',
'journey.share.share': 'Κοινοποίηση',
'journey.share.public': 'Δημόσιο',
'journey.share.linkCopied': 'Ο δημόσιος σύνδεσμος αντιγράφηκε',
'journey.share.disabled': 'Η δημόσια κοινοποίηση απενεργοποιήθηκε',
'journey.editor.titlePlaceholder': 'Δώστε ένα όνομα σε αυτή τη στιγμή...',
'journey.editor.bodyPlaceholder': 'Πείτε την ιστορία αυτής της ημέρας...',
'journey.editor.placePlaceholder': 'Τοποθεσία (προαιρετικό)',
'journey.editor.tagsPlaceholder':
'Ετικέτες: κρυμμένος θησαυρός, καλύτερο γεύμα, πρέπει να ξαναπάω...',
'journey.visibility.private': 'Ιδιωτικό',
'journey.visibility.shared': 'Κοινόχρηστο',
'journey.visibility.public': 'Δημόσιο',
'journey.emptyState.title': 'Η ιστορία σας ξεκινά εδώ',
'journey.emptyState.subtitle':
'Κάντε άφιξη σε ένα μέρος ή γράψτε την πρώτη σας καταχώρηση ημερολογίου',
'journey.frontpage.subtitle':
'Μετατρέψτε τα ταξίδια σας σε ιστορίες που δεν θα ξεχάσετε ποτέ',
'journey.frontpage.createJourney': 'Δημιουργία Ταξιδιού',
'journey.frontpage.activeJourney': 'Ενεργό Ταξίδι',
'journey.frontpage.allJourneys': 'Όλα τα Ταξίδια',
'journey.frontpage.journeys': 'ταξίδια',
'journey.frontpage.createNew': 'Δημιουργία νέου Ταξιδιού',
'journey.frontpage.createNewSub':
'Επιλέξτε ταξίδια, γράψτε ιστορίες, μοιραστείτε τις περιπέτειές σας',
'journey.frontpage.live': 'Ζωντανά',
'journey.frontpage.synced': 'Συγχρονισμένο',
'journey.frontpage.continueWriting': 'Συνέχιση γραφής',
'journey.frontpage.updated': 'Ενημερώθηκε {time}',
'journey.frontpage.suggestionLabel': 'Το ταξίδι μόλις τελείωσε',
'journey.frontpage.suggestionText':
'Μετατρέψτε το <strong>{title}</strong> σε Ταξίδι',
'journey.frontpage.dismiss': 'Απόρριψη',
'journey.frontpage.journeyName': 'Όνομα Ταξιδιού',
'journey.frontpage.namePlaceholder': 'π.χ. Νοτιοανατολική Ασία 2026',
'journey.frontpage.selectTrips': 'Επιλογή Ταξιδιών',
'journey.frontpage.tripsSelected': 'επιλεγμένα ταξίδια',
'journey.frontpage.trips': 'ταξίδια',
'journey.frontpage.placesImported': 'τοποθεσίες θα εισαχθούν',
'journey.frontpage.places': 'τοποθεσίες',
'journey.detail.backToJourney': 'Πίσω στο Ταξίδι',
'journey.detail.syncedWithTrips': 'Συγχρονισμένο με Ταξίδια',
'journey.detail.addEntry': 'Προσθήκη Καταχώρησης',
'journey.detail.newEntry': 'Νέα Καταχώρηση',
'journey.detail.editEntry': 'Επεξεργασία Καταχώρησης',
'journey.detail.noEntries': 'Δεν υπάρχουν καταχωρήσεις ακόμα',
'journey.detail.noEntriesHint':
'Προσθέστε ένα ταξίδι για να ξεκινήσετε με προτεινόμενες καταχωρήσεις',
'journey.detail.noPhotos': 'Δεν υπάρχουν φωτογραφίες ακόμα',
'journey.detail.noPhotosHint':
'Μεταφορτώστε φωτογραφίες σε καταχωρήσεις ή περιηγηθείτε τη βιβλιοθήκη Immich/Synology',
'journey.detail.journeyTab': 'Ταξίδι',
'journey.detail.journeyStats': 'Στατιστικά Ταξιδιού',
'journey.detail.syncedTrips': 'Συγχρονισμένα Ταξίδια',
'journey.detail.noTripsLinked': 'Δεν έχουν συνδεθεί ταξίδια ακόμα',
'journey.detail.contributors': 'Συνεισφέροντες',
'journey.detail.readMore': 'Διαβάστε περισσότερα',
'journey.detail.prosCons': 'Υπέρ & Κατά',
'journey.detail.photos': 'φωτογραφίες',
'journey.detail.day': 'Ημέρα {number}',
'journey.detail.places': 'τοποθεσίες',
'journey.stats.days': 'Ημέρες',
'journey.stats.cities': 'Πόλεις',
'journey.stats.entries': 'Καταχωρήσεις',
'journey.stats.photos': 'Φωτογραφίες',
'journey.stats.places': 'Τοποθεσίες',
'journey.skeletons.show': 'Εμφάνιση προτάσεων',
'journey.skeletons.hide': 'Απόκρυψη προτάσεων',
'journey.verdict.lovedIt': 'Το λάτρεψα',
'journey.verdict.couldBeBetter': 'Θα μπορούσε να ήταν καλύτερο',
'journey.synced.places': 'τοποθεσίες',
'journey.synced.synced': 'συγχρονισμένα',
'journey.editor.discardChangesConfirm':
'Έχετε μη αποθηκευμένες αλλαγές. Απόρριψη;',
'journey.editor.uploadFailed': 'Η μεταφόρτωση φωτογραφίας απέτυχε',
'journey.editor.uploadPhotos': 'Μεταφόρτωση φωτογραφιών',
'journey.editor.uploading': 'Μεταφόρτωση...',
'journey.editor.uploadingProgress': 'Μεταφόρτωση {done}/{total}.',
'journey.editor.uploadPartialFailed':
'{failed} από {total} φωτογραφίες απέτυχαν — αποθηκεύστε ξανά για να δοκιμάσετε εκ νέου',
'journey.editor.fromGallery': 'Από τη Συλλογή',
'journey.editor.allPhotosAdded': 'Όλες οι φωτογραφίες έχουν ήδη προστεθεί',
'journey.editor.writeStory': 'Γράψτε την ιστορία σας...',
'journey.editor.prosCons': 'Υπέρ & Κατά',
'journey.editor.pros': 'Υπέρ',
'journey.editor.cons': 'Κατά',
'journey.editor.proPlaceholder': 'Κάτι υπέροχο...',
'journey.editor.conPlaceholder': 'Όχι και τόσο καλό...',
'journey.editor.addAnother': 'Προσθήκη άλλου',
'journey.editor.date': 'Ημερομηνία',
'journey.editor.location': 'Τοποθεσία',
'journey.editor.searchLocation': 'Αναζήτηση τοποθεσίας...',
'journey.editor.mood': 'Διάθεση',
'journey.editor.weather': 'Καιρός',
'journey.editor.photoFirst': '1η',
'journey.editor.makeFirst': 'Ορισμός ως 1η',
'journey.editor.searching': 'Αναζήτηση...',
'journey.mood.amazing': 'Καταπληκτική',
'journey.mood.good': 'Καλή',
'journey.mood.neutral': 'Ουδέτερη',
'journey.mood.rough': 'Δύσκολη',
'journey.weather.sunny': 'Ηλιόλουστος',
'journey.weather.partly': 'Μερικώς συννεφιασμένος',
'journey.weather.cloudy': 'Συννεφιασμένος',
'journey.weather.rainy': 'Βροχερός',
'journey.weather.stormy': 'Καταιγιδοφόρος',
'journey.weather.cold': 'Χιονισμένος',
'journey.trips.linkTrip': 'Σύνδεση Ταξιδιού',
'journey.trips.searchTrip': 'Αναζήτηση Ταξιδιού',
'journey.trips.searchPlaceholder': 'Όνομα ταξιδιού ή προορισμός...',
'journey.trips.noTripsAvailable': 'Δεν υπάρχουν διαθέσιμα ταξίδια',
'journey.trips.link': 'Σύνδεση',
'journey.trips.tripLinked': 'Το ταξίδι συνδέθηκε',
'journey.trips.linkFailed': 'Αποτυχία σύνδεσης ταξιδιού',
'journey.trips.addTrip': 'Προσθήκη Ταξιδιού',
'journey.trips.unlinkTrip': 'Αποσύνδεση Ταξιδιού',
'journey.trips.unlinkMessage':
'Αποσύνδεση «{title}»; Όλες οι συγχρονισμένες καταχωρήσεις και φωτογραφίες αυτού του ταξιδιού θα διαγραφούν οριστικά. Αυτό δεν μπορεί να αναιρεθεί.',
'journey.trips.unlink': 'Αποσύνδεση',
'journey.trips.tripUnlinked': 'Το ταξίδι αποσυνδέθηκε',
'journey.trips.unlinkFailed': 'Αποτυχία αποσύνδεσης ταξιδιού',
'journey.trips.noTripsLinkedSettings': 'Δεν έχουν συνδεθεί ταξίδια',
'journey.contributors.invite': 'Πρόσκληση Συνεισφέροντα',
'journey.contributors.searchUser': 'Αναζήτηση Χρήστη',
'journey.contributors.searchPlaceholder': 'Όνομα χρήστη ή email...',
'journey.contributors.noUsers': 'Δεν βρέθηκαν χρήστες',
'journey.contributors.role': 'Ρόλος',
'journey.contributors.added': 'Ο συνεισφέρων προστέθηκε',
'journey.contributors.addFailed': 'Αποτυχία προσθήκης συνεισφέροντα',
'journey.contributors.remove': 'Αφαίρεση συνεισφέροντα',
'journey.contributors.removeConfirm':
'Αφαίρεση {username} από αυτό το ταξίδι;',
'journey.contributors.removed': 'Ο συνεισφέρων αφαιρέθηκε',
'journey.contributors.removeFailed': 'Αποτυχία αφαίρεσης συνεισφέροντα',
'journey.share.publicShare': 'Δημόσια Κοινοποίηση',
'journey.share.createLink': 'Δημιουργία συνδέσμου κοινής χρήσης',
'journey.share.linkCreated': 'Ο σύνδεσμος κοινής χρήσης δημιουργήθηκε',
'journey.share.createFailed': 'Αποτυχία δημιουργίας συνδέσμου',
'journey.share.copy': 'Αντιγραφή',
'journey.share.copied': 'Αντιγράφηκε!',
'journey.share.timeline': 'Χρονολόγιο',
'journey.share.gallery': 'Συλλογή',
'journey.share.map': 'Χάρτης',
'journey.share.removeLink': 'Αφαίρεση συνδέσμου κοινής χρήσης',
'journey.share.linkDeleted': 'Ο σύνδεσμος κοινής χρήσης διαγράφηκε',
'journey.share.deleteFailed': 'Αποτυχία διαγραφής',
'journey.share.updateFailed': 'Αποτυχία ενημέρωσης',
'journey.invite.role': 'Ρόλος',
'journey.invite.viewer': 'Θεατής',
'journey.invite.editor': 'Συντάκτης',
'journey.invite.invite': 'Πρόσκληση',
'journey.invite.inviting': 'Αποστολή πρόσκλησης...',
'journey.settings.title': 'Ρυθμίσεις Ταξιδιού',
'journey.settings.coverImage': 'Εικόνα Εξωφύλλου',
'journey.settings.changeCover': 'Αλλαγή εξωφύλλου',
'journey.settings.addCover': 'Προσθήκη εικόνας εξωφύλλου',
'journey.settings.name': 'Όνομα',
'journey.settings.subtitle': 'Υπότιτλος',
'journey.settings.subtitlePlaceholder': 'π.χ. Ταϊλάνδη, Βιετνάμ & Καμπότζη',
'journey.settings.endJourney': 'Αρχειοθέτηση Ταξιδιού',
'journey.settings.reopenJourney': 'Επαναφορά Ταξιδιού',
'journey.settings.archived': 'Το ταξίδι αρχειοθετήθηκε',
'journey.settings.reopened': 'Το ταξίδι επανενεργοποιήθηκε',
'journey.settings.endDescription':
'Αποκρύπτει το σήμα «Ζωντανά». Μπορείτε να το επαναφέρετε ανά πάσα στιγμή.',
'journey.settings.delete': 'Διαγραφή',
'journey.settings.deleteJourney': 'Διαγραφή Ταξιδιού',
'journey.settings.deleteMessage':
'Διαγραφή «{title}»; Όλες οι καταχωρήσεις και οι φωτογραφίες θα χαθούν.',
'journey.settings.saved': 'Οι ρυθμίσεις αποθηκεύτηκαν',
'journey.settings.saveFailed': 'Αποτυχία αποθήκευσης',
'journey.settings.coverUpdated': 'Το εξώφυλλο ενημερώθηκε',
'journey.settings.coverFailed': 'Η μεταφόρτωση απέτυχε',
'journey.settings.failedToDelete': 'Αποτυχία διαγραφής',
'journey.entries.deleteTitle': 'Διαγραφή Καταχώρησης',
'journey.photosUploaded': '{count} φωτογραφίες μεταφορτώθηκαν',
'journey.photosUploadFailed':
'Ορισμένες φωτογραφίες απέτυχαν να μεταφορτωθούν',
'journey.photosAdded': '{count} φωτογραφίες προστέθηκαν',
'journey.public.notFound': 'Δεν Βρέθηκε',
'journey.public.notFoundMessage':
'Αυτό το ταξίδι δεν υπάρχει ή ο σύνδεσμος έχει λήξει.',
'journey.public.readOnly': 'Μόνο ανάγνωση · Δημόσιο Ταξίδι',
'journey.public.tagline': 'Travel Resource & Exploration Kit',
'journey.public.sharedVia': 'Κοινοποιήθηκε μέσω',
'journey.public.madeWith': 'Φτιαγμένο με',
'journey.pdf.journeyBook': 'Βιβλίο Ταξιδιού',
'journey.pdf.madeWith': 'Φτιαγμένο με TREK',
'journey.pdf.day': 'Ημέρα',
'journey.pdf.theEnd': 'Τέλος',
'journey.pdf.saveAsPdf': 'Αποθήκευση ως PDF',
'journey.pdf.pages': 'σελίδες',
'journey.picker.tripPeriod': 'Περίοδος Ταξιδιού',
'journey.picker.dateRange': 'Εύρος Ημερομηνιών',
'journey.picker.allPhotos': 'Όλες οι Φωτογραφίες',
'journey.picker.albums': 'Άλμπουμ',
'journey.picker.selected': 'επιλεγμένες',
'journey.picker.addTo': 'Προσθήκη σε',
'journey.picker.newGallery': 'Νέα Συλλογή',
'journey.picker.selectAll': 'Επιλογή όλων',
'journey.picker.deselectAll': 'Αποεπιλογή όλων',
'journey.picker.noAlbums': 'Δεν βρέθηκαν άλμπουμ',
'journey.picker.selectDate': 'Επιλογή ημερομηνίας',
'journey.picker.search': 'Αναζήτηση',
};
export default journey;
+103
View File
@@ -0,0 +1,103 @@
import type { TranslationStrings } from '../types';
const login: TranslationStrings = {
'login.error': 'Η σύνδεση απέτυχε. Παρακαλώ ελέγξτε τα στοιχεία σας.',
'login.tagline': 'Τα Ταξίδια σας.\nΤο Σχέδιό σας.',
'login.description':
'Σχεδιάστε ταξίδια συνεργατικά με διαδραστικούς χάρτες, προϋπολογισμούς και συγχρονισμό σε πραγματικό χρόνο.',
'login.features.maps': 'Διαδραστικοί Χάρτες',
'login.features.mapsDesc': 'Google Places, διαδρομές & ομαδοποίηση',
'login.features.realtime': 'Συγχρονισμός Πραγματικού Χρόνου',
'login.features.realtimeDesc': 'Σχεδιάστε μαζί μέσω WebSocket',
'login.features.budget': 'Παρακολούθηση Προϋπολογισμού',
'login.features.budgetDesc': 'Κατηγορίες, γραφήματα & κόστος ανά άτομο',
'login.features.collab': 'Συνεργασία',
'login.features.collabDesc': 'Πολλαπλοί χρήστες με κοινόχρηστα ταξίδια',
'login.features.packing': 'Λίστες Πακεταρίσματος',
'login.features.packingDesc': 'Κατηγορίες, πρόοδος & προτάσεις',
'login.features.bookings': 'Κρατήσεις',
'login.features.bookingsDesc': 'Πτήσεις, ξενοδοχεία, εστιατόρια & άλλα',
'login.features.files': 'Έγγραφα',
'login.features.filesDesc': 'Μεταφόρτωση & διαχείριση εγγράφων',
'login.features.routes': 'Έξυπνες Διαδρομές',
'login.features.routesDesc':
'Αυτόματη βελτιστοποίηση & εξαγωγή στο Google Maps',
'login.selfHosted':
'Self-hosted \u00B7 Open Source \u00B7 Τα δεδομένα σας παραμένουν δικά σας',
'login.title': 'Σύνδεση',
'login.subtitle': 'Καλώς ήρθατε πίσω',
'login.signingIn': 'Σύνδεση…',
'login.signIn': 'Σύνδεση',
'login.createAdmin': 'Δημιουργία Λογαριασμού Διαχειριστή',
'login.createAdminHint':
'Ρυθμίστε τον πρώτο λογαριασμό διαχειριστή για το TREK.',
'login.setNewPassword': 'Ορισμός Νέου Κωδικού',
'login.setNewPasswordHint':
'Πρέπει να αλλάξετε τον κωδικό σας πριν συνεχίσετε.',
'login.createAccount': 'Δημιουργία Λογαριασμού',
'login.createAccountHint': 'Καταχωρήστε έναν νέο λογαριασμό.',
'login.creating': 'Δημιουργία…',
'login.noAccount': 'Δεν έχετε λογαριασμό;',
'login.hasAccount': 'Έχετε ήδη λογαριασμό;',
'login.register': 'Εγγραφή',
'login.emailPlaceholder': 'your@email.com',
'login.username': 'Όνομα χρήστη',
'login.oidc.registrationDisabled':
'Η εγγραφή είναι απενεργοποιημένη. Επικοινωνήστε με τον διαχειριστή σας.',
'login.oidc.noEmail': 'Δεν ελήφθη email από τον πάροχο.',
'login.oidc.tokenFailed': 'Ο έλεγχος ταυτότητας απέτυχε.',
'login.oidc.invalidState': 'Μη έγκυρη συνεδρία. Παρακαλώ δοκιμάστε ξανά.',
'login.demoFailed': 'Η σύνδεση demo απέτυχε',
'login.oidcSignIn': 'Σύνδεση με {name}',
'login.oidcOnly':
'Ο έλεγχος ταυτότητας με κωδικό είναι απενεργοποιημένος. Παρακαλώ συνδεθείτε χρησιμοποιώντας τον πάροχο SSO σας.',
'login.oidcLoggedOut':
'Έχετε αποσυνδεθεί. Συνδεθείτε ξανά χρησιμοποιώντας τον πάροχο SSO σας.',
'login.demoHint': 'Δοκιμάστε το demo — δεν απαιτείται εγγραφή',
'login.mfaTitle': 'Έλεγχος ταυτότητας δύο παραγόντων',
'login.mfaSubtitle':
'Εισάγετε τον 6ψήφιο κωδικό από την εφαρμογή authenticator σας.',
'login.mfaCodeLabel': 'Κωδικός επαλήθευσης',
'login.mfaCodeRequired':
'Εισάγετε τον κωδικό από την εφαρμογή authenticator σας.',
'login.mfaHint':
'Ανοίξτε το Google Authenticator, Authy ή άλλη εφαρμογή TOTP.',
'login.mfaBack': '← Πίσω στη σύνδεση',
'login.mfaVerify': 'Επαλήθευση',
'login.invalidInviteLink': 'Μη έγκυρος ή ληγμένος σύνδεσμος πρόσκλησης',
'login.oidcFailed': 'Η σύνδεση OIDC απέτυχε',
'login.usernameRequired': 'Το όνομα χρήστη είναι υποχρεωτικό',
'login.passwordMinLength':
'Ο κωδικός πρέπει να έχει τουλάχιστον 8 χαρακτήρες',
'login.forgotPassword': 'Ξεχάσατε τον κωδικό;',
'login.forgotPasswordTitle': 'Επαναφορά του κωδικού σας',
'login.forgotPasswordBody':
'Εισάγετε το email με το οποίο εγγραφήκατε. Αν υπάρχει λογαριασμός, θα στείλουμε έναν σύνδεσμο επαναφοράς.',
'login.forgotPasswordSubmit': 'Αποστολή συνδέσμου επαναφοράς',
'login.forgotPasswordSentTitle': 'Ελέγξτε το email σας',
'login.forgotPasswordSentBody':
"Αν υπάρχει λογαριασμός για αυτό το email, ένας σύνδεσμος επαναφοράς είναι καθ'οδόν. Λήγει σε 60 λεπτά.",
'login.forgotPasswordSmtpHintOff':
'Προσοχή: ο διαχειριστής σας δεν έχει διαμορφώσει SMTP, οπότε ο σύνδεσμος επαναφοράς θα γραφτεί στην κονσόλα του server αντί να σταλεί με email.',
'login.backToLogin': 'Πίσω στη σύνδεση',
'login.newPassword': 'Νέος κωδικός',
'login.confirmPassword': 'Επιβεβαίωση νέου κωδικού',
'login.passwordsDontMatch': 'Οι κωδικοί δεν ταιριάζουν',
'login.mfaCode': 'Κωδικός 2FA',
'login.resetPasswordTitle': 'Ορίστε έναν νέο κωδικό',
'login.resetPasswordBody':
'Επιλέξτε έναν ισχυρό κωδικό που δεν έχετε χρησιμοποιήσει εδώ ξανά. Ελάχιστο 8 χαρακτήρες.',
'login.resetPasswordMfaBody':
'Εισάγετε τον κωδικό 2FA ή έναν εφεδρικό κωδικό για να ολοκληρωθεί η επαναφορά.',
'login.resetPasswordSubmit': 'Επαναφορά κωδικού',
'login.resetPasswordVerify': 'Επαλήθευση & επαναφορά',
'login.resetPasswordSuccessTitle': 'Ο κωδικός ενημερώθηκε',
'login.resetPasswordSuccessBody':
'Μπορείτε τώρα να συνδεθείτε με τον νέο σας κωδικό.',
'login.resetPasswordInvalidLink': 'Μη έγκυρος σύνδεσμος επαναφοράς',
'login.resetPasswordInvalidLinkBody':
'Αυτός ο σύνδεσμος λείπει ή έχει χαλάσει. Ζητήστε έναν νέο για να συνεχίσετε.',
'login.resetPasswordFailed':
'Η επαναφορά απέτυχε. Ο σύνδεσμος μπορεί να έχει λήξει.',
};
export default login;
+8
View File
@@ -0,0 +1,8 @@
import type { TranslationStrings } from '../types';
const map: TranslationStrings = {
'map.connections': 'Συνδέσεις',
'map.showConnections': 'Εμφάνιση διαδρομών κρατήσεων',
'map.hideConnections': 'Απόκρυψη διαδρομών κρατήσεων',
};
export default map;
+24
View File
@@ -0,0 +1,24 @@
import type { TranslationStrings } from '../types';
const members: TranslationStrings = {
'members.shareTrip': 'Κοινή Χρήση Ταξιδιού',
'members.inviteUser': 'Πρόσκληση Χρήστη',
'members.selectUser': 'Επιλέξτε χρήστη…',
'members.invite': 'Πρόσκληση',
'members.allHaveAccess': 'Όλοι οι χρήστες έχουν ήδη πρόσβαση.',
'members.access': 'Πρόσβαση',
'members.person': 'άτομο',
'members.persons': 'άτομα',
'members.you': 'εσείς',
'members.owner': 'Ιδιοκτήτης',
'members.leaveTrip': 'Αποχώρηση από ταξίδι',
'members.removeAccess': 'Αφαίρεση πρόσβασης',
'members.confirmLeave': 'Αποχώρηση από το ταξίδι; Θα χάσετε την πρόσβαση.',
'members.confirmRemove': 'Αφαίρεση πρόσβασης για αυτόν τον χρήστη;',
'members.loadError': 'Αποτυχία φόρτωσης μελών',
'members.added': 'προστέθηκε',
'members.addError': 'Αποτυχία προσθήκης',
'members.removed': 'Το μέλος αφαιρέθηκε',
'members.removeError': 'Αποτυχία αφαίρεσης',
};
export default members;
+85
View File
@@ -0,0 +1,85 @@
import type { TranslationStrings } from '../types';
const memories: TranslationStrings = {
'memories.title': 'Φωτογραφίες',
'memories.notConnected': 'Το {provider_name} δεν είναι συνδεδεμένο',
'memories.notConnectedHint':
'Συνδέστε την υπηρεσία {provider_name} στις Ρυθμίσεις για να μπορείτε να προσθέτετε φωτογραφίες σε αυτό το ταξίδι.',
'memories.notConnectedMultipleHint':
'Συνδέστε οποιονδήποτε από αυτούς τους παρόχους φωτογραφιών: {provider_names} στις Ρυθμίσεις για να μπορείτε να προσθέτετε φωτογραφίες σε αυτό το ταξίδι.',
'memories.noDates':
'Προσθέστε ημερομηνίες στο ταξίδι σας για να φορτωθούν φωτογραφίες.',
'memories.noPhotos': 'Δεν βρέθηκαν φωτογραφίες',
'memories.noPhotosHint':
'Δεν βρέθηκαν φωτογραφίες στο {provider_name} για το εύρος ημερομηνιών αυτού του ταξιδιού.',
'memories.photosFound': 'φωτογραφίες',
'memories.fromOthers': 'από άλλους',
'memories.sharePhotos': 'Κοινή χρήση φωτογραφιών',
'memories.sharing': 'Κοινή χρήση',
'memories.reviewTitle': 'Ελέγξτε τις φωτογραφίες σας',
'memories.reviewHint':
'Κάντε κλικ στις φωτογραφίες για να τις εξαιρέσετε από την κοινή χρήση.',
'memories.shareCount': 'Κοινή χρήση {count} φωτογραφιών',
'memories.providerUrl': 'URL Διακομιστή',
'memories.providerApiKey': 'API Key',
'memories.providerUsername': 'Όνομα χρήστη',
'memories.providerPassword': 'Κωδικός',
'memories.providerOTP': 'Κωδικός MFA (αν είναι ενεργοποιημένος)',
'memories.skipSSLVerification': 'Παράλειψη επαλήθευσης πιστοποιητικού SSL',
'memories.immichAutoUpload':
'Αντικατοπτρισμός φωτογραφιών journey στο Immich κατά τη μεταφόρτωση',
'memories.providerUrlHintSynology':
'Συμπεριλάβετε τη διαδρομή της εφαρμογής Photos στο URL, π.χ. https://nas:5001/photo',
'memories.testConnection': 'Δοκιμή σύνδεσης',
'memories.testShort': 'Δοκιμή',
'memories.testFirst': 'Δοκιμάστε πρώτα τη σύνδεση',
'memories.connected': 'Συνδεδεμένο',
'memories.disconnected': 'Μη συνδεδεμένο',
'memories.connectionSuccess': 'Συνδέθηκε στο {provider_name}',
'memories.connectionError': 'Δεν ήταν δυνατή η σύνδεση στο {provider_name}',
'memories.saved': 'Οι ρυθμίσεις {provider_name} αποθηκεύτηκαν',
'memories.providerDisconnectedBanner':
'Η σύνδεση {provider_name} χάθηκε. Επανασυνδεθείτε στις Ρυθμίσεις για να δείτε φωτογραφίες.',
'memories.saveError':
'Δεν ήταν δυνατή η αποθήκευση των ρυθμίσεων {provider_name}',
'memories.addPhotos': 'Προσθήκη φωτογραφιών',
'memories.linkAlbum': 'Σύνδεση Άλμπουμ',
'memories.selectAlbum': 'Επιλογή Άλμπουμ {provider_name}',
'memories.selectAlbumMultiple': 'Επιλογή Άλμπουμ',
'memories.noAlbums': 'Δεν βρέθηκαν άλμπουμ',
'memories.syncAlbum': 'Συγχρονισμός άλμπουμ',
'memories.unlinkAlbum': 'Αποσύνδεση άλμπουμ',
'memories.photos': 'φωτογραφίες',
'memories.selectPhotos': 'Επιλογή φωτογραφιών από {provider_name}',
'memories.selectPhotosMultiple': 'Επιλογή Φωτογραφιών',
'memories.selectHint': 'Πατήστε στις φωτογραφίες για να τις επιλέξετε.',
'memories.selected': 'επιλεγμένες',
'memories.addSelected': 'Προσθήκη {count} φωτογραφιών',
'memories.alreadyAdded': 'Προστέθηκε',
'memories.private': 'Ιδιωτικό',
'memories.stopSharing': 'Διακοπή κοινής χρήσης',
'memories.oldest': 'Παλαιότερες πρώτα',
'memories.newest': 'Νεότερες πρώτα',
'memories.allLocations': 'Όλες οι τοποθεσίες',
'memories.tripDates': 'Ημερομηνίες ταξιδιού',
'memories.allPhotos': 'Όλες οι φωτογραφίες',
'memories.confirmShareTitle': 'Κοινή χρήση με τα μέλη του ταξιδιού;',
'memories.confirmShareHint':
'{count} φωτογραφίες θα είναι ορατές σε όλα τα μέλη αυτού του ταξιδιού. Μπορείτε να κάνετε μεμονωμένες φωτογραφίες ιδιωτικές αργότερα.',
'memories.confirmShareButton': 'Κοινή χρήση φωτογραφιών',
'memories.error.loadAlbums': 'Αποτυχία φόρτωσης άλμπουμ',
'memories.error.linkAlbum': 'Αποτυχία σύνδεσης άλμπουμ',
'memories.error.unlinkAlbum': 'Αποτυχία αποσύνδεσης άλμπουμ',
'memories.error.syncAlbum': 'Αποτυχία συγχρονισμού άλμπουμ',
'memories.error.loadPhotos': 'Αποτυχία φόρτωσης φωτογραφιών',
'memories.error.addPhotos': 'Αποτυχία προσθήκης φωτογραφιών',
'memories.error.removePhoto': 'Αποτυχία αφαίρεσης φωτογραφίας',
'memories.error.toggleSharing': 'Αποτυχία ενημέρωσης κοινής χρήσης',
'memories.saveRouteNotConfigured':
'Η διαδρομή αποθήκευσης δεν έχει ρυθμιστεί για αυτόν τον πάροχο',
'memories.testRouteNotConfigured':
'Η διαδρομή δοκιμής δεν έχει ρυθμιστεί για αυτόν τον πάροχο',
'memories.fillRequiredFields':
'Παρακαλώ συμπληρώστε όλα τα απαιτούμενα πεδία',
};
export default memories;
+20
View File
@@ -0,0 +1,20 @@
import type { TranslationStrings } from '../types';
const nav: TranslationStrings = {
'nav.trip': 'Ταξίδι',
'nav.share': 'Διαμοιρασμός',
'nav.settings': 'Ρυθμίσεις',
'nav.admin': 'Διαχείριση',
'nav.logout': 'Αποσύνδεση',
'nav.lightMode': 'Light mode',
'nav.darkMode': 'Dark mode',
'nav.autoMode': 'Auto mode',
'nav.administrator': 'Διαχειριστής',
'nav.myTrips': 'Τα Ταξίδια μου',
'nav.profile': 'Προφίλ',
'nav.bottomSettings': 'Ρυθμίσεις',
'nav.bottomAdmin': 'Ρυθμίσεις Διαχειριστή',
'nav.bottomLogout': 'Αποσύνδεση',
'nav.bottomAdminBadge': 'Διαχειριστής',
};
export default nav;
+45
View File
@@ -0,0 +1,45 @@
import type { TranslationStrings } from '../types';
const notif: TranslationStrings = {
'notif.test.title': '[Δοκιμή] Ειδοποίηση',
'notif.test.simple.text': 'Αυτή είναι μια απλή δοκιμαστική ειδοποίηση.',
'notif.test.boolean.text': 'Αποδέχεστε αυτή τη δοκιμαστική ειδοποίηση;',
'notif.test.navigate.text':
'Κάντε κλικ παρακάτω για μετάβαση στον πίνακα ελέγχου.',
'notif.trip_invite.title': 'Πρόσκληση Ταξιδιού',
'notif.trip_invite.text': 'Ο/Η {actor} σας προσκάλεσε στο {trip}',
'notif.booking_change.title': 'Η Κράτηση Ενημερώθηκε',
'notif.booking_change.text': 'Ο/Η {actor} ενημέρωσε μια κράτηση στο {trip}',
'notif.trip_reminder.title': 'Υπενθύμιση Ταξιδιού',
'notif.trip_reminder.text': 'Το ταξίδι σας {trip} πλησιάζει!',
'notif.todo_due.title': 'Εργασία προς λήξη',
'notif.todo_due.text': 'Η εργασία {todo} στο {trip} λήγει στις {due}',
'notif.vacay_invite.title': 'Πρόσκληση Σύντηξης Vacay',
'notif.vacay_invite.text':
'Ο/Η {actor} σας προσκάλεσε να συγχωνεύσετε τα σχέδια διακοπών',
'notif.photos_shared.title': 'Κοινοποίηση Φωτογραφιών',
'notif.photos_shared.text':
'Ο/Η {actor} μοιράστηκε {count} φωτογραφία(ες) στο {trip}',
'notif.collab_message.title': 'Νέο Μήνυμα',
'notif.collab_message.text': 'Ο/Η {actor} έστειλε ένα μήνυμα στο {trip}',
'notif.packing_tagged.title': 'Ανάθεση Αποσκευών',
'notif.packing_tagged.text':
'Ο/Η {actor} σας ανέθεσε στο {category} του {trip}',
'notif.version_available.title': 'Νέα Έκδοση Διαθέσιμη',
'notif.version_available.text': 'Το TREK {version} είναι τώρα διαθέσιμο',
'notif.action.view_trip': 'Προβολή Ταξιδιού',
'notif.action.view_collab': 'Προβολή Μηνυμάτων',
'notif.action.view_packing': 'Προβολή Αποσκευών',
'notif.action.view_photos': 'Προβολή Φωτογραφιών',
'notif.action.view_vacay': 'Προβολή Vacay',
'notif.action.view_admin': 'Μετάβαση στη Διαχείριση',
'notif.action.view': 'Προβολή',
'notif.action.accept': 'Αποδοχή',
'notif.action.decline': 'Απόρριψη',
'notif.generic.title': 'Ειδοποίηση',
'notif.generic.text': 'Έχετε μια νέα ειδοποίηση',
'notif.dev.unknown_event.title': '[DEV] Άγνωστο Συμβάν',
'notif.dev.unknown_event.text':
'Ο τύπος συμβάντος "{event}" δεν είναι εγγεγραμμένος στο EVENT_NOTIFICATION_CONFIG',
};
export default notif;
+42
View File
@@ -0,0 +1,42 @@
import type { TranslationStrings } from '../types';
const notifications: TranslationStrings = {
'notifications.title': 'Ειδοποιήσεις',
'notifications.markAllRead': 'Σήμανση όλων ως αναγνωσμένα',
'notifications.deleteAll': 'Διαγραφή όλων',
'notifications.showAll': 'Εμφάνιση όλων των ειδοποιήσεων',
'notifications.empty': 'Καμία ειδοποίηση',
'notifications.emptyDescription': 'Είστε ενημερωμένοι!',
'notifications.all': 'Όλες',
'notifications.unreadOnly': 'Μη αναγνωσμένες',
'notifications.markRead': 'Σήμανση ως αναγνωσμένη',
'notifications.markUnread': 'Σήμανση ως μη αναγνωσμένη',
'notifications.delete': 'Διαγραφή',
'notifications.system': 'Σύστημα',
'notifications.synologySessionCleared.title':
'Το Synology Photos αποσυνδέθηκε',
'notifications.synologySessionCleared.text':
'Ο διακομιστής ή ο λογαριασμός σας άλλαξε — μεταβείτε στις Ρυθμίσεις για να δοκιμάσετε ξανά τη σύνδεσή σας.',
'notifications.versionAvailable.title': 'Διαθέσιμη Ενημέρωση',
'notifications.versionAvailable.text':
'Το TREK {version} είναι τώρα διαθέσιμο.',
'notifications.versionAvailable.button': 'Προβολή Λεπτομερειών',
'notifications.test.title': 'Δοκιμαστική ειδοποίηση από {actor}',
'notifications.test.text': 'Αυτή είναι μια απλή δοκιμαστική ειδοποίηση.',
'notifications.test.booleanTitle': 'Ο {actor} ζητά την έγκρισή σας',
'notifications.test.booleanText':
'Αυτή είναι μια δοκιμαστική ειδοποίηση boolean. Επιλέξτε μια ενέργεια παρακάτω.',
'notifications.test.accept': 'Έγκριση',
'notifications.test.decline': 'Απόρριψη',
'notifications.test.navigateTitle': 'Ρίξτε μια ματιά',
'notifications.test.navigateText':
'Αυτή είναι μια δοκιμαστική ειδοποίηση πλοήγησης.',
'notifications.test.goThere': 'Μετάβαση εκεί',
'notifications.test.adminTitle': 'Εκπομπή διαχειριστή',
'notifications.test.adminText':
'Ο {actor} έστειλε μια δοκιμαστική ειδοποίηση σε όλους τους διαχειριστές.',
'notifications.test.tripTitle': 'Ο {actor} δημοσίευσε στο ταξίδι σας',
'notifications.test.tripText':
'Δοκιμαστική ειδοποίηση για το ταξίδι «{trip}».',
};
export default notifications;
+99
View File
@@ -0,0 +1,99 @@
import type { TranslationStrings } from '../types';
const oauth: TranslationStrings = {
'oauth.scope.group.trips': 'Ταξίδια',
'oauth.scope.group.places': 'Τοποθεσίες',
'oauth.scope.group.atlas': 'Atlas',
'oauth.scope.group.packing': 'Αποσκευές',
'oauth.scope.group.todos': 'Εργασίες',
'oauth.scope.group.budget': 'Προϋπολογισμός',
'oauth.scope.group.reservations': 'Κρατήσεις',
'oauth.scope.group.collab': 'Συνεργασία',
'oauth.scope.group.notifications': 'Ειδοποιήσεις',
'oauth.scope.group.vacay': 'Διακοπές',
'oauth.scope.group.geo': 'Γεωγραφικά',
'oauth.scope.group.weather': 'Καιρός',
'oauth.scope.group.journey': 'Ταξίδι',
'oauth.scope.trips:read.label': 'Προβολή ταξιδιών & δρομολογίων',
'oauth.scope.trips:read.description':
'Ανάγνωση ταξιδιών, ημερών, σημειώσεων και μελών',
'oauth.scope.trips:write.label': 'Επεξεργασία ταξιδιών & δρομολογίων',
'oauth.scope.trips:write.description':
'Δημιουργία και ενημέρωση ταξιδιών, ημερών, σημειώσεων και διαχείριση μελών',
'oauth.scope.trips:delete.label': 'Διαγραφή ταξιδιών',
'oauth.scope.trips:delete.description':
'Οριστική διαγραφή ολόκληρων ταξιδιών — αυτή η ενέργεια είναι μη ανατρέψιμη',
'oauth.scope.trips:share.label': 'Διαχείριση συνδέσμων κοινής χρήσης',
'oauth.scope.trips:share.description':
'Δημιουργία, ενημέρωση και ανάκληση δημόσιων συνδέσμων κοινής χρήσης για ταξίδια',
'oauth.scope.places:read.label': 'Προβολή τοποθεσιών & δεδομένων χάρτη',
'oauth.scope.places:read.description':
'Ανάγνωση τοποθεσιών, αναθέσεων ημερών, ετικετών και κατηγοριών',
'oauth.scope.places:write.label': 'Διαχείριση τοποθεσιών',
'oauth.scope.places:write.description':
'Δημιουργία, ενημέρωση και διαγραφή τοποθεσιών, αναθέσεων και ετικετών',
'oauth.scope.atlas:read.label': 'Προβολή Atlas',
'oauth.scope.atlas:read.description':
'Ανάγνωση περιοχών που έχουν επισκεφθεί, χωρών και λίστας επιθυμιών',
'oauth.scope.atlas:write.label': 'Διαχείριση Atlas',
'oauth.scope.atlas:write.description':
'Σήμανση χωρών και περιοχών ως επισκεφθεισών, διαχείριση λίστας επιθυμιών',
'oauth.scope.packing:read.label': 'Προβολή λιστών αποσκευών',
'oauth.scope.packing:read.description':
'Ανάγνωση αντικειμένων αποσκευών, τσαντών και αναθέσεων κατηγοριών',
'oauth.scope.packing:write.label': 'Διαχείριση λιστών αποσκευών',
'oauth.scope.packing:write.description':
'Προσθήκη, ενημέρωση, διαγραφή, εναλλαγή και αναδιάταξη αντικειμένων και τσαντών',
'oauth.scope.todos:read.label': 'Προβολή λιστών εργασιών',
'oauth.scope.todos:read.description':
'Ανάγνωση εργασιών ταξιδιού και αναθέσεων κατηγοριών',
'oauth.scope.todos:write.label': 'Διαχείριση λιστών εργασιών',
'oauth.scope.todos:write.description':
'Δημιουργία, ενημέρωση, εναλλαγή, διαγραφή και αναδιάταξη εργασιών',
'oauth.scope.budget:read.label': 'Προβολή προϋπολογισμού',
'oauth.scope.budget:read.description':
'Ανάγνωση στοιχείων προϋπολογισμού και ανάλυσης εξόδων',
'oauth.scope.budget:write.label': 'Διαχείριση προϋπολογισμού',
'oauth.scope.budget:write.description':
'Δημιουργία, ενημέρωση και διαγραφή στοιχείων προϋπολογισμού',
'oauth.scope.reservations:read.label': 'Προβολή κρατήσεων',
'oauth.scope.reservations:read.description':
'Ανάγνωση κρατήσεων και λεπτομερειών διαμονής',
'oauth.scope.reservations:write.label': 'Διαχείριση κρατήσεων',
'oauth.scope.reservations:write.description':
'Δημιουργία, ενημέρωση, διαγραφή και αναδιάταξη κρατήσεων',
'oauth.scope.collab:read.label': 'Προβολή συνεργασίας',
'oauth.scope.collab:read.description':
'Ανάγνωση σημειώσεων, δημοσκοπήσεων και μηνυμάτων συνεργασίας',
'oauth.scope.collab:write.label': 'Διαχείριση συνεργασίας',
'oauth.scope.collab:write.description':
'Δημιουργία, ενημέρωση και διαγραφή σημειώσεων, δημοσκοπήσεων και μηνυμάτων συνεργασίας',
'oauth.scope.notifications:read.label': 'Προβολή ειδοποιήσεων',
'oauth.scope.notifications:read.description':
'Ανάγνωση ειδοποιήσεων εντός εφαρμογής και μετρητών μη αναγνωσμένων',
'oauth.scope.notifications:write.label': 'Διαχείριση ειδοποιήσεων',
'oauth.scope.notifications:write.description':
'Σήμανση ειδοποιήσεων ως αναγνωσμένων και απάντηση σε αυτές',
'oauth.scope.vacay:read.label': 'Προβολή πλάνων διακοπών',
'oauth.scope.vacay:read.description':
'Ανάγνωση δεδομένων σχεδιασμού διακοπών, καταχωρήσεων και στατιστικών',
'oauth.scope.vacay:write.label': 'Διαχείριση πλάνων διακοπών',
'oauth.scope.vacay:write.description':
'Δημιουργία και διαχείριση καταχωρήσεων διακοπών, αργιών και κοινών πλάνων',
'oauth.scope.geo:read.label': 'Χάρτες & γεωκωδικοποίηση',
'oauth.scope.geo:read.description':
'Αναζήτηση τοποθεσιών, επίλυση URL χαρτών και αντίστροφη γεωκωδικοποίηση συντεταγμένων',
'oauth.scope.weather:read.label': 'Προγνώσεις καιρού',
'oauth.scope.weather:read.description':
'Λήψη προγνώσεων καιρού για τοποθεσίες και ημερομηνίες ταξιδιών',
'oauth.scope.journey:read.label': 'Προβολή ταξιδιών',
'oauth.scope.journey:read.description':
'Ανάγνωση ταξιδιών, καταχωρήσεων και λίστας συνεισφερόντων',
'oauth.scope.journey:write.label': 'Διαχείριση ταξιδιών',
'oauth.scope.journey:write.description':
'Δημιουργία, ενημέρωση και διαγραφή ταξιδιών και των καταχωρήσεων τους',
'oauth.scope.journey:share.label': 'Διαχείριση συνδέσμων ταξιδιών',
'oauth.scope.journey:share.description':
'Δημιουργία, ενημέρωση και ανάκληση δημόσιων συνδέσμων κοινής χρήσης για ταξίδια',
};
export default oauth;
+96
View File
@@ -0,0 +1,96 @@
import type { TranslationStrings } from '../types';
const packing: TranslationStrings = {
'packing.title': 'Λίστα Αποσκευών',
'packing.empty': 'Η λίστα αποσκευών είναι κενή',
'packing.import': 'Εισαγωγή',
'packing.importTitle': 'Εισαγωγή Λίστας Αποσκευών',
'packing.importHint':
'Ένα αντικείμενο ανά γραμμή. Μορφή: Κατηγορία, Όνομα, Βάρος σε g (προαιρετικό), Τσάντα (προαιρετικό), checked/unchecked (προαιρετικό)',
'packing.importPlaceholder':
'Υγιεινή, Οδοντόβουρτσα\nΡούχα, T-Shirts, 200\nΈγγραφα, Διαβατήριο, , Χειραποσκευή\nΗλεκτρονικά, Φορτιστής, 50, Βαλίτσα, checked',
'packing.importCsv': 'Φόρτωση CSV/TXT',
'packing.importAction': 'Εισαγωγή {count}',
'packing.importSuccess': '{count} αντικείμενα εισήχθησαν',
'packing.importError': 'Η εισαγωγή απέτυχε',
'packing.importEmpty': 'Δεν υπάρχουν αντικείμενα προς εισαγωγή',
'packing.progress': '{packed} από {total} συσκευασμένα ({percent}%)',
'packing.clearChecked': 'Αφαίρεση {count} επιλεγμένων',
'packing.clearCheckedShort': 'Αφαίρεση {count}',
'packing.suggestions': 'Προτάσεις',
'packing.suggestionsTitle': 'Προσθήκη Προτάσεων',
'packing.allSuggested': 'Όλες οι προτάσεις προστέθηκαν',
'packing.allPacked': 'Όλα έτοιμα!',
'packing.addPlaceholder': 'Προσθήκη νέου αντικειμένου...',
'packing.categoryPlaceholder': 'Κατηγορία...',
'packing.filterAll': 'Όλα',
'packing.filterOpen': 'Ανοιχτά',
'packing.filterDone': 'Ολοκληρωμένα',
'packing.emptyTitle': 'Η λίστα αποσκευών είναι κενή',
'packing.emptyHint': 'Προσθέστε αντικείμενα ή χρησιμοποιήστε τις προτάσεις',
'packing.emptyFiltered': 'Κανένα αντικείμενο δεν ταιριάζει με αυτό το φίλτρο',
'packing.menuRename': 'Μετονομασία',
'packing.menuCheckAll': 'Επιλογή Όλων',
'packing.menuUncheckAll': 'Αποεπιλογή Όλων',
'packing.menuDeleteCat': 'Διαγραφή Κατηγορίας',
'packing.noMembers': 'Δεν υπάρχουν μέλη ταξιδιού',
'packing.addItem': 'Προσθήκη αντικειμένου',
'packing.addItemPlaceholder': 'Όνομα αντικειμένου...',
'packing.addCategory': 'Προσθήκη κατηγορίας',
'packing.newCategoryPlaceholder': 'Όνομα κατηγορίας (π.χ. Ρούχα)',
'packing.applyTemplate': 'Εφαρμογή προτύπου',
'packing.template': 'Πρότυπο',
'packing.templateApplied': '{count} αντικείμενα προστέθηκαν από το πρότυπο',
'packing.templateError': 'Αποτυχία εφαρμογής προτύπου',
'packing.saveAsTemplate': 'Αποθήκευση ως πρότυπο',
'packing.templateName': 'Όνομα προτύπου',
'packing.templateSaved': 'Η λίστα αποσκευών αποθηκεύτηκε ως πρότυπο',
'packing.bags': 'Τσάντες',
'packing.noBag': 'Χωρίς ανάθεση',
'packing.totalWeight': 'Συνολικό βάρος',
'packing.bagName': 'Όνομα τσάντας...',
'packing.addBag': 'Προσθήκη τσάντας',
'packing.changeCategory': 'Αλλαγή Κατηγορίας',
'packing.confirm.clearChecked':
'Είστε σίγουροι ότι θέλετε να αφαιρέσετε {count} επιλεγμένα αντικείμενα;',
'packing.confirm.deleteCat':
'Είστε σίγουροι ότι θέλετε να διαγράψετε την κατηγορία "{name}" με {count} αντικείμενα;',
'packing.defaultCategory': 'Άλλα',
'packing.toast.saveError': 'Αποτυχία αποθήκευσης',
'packing.toast.deleteError': 'Αποτυχία διαγραφής',
'packing.toast.renameError': 'Αποτυχία μετονομασίας',
'packing.toast.addError': 'Αποτυχία προσθήκης',
'packing.suggestions.items': [
{ name: 'Διαβατήριο', category: 'Έγγραφα' },
{ name: 'Ταυτότητα', category: 'Έγγραφα' },
{ name: 'Ταξιδιωτική Ασφάλιση', category: 'Έγγραφα' },
{ name: 'Αεροπορικά Εισιτήρια', category: 'Έγγραφα' },
{ name: 'Πιστωτική Κάρτα', category: 'Οικονομικά' },
{ name: 'Μετρητά', category: 'Οικονομικά' },
{ name: 'Visa', category: 'Έγγραφα' },
{ name: 'T-Shirts', category: 'Ρούχα' },
{ name: 'Παντελόνια', category: 'Ρούχα' },
{ name: 'Εσώρουχα', category: 'Ρούχα' },
{ name: 'Κάλτσες', category: 'Ρούχα' },
{ name: 'Μπουφάν', category: 'Ρούχα' },
{ name: 'Πιτζάμες', category: 'Ρούχα' },
{ name: 'Μαγιό', category: 'Ρούχα' },
{ name: 'Αδιάβροχο', category: 'Ρούχα' },
{ name: 'Άνετα Παπούτσια', category: 'Ρούχα' },
{ name: 'Οδοντόβουρτσα', category: 'Είδη Υγιεινής' },
{ name: 'Οδοντόκρεμα', category: 'Είδη Υγιεινής' },
{ name: 'Σαμπουάν', category: 'Είδη Υγιεινής' },
{ name: 'Αποσμητικό', category: 'Είδη Υγιεινής' },
{ name: 'Αντηλιακό', category: 'Είδη Υγιεινής' },
{ name: 'Ξυριστική Μηχανή', category: 'Είδη Υγιεινής' },
{ name: 'Φορτιστής', category: 'Ηλεκτρονικά' },
{ name: 'Power Bank', category: 'Ηλεκτρονικά' },
{ name: 'Ακουστικά', category: 'Ηλεκτρονικά' },
{ name: 'Ταξιδιωτικός Αντάπτορας', category: 'Ηλεκτρονικά' },
{ name: 'Κάμερα', category: 'Ηλεκτρονικά' },
{ name: 'Παυσίπονα', category: 'Υγεία' },
{ name: 'Τσιρότα', category: 'Υγεία' },
{ name: 'Απολυμαντικό', category: 'Υγεία' },
],
};
export default packing;
+10
View File
@@ -0,0 +1,10 @@
import type { TranslationStrings } from '../types';
const pdf: TranslationStrings = {
'pdf.travelPlan': 'Ταξιδιωτικό Πρόγραμμα',
'pdf.planned': 'Προγραμματισμένο',
'pdf.costLabel': 'Κόστος EUR',
'pdf.preview': 'Προεπισκόπηση PDF',
'pdf.saveAsPdf': 'Αποθήκευση ως PDF',
};
export default pdf;
+68
View File
@@ -0,0 +1,68 @@
import type { TranslationStrings } from '../types';
const perm: TranslationStrings = {
'perm.title': 'Ρυθμίσεις Δικαιωμάτων',
'perm.subtitle':
'Ελέγξτε ποιος μπορεί να εκτελεί ενέργειες σε όλη την εφαρμογή',
'perm.saved': 'Οι ρυθμίσεις δικαιωμάτων αποθηκεύτηκαν',
'perm.resetDefaults': 'Επαναφορά προεπιλογών',
'perm.customized': 'προσαρμοσμένο',
'perm.level.admin': 'Μόνο διαχειριστής',
'perm.level.tripOwner': 'Ιδιοκτήτης ταξιδιού',
'perm.level.tripMember': 'Μέλη ταξιδιού',
'perm.level.everybody': 'Όλοι',
'perm.cat.trip': 'Διαχείριση Ταξιδιού',
'perm.cat.members': 'Διαχείριση Μελών',
'perm.cat.files': 'Αρχεία',
'perm.cat.content': 'Περιεχόμενο & Πρόγραμμα',
'perm.cat.extras': 'Προϋπολογισμός, Αποσκευές & Συνεργασία',
'perm.action.trip_create': 'Δημιουργία ταξιδιών',
'perm.action.trip_edit': 'Επεξεργασία λεπτομερειών ταξιδιού',
'perm.action.trip_delete': 'Διαγραφή ταξιδιών',
'perm.action.trip_archive': 'Αρχειοθέτηση / επαναφορά ταξιδιών',
'perm.action.trip_cover_upload': 'Μεταφόρτωση εικόνας εξωφύλλου',
'perm.action.member_manage': 'Προσθήκη / αφαίρεση μελών',
'perm.action.file_upload': 'Μεταφόρτωση αρχείων',
'perm.action.file_edit': 'Επεξεργασία μεταδεδομένων αρχείου',
'perm.action.file_delete': 'Διαγραφή αρχείων',
'perm.action.place_edit': 'Προσθήκη / επεξεργασία / διαγραφή τοποθεσιών',
'perm.action.day_edit': 'Επεξεργασία ημερών, σημειώσεων & αναθέσεων',
'perm.action.reservation_edit': 'Διαχείριση κρατήσεων',
'perm.action.budget_edit': 'Διαχείριση προϋπολογισμού',
'perm.action.packing_edit': 'Διαχείριση λιστών αποσκευών',
'perm.action.collab_edit':
'Συνεργασία (σημειώσεις, δημοσκοπήσεις, συνομιλία)',
'perm.action.share_manage': 'Διαχείριση συνδέσμων κοινής χρήσης',
'perm.actionHint.trip_create': 'Ποιος μπορεί να δημιουργεί νέα ταξίδια',
'perm.actionHint.trip_edit':
'Ποιος μπορεί να αλλάζει όνομα, ημερομηνίες, περιγραφή και νόμισμα ταξιδιού',
'perm.actionHint.trip_delete':
'Ποιος μπορεί να διαγράφει οριστικά ένα ταξίδι',
'perm.actionHint.trip_archive':
'Ποιος μπορεί να αρχειοθετεί ή να επαναφέρει ένα ταξίδι',
'perm.actionHint.trip_cover_upload':
'Ποιος μπορεί να μεταφορτώνει ή να αλλάζει την εικόνα εξωφύλλου',
'perm.actionHint.member_manage':
'Ποιος μπορεί να προσκαλεί ή να αφαιρεί μέλη ταξιδιού',
'perm.actionHint.file_upload':
'Ποιος μπορεί να μεταφορτώνει αρχεία σε ένα ταξίδι',
'perm.actionHint.file_edit':
'Ποιος μπορεί να επεξεργάζεται περιγραφές και συνδέσμους αρχείων',
'perm.actionHint.file_delete':
'Ποιος μπορεί να μετακινεί αρχεία στον κάδο ή να τα διαγράφει οριστικά',
'perm.actionHint.place_edit':
'Ποιος μπορεί να προσθέτει, να επεξεργάζεται ή να διαγράφει τοποθεσίες',
'perm.actionHint.day_edit':
'Ποιος μπορεί να επεξεργάζεται ημέρες, σημειώσεις ημέρας και αναθέσεις τοποθεσιών',
'perm.actionHint.reservation_edit':
'Ποιος μπορεί να δημιουργεί, να επεξεργάζεται ή να διαγράφει κρατήσεις',
'perm.actionHint.budget_edit':
'Ποιος μπορεί να δημιουργεί, να επεξεργάζεται ή να διαγράφει στοιχεία προϋπολογισμού',
'perm.actionHint.packing_edit':
'Ποιος μπορεί να διαχειρίζεται αντικείμενα και τσάντες αποσκευών',
'perm.actionHint.collab_edit':
'Ποιος μπορεί να δημιουργεί σημειώσεις, δημοσκοπήσεις και να στέλνει μηνύματα',
'perm.actionHint.share_manage':
'Ποιος μπορεί να δημιουργεί ή να διαγράφει δημόσιους συνδέσμους κοινής χρήσης',
};
export default perm;
+25
View File
@@ -0,0 +1,25 @@
import type { TranslationStrings } from '../types';
const photos: TranslationStrings = {
'photos.title': 'Φωτογραφίες',
'photos.subtitle': '{count} φωτογραφίες για {trip}',
'photos.dropHere': 'Αποθέστε φωτογραφίες εδώ...',
'photos.dropHereActive': 'Αποθέστε φωτογραφίες εδώ',
'photos.captionForAll': 'Λεζάντα (για όλες)',
'photos.captionPlaceholder': 'Προαιρετική λεζάντα...',
'photos.addCaption': 'Προσθήκη λεζάντας...',
'photos.allDays': 'Όλες οι Ημέρες',
'photos.noPhotos': 'Δεν υπάρχουν φωτογραφίες ακόμη',
'photos.uploadHint': 'Μεταφορτώστε τις ταξιδιωτικές σας φωτογραφίες',
'photos.clickToSelect': 'ή κάντε κλικ για επιλογή',
'photos.linkPlace': 'Σύνδεση Τοποθεσίας',
'photos.noPlace': 'Καμία Τοποθεσία',
'photos.uploadN': 'Μεταφόρτωση {n} φωτογραφιών',
'photos.linkDay': 'Σύνδεση Ημέρας',
'photos.noDay': 'Καμία Ημέρα',
'photos.dayLabel': 'Ημέρα {number}',
'photos.photoSelected': 'Επιλέχθηκε φωτογραφία',
'photos.photosSelected': 'Επιλέχθηκαν φωτογραφίες',
'photos.fileTypeHint': 'JPG, PNG, WebP · μέγ. 10 MB · έως 30 φωτογραφίες',
};
export default photos;
+94
View File
@@ -0,0 +1,94 @@
import type { TranslationStrings } from '../types';
const places: TranslationStrings = {
'places.addPlace': 'Προσθήκη Μέρους/Δραστηριότητας',
'places.importFile': 'Εισαγωγή αρχείου',
'places.sidebarDrop': 'Αφήστε για εισαγωγή',
'places.importFileHint':
'Εισαγωγή αρχείων .gpx, .kml ή .kmz από εργαλεία όπως Google My Maps, Google Earth ή GPS tracker.',
'places.importFileDropHere':
'Κάντε κλικ για να επιλέξετε αρχείο ή σύρετε εδώ',
'places.importFileDropActive': 'Αφήστε το αρχείο για επιλογή',
'places.importFileUnsupported':
'Μη υποστηριζόμενος τύπος αρχείου. Χρησιμοποιήστε .gpx, .kml ή .kmz.',
'places.importFileTooLarge':
'Το αρχείο είναι πολύ μεγάλο. Το μέγιστο μέγεθος μεταφόρτωσης είναι {maxMb} MB.',
'places.importFileError': 'Η εισαγωγή απέτυχε',
'places.importAllSkipped': 'Όλα τα μέρη υπήρχαν ήδη στο ταξίδι.',
'places.gpxImported': '{count} μέρη εισήχθησαν από GPX',
'places.gpxImportTypes': 'Τι θέλετε να εισάγετε;',
'places.gpxImportWaypoints': 'Σημεία διαδρομής',
'places.gpxImportRoutes': 'Διαδρομές',
'places.gpxImportTracks': 'Ίχνη (με γεωμετρία διαδρομής)',
'places.gpxImportNoneSelected':
'Επιλέξτε τουλάχιστον έναν τύπο για εισαγωγή.',
'places.kmlImportTypes': 'Τι θέλετε να εισάγετε;',
'places.kmlImportPoints': 'Σημεία (Placemarks)',
'places.kmlImportPaths': 'Διαδρομές (LineStrings)',
'places.kmlImportNoneSelected':
'Επιλέξτε τουλάχιστον έναν τύπο για εισαγωγή.',
'places.selectionCount': '{count} επιλεγμένα',
'places.deleteSelected': 'Διαγραφή επιλεγμένων',
'places.kmlKmzImported': '{count} μέρη εισήχθησαν από KMZ/KML',
'places.urlResolved': 'Το μέρος εισήχθη από URL',
'places.importList': 'Εισαγωγή Λίστας',
'places.kmlKmzSummaryValues':
'Placemarks: {total} • Εισήχθησαν: {created} • Παραλείφθηκαν: {skipped}',
'places.importGoogleList': 'Λίστα Google',
'places.importNaverList': 'Λίστα Naver',
'places.googleListHint':
'Επικολλήστε έναν κοινοποιημένο σύνδεσμο λίστας Google Maps για να εισάγετε όλα τα μέρη.',
'places.googleListImported': '{count} μέρη εισήχθησαν από "{list}"',
'places.googleListError': 'Αποτυχία εισαγωγής λίστας Google Maps',
'places.naverListHint':
'Επικολλήστε έναν κοινοποιημένο σύνδεσμο λίστας Naver Maps για να εισάγετε όλα τα μέρη.',
'places.naverListImported': '{count} μέρη εισήχθησαν από "{list}"',
'places.naverListError': 'Αποτυχία εισαγωγής λίστας Naver Maps',
'places.viewDetails': 'Προβολή Λεπτομερειών',
'places.assignToDay': 'Σε ποια ημέρα να προστεθεί;',
'places.all': 'Όλα',
'places.unplanned': 'Μη προγραμματισμένα',
'places.filterTracks': 'Ίχνη',
'places.search': 'Αναζήτηση μερών...',
'places.allCategories': 'Όλες οι Κατηγορίες',
'places.categoriesSelected': 'κατηγορίες',
'places.clearFilter': 'Καθαρισμός φίλτρου',
'places.count': '{count} μέρη',
'places.countSingular': '1 μέρος',
'places.allPlanned': 'Όλα τα μέρη είναι προγραμματισμένα',
'places.noneFound': 'Δεν βρέθηκαν μέρη',
'places.editPlace': 'Επεξεργασία Μέρους',
'places.formName': 'Όνομα',
'places.formNamePlaceholder': 'π.χ. Πύργος του Άιφελ',
'places.formDescription': 'Περιγραφή',
'places.formDescriptionPlaceholder': 'Σύντομη περιγραφή...',
'places.formAddress': 'Διεύθυνση',
'places.formAddressPlaceholder': 'Οδός, Πόλη, Χώρα',
'places.formLat': 'Γεωγραφικό Πλάτος (π.χ. 48.8566)',
'places.formLng': 'Γεωγραφικό Μήκος (π.χ. 2.3522)',
'places.formCategory': 'Κατηγορία',
'places.noCategory': 'Χωρίς Κατηγορία',
'places.categoryNamePlaceholder': 'Όνομα κατηγορίας',
'places.formTime': 'Ώρα',
'places.startTime': 'Έναρξη',
'places.endTime': 'Λήξη',
'places.endTimeBeforeStart': 'Η ώρα λήξης είναι πριν την ώρα έναρξης',
'places.timeCollision': 'Επικάλυψη ώρας με:',
'places.formWebsite': 'Ιστοσελίδα',
'places.formNotes': 'Σημειώσεις',
'places.formNotesPlaceholder': 'Προσωπικές σημειώσεις...',
'places.formReservation': 'Κράτηση',
'places.reservationNotesPlaceholder':
'Σημειώσεις κράτησης, αριθμός επιβεβαίωσης...',
'places.mapsSearchPlaceholder': 'Αναζήτηση μερών...',
'places.mapsSearchError': 'Η αναζήτηση μέρους απέτυχε.',
'places.loadingDetails': 'Φόρτωση λεπτομερειών μέρους…',
'places.osmHint':
'Χρήση αναζήτησης OpenStreetMap (χωρίς φωτογραφίες, ώρες λειτουργίας ή αξιολογήσεις). Προσθέστε ένα κλειδί Google API στις ρυθμίσεις για πλήρεις λεπτομέρειες.',
'places.osmActive':
'Αναζήτηση μέσω OpenStreetMap (χωρίς φωτογραφίες, αξιολογήσεις ή ώρες λειτουργίας). Προσθέστε ένα κλειδί Google API στις Ρυθμίσεις για εμπλουτισμένα δεδομένα.',
'places.categoryCreateError': 'Αποτυχία δημιουργίας κατηγορίας',
'places.nameRequired': 'Παρακαλώ εισαγάγετε ένα όνομα',
'places.saveError': 'Αποτυχία αποθήκευσης',
};
export default places;
+69
View File
@@ -0,0 +1,69 @@
import type { TranslationStrings } from '../types';
const planner: TranslationStrings = {
'planner.places': 'Τοποθεσίες',
'planner.bookings': 'Κρατήσεις',
'planner.packingList': 'Λίστα Αποσκευών',
'planner.documents': 'Έγγραφα',
'planner.dayPlan': 'Πρόγραμμα Ημέρας',
'planner.reservations': 'Κρατήσεις',
'planner.minTwoPlaces':
'Απαιτούνται τουλάχιστον 2 τοποθεσίες με συντεταγμένες',
'planner.noGeoPlaces': 'Δεν υπάρχουν διαθέσιμες τοποθεσίες με συντεταγμένες',
'planner.routeCalculated': 'Η διαδρομή υπολογίστηκε',
'planner.routeCalcFailed': 'Δεν ήταν δυνατός ο υπολογισμός της διαδρομής',
'planner.routeError': 'Σφάλμα υπολογισμού διαδρομής',
'planner.icsExportFailed': 'Η εξαγωγή ICS απέτυχε',
'planner.routeOptimized': 'Η διαδρομή βελτιστοποιήθηκε',
'planner.reservationUpdated': 'Η κράτηση ενημερώθηκε',
'planner.reservationAdded': 'Η κράτηση προστέθηκε',
'planner.confirmDeleteReservation': 'Διαγραφή κράτησης;',
'planner.reservationDeleted': 'Η κράτηση διαγράφηκε',
'planner.days': 'Ημέρες',
'planner.allPlaces': 'Όλες οι Τοποθεσίες',
'planner.totalPlaces': '{n} τοποθεσίες συνολικά',
'planner.noDaysPlanned': 'Δεν έχουν προγραμματιστεί ημέρες ακόμη',
'planner.editTrip': 'Επεξεργασία ταξιδιού \u2192',
'planner.placeOne': '1 τοποθεσία',
'planner.placeN': '{n} τοποθεσίες',
'planner.addNote': 'Προσθήκη σημείωσης',
'planner.noEntries': 'Καμία καταχώρηση για αυτή την ημέρα',
'planner.addPlace': 'Προσθήκη τοποθεσίας/δραστηριότητας',
'planner.addPlaceShort': '+ Προσθήκη τοποθεσίας/δραστηριότητας',
'planner.resPending': 'Κράτηση σε εκκρεμότητα · ',
'planner.resConfirmed': 'Κράτηση επιβεβαιωμένη · ',
'planner.notePlaceholder': 'Σημείωση\u2026',
'planner.noteTimePlaceholder': 'Ώρα (προαιρετικό)',
'planner.noteExamplePlaceholder':
'π.χ. S3 στις 14:30 από τον κεντρικό σταθμό, φέρι από την προβλήτα 7, διάλειμμα μεσημεριανού\u2026',
'planner.totalCost': 'Συνολικό κόστος',
'planner.searchPlaces': 'Αναζήτηση τοποθεσιών\u2026',
'planner.allCategories': 'Όλες οι Κατηγορίες',
'planner.noPlacesFound': 'Δεν βρέθηκαν τοποθεσίες',
'planner.addFirstPlace': 'Προσθήκη πρώτης τοποθεσίας',
'planner.noReservations': 'Καμία κράτηση',
'planner.addFirstReservation': 'Προσθήκη πρώτης κράτησης',
'planner.new': 'Νέα',
'planner.addToDay': '+ Ημέρα',
'planner.calculating': 'Υπολογισμός\u2026',
'planner.route': 'Διαδρομή',
'planner.optimize': 'Βελτιστοποίηση',
'planner.openGoogleMaps': 'Άνοιγμα στο Google Maps',
'planner.selectDayHint':
'Επιλέξτε μια ημέρα από την αριστερή λίστα για να δείτε το πρόγραμμα',
'planner.noPlacesForDay': 'Δεν υπάρχουν τοποθεσίες για αυτή την ημέρα ακόμη',
'planner.addPlacesLink': 'Προσθήκη τοποθεσιών \u2192',
'planner.minTotal': 'λεπτά σύνολο',
'planner.noReservation': 'Καμία κράτηση',
'planner.removeFromDay': 'Αφαίρεση από την ημέρα',
'planner.addToThisDay': 'Προσθήκη στην ημέρα',
'planner.overview': 'Επισκόπηση',
'planner.noDays': 'Δεν υπάρχουν ημέρες ακόμη',
'planner.editTripToAddDays': 'Επεξεργαστείτε το ταξίδι για προσθήκη ημερών',
'planner.dayCount': '{n} Ημέρες',
'planner.clickToUnlock': 'Κάντε κλικ για ξεκλείδωμα',
'planner.keepPosition': 'Διατήρηση θέσης κατά τη βελτιστοποίηση διαδρομής',
'planner.dayDetails': 'Λεπτομέρειες ημέρας',
'planner.dayN': 'Ημέρα {n}',
};
export default planner;
+27
View File
@@ -0,0 +1,27 @@
import type { TranslationStrings } from '../types';
const register: TranslationStrings = {
'register.passwordMismatch': 'Οι κωδικοί δεν ταιριάζουν',
'register.passwordTooShort':
'Ο κωδικός πρέπει να έχει τουλάχιστον 8 χαρακτήρες',
'register.failed': 'Η εγγραφή απέτυχε',
'register.getStarted': 'Ξεκινήστε',
'register.subtitle':
'Δημιουργήστε έναν λογαριασμό και ξεκινήστε να σχεδιάζετε τα ταξίδια των ονείρων σας.',
'register.feature1': 'Απεριόριστα σχέδια ταξιδιών',
'register.feature2': 'Διαδραστική προβολή χάρτη',
'register.feature3': 'Διαχείριση τόπων και κατηγοριών',
'register.feature4': 'Παρακολούθηση κρατήσεων',
'register.feature5': 'Δημιουργία λιστών πακεταρίσματος',
'register.feature6': 'Αποθήκευση φωτογραφιών και αρχείων',
'register.createAccount': 'Δημιουργία Λογαριασμού',
'register.startPlanning': 'Ξεκινήστε τον σχεδιασμό του ταξιδιού σας',
'register.minChars': 'Ελάχ. 6 χαρακτήρες',
'register.confirmPassword': 'Επιβεβαίωση Κωδικού',
'register.repeatPassword': 'Επανάληψη κωδικού',
'register.registering': 'Εγγραφή...',
'register.register': 'Εγγραφή',
'register.hasAccount': 'Έχετε ήδη λογαριασμό;',
'register.signIn': 'Σύνδεση',
};
export default register;
+120
View File
@@ -0,0 +1,120 @@
import type { TranslationStrings } from '../types';
const reservations: TranslationStrings = {
'reservations.title': 'Κρατήσεις',
'reservations.empty': 'Δεν υπάρχουν κρατήσεις ακόμη',
'reservations.emptyHint':
'Προσθέστε κρατήσεις για πτήσεις, ξενοδοχεία και άλλα',
'reservations.add': 'Προσθήκη Κράτησης',
'reservations.addManual': 'Χειροκίνητη Κράτηση',
'reservations.placeHint':
'Συμβουλή: Οι κρατήσεις δημιουργούνται καλύτερα απευθείας από ένα μέρος για να συνδεθούν με το ημερήσιο πλάνο σας.',
'reservations.confirmed': 'Επιβεβαιωμένο',
'reservations.pending': 'Εκκρεμές',
'reservations.summary': '{confirmed} επιβεβαιωμένες, {pending} εκκρεμείς',
'reservations.fromPlan': 'Από το Πλάνο',
'reservations.showFiles': 'Εμφάνιση Αρχείων',
'reservations.editTitle': 'Επεξεργασία Κράτησης',
'reservations.status': 'Κατάσταση',
'reservations.datetime': 'Ημερομηνία & Ώρα',
'reservations.startTime': 'Ώρα έναρξης',
'reservations.endTime': 'Ώρα λήξης',
'reservations.date': 'Ημερομηνία',
'reservations.time': 'Ώρα',
'reservations.timeAlt': 'Ώρα (εναλλακτικά, π.χ. 19:30)',
'reservations.notes': 'Σημειώσεις',
'reservations.notesPlaceholder': 'Πρόσθετες σημειώσεις...',
'reservations.meta.airline': 'Αεροπορική Εταιρεία',
'reservations.meta.flightNumber': 'Αρ. Πτήσης',
'reservations.meta.from': 'Από',
'reservations.meta.to': 'Προς',
'reservations.needsReview': 'Έλεγχος',
'reservations.needsReviewHint':
'Δεν ήταν δυνατή η αυτόματη αντιστοίχιση του αεροδρομίου — παρακαλώ επιβεβαιώστε την τοποθεσία.',
'reservations.searchLocation': 'Αναζήτηση σταθμού, λιμανιού, διεύθυνσης…',
'reservations.meta.trainNumber': 'Αρ. Τρένου',
'reservations.meta.platform': 'Αποβάθρα',
'reservations.meta.seat': 'Θέση',
'reservations.meta.checkIn': 'Check-in',
'reservations.meta.checkInUntil': 'Check-in έως',
'reservations.meta.checkOut': 'Check-out',
'reservations.meta.linkAccommodation': 'Κατάλυμα',
'reservations.meta.pickAccommodation': 'Σύνδεση με κατάλυμα',
'reservations.meta.noAccommodation': 'Κανένα',
'reservations.meta.hotelPlace': 'Κατάλυμα',
'reservations.meta.pickHotel': 'Επιλογή καταλύματος',
'reservations.meta.fromDay': 'Από',
'reservations.meta.toDay': 'Προς',
'reservations.meta.selectDay': 'Επιλογή ημέρας',
'reservations.type.flight': 'Πτήση',
'reservations.type.hotel': 'Κατάλυμα',
'reservations.type.restaurant': 'Εστιατόριο',
'reservations.type.train': 'Τρένο',
'reservations.type.car': 'Αυτοκίνητο',
'reservations.type.cruise': 'Κρουαζιέρα',
'reservations.type.event': 'Εκδήλωση',
'reservations.type.tour': 'Περιήγηση',
'reservations.type.other': 'Άλλο',
'reservations.confirm.delete':
'Είστε σίγουροι ότι θέλετε να διαγράψετε την κράτηση "{name}";',
'reservations.confirm.deleteTitle': 'Διαγραφή κράτησης;',
'reservations.confirm.deleteBody':
'Η κράτηση "{name}" θα διαγραφεί οριστικά.',
'reservations.toast.updated': 'Η κράτηση ενημερώθηκε',
'reservations.toast.removed': 'Η κράτηση διαγράφηκε',
'reservations.toast.fileUploaded': 'Το αρχείο μεταφορτώθηκε',
'reservations.toast.uploadError': 'Η μεταφόρτωση απέτυχε',
'reservations.newTitle': 'Νέα Κράτηση',
'reservations.bookingType': 'Τύπος Κράτησης',
'reservations.titleLabel': 'Τίτλος',
'reservations.titlePlaceholder': 'π.χ. Lufthansa LH123, Hotel Adlon, ...',
'reservations.locationAddress': 'Τοποθεσία / Διεύθυνση',
'reservations.locationPlaceholder': 'Διεύθυνση, Αεροδρόμιο, Ξενοδοχείο...',
'reservations.confirmationCode': 'Κωδικός Κράτησης',
'reservations.confirmationPlaceholder': 'π.χ. ABC12345',
'reservations.day': 'Ημέρα',
'reservations.noDay': 'Καμία Ημέρα',
'reservations.place': 'Μέρος',
'reservations.noPlace': 'Κανένα Μέρος',
'reservations.pendingSave': 'θα αποθηκευτεί…',
'reservations.uploading': 'Μεταφόρτωση...',
'reservations.attachFile': 'Επισύναψη αρχείου',
'reservations.linkExisting': 'Σύνδεση υπάρχοντος αρχείου',
'reservations.toast.saveError': 'Αποτυχία αποθήκευσης',
'reservations.toast.updateError': 'Αποτυχία ενημέρωσης',
'reservations.toast.deleteError': 'Αποτυχία διαγραφής',
'reservations.confirm.remove': 'Αφαίρεση κράτησης για "{name}";',
'reservations.linkAssignment': 'Σύνδεση με ανάθεση ημέρας',
'reservations.pickAssignment': 'Επιλέξτε μια ανάθεση από το πλάνο σας...',
'reservations.noAssignment': 'Χωρίς σύνδεση (ανεξάρτητη)',
'reservations.price': 'Τιμή',
'reservations.budgetCategory': 'Κατηγορία προϋπολογισμού',
'reservations.budgetCategoryPlaceholder': 'π.χ. Μεταφορά, Κατάλυμα',
'reservations.budgetCategoryAuto': 'Αυτόματα (από τον τύπο κράτησης)',
'reservations.budgetHint':
'Μια εγγραφή προϋπολογισμού θα δημιουργηθεί αυτόματα κατά την αποθήκευση.',
'reservations.departureDate': 'Αναχώρηση',
'reservations.arrivalDate': 'Άφιξη',
'reservations.departureTime': 'Ώρα αναχ.',
'reservations.arrivalTime': 'Ώρα άφ.',
'reservations.pickupDate': 'Παραλαβή',
'reservations.returnDate': 'Επιστροφή',
'reservations.pickupTime': 'Ώρα παραλαβής',
'reservations.returnTime': 'Ώρα επιστροφής',
'reservations.endDate': 'Ημερομηνία λήξης',
'reservations.meta.departureTimezone': 'Ζώνη ώρας αναχ.',
'reservations.meta.arrivalTimezone': 'Ζώνη ώρας άφ.',
'reservations.span.departure': 'Αναχώρηση',
'reservations.span.arrival': 'Άφιξη',
'reservations.span.inTransit': 'Σε διέλευση',
'reservations.span.pickup': 'Παραλαβή',
'reservations.span.return': 'Επιστροφή',
'reservations.span.active': 'Ενεργό',
'reservations.span.start': 'Έναρξη',
'reservations.span.end': 'Λήξη',
'reservations.span.ongoing': 'Σε εξέλιξη',
'reservations.validation.endBeforeStart':
'Η ημερομηνία/ώρα λήξης πρέπει να είναι μετά την ημερομηνία/ώρα έναρξης',
'reservations.addBooking': 'Προσθήκη κράτησης',
};
export default reservations;
+306
View File
@@ -0,0 +1,306 @@
import type { TranslationStrings } from '../types';
const settings: TranslationStrings = {
'settings.title': 'Ρυθμίσεις',
'settings.subtitle': 'Διαμορφώστε τις προσωπικές σας ρυθμίσεις',
'settings.tabs.display': 'Εμφάνιση',
'settings.tabs.map': 'Χάρτης',
'settings.tabs.notifications': 'Ειδοποιήσεις',
'settings.tabs.integrations': 'Ενσωματώσεις',
'settings.tabs.account': 'Λογαριασμός',
'settings.tabs.offline': 'Εκτός σύνδεσης',
'settings.tabs.about': 'Σχετικά',
'settings.map': 'Χάρτης',
'settings.mapTemplate': 'Πρότυπο Χάρτη',
'settings.mapTemplatePlaceholder.select': 'Επιλέξτε πρότυπο...',
'settings.mapDefaultHint': 'Αφήστε κενό για OpenStreetMap (προεπιλογή)',
'settings.mapTemplatePlaceholder':
'https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png',
'settings.mapHint': 'Πρότυπο URL για πλακίδια χάρτη',
'settings.mapProvider': 'Πάροχος Χάρτη',
'settings.mapProviderHint':
'Επηρεάζει τους χάρτες του Trip Planner και του Journey. Το Atlas χρησιμοποιεί πάντα Leaflet.',
'settings.mapLeafletSubtitle': 'Κλασικό 2D, οποιαδήποτε raster πλακίδια',
'settings.mapMapboxSubtitle': 'Διανυσματικά πλακίδια, 3D κτίρια & ανάγλυφο',
'settings.mapExperimental': 'Πειραματικό',
'settings.mapMapboxToken': 'Mapbox Access Token',
'settings.mapMapboxTokenHint': 'Δημόσιο token (pk.*) από',
'settings.mapMapboxTokenLink': 'mapbox.com → Access tokens',
'settings.mapStyle': 'Στυλ Χάρτη',
'settings.mapStylePlaceholder': 'Επιλέξτε ένα στυλ Mapbox',
'settings.mapStyleHint':
'Προκαθορισμένο ή δικό σας mapbox://styles/USER/ID URL',
'settings.map3dBuildings': '3D Κτίρια & Ανάγλυφο',
'settings.map3dHint':
'Κλίση + πραγματικές 3D προεξοχές κτιρίων — λειτουργεί σε κάθε στυλ, συμπεριλαμβανομένου του δορυφορικού.',
'settings.mapHighQuality': 'Λειτουργία Υψηλής Ποιότητας',
'settings.mapHighQualityHint':
'Antialiasing + προβολή υδρογείου για ευκρινέστερες ακμές και ρεαλιστική όψη του κόσμου.',
'settings.mapHighQualityWarning':
'Μπορεί να επηρεάσει την απόδοση σε συσκευές χαμηλότερων προδιαγραφών.',
'settings.mapTipLabel': 'Συμβουλή:',
'settings.mapTip':
'κάντε δεξί κλικ και σύρετε για περιστροφή/κλίση του χάρτη. Μεσαίο κλικ για προσθήκη τοποθεσίας (το δεξί κλικ έχει κρατηθεί για περιστροφή).',
'settings.latitude': 'Γεωγραφικό Πλάτος',
'settings.longitude': 'Γεωγραφικό Μήκος',
'settings.saveMap': 'Αποθήκευση Χάρτη',
'settings.apiKeys': 'Κλειδιά API',
'settings.mapsKey': 'Google Maps API Key',
'settings.mapsKeyHint':
'Για αναζήτηση τοποθεσιών. Απαιτείται Places API (New). Λάβετε το από console.cloud.google.com',
'settings.weatherKey': 'OpenWeatherMap API Key',
'settings.weatherKeyHint':
'Για δεδομένα καιρού. Δωρεάν στο openweathermap.org/api',
'settings.keyPlaceholder': 'Εισάγετε κλειδί...',
'settings.configured': 'Διαμορφωμένο',
'settings.saveKeys': 'Αποθήκευση Κλειδιών',
'settings.display': 'Εμφάνιση',
'settings.colorMode': 'Λειτουργία Χρώματος',
'settings.light': 'Φωτεινό',
'settings.dark': 'Σκούρο',
'settings.auto': 'Αυτόματο',
'settings.language': 'Γλώσσα',
'settings.temperature': 'Μονάδα Θερμοκρασίας',
'settings.timeFormat': 'Μορφή Ώρας',
'settings.routeCalculation': 'Υπολογισμός Διαδρομής',
'settings.bookingLabels': 'Ετικέτες διαδρομής κρατήσεων',
'settings.bookingLabelsHint':
'Εμφάνιση ονομάτων σταθμών / αεροδρομίων στον χάρτη. Όταν είναι απενεργοποιημένο, εμφανίζεται μόνο το εικονίδιο.',
'settings.blurBookingCodes': 'Θόλωμα Κωδικών Κρατήσεων',
'settings.notifications': 'Ειδοποιήσεις',
'settings.notifyTripInvite': 'Προσκλήσεις ταξιδιού',
'settings.notifyBookingChange': 'Αλλαγές κρατήσεων',
'settings.notifyTripReminder': 'Υπενθυμίσεις ταξιδιού',
'settings.notifyTodoDue': 'Εκκρεμότητα λήγει σύντομα',
'settings.notifyVacayInvite': 'Προσκλήσεις Vacay fusion',
'settings.notifyPhotosShared': 'Κοινόχρηστες φωτογραφίες (Immich)',
'settings.notifyCollabMessage': 'Μηνύματα συνομιλίας (Collab)',
'settings.notifyPackingTagged': 'Λίστα πακεταρίσματος: αναθέσεις',
'settings.notifyWebhook': 'Ειδοποιήσεις Webhook',
'settings.notifyVersionAvailable': 'Διαθέσιμη νέα έκδοση',
'settings.notificationPreferences.email': 'Email',
'settings.notificationPreferences.webhook': 'Webhook',
'settings.notificationPreferences.inapp': 'Εντός εφαρμογής',
'settings.notificationPreferences.ntfy': 'Ntfy',
'settings.notificationPreferences.noChannels':
'Δεν έχουν διαμορφωθεί κανάλια ειδοποιήσεων. Ζητήστε από έναν διαχειριστή να ρυθμίσει ειδοποιήσεις email ή webhook.',
'settings.webhookUrl.label': 'Webhook URL',
'settings.webhookUrl.placeholder': 'https://discord.com/api/webhooks/...',
'settings.webhookUrl.hint':
'Εισάγετε το Discord, Slack ή προσαρμοσμένο webhook URL σας για να λαμβάνετε ειδοποιήσεις.',
'settings.webhookUrl.saved': 'Το Webhook URL αποθηκεύτηκε',
'settings.webhookUrl.test': 'Δοκιμή',
'settings.webhookUrl.testSuccess': 'Η δοκιμή webhook στάλθηκε επιτυχώς',
'settings.webhookUrl.testFailed': 'Η δοκιμή webhook απέτυχε',
'settings.ntfyUrl.topicLabel': 'Θέμα Ntfy',
'settings.ntfyUrl.topicPlaceholder': 'my-trek-alerts',
'settings.ntfyUrl.serverLabel': 'URL Ntfy Server (προαιρετικό)',
'settings.ntfyUrl.serverPlaceholder': 'https://ntfy.sh',
'settings.ntfyUrl.hint':
'Εισάγετε το ntfy topic σας για να λαμβάνετε push ειδοποιήσεις. Αφήστε τον server κενό για χρήση του προεπιλεγμένου από τον διαχειριστή.',
'settings.ntfyUrl.tokenLabel': 'Access Token (προαιρετικό)',
'settings.ntfyUrl.tokenHint':
'Απαιτείται για θέματα προστατευμένα με κωδικό.',
'settings.ntfyUrl.saved': 'Οι ρυθμίσεις Ntfy αποθηκεύτηκαν',
'settings.ntfyUrl.test': 'Δοκιμή',
'settings.ntfyUrl.testSuccess':
'Η δοκιμαστική ειδοποίηση ntfy στάλθηκε επιτυχώς',
'settings.ntfyUrl.testFailed': 'Η δοκιμαστική ειδοποίηση ntfy απέτυχε',
'settings.ntfyUrl.tokenCleared': 'Το access token εκκαθαρίστηκε',
'settings.notificationsDisabled':
'Οι ειδοποιήσεις δεν έχουν διαμορφωθεί. Ζητήστε από έναν διαχειριστή να ενεργοποιήσει ειδοποιήσεις email ή webhook.',
'settings.notificationsActive': 'Ενεργό κανάλι',
'settings.notificationsManagedByAdmin':
'Τα συμβάντα ειδοποιήσεων διαμορφώνονται από τον διαχειριστή σας.',
'settings.on': 'Ενεργό',
'settings.off': 'Ανενεργό',
'settings.mcp.title': 'Διαμόρφωση MCP',
'settings.mcp.endpoint': 'MCP Endpoint',
'settings.mcp.clientConfig': 'Διαμόρφωση Πελάτη',
'settings.mcp.clientConfigHint':
'Αντικαταστήστε το <your_token> με ένα API token από την παρακάτω λίστα. Η διαδρομή για το npx ίσως χρειαστεί να προσαρμοστεί για το σύστημά σας (π.χ. C:\\PROGRA~1\\nodejs\\npx.cmd στα Windows).',
'settings.mcp.clientConfigHintOAuth':
'Αντικαταστήστε τα <your_client_id> και <your_client_secret> με τα διαπιστευτήρια που εμφανίζονται στον πελάτη OAuth 2.1 που δημιουργήσατε παραπάνω. Το mcp-remote θα ανοίξει τον browser σας για να ολοκληρώσετε την εξουσιοδότηση την πρώτη φορά που θα συνδεθείτε. Η διαδρομή για το npx ίσως χρειαστεί να προσαρμοστεί για το σύστημά σας (π.χ. C:\\PROGRA~1\\nodejs\\npx.cmd στα Windows).',
'settings.mcp.copy': 'Αντιγραφή',
'settings.mcp.copied': 'Αντιγράφηκε!',
'settings.mcp.apiTokens': 'API Tokens',
'settings.mcp.createToken': 'Δημιουργία νέου Token',
'settings.mcp.noTokens':
'Δεν υπάρχουν tokens ακόμη. Δημιουργήστε ένα για να συνδέσετε πελάτες MCP.',
'settings.mcp.tokenCreatedAt': 'Δημιουργήθηκε',
'settings.mcp.tokenUsedAt': 'Χρησιμοποιήθηκε',
'settings.mcp.deleteTokenTitle': 'Διαγραφή Token',
'settings.mcp.deleteTokenMessage':
'Αυτό το token θα σταματήσει να λειτουργεί αμέσως. Οποιοσδήποτε πελάτης MCP το χρησιμοποιεί θα χάσει την πρόσβαση.',
'settings.mcp.modal.createTitle': 'Δημιουργία API Token',
'settings.mcp.modal.tokenName': 'Όνομα Token',
'settings.mcp.modal.tokenNamePlaceholder':
'π.χ. Claude Desktop, Φορητός εργασίας',
'settings.mcp.modal.creating': 'Δημιουργία…',
'settings.mcp.modal.create': 'Δημιουργία Token',
'settings.mcp.modal.createdTitle': 'Το Token δημιουργήθηκε',
'settings.mcp.modal.createdWarning':
'Αυτό το token θα εμφανιστεί μόνο μία φορά. Αντιγράψτε και αποθηκεύστε το τώρα — δεν μπορεί να ανακτηθεί.',
'settings.mcp.modal.done': 'Ολοκληρώθηκε',
'settings.mcp.toast.created': 'Το token δημιουργήθηκε',
'settings.mcp.toast.createError': 'Αποτυχία δημιουργίας token',
'settings.mcp.toast.deleted': 'Το token διαγράφηκε',
'settings.mcp.toast.deleteError': 'Αποτυχία διαγραφής token',
'settings.mcp.apiTokensDeprecated':
'Τα API Tokens έχουν καταργηθεί και θα αφαιρεθούν σε μελλοντική έκδοση. Παρακαλώ χρησιμοποιήστε OAuth 2.1 Clients αντί αυτών.',
'settings.oauth.clients': 'OAuth 2.1 Clients',
'settings.oauth.clientsHint':
'Καταχωρήστε πελάτες OAuth 2.1 για να επιτρέψετε σε εφαρμογές MCP τρίτων (Claude Web, Cursor, κ.λπ.) να συνδέονται χωρίς στατικά tokens.',
'settings.oauth.createClient': 'Νέος Πελάτης',
'settings.oauth.noClients': 'Δεν έχουν καταχωρηθεί πελάτες OAuth.',
'settings.oauth.clientId': 'Client ID',
'settings.oauth.clientSecret': 'Client Secret',
'settings.oauth.deleteClient': 'Διαγραφή Πελάτη',
'settings.oauth.deleteClientMessage':
'Αυτός ο πελάτης και όλες οι ενεργές συνεδρίες θα αφαιρεθούν μόνιμα. Οποιαδήποτε εφαρμογή τον χρησιμοποιεί θα χάσει την πρόσβαση αμέσως.',
'settings.oauth.rotateSecret': 'Εναλλαγή Secret',
'settings.oauth.rotateSecretMessage':
'Θα δημιουργηθεί ένα νέο client secret και όλες οι υπάρχουσες συνεδρίες θα ακυρωθούν αμέσως. Ενημερώστε την εφαρμογή σας πριν κλείσετε αυτό το παράθυρο.',
'settings.oauth.rotateSecretConfirm': 'Εναλλαγή',
'settings.oauth.rotateSecretConfirming': 'Εναλλαγή…',
'settings.oauth.rotateSecretDoneTitle': 'Δημιουργήθηκε νέο Secret',
'settings.oauth.rotateSecretDoneWarning':
'Αυτό το secret εμφανίζεται μόνο μία φορά. Αντιγράψτε το τώρα και ενημερώστε την εφαρμογή σας — όλες οι προηγούμενες συνεδρίες έχουν ακυρωθεί.',
'settings.oauth.activeSessions': 'Ενεργές Συνεδρίες OAuth',
'settings.oauth.sessionScopes': 'Scopes',
'settings.oauth.sessionExpires': 'Λήγει',
'settings.oauth.revoke': 'Ανάκληση',
'settings.oauth.revokeSession': 'Ανάκληση Συνεδρίας',
'settings.oauth.revokeSessionMessage':
'Αυτό θα ανακαλέσει αμέσως την πρόσβαση για αυτή τη συνεδρία OAuth.',
'settings.oauth.modal.createTitle': 'Καταχώρηση Πελάτη OAuth',
'settings.oauth.modal.presets': 'Γρήγορες προεπιλογές',
'settings.oauth.modal.clientName': 'Όνομα Εφαρμογής',
'settings.oauth.modal.clientNamePlaceholder':
'π.χ. Claude Web, Η εφαρμογή μου MCP',
'settings.oauth.modal.redirectUris': 'Redirect URIs',
'settings.oauth.modal.redirectUrisPlaceholder':
'https://your-app.com/callback\nhttps://your-app.com/auth',
'settings.oauth.modal.redirectUrisHint':
'Ένα URI ανά γραμμή. Απαιτείται HTTPS (το localhost εξαιρείται). Επιβάλλεται ακριβής αντιστοίχιση.',
'settings.oauth.modal.scopes': 'Επιτρεπόμενα Scopes',
'settings.oauth.modal.scopesHint':
'Τα list_trips και get_trip_summary είναι πάντα διαθέσιμα — δεν απαιτείται scope. Επιτρέπουν στο AI να εντοπίζει τα trip IDs που χρειάζονται για τη χρήση οποιουδήποτε άλλου εργαλείου.',
'settings.oauth.modal.selectAll': 'Επιλογή όλων',
'settings.oauth.modal.deselectAll': 'Απο-επιλογή όλων',
'settings.oauth.modal.creating': 'Καταχώρηση…',
'settings.oauth.modal.create': 'Καταχώρηση Πελάτη',
'settings.oauth.modal.createdTitle': 'Ο Πελάτης Καταχωρήθηκε',
'settings.oauth.modal.createdWarning':
'Το client secret εμφανίζεται μόνο μία φορά. Αντιγράψτε το τώρα — δεν μπορεί να ανακτηθεί.',
'settings.oauth.toast.createError': 'Αποτυχία καταχώρησης πελάτη OAuth',
'settings.oauth.toast.deleted': 'Ο πελάτης OAuth διαγράφηκε',
'settings.oauth.toast.deleteError': 'Αποτυχία διαγραφής πελάτη OAuth',
'settings.oauth.toast.revoked': 'Η συνεδρία ανακλήθηκε',
'settings.oauth.toast.revokeError': 'Αποτυχία ανάκλησης συνεδρίας',
'settings.oauth.toast.rotateError': 'Αποτυχία εναλλαγής client secret',
'settings.oauth.modal.machineClient':
'Πελάτης μηχανής (χωρίς σύνδεση μέσω browser)',
'settings.oauth.modal.machineClientHint':
'Χρησιμοποιήστε grant client_credentials — δεν χρειάζονται redirect URIs. Το token εκδίδεται απευθείας μέσω client_id + client_secret και ενεργεί ως εσείς εντός των επιλεγμένων scopes.',
'settings.oauth.modal.machineClientUsage':
'Λήψη token: POST /oauth/token με grant_type=client_credentials, client_id, και client_secret. Χωρίς browser, χωρίς refresh token.',
'settings.oauth.badge.machine': 'μηχανή',
'settings.account': 'Λογαριασμός',
'settings.about': 'Σχετικά',
'settings.about.reportBug': 'Αναφορά Σφάλματος',
'settings.about.reportBugHint': 'Βρήκατε πρόβλημα; Ενημερώστε μας',
'settings.about.featureRequest': 'Αίτημα Λειτουργίας',
'settings.about.featureRequestHint': 'Προτείνετε ένα νέο χαρακτηριστικό',
'settings.about.wikiHint': 'Τεκμηρίωση & οδηγοί',
'settings.about.supporters.badge': 'Μηνιαίοι Υποστηρικτές',
'settings.about.supporters.title': 'Συνταξιδιώτες για το TREK',
'settings.about.supporters.subtitle':
'Καθώς εσείς σχεδιάζετε την επόμενή σας διαδρομή, αυτοί οι άνθρωποι βοηθούν να σχεδιαστεί το μέλλον του TREK. Η μηνιαία τους συνεισφορά πηγαίνει απευθείας στην ανάπτυξη και σε πραγματικές ώρες εργασίας — ώστε το TREK να παραμένει Open Source.',
'settings.about.supporters.since': 'υποστηρικτής από {date}',
'settings.about.supporters.tierEmpty': 'Γίνετε ο πρώτος',
'settings.about.supporter.tier.noReturnTicket': 'Χωρίς Εισιτήριο Επιστροφής',
'settings.about.supporter.tier.lostLuggageVip': 'VIP Χαμένων Αποσκευών',
'settings.about.supporter.tier.businessClassDreamer':
'Ονειροπόλος Business Class',
'settings.about.supporter.tier.budgetTraveller': 'Οικονομικός Ταξιδιώτης',
'settings.about.supporter.tier.hostelBunkmate': 'Συγκάτοικος Hostel',
'settings.about.description':
'Το TREK είναι ένας self-hosted ταξιδιωτικός σχεδιαστής που σας βοηθά να οργανώσετε τα ταξίδια σας από την πρώτη ιδέα μέχρι την τελευταία ανάμνηση. Σχεδιασμός ημερών, προϋπολογισμός, λίστες πακεταρίσματος, φωτογραφίες και πολλά άλλα — όλα σε ένα μέρος, στον δικό σας server.',
'settings.about.madeWith': 'Φτιαγμένο με',
'settings.about.madeBy':
'από τον Maurice και μια αναπτυσσόμενη κοινότητα open-source.',
'settings.username': 'Όνομα χρήστη',
'settings.email': 'Email',
'settings.role': 'Ρόλος',
'settings.roleAdmin': 'Διαχειριστής',
'settings.oidcLinked': 'Συνδεδεμένο με',
'settings.changePassword': 'Αλλαγή Κωδικού',
'settings.currentPassword': 'Τρέχων κωδικός',
'settings.currentPasswordRequired': 'Ο τρέχων κωδικός είναι υποχρεωτικός',
'settings.newPassword': 'Νέος κωδικός',
'settings.confirmPassword': 'Επιβεβαίωση νέου κωδικού',
'settings.updatePassword': 'Ενημέρωση κωδικού',
'settings.passwordRequired':
'Παρακαλώ εισάγετε τον τρέχοντα και τον νέο κωδικό',
'settings.passwordTooShort':
'Ο κωδικός πρέπει να έχει τουλάχιστον 8 χαρακτήρες',
'settings.passwordMismatch': 'Οι κωδικοί δεν ταιριάζουν',
'settings.passwordWeak':
'Ο κωδικός πρέπει να περιέχει κεφαλαία, πεζά, έναν αριθμό και έναν ειδικό χαρακτήρα',
'settings.passwordChanged': 'Ο κωδικός άλλαξε επιτυχώς',
'settings.mustChangePassword':
'Πρέπει να αλλάξετε τον κωδικό σας πριν συνεχίσετε. Παρακαλώ ορίστε έναν νέο κωδικό παρακάτω.',
'settings.deleteAccount': 'Διαγραφή λογαριασμού',
'settings.deleteAccountTitle': 'Διαγραφή του λογαριασμού σας;',
'settings.deleteAccountWarning':
'Ο λογαριασμός σας και όλα τα ταξίδια, οι τόποι και τα αρχεία σας θα διαγραφούν μόνιμα. Αυτή η ενέργεια δεν μπορεί να αναιρεθεί.',
'settings.deleteAccountConfirm': 'Μόνιμη διαγραφή',
'settings.deleteBlockedTitle': 'Η διαγραφή δεν είναι δυνατή',
'settings.deleteBlockedMessage':
'Είστε ο μόνος διαχειριστής. Προαγάγετε έναν άλλον χρήστη σε διαχειριστή πριν διαγράψετε τον λογαριασμό σας.',
'settings.roleUser': 'Χρήστης',
'settings.saveProfile': 'Αποθήκευση Προφίλ',
'settings.toast.mapSaved': 'Οι ρυθμίσεις χάρτη αποθηκεύτηκαν',
'settings.toast.keysSaved': 'Τα κλειδιά API αποθηκεύτηκαν',
'settings.toast.displaySaved': 'Οι ρυθμίσεις εμφάνισης αποθηκεύτηκαν',
'settings.toast.profileSaved': 'Το προφίλ αποθηκεύτηκε',
'settings.uploadAvatar': 'Μεταφόρτωση Εικόνας Προφίλ',
'settings.removeAvatar': 'Αφαίρεση Εικόνας Προφίλ',
'settings.avatarUploaded': 'Η εικόνα προφίλ ενημερώθηκε',
'settings.avatarRemoved': 'Η εικόνα προφίλ αφαιρέθηκε',
'settings.avatarError': 'Η μεταφόρτωση απέτυχε',
'settings.mfa.title': 'Έλεγχος ταυτότητας δύο παραγόντων (2FA)',
'settings.mfa.description':
'Προσθέτει ένα δεύτερο βήμα όταν συνδέεστε με email και κωδικό. Χρησιμοποιήστε μια εφαρμογή authenticator (Google Authenticator, Authy, κ.λπ.).',
'settings.mfa.requiredByPolicy':
'Ο διαχειριστής σας απαιτεί έλεγχο ταυτότητας δύο παραγόντων. Ρυθμίστε μια εφαρμογή authenticator παρακάτω πριν συνεχίσετε.',
'settings.mfa.backupTitle': 'Εφεδρικοί κωδικοί',
'settings.mfa.backupDescription':
'Χρησιμοποιήστε αυτούς τους εφεδρικούς κωδικούς μίας χρήσης αν χάσετε την πρόσβαση στην εφαρμογή authenticator.',
'settings.mfa.backupWarning':
'Αποθηκεύστε αυτούς τους κωδικούς τώρα. Κάθε κωδικός μπορεί να χρησιμοποιηθεί μόνο μία φορά.',
'settings.mfa.backupCopy': 'Αντιγραφή κωδικών',
'settings.mfa.backupDownload': 'Λήψη TXT',
'settings.mfa.backupPrint': 'Εκτύπωση / PDF',
'settings.mfa.backupCopied': 'Οι εφεδρικοί κωδικοί αντιγράφηκαν',
'settings.mfa.enabled': 'Το 2FA είναι ενεργοποιημένο στον λογαριασμό σας.',
'settings.mfa.disabled': 'Το 2FA δεν είναι ενεργοποιημένο.',
'settings.mfa.setup': 'Ρύθμιση authenticator',
'settings.mfa.scanQr':
'Σαρώστε αυτόν τον κωδικό QR με την εφαρμογή σας ή εισάγετε το secret χειροκίνητα.',
'settings.mfa.secretLabel': 'Κλειδί secret (χειροκίνητη εισαγωγή)',
'settings.mfa.codePlaceholder': 'Κωδικός 6 ψηφίων',
'settings.mfa.enable': 'Ενεργοποίηση 2FA',
'settings.mfa.cancelSetup': 'Ακύρωση',
'settings.mfa.disableTitle': 'Απενεργοποίηση 2FA',
'settings.mfa.disableHint':
'Εισάγετε τον κωδικό του λογαριασμού σας και έναν τρέχοντα κωδικό από τον authenticator σας.',
'settings.mfa.disable': 'Απενεργοποίηση 2FA',
'settings.mfa.toastEnabled':
'Ο έλεγχος ταυτότητας δύο παραγόντων ενεργοποιήθηκε',
'settings.mfa.toastDisabled':
'Ο έλεγχος ταυτότητας δύο παραγόντων απενεργοποιήθηκε',
'settings.mfa.demoBlocked': 'Δεν είναι διαθέσιμο σε λειτουργία demo',
};
export default settings;
+16
View File
@@ -0,0 +1,16 @@
import type { TranslationStrings } from '../types';
const share: TranslationStrings = {
'share.linkTitle': 'Δημόσιος Σύνδεσμος',
'share.linkHint':
'Δημιουργήστε έναν σύνδεσμο που μπορεί να χρησιμοποιήσει οποιοσδήποτε για να δει αυτό το ταξίδι χωρίς σύνδεση. Μόνο για ανάγνωση — χωρίς δυνατότητα επεξεργασίας.',
'share.createLink': 'Δημιουργία συνδέσμου',
'share.deleteLink': 'Διαγραφή συνδέσμου',
'share.createError': 'Αδυναμία δημιουργίας συνδέσμου',
'share.permMap': 'Χάρτης & Σχέδιο',
'share.permBookings': 'Κρατήσεις',
'share.permPacking': 'Πακετάρισμα',
'share.permBudget': 'Προϋπολογισμός',
'share.permCollab': 'Συνομιλία',
};
export default share;
+22
View File
@@ -0,0 +1,22 @@
import type { TranslationStrings } from '../types';
const shared: TranslationStrings = {
'shared.expired': 'Ο σύνδεσμος έληξε ή δεν είναι έγκυρος',
'shared.expiredHint':
'Αυτός ο κοινόχρηστος σύνδεσμος ταξιδιού δεν είναι πλέον ενεργός.',
'shared.readOnly': 'Κοινόχρηστη προβολή μόνο για ανάγνωση',
'shared.tabPlan': 'Σχέδιο',
'shared.tabBookings': 'Κρατήσεις',
'shared.tabPacking': 'Πακετάρισμα',
'shared.tabBudget': 'Προϋπολογισμός',
'shared.tabChat': 'Συνομιλία',
'shared.days': 'ημέρες',
'shared.places': 'τόποι',
'shared.other': 'Άλλα',
'shared.totalBudget': 'Συνολικός Προϋπολογισμός',
'shared.messages': 'μηνύματα',
'shared.sharedVia': 'Κοινοποιήθηκε μέσω',
'shared.confirmed': 'Επιβεβαιωμένο',
'shared.pending': 'Σε εκκρεμότητα',
};
export default shared;
+13
View File
@@ -0,0 +1,13 @@
import type { TranslationStrings } from '../types';
const stats: TranslationStrings = {
'stats.countries': 'Χώρες',
'stats.cities': 'Πόλεις',
'stats.trips': 'Ταξίδια',
'stats.places': 'Τοποθεσίες',
'stats.worldProgress': 'Παγκόσμια Πρόοδος',
'stats.visited': 'επισκέφθηκα',
'stats.remaining': 'απομένουν',
'stats.visitedCountries': 'Χώρες που Επισκέφτηκα',
};
export default stats;
+66
View File
@@ -0,0 +1,66 @@
import type { TranslationStrings } from '../types';
const system_notice: TranslationStrings = {
'system_notice.v3_photos.title': 'Οι Φωτογραφίες μετακινήθηκαν στην 3.0',
'system_notice.v3_photos.body':
'Οι **Φωτογραφίες** στον Σχεδιαστή Ταξιδιού έχουν αφαιρεθεί. Οι φωτογραφίες σας είναι ασφαλείς — το TREK δεν τροποποίησε ποτέ τη βιβλιοθήκη σας Immich ή Synology.\n\nΟι φωτογραφίες τώρα βρίσκονται στο πρόσθετο **Journey**. Το Journey είναι προαιρετικό — αν δεν είναι ακόμα διαθέσιμο, ζητήστε από τον διαχειριστή σας να το ενεργοποιήσει από το Διαχειριστής → Πρόσθετα.',
'system_notice.v3_journey.title': 'Γνωρίστε το Journey — ημερολόγιο ταξιδιών',
'system_notice.v3_journey.body':
'Καταγράψτε τα ταξίδια σας ως πλούσιες ταξιδιωτικές ιστορίες με χρονολόγια, συλλογές φωτογραφιών και διαδραστικούς χάρτες.',
'system_notice.v3_journey.cta_label': 'Άνοιγμα Journey',
'system_notice.v3_journey.highlight_timeline':
'Χρονολόγιο ανά ημέρα & συλλογή',
'system_notice.v3_journey.highlight_photos': 'Εισαγωγή από Immich ή Synology',
'system_notice.v3_journey.highlight_share':
'Δημόσια κοινοποίηση — δεν χρειάζεται σύνδεση',
'system_notice.v3_journey.highlight_export':
'Εξαγωγή ως βιβλίο φωτογραφιών PDF',
'system_notice.v3_features.title': 'Περισσότερα αξιοσημείωτα στην 3.0',
'system_notice.v3_features.body':
'Μερικά ακόμα πράγματα που αξίζει να γνωρίζετε για αυτή την έκδοση.',
'system_notice.v3_features.highlight_dashboard':
'Σχεδιασμός πίνακα ελέγχου πρώτα για κινητά',
'system_notice.v3_features.highlight_offline':
'Πλήρης λειτουργία εκτός σύνδεσης ως PWA',
'system_notice.v3_features.highlight_search':
'Αυτόματη συμπλήρωση αναζήτησης τοποθεσιών σε πραγματικό χρόνο',
'system_notice.v3_features.highlight_import':
'Εισαγωγή τοποθεσιών από αρχεία KMZ/KML',
'system_notice.v3_mcp.title': 'MCP: Αναβάθμιση OAuth 2.1',
'system_notice.v3_mcp.body':
'Η ενσωμάτωση MCP ανασχεδιάστηκε πλήρως. Το OAuth 2.1 είναι τώρα η συνιστώμενη μέθοδος αυθεντικοποίησης. Τα παλιά στατικά tokens (trek_…) είναι παρωχημένα και θα αφαιρεθούν σε μελλοντική έκδοση.',
'system_notice.v3_mcp.highlight_oauth': 'Συνιστάται OAuth 2.1 (mcp-remote)',
'system_notice.v3_mcp.highlight_scopes': '24 λεπτομερή εύρη δικαιωμάτων',
'system_notice.v3_mcp.highlight_deprecated':
'Στατικά tokens trek_ παρωχημένα',
'system_notice.v3_mcp.highlight_tools':
'Επεκτεταμένο σύνολο εργαλείων & προτροπών',
'system_notice.v3_thankyou.title': 'Μια προσωπική σημείωση από εμένα',
'system_notice.v3_thankyou.body':
'Πριν φύγετε — θέλω να αφιερώσω μια στιγμή.\n\nΤο TREK ξεκίνησε ως ένα δευτερεύον έργο που έφτιαξα για τα δικά μου ταξίδια. Ποτέ δεν φαντάστηκα ότι θα γινόταν κάτι που 4.000 από εσάς εμπιστεύεστε τώρα για να σχεδιάσετε τις περιπέτειές σας. Κάθε αστέρι, κάθε αναφορά, κάθε αίτημα χαρακτηριστικού — τα διαβάζω όλα, και με κρατούν να συνεχίζω τις ξενύχτιες ανάμεσα σε δουλειά πλήρους απασχόλησης και πανεπιστήμιο.\n\nΘέλω να ξέρετε: το TREK θα είναι πάντα ανοιχτού κώδικα, πάντα self-hosted, πάντα δικό σας. Χωρίς παρακολούθηση, χωρίς συνδρομές, χωρίς δεσμεύσεις. Απλώς ένα εργαλείο φτιαγμένο από κάποιον που λατρεύει τα ταξίδια όσο κι εσείς.\n\nΙδιαίτερες ευχαριστίες στον [jubnl](https://github.com/jubnl) — έγινες ένας απίστευτος συνεργάτης. Πολλά από αυτά που κάνουν την 3.0 σπουδαία φέρουν τα δαχτυλικά σου αποτυπώματα. Σε ευχαριστώ που πίστεψες σε αυτό το έργο όταν ήταν ακόμα ατελές.\n\nΚαι σε κάθε έναν από εσάς που αναφέρατε ένα σφάλμα, μεταφράσατε ένα κείμενο, μοιραστήκατε το TREK με έναν φίλο, ή απλώς το χρησιμοποιήσατε για να σχεδιάσετε ένα ταξίδι — **σας ευχαριστώ**. Είστε ο λόγος που υπάρχει αυτό.\n\nΕις πολλές ακόμα περιπέτειες μαζί.\n\n— Maurice\n\n---\n\n[Γίνετε μέλος της κοινότητας στο Discord](https://discord.gg/7Q6M6jDwzf)\n\nΑν το TREK κάνει τα ταξίδια σας καλύτερα, ένας [μικρός καφές](https://ko-fi.com/mauriceboe) πάντα κρατά τα φώτα αναμμένα.',
'system_notice.v3014_whitespace_collision.title':
'Απαιτείται ενέργεια: σύγκρουση λογαριασμού χρήστη',
'system_notice.v3014_whitespace_collision.body':
'Η αναβάθμιση 3.0.14 εντόπισε μία ή περισσότερες συγκρούσεις ονομάτων χρήστη ή email που προκλήθηκαν από κενά στην αρχή/τέλος αποθηκευμένων λογαριασμών. Οι επηρεαζόμενοι λογαριασμοί μετονομάστηκαν αυτόματα. Ελέγξτε τα logs του server για γραμμές που ξεκινούν με **[migration] WHITESPACE COLLISION** για να εντοπίσετε ποιοι λογαριασμοί χρειάζονται έλεγχο.',
'system_notice.welcome_v1.title': 'Καλώς ήρθατε στο TREK',
'system_notice.welcome_v1.body':
'Ο πλήρης ταξιδιωτικός σας σχεδιαστής. Δημιουργήστε δρομολόγια, μοιραστείτε ταξίδια με φίλους και μείνετε οργανωμένοι — συνδεδεμένοι ή εκτός σύνδεσης.',
'system_notice.welcome_v1.cta_label': 'Σχεδιάστε ένα ταξίδι',
'system_notice.welcome_v1.hero_alt':
'Ένας γραφικός ταξιδιωτικός προορισμός με επικάλυψη περιβάλλοντος σχεδιασμού TREK',
'system_notice.welcome_v1.highlight_plan':
'Δρομολόγια ανά ημέρα για κάθε ταξίδι',
'system_notice.welcome_v1.highlight_share': 'Συνεργαστείτε με συνταξιδιώτες',
'system_notice.welcome_v1.highlight_offline':
'Λειτουργεί εκτός σύνδεσης σε κινητά',
'system_notice.dev_test_modal.title': '[Dev] Δοκιμαστική ειδοποίηση',
'system_notice.dev_test_modal.body':
'Αυτή είναι μια δοκιμαστική ειδοποίηση μόνο για ανάπτυξη.',
'system_notice.pager.prev': 'Προηγούμενη ειδοποίηση',
'system_notice.pager.next': 'Επόμενη ειδοποίηση',
'system_notice.pager.counter': '{current} / {total}',
'system_notice.pager.goto': 'Μετάβαση στην ειδοποίηση {n}',
'system_notice.pager.position': 'Ειδοποίηση {current} από {total}',
};
export default system_notice;
+40
View File
@@ -0,0 +1,40 @@
import type { TranslationStrings } from '../types';
const todo: TranslationStrings = {
'todo.subtab.packing': 'Λίστα Αποσκευών',
'todo.subtab.todo': 'Εργασίες',
'todo.completed': 'ολοκληρώθηκαν',
'todo.filter.all': 'Όλα',
'todo.filter.open': 'Ανοιχτά',
'todo.filter.done': 'Ολοκληρωμένα',
'todo.uncategorized': 'Χωρίς κατηγορία',
'todo.namePlaceholder': 'Όνομα εργασίας',
'todo.descriptionPlaceholder': 'Περιγραφή (προαιρετικό)',
'todo.unassigned': 'Χωρίς ανάθεση',
'todo.noCategory': 'Χωρίς κατηγορία',
'todo.hasDescription': 'Έχει περιγραφή',
'todo.addItem': 'Προσθήκη νέας εργασίας',
'todo.sidebar.sortBy': 'Ταξινόμηση κατά',
'todo.priority': 'Προτεραιότητα',
'todo.newCategoryLabel': 'νέο',
'todo.newCategory': 'Όνομα κατηγορίας',
'todo.addCategory': 'Προσθήκη κατηγορίας',
'todo.newItem': 'Νέα εργασία',
'todo.empty': 'Δεν υπάρχουν εργασίες ακόμα. Προσθέστε μία για να ξεκινήσετε!',
'todo.filter.my': 'Οι Εργασίες μου',
'todo.filter.overdue': 'Εκπρόθεσμα',
'todo.sidebar.tasks': 'Εργασίες',
'todo.sidebar.categories': 'Κατηγορίες',
'todo.detail.title': 'Εργασία',
'todo.detail.description': 'Περιγραφή',
'todo.detail.category': 'Κατηγορία',
'todo.detail.dueDate': 'Ημερομηνία λήξης',
'todo.detail.assignedTo': 'Ανατεθειμένο σε',
'todo.detail.delete': 'Διαγραφή',
'todo.detail.save': 'Αποθήκευση αλλαγών',
'todo.sortByPrio': 'Προτεραιότητα',
'todo.detail.priority': 'Προτεραιότητα',
'todo.detail.noPriority': 'Καμία',
'todo.detail.create': 'Δημιουργία εργασίας',
};
export default todo;
+10
View File
@@ -0,0 +1,10 @@
import type { TranslationStrings } from '../types';
const transport: TranslationStrings = {
'transport.addTransport': 'Προσθήκη μεταφοράς',
'transport.modalTitle.create': 'Προσθήκη μεταφοράς',
'transport.modalTitle.edit': 'Επεξεργασία μεταφοράς',
'transport.title': 'Μεταφορές',
'transport.addManual': 'Χειροκίνητη Μεταφορά',
};
export default transport;
+32
View File
@@ -0,0 +1,32 @@
import type { TranslationStrings } from '../types';
const trip: TranslationStrings = {
'trip.tabs.plan': 'Πλάνο',
'trip.tabs.transports': 'Μεταφορές',
'trip.tabs.reservations': 'Κρατήσεις',
'trip.tabs.reservationsShort': 'Κράτ.',
'trip.tabs.packing': 'Λίστα Αποσκευών',
'trip.tabs.packingShort': 'Αποσκευές',
'trip.tabs.lists': 'Λίστες',
'trip.tabs.listsShort': 'Λίστες',
'trip.tabs.budget': 'Προϋπολογισμός',
'trip.tabs.files': 'Αρχεία',
'trip.loading': 'Φόρτωση ταξιδιού...',
'trip.loadingPhotos': 'Φόρτωση φωτογραφιών μέρους...',
'trip.mobilePlan': 'Πλάνο',
'trip.mobilePlaces': 'Μέρη',
'trip.toast.placeUpdated': 'Το μέρος ενημερώθηκε',
'trip.toast.placeAdded': 'Το μέρος προστέθηκε',
'trip.toast.placeDeleted': 'Το μέρος διαγράφηκε',
'trip.toast.selectDay': 'Παρακαλώ επιλέξτε πρώτα μια ημέρα',
'trip.toast.assignedToDay': 'Το μέρος ανατέθηκε στην ημέρα',
'trip.toast.reorderError': 'Η αναδιάταξη απέτυχε',
'trip.toast.reservationUpdated': 'Η κράτηση ενημερώθηκε',
'trip.toast.reservationAdded': 'Η κράτηση προστέθηκε',
'trip.toast.deleted': 'Διαγράφηκε',
'trip.confirm.deletePlace':
'Είστε σίγουροι ότι θέλετε να διαγράψετε αυτό το μέρος;',
'trip.confirm.deletePlaces': 'Διαγραφή {count} μερών;',
'trip.toast.placesDeleted': '{count} μέρη διαγράφηκαν',
};
export default trip;
+17
View File
@@ -0,0 +1,17 @@
import type { TranslationStrings } from '../types';
const trips: TranslationStrings = {
'trips.memberRemoved': '{username} διαγράφηκε',
'trips.memberRemoveError': 'Αποτυχία διαγραφής',
'trips.memberAdded': '{username} προστέθηκε',
'trips.memberAddError': 'Αποτυχία προσθήκης',
'trips.reminder': 'Ειδοποίηση',
'trips.reminderNone': 'Κανένα',
'trips.reminderDay': 'ημέρα',
'trips.reminderDays': 'ημέρες',
'trips.reminderCustom': 'Προσαρμοσμένη',
'trips.reminderDaysBefore': 'ημέρες πριν από την αναχώση',
'trips.reminderDisabledHint':
'Η ειδοποίηση για τις υπενθυμήσεις είναι απενεργοποιημένη. Ενεργοποιήστε την στο Διαχείριση > Ρυθμίσεις > Ανακοινώσεις.',
};
export default trips;
+21
View File
@@ -0,0 +1,21 @@
import type { TranslationStrings } from '../types';
const undo: TranslationStrings = {
'undo.button': 'Αναίρεση',
'undo.tooltip': 'Αναίρεση: {action}',
'undo.assignPlace': 'Η τοποθεσία ανατέθηκε στην ημέρα',
'undo.removeAssignment': 'Η τοποθεσία αφαιρέθηκε από την ημέρα',
'undo.reorder': 'Οι τοποθεσίες αναδιατάχθηκαν',
'undo.optimize': 'Η διαδρομή βελτιστοποιήθηκε',
'undo.deletePlace': 'Η τοποθεσία διαγράφηκε',
'undo.deletePlaces': 'Οι τοποθεσίες διαγράφηκαν',
'undo.moveDay': 'Η τοποθεσία μεταφέρθηκε σε άλλη ημέρα',
'undo.lock': 'Το κλείδωμα τοποθεσίας εναλλάχθηκε',
'undo.importGpx': 'Εισαγωγή GPX',
'undo.importKeyholeMarkup': 'Εισαγωγή KMZ/KML',
'undo.importGoogleList': 'Εισαγωγή Google Maps',
'undo.importNaverList': 'Εισαγωγή Naver Maps',
'undo.addPlace': 'Η τοποθεσία προστέθηκε',
'undo.done': 'Αναιρέθηκε: {action}',
};
export default undo;
+109
View File
@@ -0,0 +1,109 @@
import type { TranslationStrings } from '../types';
const vacay: TranslationStrings = {
'vacay.subtitle': 'Σχεδιάστε και διαχειριστείτε ημέρες διακοπών',
'vacay.settings': 'Ρυθμίσεις',
'vacay.year': 'Έτος',
'vacay.addYear': 'Προσθήκη επόμενου έτους',
'vacay.addPrevYear': 'Προσθήκη προηγούμενου έτους',
'vacay.removeYear': 'Αφαίρεση έτους',
'vacay.removeYearConfirm': 'Αφαίρεση {year};',
'vacay.removeYearHint':
'Όλες οι καταχωρήσεις διακοπών και οι αργίες της εταιρείας για αυτό το έτος θα διαγραφούν οριστικά.',
'vacay.remove': 'Αφαίρεση',
'vacay.persons': 'Άτομα',
'vacay.noPersons': 'Δεν έχουν προστεθεί άτομα',
'vacay.addPerson': 'Προσθήκη Ατόμου',
'vacay.editPerson': 'Επεξεργασία Ατόμου',
'vacay.removePerson': 'Αφαίρεση Ατόμου',
'vacay.removePersonConfirm': 'Αφαίρεση {name};',
'vacay.removePersonHint':
'Όλες οι καταχωρήσεις διακοπών για αυτό το άτομο θα διαγραφούν οριστικά.',
'vacay.personName': 'Όνομα',
'vacay.personNamePlaceholder': 'Εισαγάγετε όνομα',
'vacay.color': 'Χρώμα',
'vacay.add': 'Προσθήκη',
'vacay.legend': 'Υπόμνημα',
'vacay.publicHoliday': 'Δημόσια Αργία',
'vacay.companyHoliday': 'Αργία Εταιρείας',
'vacay.weekend': 'Σαββατοκύριακο',
'vacay.modeVacation': 'Διακοπές',
'vacay.modeCompany': 'Αργία Εταιρείας',
'vacay.entitlement': 'Δικαίωμα',
'vacay.entitlementDays': 'Ημέρες',
'vacay.used': 'Χρησιμοποιημένες',
'vacay.remaining': 'Υπόλοιπο',
'vacay.carriedOver': 'από {year}',
'vacay.blockWeekends': 'Αποκλεισμός Σαββατοκύριακων',
'vacay.blockWeekendsHint':
'Αποτρέψτε καταχωρήσεις διακοπών σε ημέρες σαββατοκύριακου',
'vacay.weekendDays': 'Ημέρες σαββατοκύριακου',
'vacay.mon': 'Δευ',
'vacay.tue': 'Τρι',
'vacay.wed': 'Τετ',
'vacay.thu': 'Πεμ',
'vacay.fri': 'Παρ',
'vacay.sat': 'Σαβ',
'vacay.sun': 'Κυρ',
'vacay.publicHolidays': 'Δημόσιες Αργίες',
'vacay.publicHolidaysHint': 'Σήμανση δημόσιων αργιών στο ημερολόγιο',
'vacay.selectCountry': 'Επιλογή χώρας',
'vacay.selectRegion': 'Επιλογή περιοχής (προαιρετικό)',
'vacay.addCalendar': 'Προσθήκη ημερολογίου',
'vacay.calendarLabel': 'Ετικέτα (προαιρετικό)',
'vacay.calendarColor': 'Χρώμα',
'vacay.noCalendars': 'Δεν έχουν προστεθεί ημερολόγια αργιών ακόμη',
'vacay.companyHolidays': 'Αργίες Εταιρείας',
'vacay.companyHolidaysHint':
'Επιτρέψτε τη σήμανση αργιών για όλη την εταιρεία',
'vacay.companyHolidaysNoDeduct':
'Οι αργίες της εταιρείας δεν προσμετρώνται στις ημέρες διακοπών.',
'vacay.weekStart': 'Η εβδομάδα ξεκινά την',
'vacay.weekStartHint':
'Επιλέξτε αν η εβδομάδα του ημερολογίου ξεκινά Δευτέρα ή Κυριακή',
'vacay.carryOver': 'Μεταφορά',
'vacay.carryOverHint':
'Αυτόματη μεταφορά των υπολοίπων ημερών διακοπών στο επόμενο έτος',
'vacay.sharing': 'Κοινή Χρήση',
'vacay.sharingHint':
'Μοιραστείτε το πλάνο διακοπών σας με άλλους χρήστες TREK',
'vacay.owner': 'Κάτοχος',
'vacay.shareEmailPlaceholder': 'Email χρήστη TREK',
'vacay.shareSuccess': 'Το πλάνο μοιράστηκε επιτυχώς',
'vacay.shareError': 'Δεν ήταν δυνατή η κοινοποίηση του πλάνου',
'vacay.dissolve': 'Διάλυση Συγχώνευσης',
'vacay.dissolveHint':
'Διαχωρίστε ξανά τα ημερολόγια. Οι καταχωρήσεις σας θα διατηρηθούν.',
'vacay.dissolveAction': 'Διάλυση',
'vacay.dissolved': 'Το ημερολόγιο διαχωρίστηκε',
'vacay.fusedWith': 'Συγχωνευμένο με',
'vacay.you': 'εσείς',
'vacay.noData': 'Δεν υπάρχουν δεδομένα',
'vacay.changeColor': 'Αλλαγή χρώματος',
'vacay.inviteUser': 'Πρόσκληση Χρήστη',
'vacay.inviteHint':
'Προσκαλέστε έναν άλλο χρήστη TREK για να μοιραστείτε ένα κοινό ημερολόγιο διακοπών.',
'vacay.selectUser': 'Επιλογή χρήστη',
'vacay.sendInvite': 'Αποστολή Πρόσκλησης',
'vacay.inviteSent': 'Η πρόσκληση στάλθηκε',
'vacay.inviteError': 'Δεν ήταν δυνατή η αποστολή της πρόσκλησης',
'vacay.pending': 'εκκρεμεί',
'vacay.noUsersAvailable': 'Δεν υπάρχουν διαθέσιμοι χρήστες',
'vacay.accept': 'Αποδοχή',
'vacay.decline': 'Απόρριψη',
'vacay.acceptFusion': 'Αποδοχή & Συγχώνευση',
'vacay.inviteTitle': 'Αίτημα Συγχώνευσης',
'vacay.inviteWantsToFuse':
'θέλει να μοιραστεί ένα ημερολόγιο διακοπών μαζί σας.',
'vacay.fuseInfo1':
'Και οι δύο θα βλέπετε όλες τις καταχωρήσεις διακοπών σε ένα κοινό ημερολόγιο.',
'vacay.fuseInfo2':
'Και τα δύο μέρη μπορούν να δημιουργούν και να επεξεργάζονται καταχωρήσεις ο ένας για τον άλλο.',
'vacay.fuseInfo3':
'Και τα δύο μέρη μπορούν να διαγράφουν καταχωρήσεις και να αλλάζουν τα δικαιώματα διακοπών.',
'vacay.fuseInfo4':
'Ρυθμίσεις όπως δημόσιες αργίες και αργίες εταιρείας μοιράζονται.',
'vacay.fuseInfo5':
'Η συγχώνευση μπορεί να διαλυθεί ανά πάσα στιγμή από οποιοδήποτε μέρος. Οι καταχωρήσεις σας θα διατηρηθούν.',
};
export default vacay;
+1
View File
@@ -18,6 +18,7 @@ export const SUPPORTED_LANGUAGES = [
{ value: 'ja', label: '日本語', locale: 'ja-JP' },
{ value: 'ko', label: '한국어', locale: 'ko-KR' },
{ value: 'uk', label: 'Українська', locale: 'uk-UA' },
{ value: 'gr', label: 'Ελληνικά', locale: 'el-GR' },
] as const;
export type SupportedLanguageCode =
+292 -283
View File
@@ -1,70 +1,74 @@
import type { TranslationStrings } from '../types';
const admin: TranslationStrings = {
'admin.notifications.title': 'Notifications',
'admin.notifications.title': 'Bildirimler',
'admin.notifications.hint':
'Choose one notification channel. Only one can be active at a time.',
'admin.notifications.none': 'Disabled',
'admin.notifications.email': 'Email (SMTP)',
'admin.notifications.webhook': 'Webhook',
'Bir bildirim kanalı seçin. Aynı anda yalnızca biri etkin olabilir.',
'admin.notifications.none': 'Kapalı',
'admin.notifications.email': 'E-posta (SMTP)',
'admin.notifications.webhook': 'Web kancası',
'admin.notifications.ntfy': 'Ntfy',
'admin.ntfy.hint':
'Allow users to configure their own ntfy topics for push notifications. Set the default server below to pre-fill user settings.',
'admin.notifications.save': 'Save notification settings',
'admin.notifications.saved': 'Notification settings saved',
'admin.notifications.testWebhook': 'Send test webhook',
'admin.notifications.testWebhookSuccess': 'Test webhook sent successfully',
'admin.notifications.testWebhookFailed': 'Test webhook failed',
'admin.notifications.testNtfy': 'Send test ntfy',
'admin.notifications.testNtfySuccess': 'Test ntfy sent successfully',
'admin.notifications.testNtfyFailed': 'Test ntfy failed',
'admin.notifications.emailPanel.title': 'Email (SMTP)',
'admin.notifications.webhookPanel.title': 'Webhook',
'admin.notifications.inappPanel.title': 'In-App',
'Kullanıcıların kendi ntfy konularını yapılandırmasına izin verin. Aşağıdaki varsayılan sunucu kullanıcı ayarlarında ön doldurma için kullanılır.',
'admin.notifications.save': 'Bildirim ayarlarını kaydet',
'admin.notifications.saved': 'Bildirim ayarları kaydedildi',
'admin.notifications.testWebhook': 'Test webhook gönder',
'admin.notifications.testWebhookSuccess': 'Test webhook gönderildi',
'admin.notifications.testWebhookFailed': 'Test webhook başarısız',
'admin.notifications.testNtfy': 'Test ntfy gönder',
'admin.notifications.testNtfySuccess': 'Test ntfy gönderildi',
'admin.notifications.testNtfyFailed': 'Test ntfy başarısız',
'admin.notifications.emailPanel.title': 'E-posta (SMTP)',
'admin.notifications.webhookPanel.title': 'Web kancası',
'admin.notifications.inappPanel.title': 'Uygulama içi',
'admin.notifications.inappPanel.hint':
'In-app notifications are always active and cannot be disabled globally.',
'admin.notifications.adminWebhookPanel.title': 'Admin Webhook',
'Uygulama içi bildirimler her zaman açıktır ve genel olarak kapatılamaz.',
'admin.notifications.adminWebhookPanel.title': 'Yönetici Webhook',
'admin.notifications.adminWebhookPanel.hint':
'This webhook is used exclusively for admin notifications (e.g. version alerts). It is separate from per-user webhooks and always fires when set.',
'admin.notifications.adminWebhookPanel.saved': 'Admin webhook URL saved',
"Bu webhook yalnızca yönetici bildirimleri için kullanılır (örn. sürüm uyarıları). Kullanıcı webhook'larından ayrıdır ve ayarlıysa her zaman tetiklenir.",
'admin.notifications.adminWebhookPanel.saved':
'Yönetici webhook URL kaydedildi',
'admin.notifications.adminWebhookPanel.testSuccess':
'Test webhook sent successfully',
'admin.notifications.adminWebhookPanel.testFailed': 'Test webhook failed',
'Test webhook gönderildi',
'admin.notifications.adminWebhookPanel.testFailed': 'Test webhook başarısız',
'admin.notifications.adminWebhookPanel.alwaysOnHint':
'Admin webhook always fires when a URL is configured',
'admin.notifications.adminNtfyPanel.title': 'Admin Ntfy',
'URL yapılandırıldığında yönetici webhook her zaman tetiklenir',
'admin.notifications.adminNtfyPanel.title': 'Yönetici Ntfy',
'admin.notifications.adminNtfyPanel.hint':
'This ntfy topic is used exclusively for admin notifications (e.g. version alerts). It is separate from per-user topics and always fires when configured.',
'admin.notifications.adminNtfyPanel.serverLabel': 'Ntfy Server URL',
'Bu ntfy konusu yalnızca yönetici bildirimleri için kullanılır. Kullanıcı konularından ayrıdır ve yapılandırıldığında her zaman tetiklenir.',
'admin.notifications.adminNtfyPanel.serverLabel': "Ntfy Sunucu URL'si",
'admin.notifications.adminNtfyPanel.serverHint':
'Also used as the default server for user ntfy notifications. Leave blank to default to ntfy.sh. Users can override this in their own settings.',
'Kullanıcı ntfy bildirimleri için varsayılan sunucu olarak da kullanılır. Boş bırakırsanız ntfy.sh olur. Kullanıcılar kendi ayarlarında geçersiz kılabilir.',
'admin.notifications.adminNtfyPanel.serverPlaceholder': 'https://ntfy.sh',
'admin.notifications.adminNtfyPanel.topicLabel': 'Admin Topic',
'admin.notifications.adminNtfyPanel.topicPlaceholder': 'trek-admin-alerts',
'admin.notifications.adminNtfyPanel.tokenLabel': 'Access Token (optional)',
'admin.notifications.adminNtfyPanel.topicLabel': 'Yönetici Konusu',
'admin.notifications.adminNtfyPanel.topicPlaceholder':
'yürüyüş-yönetici-uyarıları',
'admin.notifications.adminNtfyPanel.tokenLabel':
'Erişim anahtarı (isteğe bağlı)',
'admin.notifications.adminNtfyPanel.tokenCleared':
'Admin access token cleared',
'admin.notifications.adminNtfyPanel.saved': 'Admin ntfy settings saved',
'admin.notifications.adminNtfyPanel.test': 'Send test ntfy',
'admin.notifications.adminNtfyPanel.testSuccess':
'Test ntfy sent successfully',
'admin.notifications.adminNtfyPanel.testFailed': 'Test ntfy failed',
'Yönetici erişim anahtarı temizlendi',
'admin.notifications.adminNtfyPanel.saved':
'Yönetici ntfy ayarları kaydedildi',
'admin.notifications.adminNtfyPanel.test': 'Test ntfy gönder',
'admin.notifications.adminNtfyPanel.testSuccess': 'Test ntfy gönderildi',
'admin.notifications.adminNtfyPanel.testFailed': 'Test ntfy başarısız',
'admin.notifications.adminNtfyPanel.alwaysOnHint':
'Admin ntfy always fires when a topic is configured',
'Konu yapılandırıldığında yönetici ntfy her zaman tetiklenir',
'admin.notifications.adminNotificationsHint':
'Configure which channels deliver admin-only notifications (e.g. version alerts).',
'admin.notifications.tripReminders.title': 'Trip Reminders',
'Yalnızca yönetici bildirimlerinin hangi kanallardan iletileceğini yapılandırın.',
'admin.notifications.tripReminders.title': 'Seyahat Hatırlatıcıları',
'admin.notifications.tripReminders.hint':
'Send a reminder notification before a trip starts (requires reminder days to be set on the trip).',
'admin.notifications.tripReminders.enabled': 'Trip reminders enabled',
'admin.notifications.tripReminders.disabled': 'Trip reminders disabled',
'admin.smtp.title': 'Email & Notifications',
'admin.smtp.hint': 'SMTP configuration for sending email notifications.',
'admin.smtp.testButton': 'Send test email',
'Seyahat başlamadan önce hatırlatma gönderir (seyahatte hatırlatma günü ayarlı olmalıdır).',
'admin.notifications.tripReminders.enabled': 'Seyahat hatırlatıcıları açık',
'admin.notifications.tripReminders.disabled':
'Seyahat hatırlatıcıları kapalı',
'admin.smtp.title': 'E-posta ve Bildirimler',
'admin.smtp.hint': 'E-posta bildirimleri için SMTP yapılandırması.',
'admin.smtp.testButton': 'Test e-postası gönder',
'admin.webhook.hint':
'Allow users to configure their own webhook URLs for notifications (Discord, Slack, etc.).',
'admin.smtp.testSuccess': 'Test email sent successfully',
'admin.smtp.testFailed': 'Test email failed',
"Kullanıcıların bildirimler için kendi webhook URL'lerini (Discord, Slack vb.) yapılandırmasına izin verin.",
'admin.smtp.testSuccess': 'Test e-postası gönderildi',
'admin.smtp.testFailed': 'Test e-postası başarısız',
'admin.title': 'Yönetim',
'admin.subtitle': 'Kullanıcı yönetimi ve sistem ayarları',
'admin.tabs.users': 'Kullanıcılar',
@@ -72,287 +76,292 @@ const admin: TranslationStrings = {
'admin.tabs.backup': 'Yedekleme',
'admin.tabs.notifications': 'Bildirimler',
'admin.tabs.audit': 'Denetim',
'admin.stats.users': 'Kullanıcı',
'admin.stats.trips': 'Gezi',
'admin.stats.places': 'Yer',
'admin.stats.photos': 'Fotoğraf',
'admin.stats.files': 'Dosya',
'admin.table.user': 'User',
'admin.table.email': 'Email',
'admin.table.role': 'Role',
'admin.table.created': 'Created',
'admin.table.lastLogin': 'Last Login',
'admin.table.actions': 'Actions',
'admin.you': '(You)',
'admin.editUser': 'Edit User',
'admin.newPassword': 'New Password',
'admin.newPasswordHint': 'Leave empty to keep current password',
'admin.stats.users': 'Kullanıcılar',
'admin.stats.trips': 'Seyahatler',
'admin.stats.places': 'Yerler',
'admin.stats.photos': 'Fotoğraflar',
'admin.stats.files': 'Dosyalar',
'admin.table.user': 'Kullanıcı',
'admin.table.email': 'E-posta',
'admin.table.role': 'Rol',
'admin.table.created': 'Oluşturulma',
'admin.table.lastLogin': 'Son Giriş',
'admin.table.actions': 'İşlemler',
'admin.you': '(Siz)',
'admin.editUser': 'Kullanıcıyı Düzenle',
'admin.newPassword': 'Yeni Şifre',
'admin.newPasswordHint': 'Mevcut şifreyi korumak için boş bırakın',
'admin.deleteUser':
'Delete user "{name}"? All trips will be permanently deleted.',
'admin.deleteUserTitle': 'Delete user',
'admin.newPasswordPlaceholder': 'Enter new password…',
'admin.toast.loadError': 'Failed to load admin data',
'admin.toast.userUpdated': 'User updated',
'admin.toast.updateError': 'Failed to update',
'admin.toast.userDeleted': 'User deleted',
'admin.toast.deleteError': 'Failed to delete',
'admin.toast.cannotDeleteSelf': 'Cannot delete your own account',
'admin.toast.userCreated': 'User created',
'admin.toast.createError': 'Failed to create user',
'admin.toast.fieldsRequired': 'Username, email and password are required',
'admin.createUser': 'Create User',
'admin.invite.title': 'Invite Links',
'admin.invite.subtitle': 'Create one-time registration links',
'admin.invite.create': 'Create Link',
'admin.invite.createAndCopy': 'Create & Copy',
'admin.invite.empty': 'No invite links created yet',
'admin.invite.maxUses': 'Max. Uses',
'admin.invite.expiry': 'Expires after',
'admin.invite.uses': 'used',
'admin.invite.expiresAt': 'expires',
'admin.invite.createdBy': 'by',
'admin.invite.active': 'Active',
'admin.invite.expired': 'Expired',
'admin.invite.usedUp': 'Used up',
'admin.invite.copied': 'Invite link copied to clipboard',
'admin.invite.copyLink': 'Copy link',
'admin.invite.deleted': 'Invite link deleted',
'admin.invite.createError': 'Failed to create invite link',
'admin.invite.deleteError': 'Failed to delete invite link',
'"{name}" kullanıcısı silinsin mi? Tüm geziler kalıcı olarak silinecek.',
'admin.deleteUserTitle': 'Kullanıcıyı sil',
'admin.newPasswordPlaceholder': 'Yeni şifreyi girin…',
'admin.toast.loadError': 'Yönetici verileri yüklenemedi',
'admin.toast.userUpdated': 'Kullanıcı güncellendi',
'admin.toast.updateError': 'Güncelleme başarısız oldu',
'admin.toast.userDeleted': 'Kullanıcı silindi',
'admin.toast.deleteError': 'Silinemedi',
'admin.toast.cannotDeleteSelf': 'Kendi hesabınızı silemiyorum',
'admin.toast.userCreated': 'Kullanıcı oluşturuldu',
'admin.toast.createError': 'Kullanıcı oluşturulamadı',
'admin.toast.fieldsRequired': 'Kullanıcı adı, e-posta ve şifre gerekli',
'admin.createUser': 'Kullanıcı Oluştur',
'admin.invite.title': 'Bağlantıları Davet Et',
'admin.invite.subtitle': 'Tek seferlik kayıt bağlantıları oluşturun',
'admin.invite.create': 'Bağlantı Oluştur',
'admin.invite.createAndCopy': 'Oluştur ve Kopyala',
'admin.invite.empty': 'Henüz davet bağlantısı oluşturulmadı',
'admin.invite.maxUses': 'Maks. Kullanım Alanları',
'admin.invite.expiry': 'Şu tarihten sonra sona erer:',
'admin.invite.uses': 'kullanılmış',
'admin.invite.expiresAt': 'süresi doluyor',
'admin.invite.createdBy': 'ile',
'admin.invite.active': 'Aktif',
'admin.invite.expired': 'Günü geçmiş',
'admin.invite.usedUp': 'Kullanılmış',
'admin.invite.copied': 'Davet bağlantısı panoya kopyalandı',
'admin.invite.copyLink': 'Bağlantıyı kopyala',
'admin.invite.deleted': 'Davet bağlantısı silindi',
'admin.invite.createError': 'Davet bağlantısı oluşturulamadı',
'admin.invite.deleteError': 'Davet bağlantısı silinemedi',
'admin.tabs.settings': 'Ayarlar',
'admin.allowRegistration': 'Allow Registration',
'admin.allowRegistrationHint': 'New users can register themselves',
'admin.authMethods': 'Authentication Methods',
'admin.passwordLogin': 'Password Login',
'admin.passwordLoginHint': 'Allow users to sign in with email and password',
'admin.passwordRegistration': 'Password Registration',
'admin.allowRegistration': 'Kayda İzin Ver',
'admin.allowRegistrationHint':
'Yeni kullanıcılar kendileri kayıt olabilirler',
'admin.authMethods': 'Kimlik Doğrulama Yöntemleri',
'admin.passwordLogin': 'Şifre Girişi',
'admin.passwordLoginHint':
'Kullanıcıların e-posta ve şifreyle oturum açmasına izin ver',
'admin.passwordRegistration': 'Şifre Kaydı',
'admin.passwordRegistrationHint':
'Allow new users to register with email and password',
'admin.oidcLogin': 'SSO Login',
'admin.oidcLoginHint': 'Allow users to sign in with SSO',
'admin.oidcRegistration': 'SSO Auto-Provisioning',
'Yeni kullanıcıların e-posta ve şifreyle kaydolmasına izin ver',
'admin.oidcLogin': 'TOA Girişi',
'admin.oidcLoginHint': 'Kullanıcıların SSO ile oturum açmasına izin Ver',
'admin.oidcRegistration': 'SSO Otomatik Temel Hazırlığı',
'admin.oidcRegistrationHint':
'Automatically create accounts for new SSO users',
'Yeni SSO kullanıcıları için otomatik olarak hesap oluşturun',
'admin.envOverrideHint':
'Password login settings are controlled by the OIDC_ONLY environment variable and cannot be changed here.',
'admin.lockoutWarning': 'At least one login method must remain enabled',
'admin.requireMfa': 'Require two-factor authentication (2FA)',
'Şifre oturum açma ayarları OIDC_ONLY ortam değişkeni tarafından kontrol edilir ve burada değiştirilemez.',
'admin.lockoutWarning': 'En az bir oturum açma yöntemi etkin kalmalıdır',
'admin.requireMfa': 'İki faktörlü kimlik doğrulama (2FA) gerektir',
'admin.requireMfaHint':
'Users without 2FA must complete setup in Settings before using the app.',
'admin.apiKeys': 'API Keys',
"2FA'sı olmayan kullanıcıların uygulamayı kullanmadan önce Ayarlar'da kurulumu tamamlaması gerekir.",
'admin.apiKeys': 'API Anahtarları',
'admin.apiKeysHint':
'Optional. Enables extended place data like photos and weather.',
'admin.mapsKey': 'Google Maps API Key',
'İsteğe bağlı. Fotoğraflar ve hava durumu gibi genişletilmiş yer verilerini etkinleştirir.',
'admin.mapsKey': 'Google Haritalar API Anahtarı',
'admin.mapsKeyHint':
'Required for place search. Get at console.cloud.google.com',
'Yer arama için gereklidir. console.cloud.google.com adresinden erişin',
'admin.mapsKeyHintLong':
'Without an API key, OpenStreetMap is used for place search. With a Google API key, photos, ratings, and opening hours can be loaded as well. Get one at console.cloud.google.com.',
'admin.recommended': 'Recommended',
'admin.weatherKey': 'OpenWeatherMap API Key',
'admin.weatherKeyHint': 'For weather data. Free at openweathermap.org',
'admin.validateKey': 'Test',
'admin.keyValid': 'Connected',
'admin.keyInvalid': 'Invalid',
'admin.keySaved': 'API keys saved',
'admin.oidcTitle': 'Single Sign-On (OIDC)',
'API anahtarı olmadan OpenStreetMap yer arama için kullanılır. Bir Google API anahtarıyla fotoğraflar, derecelendirmeler ve açılış saatleri de yüklenebilir. console.cloud.google.com adresinden bir tane edinin.',
'admin.recommended': 'Tavsiye edilen',
'admin.weatherKey': 'OpenWeatherMap API Anahtarı',
'admin.weatherKeyHint':
"Hava durumu verileri için. openweathermap.org'da ücretsiz",
'admin.validateKey': 'Test et',
'admin.keyValid': 'Bağlı',
'admin.keyInvalid': 'Geçersiz',
'admin.keySaved': 'API anahtarları kaydedildi',
'admin.oidcTitle': 'Tek Oturum Açma (OIDC)',
'admin.oidcSubtitle':
'Allow login via external providers like Google, Apple, Authentik or Keycloak.',
'admin.oidcDisplayName': 'Display Name',
'admin.oidcIssuer': 'Issuer URL',
'Google, Apple, Authentik veya Keycloak gibi harici sağlayıcılar aracılığıyla oturum açmaya izin verin.',
'admin.oidcDisplayName': 'Ekran Adı',
'admin.oidcIssuer': "Veren URL'si",
'admin.oidcIssuerHint':
'The OpenID Connect Issuer URL of the provider. e.g. https://accounts.google.com',
'admin.oidcSaved': 'OIDC configuration saved',
'admin.oidcOnlyMode': 'Disable password authentication',
"Sağlayıcının OpenID Connect Veren URL'si. örneğin https://accounts.google.com",
'admin.oidcSaved': 'OIDC yapılandırması kaydedildi',
'admin.oidcOnlyMode': 'Parola kimlik doğrulamasını devre dışı bırak',
'admin.oidcOnlyModeHint':
'When enabled, only SSO login is permitted. Password-based login and registration are blocked.',
'admin.fileTypes': 'Allowed File Types',
'admin.fileTypesHint': 'Configure which file types users can upload.',
'Etkinleştirildiğinde yalnızca SSO girişine izin verilir. Şifre tabanlı oturum açma ve kayıt engellenir.',
'admin.fileTypes': 'İzin Verilen Dosya Türleri',
'admin.fileTypesHint':
'Kullanıcıların hangi dosya türlerini yükleyebileceğini yapılandırın.',
'admin.fileTypesFormat':
'Comma-separated extensions (e.g. jpg,png,pdf,doc). Use * to allow all types.',
'admin.fileTypesSaved': 'File type settings saved',
'admin.placesPhotos.title': 'Place Photos',
'Virgülle ayrılmış uzantılar (ör. jpg,png,pdf,doc). Tüm türlere izin vermek için * kullanın.',
'admin.fileTypesSaved': 'Dosya türü ayarları kaydedildi',
'admin.placesPhotos.title': 'Fotoğrafları Yerleştir',
'admin.placesPhotos.subtitle':
'Fetch photos from the Google Places API. Disable to save API quota. Wikimedia photos are unaffected.',
'admin.placesAutocomplete.title': 'Place Autocomplete',
"Fotoğrafları Google Rehber API'sinden alın. API kotasını kaydetmeyi devre dışı bırakın. Wikimedia fotoğrafları etkilenmez.",
'admin.placesAutocomplete.title': 'Otomatik Tamamlamayı Yerleştir',
'admin.placesAutocomplete.subtitle':
'Use the Google Places API for search suggestions. Disable to save API quota.',
'admin.placesDetails.title': 'Place Details',
"Arama önerileri için Google Rehber API'sini kullanın. API kotasını kaydetmeyi devre dışı bırakın.",
'admin.placesDetails.title': 'Yer Detayları',
'admin.placesDetails.subtitle':
'Fetch detailed place information (hours, rating, website) from the Google Places API. Disable to save API quota.',
'admin.bagTracking.title': 'Bag Tracking',
"Google Rehber API'sinden ayrıntılı yer bilgilerini (saat, puan, web sitesi) alın. API kotasını kaydetmeyi devre dışı bırakın.",
'admin.bagTracking.title': 'Çanta Takibi',
'admin.bagTracking.subtitle':
'Enable weight and bag assignment for packing items',
'admin.collab.chat.title': 'Chat',
'admin.collab.chat.subtitle': 'Real-time messaging for trip collaboration',
'admin.collab.notes.title': 'Notes',
'admin.collab.notes.subtitle': 'Shared notes and documents',
'admin.collab.polls.title': 'Polls',
'admin.collab.polls.subtitle': 'Group polls and voting',
'Paketleme öğeleri için ağırlık ve torba atamasını etkinleştirin',
'admin.collab.chat.title': 'Sohbet',
'admin.collab.chat.subtitle':
'Seyahat işbirliği için gerçek zamanlı mesajlaşma',
'admin.collab.notes.title': 'Notlar',
'admin.collab.notes.subtitle': 'Paylaşılan notlar ve belgeler',
'admin.collab.polls.title': 'Anketler',
'admin.collab.polls.subtitle': 'Grup anketleri ve oylama',
'admin.collab.whatsnext.title': "What's Next",
'admin.collab.whatsnext.subtitle': 'Activity suggestions and next steps',
'admin.tabs.config': 'Personalization',
'admin.tabs.defaults': 'User Defaults',
'admin.defaultSettings.title': 'Default User Settings',
'admin.collab.whatsnext.subtitle': 'Etkinlik önerileri ve sonraki adımlar',
'admin.tabs.config': 'Kişiselleştirme',
'admin.tabs.defaults': 'Kullanıcı Varsayılanları',
'admin.defaultSettings.title': 'Varsayılan Kullanıcı Ayarları',
'admin.defaultSettings.description':
'Set instance-wide defaults. Users who have not changed a setting will see these values. Their own changes always take priority.',
'admin.defaultSettings.saved': 'Default saved',
'admin.defaultSettings.reset': 'Reset to built-in default',
'admin.defaultSettings.resetToBuiltIn': 'reset',
'admin.tabs.templates': 'Packing Templates',
'admin.packingTemplates.title': 'Packing Templates',
'Örnek çapında varsayılanları ayarlayın. Herhangi bir ayarı değiştirmemiş olan kullanıcılar bu değerleri görecektir. Kendi değişiklikleri her zaman önceliklidir.',
'admin.defaultSettings.saved': 'Varsayılan kaydedildi',
'admin.defaultSettings.reset': 'Yerleşik varsayılana sıfırla',
'admin.defaultSettings.resetToBuiltIn': 'sıfırlama',
'admin.tabs.templates': 'Paketleme Şablonları',
'admin.packingTemplates.title': 'Paketleme Şablonları',
'admin.packingTemplates.subtitle':
'Create reusable packing lists for your trips',
'admin.packingTemplates.create': 'New Template',
'admin.packingTemplates.namePlaceholder':
'Template name (e.g. Beach Holiday)',
'admin.packingTemplates.empty': 'No templates created yet',
'admin.packingTemplates.items': 'items',
'admin.packingTemplates.categories': 'categories',
'admin.packingTemplates.itemName': 'Item name',
'admin.packingTemplates.itemCategory': 'Category',
'admin.packingTemplates.categoryName': 'Category name (e.g. Clothing)',
'admin.packingTemplates.addCategory': 'Add category',
'admin.packingTemplates.created': 'Template created',
'admin.packingTemplates.deleted': 'Template deleted',
'admin.packingTemplates.loadError': 'Failed to load templates',
'admin.packingTemplates.createError': 'Failed to create template',
'admin.packingTemplates.deleteError': 'Failed to delete template',
'admin.packingTemplates.saveError': 'Failed to save',
'admin.tabs.addons': 'Addons',
'admin.addons.title': 'Addons',
'Seyahatleriniz için yeniden kullanılabilir paketleme listeleri oluşturun',
'admin.packingTemplates.create': 'Yeni Şablon',
'admin.packingTemplates.namePlaceholder': 'Şablon adı (ör. Plaj Tatili)',
'admin.packingTemplates.empty': 'Henüz şablon oluşturulmadı',
'admin.packingTemplates.items': 'öğeler',
'admin.packingTemplates.categories': 'kategoriler',
'admin.packingTemplates.itemName': 'Öğe adı',
'admin.packingTemplates.itemCategory': 'Kategori',
'admin.packingTemplates.categoryName': 'Kategori adı (ör. Giyim)',
'admin.packingTemplates.addCategory': 'Kategori ekle',
'admin.packingTemplates.created': 'Şablon oluşturuldu',
'admin.packingTemplates.deleted': 'Şablon silindi',
'admin.packingTemplates.loadError': 'Şablonlar yüklenemedi',
'admin.packingTemplates.createError': 'Şablon oluşturulamadı',
'admin.packingTemplates.deleteError': 'Şablon silinemedi',
'admin.packingTemplates.saveError': 'Kaydedilemedi',
'admin.tabs.addons': 'Eklentiler',
'admin.addons.title': 'Eklentiler',
'admin.addons.subtitle':
'Enable or disable features to customize your TREK experience.',
'admin.addons.catalog.packing.name': 'Lists',
'TREK deneyiminizi özelleştirmek için özellikleri etkinleştirin veya devre dışı bırakın.',
'admin.addons.catalog.packing.name': 'Listeler',
'admin.addons.catalog.packing.description':
'Packing lists and to-do tasks for your trips',
'admin.addons.catalog.budget.name': 'Budget',
'Seyahatleriniz için paket listeleri ve yapılacak işler',
'admin.addons.catalog.budget.name': 'Bütçe',
'admin.addons.catalog.budget.description':
'Track expenses and plan your trip budget',
'admin.addons.catalog.documents.name': 'Documents',
'Harcamaları takip edin ve seyahat bütçenizi planlayın',
'admin.addons.catalog.documents.name': 'Belgeler',
'admin.addons.catalog.documents.description':
'Store and manage travel documents',
'admin.addons.catalog.vacay.name': 'Vacay',
'Seyahat belgelerini saklayın ve yönetin',
'admin.addons.catalog.vacay.name': 'Tatil',
'admin.addons.catalog.vacay.description':
'Personal vacation planner with calendar view',
'Takvim görünümüne sahip kişisel tatil planlayıcısı',
'admin.addons.catalog.atlas.name': 'Atlas',
'admin.addons.catalog.atlas.description':
'World map with visited countries and travel stats',
'admin.addons.catalog.collab.name': 'Collab',
'Ziyaret edilen ülkeleri ve seyahat istatistiklerini içeren dünya haritası',
'admin.addons.catalog.collab.name': 'İş birliği',
'admin.addons.catalog.collab.description':
'Real-time notes, polls, and chat for trip planning',
'admin.addons.catalog.memories.name': 'Photos (Immich)',
'Seyahat planlaması için gerçek zamanlı notlar, anketler ve sohbet',
'admin.addons.catalog.memories.name': 'Fotoğraflar (Immich)',
'admin.addons.catalog.memories.description':
'Share trip photos via your Immich instance',
'Immich örneğiniz aracılığıyla gezi fotoğraflarını paylaşın',
'admin.addons.catalog.mcp.name': 'MCP',
'admin.addons.catalog.mcp.description':
'Model Context Protocol for AI assistant integration',
'Yapay zeka asistanı entegrasyonu için Model Bağlam Protokolü',
'admin.addons.subtitleBefore':
'Enable or disable features to customize your ',
'admin.addons.subtitleAfter': ' experience.',
'admin.addons.enabled': 'Enabled',
'admin.addons.disabled': 'Disabled',
'admin.addons.type.trip': 'Trip',
'admin.addons.type.global': 'Global',
'admin.addons.type.integration': 'Integration',
'admin.addons.tripHint': 'Available as a tab within each trip',
'Kişiselleştirmenizi özelleştirmek için özellikleri etkinleştirin veya devre dışı bırakın.',
'admin.addons.subtitleAfter': 'deneyim.',
'admin.addons.enabled': 'Etkinleştirilmiş',
'admin.addons.disabled': 'Engelli',
'admin.addons.type.trip': 'Seyahat',
'admin.addons.type.global': 'Küresel',
'admin.addons.type.integration': 'Entegrasyon',
'admin.addons.tripHint': 'Her yolculukta bir sekme olarak mevcuttur',
'admin.addons.globalHint':
'Available as a standalone section in the main navigation',
'Ana navigasyonda bağımsız bir bölüm olarak mevcuttur',
'admin.addons.integrationHint':
'Backend services and API integrations with no dedicated page',
'admin.addons.toast.updated': 'Addon updated',
'admin.addons.toast.error': 'Failed to update addon',
'admin.addons.noAddons': 'No addons available',
'admin.weather.title': 'Weather Data',
'admin.weather.badge': 'Since March 24, 2026',
'Özel bir sayfa olmadan arka uç hizmetleri ve API entegrasyonları',
'admin.addons.toast.updated': 'Eklenti güncellendi',
'admin.addons.toast.error': 'Eklenti güncellenemedi',
'admin.addons.noAddons': 'Kullanılabilir eklenti yok',
'admin.weather.title': 'Hava Durumu Verileri',
'admin.weather.badge': "24 Mart 2026'dan beri",
'admin.weather.description':
'TREK uses Open-Meteo as its weather data source. Open-Meteo is a free, open-source weather service — no API key required.',
'admin.weather.forecast': '16-day forecast',
'admin.weather.forecastDesc': 'Previously 5 days (OpenWeatherMap)',
'admin.weather.climate': 'Historical climate data',
"TREK, hava durumu veri kaynağı olarak Open-Meteo'yu kullanıyor. Open-Meteo ücretsiz, açık kaynaklı bir hava durumu hizmetidir; API anahtarı gerekmez.",
'admin.weather.forecast': '16 günlük tahmin',
'admin.weather.forecastDesc': 'Daha önce 5 gün (OpenWeatherMap)',
'admin.weather.climate': 'Geçmiş iklim verileri',
'admin.weather.climateDesc':
'Averages from the last 85 years for days beyond the 16-day forecast',
'admin.weather.requests': '10,000 requests / day',
'admin.weather.requestsDesc': 'Free, no API key required',
'16 günlük tahminin ötesindeki günler için son 85 yılın ortalamaları',
'admin.weather.requests': '10.000 istek / gün',
'admin.weather.requestsDesc': 'Ücretsiz, API anahtarı gerekmez',
'admin.weather.locationHint':
'Weather is based on the first place with coordinates in each day. If no place is assigned to a day, any place from the place list is used as a reference.',
'admin.tabs.mcpTokens': 'MCP Access',
'admin.mcpTokens.title': 'MCP Access',
'Hava durumu her gün koordinatlarla ilk sırada yer alır. Bir güne herhangi bir yer atanmamışsa, yer listesindeki herhangi bir yer referans olarak kullanılır.',
'admin.tabs.mcpTokens': 'MCP Erişimi',
'admin.mcpTokens.title': 'MCP Erişimi',
'admin.mcpTokens.subtitle':
'Manage OAuth sessions and API tokens across all users',
'admin.mcpTokens.sectionTitle': 'API Tokens',
'admin.mcpTokens.owner': 'Owner',
'admin.mcpTokens.tokenName': 'Token Name',
'admin.mcpTokens.created': 'Created',
'admin.mcpTokens.lastUsed': 'Last Used',
'admin.mcpTokens.never': 'Never',
'admin.mcpTokens.empty': 'No MCP tokens have been created yet',
'admin.mcpTokens.deleteTitle': 'Delete Token',
'Tüm Kullanıcılar genelinde OAuth Oturumlarını ve API belirteçlerini yönetin',
'admin.mcpTokens.sectionTitle': 'API Belirteçleri',
'admin.mcpTokens.owner': 'Mal sahibi',
'admin.mcpTokens.tokenName': 'Jeton Adı',
'admin.mcpTokens.created': 'Oluşturuldu',
'admin.mcpTokens.lastUsed': 'Son Kullanılan',
'admin.mcpTokens.never': 'Asla',
'admin.mcpTokens.empty': 'Henüz MCP tokenı oluşturulmadı',
'admin.mcpTokens.deleteTitle': 'Jetonu Sil',
'admin.mcpTokens.deleteMessage':
'This will revoke the token immediately. The user will lose MCP access through this token.',
'admin.mcpTokens.deleteSuccess': 'Token deleted',
'admin.mcpTokens.deleteError': 'Failed to delete token',
'admin.mcpTokens.loadError': 'Failed to load tokens',
'admin.oauthSessions.sectionTitle': 'OAuth Sessions',
'admin.oauthSessions.clientName': 'Client',
'admin.oauthSessions.owner': 'Owner',
'admin.oauthSessions.scopes': 'Scopes',
'admin.oauthSessions.created': 'Created',
'admin.oauthSessions.empty': 'No active OAuth sessions',
'admin.oauthSessions.revokeTitle': 'Revoke Session',
'Bu, jetonu anında iptal edecektir. Kullanıcı bu belirteç aracılığıyla MCP erişimini kaybedecektir.',
'admin.mcpTokens.deleteSuccess': 'Jeton silindi',
'admin.mcpTokens.deleteError': 'Jeton silinemedi',
'admin.mcpTokens.loadError': 'Jetonlar yüklenemedi',
'admin.oauthSessions.sectionTitle': 'OAuth Oturumları',
'admin.oauthSessions.clientName': 'Müşteri',
'admin.oauthSessions.owner': 'Mal sahibi',
'admin.oauthSessions.scopes': 'Kapsamlar',
'admin.oauthSessions.created': 'Oluşturuldu',
'admin.oauthSessions.empty': 'Aktif OAuth Oturumu yok',
'admin.oauthSessions.revokeTitle': 'Oturumu İptal Et',
'admin.oauthSessions.revokeMessage':
'This will revoke the OAuth session immediately. The client will lose MCP access.',
'admin.oauthSessions.revokeSuccess': 'Session revoked',
'admin.oauthSessions.revokeError': 'Failed to revoke session',
'admin.oauthSessions.loadError': 'Failed to load OAuth sessions',
'Bu, OAuth oturumunu hemen iptal edecektir. İstemci MCP erişimini kaybedecek.',
'admin.oauthSessions.revokeSuccess': 'Oturum iptal edildi',
'admin.oauthSessions.revokeError': 'Oturum iptal edilemedi',
'admin.oauthSessions.loadError': 'OAuth oturumları yüklenemedi',
'admin.tabs.github': 'GitHub',
'admin.audit.subtitle':
'Security-sensitive and administration events (backups, users, MFA, settings).',
'admin.audit.empty': 'No audit entries yet.',
'admin.audit.refresh': 'Refresh',
'admin.audit.loadMore': 'Load more',
'admin.audit.showing': '{count} loaded · {total} total',
'admin.audit.col.time': 'Time',
'admin.audit.col.user': 'User',
'admin.audit.col.action': 'Action',
'admin.audit.col.resource': 'Resource',
'Güvenlik açısından hassas olaylar ve yönetim olayları (yedeklemeler, kullanıcılar, MFA, ayarlar).',
'admin.audit.empty': 'Henüz denetim girişi yok.',
'admin.audit.refresh': 'Yenile',
'admin.audit.loadMore': 'Daha fazlasını yükle',
'admin.audit.showing': '{count} yüklendi · {total} toplam',
'admin.audit.col.time': 'Zaman',
'admin.audit.col.user': 'Kullanıcı',
'admin.audit.col.action': 'Aksiyon',
'admin.audit.col.resource': 'Kaynak',
'admin.audit.col.ip': 'IP',
'admin.audit.col.details': 'Details',
'admin.github.title': 'Release History',
'admin.github.subtitle': 'Latest updates from {repo}',
'admin.github.latest': 'Latest',
'admin.github.prerelease': 'Pre-release',
'admin.github.showDetails': 'Show details',
'admin.github.hideDetails': 'Hide details',
'admin.github.loadMore': 'Load more',
'admin.github.loading': 'Loading...',
'admin.github.error': 'Failed to load releases',
'admin.github.by': 'by',
'admin.github.support': 'Helps me keep building TREK',
'admin.update.available': 'Update available',
'admin.update.text':
'TREK {version} is available. You are running {current}.',
'admin.update.button': 'View on GitHub',
'admin.update.install': 'Install Update',
'admin.update.confirmTitle': 'Install Update?',
'admin.audit.col.details': 'Detaylar',
'admin.github.title': 'Sürüm Geçmişi',
'admin.github.subtitle': "{repo}'dan en son güncellemeler",
'admin.github.latest': 'En sonuncu',
'admin.github.prerelease': 'Ön sürüm',
'admin.github.showDetails': 'Ayrıntıları göster',
'admin.github.hideDetails': 'Ayrıntıları gizle',
'admin.github.loadMore': 'Daha fazlasını yükle',
'admin.github.loading': 'Yükleniyor...',
'admin.github.error': 'Sürümler yüklenemedi',
'admin.github.by': 'ile',
'admin.github.support': "TREK'i geliştirmeye devam etmeme yardımcı oluyor",
'admin.update.available': 'Güncelleme mevcut',
'admin.update.text': 'TREK {versiyon} mevcut. {current} çalıştırıyorsunuz.',
'admin.update.button': "GitHub'da görüntüle",
'admin.update.install': 'Güncellemeyi Yükle',
'admin.update.confirmTitle': 'Güncelleme Yüklensin mi?',
'admin.update.confirmText':
'TREK will be updated from {current} to {version}. The server will restart automatically afterwards.',
'TREK, {current} sürümünden {version} sürümüne güncellenecek. Sunucu daha sonra otomatik olarak yeniden başlatılacaktır.',
'admin.update.dataInfo':
'All your data (trips, users, API keys, uploads, Vacay, Atlas, budgets) will be preserved.',
'Tüm verileriniz (seyahatler, kullanıcılar, API anahtarları, yüklemeler, Vacay, Atlas, bütçeler) korunacaktır.',
'admin.update.warning':
'The app will be briefly unavailable during the restart.',
'admin.update.confirm': 'Update Now',
'admin.update.installing': 'Updating…',
'admin.update.success': 'Update installed! Server is restarting…',
'admin.update.failed': 'Update failed',
'admin.update.backupHint': 'We recommend creating a backup before updating.',
'admin.update.backupLink': 'Go to Backup',
'admin.update.howTo': 'How to Update',
'Yeniden başlatma sırasında uygulama kısa süreliğine kullanılamayacaktır.',
'admin.update.confirm': 'Şimdi Güncelle',
'admin.update.installing': 'Güncelleniyor…',
'admin.update.success': 'Güncelleme yüklendi! Sunucu yeniden başlatılıyor…',
'admin.update.failed': 'Güncelleme başarısız oldu',
'admin.update.backupHint':
'Güncellemeden önce bir yedek oluşturmanızı öneririz.',
'admin.update.backupLink': 'Yedeklemeye Git',
'admin.update.howTo': 'Nasıl Güncellenir?',
'admin.update.dockerText':
'Your TREK instance runs in Docker. To update to {version}, run the following commands on your server:',
'admin.update.reloadHint': 'Please reload the page in a few seconds.',
'admin.tabs.permissions': 'Permissions',
'admin.addons.catalog.journey.name': 'Journey',
"TREK örneğiniz Docker'da çalışır. {version} sürümüne güncellemek için sunucunuzda aşağıdaki komutları çalıştırın:",
'admin.update.reloadHint':
'Lütfen birkaç saniye içinde sayfayı yeniden yükleyin.',
'admin.tabs.permissions': 'İzinler',
'admin.addons.catalog.journey.name': 'Seyahat',
'admin.addons.catalog.journey.description':
'Trip tracking & travel journal with check-ins, photos, and daily stories',
'Check-in, fotoğraf ve günlük hikâyelerle seyahat takibi ve seyahat günlüğü',
};
export default admin;
+1 -1
View File
@@ -1,6 +1,6 @@
import type { TranslationStrings } from '../types';
const airport: TranslationStrings = {
'airport.searchPlaceholder': 'Airport code or city (e.g. FRA)',
'airport.searchPlaceholder': 'Havaalanı kodu veya şehir (ör. FRA)',
};
export default airport;
+55 -53
View File
@@ -1,58 +1,60 @@
import type { TranslationStrings } from '../types';
const atlas: TranslationStrings = {
'atlas.subtitle': 'Your travel footprint around the world',
'atlas.countries': 'Countries',
'atlas.trips': 'Trips',
'atlas.places': 'Places',
'atlas.unmark': 'Remove',
'atlas.confirmMark': 'Mark this country as visited?',
'atlas.confirmUnmark': 'Remove this country from your visited list?',
'atlas.confirmUnmarkRegion': 'Remove this region from your visited list?',
'atlas.markVisited': 'Mark as visited',
'atlas.markVisitedHint': 'Add this country to your visited list',
'atlas.markRegionVisitedHint': 'Add this region to your visited list',
'atlas.addToBucket': 'Add to bucket list',
'atlas.addPoi': 'Add place',
'atlas.searchCountry': 'Search a country...',
'atlas.bucketNamePlaceholder': 'Name (country, city, place...)',
'atlas.month': 'Month',
'atlas.year': 'Year',
'atlas.addToBucketHint': 'Save as a place you want to visit',
'atlas.bucketWhen': 'When do you plan to visit?',
'atlas.statsTab': 'Stats',
'atlas.bucketTab': 'Bucket List',
'atlas.addBucket': 'Add to bucket list',
'atlas.bucketNotesPlaceholder': 'Notes (optional)',
'atlas.bucketEmpty': 'Your bucket list is empty',
'atlas.bucketEmptyHint': 'Add places you dream of visiting',
'atlas.days': 'Days',
'atlas.visitedCountries': 'Visited Countries',
'atlas.cities': 'Cities',
'atlas.noData': 'No travel data yet',
'atlas.noDataHint': 'Create a trip and add places to see your world map',
'atlas.lastTrip': 'Last trip',
'atlas.nextTrip': 'Next trip',
'atlas.daysLeft': 'days left',
'atlas.streak': 'Streak',
'atlas.years': 'years',
'atlas.yearInRow': 'year in a row',
'atlas.yearsInRow': 'years in a row',
'atlas.tripIn': 'trip in',
'atlas.tripsIn': 'trips in',
'atlas.since': 'since',
'atlas.europe': 'Europe',
'atlas.asia': 'Asia',
'atlas.northAmerica': 'N. America',
'atlas.southAmerica': 'S. America',
'atlas.africa': 'Africa',
'atlas.oceania': 'Oceania',
'atlas.other': 'Other',
'atlas.firstVisit': 'First trip',
'atlas.lastVisitLabel': 'Last trip',
'atlas.tripSingular': 'Trip',
'atlas.tripPlural': 'Trips',
'atlas.placeVisited': 'Place visited',
'atlas.placesVisited': 'Places visited',
'atlas.subtitle': 'Dünya çapında seyahat iziniz',
'atlas.countries': 'Ülkeler',
'atlas.trips': 'Geziler',
'atlas.places': 'Yer',
'atlas.unmark': 'Kaldırmak',
'atlas.confirmMark': 'Bu ülke ziyaret edildi olarak işaretlensin mi?',
'atlas.confirmUnmark': 'Bu ülke ziyaret ettiğiniz listeden kaldırılsın mı?',
'atlas.confirmUnmarkRegion':
'Bu bölge ziyaret ettiğiniz listeden kaldırılsın mı?',
'atlas.markVisited': 'Ziyaret edildi olarak işaretle',
'atlas.markVisitedHint': 'Bu ülkeyi ziyaret ettiğiniz listeye ekleyin',
'atlas.markRegionVisitedHint': 'Bu bölgeyi ziyaret ettiğiniz listeye ekleyin',
'atlas.addToBucket': 'Yapılacaklar listesine ekle',
'atlas.addPoi': 'Yer ekle',
'atlas.searchCountry': 'Bir ülkeyi arayın...',
'atlas.bucketNamePlaceholder': 'İsim (ülke, şehir, yer...)',
'atlas.month': 'Ay',
'atlas.year': 'Yıl',
'atlas.addToBucketHint': 'Ziyaret etmek istediğiniz yer olarak kaydedin',
'atlas.bucketWhen': 'Ne zaman ziyaret etmeyi planlıyorsunuz?',
'atlas.statsTab': 'İstatistikler',
'atlas.bucketTab': 'Yapılacaklar Listesi',
'atlas.addBucket': 'Yapılacaklar listesine ekle',
'atlas.bucketNotesPlaceholder': 'Notlar (isteğe bağlı)',
'atlas.bucketEmpty': 'Yapılacaklar listeniz boş',
'atlas.bucketEmptyHint': 'Ziyaret etmeyi hayal ettiğiniz yerleri ekleyin',
'atlas.days': 'Günler',
'atlas.visitedCountries': 'Ziyaret Edilen Ülkeler',
'atlas.cities': 'Şehirler',
'atlas.noData': 'Henüz seyahat verisi yok',
'atlas.noDataHint':
'Bir gezi oluşturun ve dünya haritanızı göreceğiniz yerleri ekleyin',
'atlas.lastTrip': 'Son yolculuk',
'atlas.nextTrip': 'Sonraki gezi',
'atlas.daysLeft': 'kalan günler',
'atlas.streak': 'Rüzgâr gibi geçmek',
'atlas.years': 'yıllar',
'atlas.yearInRow': 'yıl üst üste',
'atlas.yearsInRow': 'yıllar üst üste',
'atlas.tripIn': 'yolculuk',
'atlas.tripsIn': 'geziler',
'atlas.since': 'o zamandan beri',
'atlas.europe': 'Avrupa',
'atlas.asia': 'Asya',
'atlas.northAmerica': 'Kuzey Amerika',
'atlas.southAmerica': 'G. Amerika',
'atlas.africa': 'Afrika',
'atlas.oceania': 'Okyanusya',
'atlas.other': 'Diğer',
'atlas.firstVisit': 'İlk yolculuk',
'atlas.lastVisitLabel': 'Son yolculuk',
'atlas.tripSingular': 'Seyahat',
'atlas.tripPlural': 'Geziler',
'atlas.placeVisited': 'Ziyaret edilen yer',
'atlas.placesVisited': 'Ziyaret edilen yerler',
};
export default atlas;
+65 -66
View File
@@ -1,77 +1,76 @@
import type { TranslationStrings } from '../types';
const backup: TranslationStrings = {
'backup.title': 'Data Backup',
'backup.subtitle': 'Database and all uploaded files',
'backup.refresh': 'Refresh',
'backup.upload': 'Upload Backup',
'backup.uploading': 'Uploading…',
'backup.create': 'Create Backup',
'backup.creating': 'Creating…',
'backup.empty': 'No backups yet',
'backup.createFirst': 'Create first backup',
'backup.download': 'Download',
'backup.restore': 'Restore',
'backup.title': 'Veri Yedekleme',
'backup.subtitle': 'Veritabanı ve tüm yüklenen dosyalar',
'backup.refresh': 'Yenile',
'backup.upload': 'Yedek Yükle',
'backup.uploading': 'Yükleniyor…',
'backup.create': 'Yedek Oluştur',
'backup.creating': 'Oluşturuluyor…',
'backup.empty': 'Henüz yedek yok',
'backup.createFirst': 'İlk yedeği oluştur',
'backup.download': 'İndir',
'backup.restore': 'Geri yükle',
'backup.confirm.restore':
'Restore backup "{name}"?\n\nAll current data will be replaced with the backup.',
'"{name}" yedeği geri yüklensin mi?\\\\n\\\\nTüm mevcut veriler yedekle değiştirilecek.',
'backup.confirm.uploadRestore':
'Upload and restore backup file "{name}"?\n\nAll current data will be overwritten.',
'backup.confirm.delete': 'Delete backup "{name}"?',
'backup.toast.loadError': 'Failed to load backups',
'backup.toast.created': 'Backup created successfully',
'backup.toast.createError': 'Failed to create backup',
'backup.toast.restored': 'Backup restored. Page will reload…',
'backup.toast.restoreError': 'Failed to restore',
'backup.toast.uploadError': 'Failed to upload',
'backup.toast.deleted': 'Backup deleted',
'backup.toast.deleteError': 'Failed to delete',
'backup.toast.downloadError': 'Download failed',
'backup.toast.settingsSaved': 'Auto-backup settings saved',
'backup.toast.settingsError': 'Failed to save settings',
'backup.auto.title': 'Auto-Backup',
'backup.auto.subtitle': 'Automatic backup on a schedule',
'backup.auto.enable': 'Enable auto-backup',
'"{name}" yedek dosyası yüklenip geri yüklensin mi?\\\\n\\\\nTüm mevcut verilerin üzerine yazılacak.',
'backup.confirm.delete': '"{name}" yedeği silinsin mi?',
'backup.toast.loadError': 'Yedekler yüklenemedi',
'backup.toast.created': 'Yedek başarıyla oluşturuldu',
'backup.toast.createError': 'Yedek oluşturulamadı',
'backup.toast.restored': 'Yedek geri Yüklendi. Sayfa yenilenecek…',
'backup.toast.restoreError': 'Geri yükleme başarısız',
'backup.toast.uploadError': 'Yükleme başarısız oldu',
'backup.toast.deleted': 'Yedek silindi',
'backup.toast.deleteError': 'Silinemedi',
'backup.toast.downloadError': 'İndirme başarısız',
'backup.toast.settingsSaved': 'Otomatik yedekleme ayarları kaydedildi',
'backup.toast.settingsError': 'Ayarlar kaydedilemedi',
'backup.auto.title': 'Otomatik yedekleme',
'backup.auto.subtitle': 'Zamanlanmış otomatik yedekleme',
'backup.auto.enable': 'Otomatik yedeklemeyi etkinleştir',
'backup.auto.enableHint':
'Backups will be created automatically on the chosen schedule',
'backup.auto.interval': 'Interval',
'backup.auto.hour': 'Run at hour',
'backup.auto.hourHint': 'Server local time ({format} format)',
'backup.auto.dayOfWeek': 'Day of week',
'backup.auto.dayOfMonth': 'Day of month',
'backup.auto.dayOfMonthHint':
'Limited to 128 for compatibility with all months',
'backup.auto.scheduleSummary': 'Schedule',
'backup.auto.summaryDaily': 'Every day at {hour}:00',
'backup.auto.summaryWeekly': 'Every {day} at {hour}:00',
'backup.auto.summaryMonthly': 'Day {day} of every month at {hour}:00',
'backup.auto.envLocked': 'Docker',
'Yedekler seçilen programa göre otomatik oluşturulur',
'backup.auto.interval': 'Aralık',
'backup.auto.hour': 'Çalışma saati',
'backup.auto.hourHint': 'Sunucu yerel saati ({format} biçimi)',
'backup.auto.dayOfWeek': 'Haftanın günü',
'backup.auto.dayOfMonth': 'Ayın günü',
'backup.auto.dayOfMonthHint': 'Tüm aylarla uyumluluk için 128 ile sınırlı',
'backup.auto.scheduleSummary': 'Program',
'backup.auto.summaryDaily': 'Her gün saat {hour}:00',
'backup.auto.summaryWeekly': 'Her {day} saat {hour}:00',
'backup.auto.summaryMonthly': 'Her ayın {day}. günü saat {hour}:00',
'backup.auto.envLocked': 'Liman işçisi',
'backup.auto.envLockedHint':
'Auto-backup is configured via Docker environment variables. To change these settings, update your docker-compose.yml and restart the container.',
'backup.auto.copyEnv': 'Copy Docker env vars',
'backup.auto.envCopied': 'Docker env vars copied to clipboard',
'backup.auto.keepLabel': 'Delete old backups after',
'backup.dow.sunday': 'Sun',
'backup.dow.monday': 'Mon',
'backup.dow.tuesday': 'Tue',
'backup.dow.wednesday': 'Wed',
'backup.dow.thursday': 'Thu',
'backup.dow.friday': 'Fri',
'backup.dow.saturday': 'Sat',
'backup.interval.hourly': 'Hourly',
'backup.interval.daily': 'Daily',
'backup.interval.weekly': 'Weekly',
'backup.interval.monthly': 'Monthly',
'backup.keep.1day': '1 day',
'backup.keep.3days': '3 days',
'backup.keep.7days': '7 days',
'backup.keep.14days': '14 days',
'backup.keep.30days': '30 days',
'backup.keep.forever': 'Keep forever',
'backup.restoreConfirmTitle': 'Restore Backup?',
'Otomatik yedekleme Docker ortam değişkenleriyle yapılandırılır. Bu ayarları değiştirmek için docker-compose.yml dosyanızı güncelleyip konteyneri yeniden başlatın.',
'backup.auto.copyEnv': 'Docker Ortam değişkenlerini kopyala',
'backup.auto.envCopied': 'Docker ortam değişkenleri panoya kopyalandı',
'backup.auto.keepLabel': 'Eski yedekleri şu süreden sonra sil',
'backup.dow.sunday': 'Güneş',
'backup.dow.monday': 'Pazartesi',
'backup.dow.tuesday': 'Salı',
'backup.dow.wednesday': 'Çar',
'backup.dow.thursday': 'Per',
'backup.dow.friday': 'Cuma',
'backup.dow.saturday': 'Doygunluk',
'backup.interval.hourly': 'Saatlik',
'backup.interval.daily': 'Günlük',
'backup.interval.weekly': 'Haftalık',
'backup.interval.monthly': 'Aylık',
'backup.keep.1day': '1 gün',
'backup.keep.3days': '3 gün',
'backup.keep.7days': '7 gün',
'backup.keep.14days': '14 gün',
'backup.keep.30days': '30 gün',
'backup.keep.forever': 'Sonsuza kadar sakla',
'backup.restoreConfirmTitle': 'Yedek geri yüklensin mi?',
'backup.restoreWarning':
'All current data (trips, places, users, uploads) will be permanently replaced by the backup. This action cannot be undone.',
'Tüm mevcut veriler (seyahatler, yerler, kullanıcılar, yüklemeler) yedekle kalıcı olarak değiştirilecek. Bu işlem geri alınamaz.',
'backup.restoreTip':
'Tip: Create a backup of the current state before restoring.',
'backup.restoreConfirm': 'Yes, restore',
'İpucu: Geri yüklemeden önce mevcut durumun yedeğini oluşturun.',
'backup.restoreConfirm': 'Evet, geri yükle',
};
export default backup;
+35 -35
View File
@@ -1,43 +1,43 @@
import type { TranslationStrings } from '../types';
const budget: TranslationStrings = {
'budget.title': 'Budget',
'budget.exportCsv': 'Export CSV',
'budget.emptyTitle': 'No budget created yet',
'budget.title': 'Bütçe',
'budget.exportCsv': 'CSV dışa aktar',
'budget.emptyTitle': 'Henüz bütçe oluşturulmadı',
'budget.emptyText':
'Create categories and entries to plan your travel budget',
'budget.emptyPlaceholder': 'Enter category name...',
'budget.createCategory': 'Create Category',
'budget.category': 'Category',
'budget.categoryName': 'Category Name',
'budget.table.name': 'Name',
'budget.table.total': 'Total',
'budget.table.persons': 'Persons',
'budget.table.days': 'Days',
'budget.table.perPerson': 'Per Person',
'budget.table.perDay': 'Per Day',
'budget.table.perPersonDay': 'P. p / Day',
'budget.table.note': 'Note',
'budget.table.date': 'Date',
'budget.newEntry': 'New Entry',
'budget.defaultEntry': 'New Entry',
'budget.defaultCategory': 'New Category',
'budget.total': 'Total',
'budget.totalBudget': 'Total Budget',
'budget.byCategory': 'By Category',
'budget.editTooltip': 'Click to edit',
'budget.linkedToReservation': 'Linked to a reservation — edit the name there',
'Seyahat bütçenizi planlamak için kategoriler ve kayıtlar oluşturun',
'budget.emptyPlaceholder': 'Kategori adı girin...',
'budget.createCategory': 'Kategori Oluştur',
'budget.category': 'Kategori',
'budget.categoryName': 'Kategori Adı',
'budget.table.name': 'İsim',
'budget.table.total': 'Toplam',
'budget.table.persons': 'Kişiler',
'budget.table.days': 'Günler',
'budget.table.perPerson': 'Kişi Başı',
'budget.table.perDay': 'Gün Başı',
'budget.table.perPersonDay': 'Kişi/gün',
'budget.table.note': 'Not',
'budget.table.date': 'Tarih',
'budget.newEntry': 'Yeni Kayıt',
'budget.defaultEntry': 'Yeni Kayıt',
'budget.defaultCategory': 'Yeni Kategori',
'budget.total': 'Toplam',
'budget.totalBudget': 'Toplam Bütçe',
'budget.byCategory': 'Kategoriye Göre',
'budget.editTooltip': 'Düzenlemek için tıklayın',
'budget.linkedToReservation': 'Bir rezervasyona bağlı — adı orada düzenleyin',
'budget.confirm.deleteCategory':
'Are you sure you want to delete the category "{name}" with {count} entries?',
'budget.deleteCategory': 'Delete Category',
'budget.perPerson': 'Per Person',
'budget.paid': 'Paid',
'budget.open': 'Open',
'budget.noMembers': 'No members assigned',
'budget.settlement': 'Settlement',
'"{name}" kategorisini {count} kayıtla birlikte silmek istediğinizden emin misiniz?',
'budget.deleteCategory': 'Kategoriyi Sil',
'budget.perPerson': 'Kişi Başı',
'budget.paid': 'Ödendi',
'budget.open': 'Açık',
'budget.noMembers': 'Atanmış üye yok',
'budget.settlement': 'Hesaplaşma',
'budget.settlementInfo':
'Click a member avatar on a budget item to mark them green — this means they paid. The settlement then shows who owes whom and how much.',
'budget.netBalances': 'Net Balances',
'budget.categoriesLabel': 'categories',
'Bir bütçe kalemindeki üye avatarına tıklayarak yeşil işaretleyin — bu ödedikleri anlamına gelir. Hesaplaşma kimin kime ne kadar borçlu olduğunu gösterir.',
'budget.netBalances': 'Net Bakiyeler',
'budget.categoriesLabel': 'kategoriler',
};
export default budget;
+20 -20
View File
@@ -1,26 +1,26 @@
import type { TranslationStrings } from '../types';
const categories: TranslationStrings = {
'categories.title': 'Categories',
'categories.subtitle': 'Manage categories for places',
'categories.new': 'New Category',
'categories.empty': 'No categories yet',
'categories.namePlaceholder': 'Category name',
'categories.icon': 'Icon',
'categories.color': 'Color',
'categories.customColor': 'Choose custom color',
'categories.preview': 'Preview',
'categories.defaultName': 'Category',
'categories.update': 'Update',
'categories.create': 'Create',
'categories.title': 'Kategoriler',
'categories.subtitle': 'Yer kategorilerini yönetin',
'categories.new': 'Yeni Kategori',
'categories.empty': 'Henüz kategori yok',
'categories.namePlaceholder': 'Kategori adı',
'categories.icon': 'Simge',
'categories.color': 'Renk',
'categories.customColor': 'Özel renk seç',
'categories.preview': 'Önizleme',
'categories.defaultName': 'Kategori',
'categories.update': 'Güncelle',
'categories.create': 'Oluştur',
'categories.confirm.delete':
'Delete category? Places in this category will not be deleted.',
'categories.toast.loadError': 'Failed to load categories',
'categories.toast.nameRequired': 'Please enter a name',
'categories.toast.updated': 'Category updated',
'categories.toast.created': 'Category created',
'categories.toast.saveError': 'Failed to save',
'categories.toast.deleted': 'Category deleted',
'categories.toast.deleteError': 'Failed to delete',
'Kategori silinsin mi? Bu kategorideki yerler silinmez.',
'categories.toast.loadError': 'Kategoriler yüklenemedi',
'categories.toast.nameRequired': 'Lütfen bir ad girin',
'categories.toast.updated': 'Kategori güncellendi',
'categories.toast.created': 'Kategori oluşturuldu',
'categories.toast.saveError': 'Kaydedilemedi',
'categories.toast.deleted': 'Kategori silindi',
'categories.toast.deleteError': 'Silinemedi',
};
export default categories;
+66 -66
View File
@@ -1,74 +1,74 @@
import type { TranslationStrings } from '../types';
const collab: TranslationStrings = {
'collab.tabs.chat': 'Chat',
'collab.tabs.notes': 'Notes',
'collab.tabs.polls': 'Polls',
'collab.tabs.chat': 'Sohbet',
'collab.tabs.notes': 'Notlar',
'collab.tabs.polls': 'Anketler',
'collab.whatsNext.title': "What's Next",
'collab.whatsNext.today': 'Today',
'collab.whatsNext.tomorrow': 'Tomorrow',
'collab.whatsNext.empty': 'No upcoming activities',
'collab.whatsNext.until': 'to',
'collab.whatsNext.emptyHint': 'Activities with times will appear here',
'collab.chat.send': 'Send',
'collab.chat.placeholder': 'Type a message...',
'collab.chat.empty': 'Start the conversation',
'collab.chat.emptyHint': 'Messages are shared with all trip members',
'collab.whatsNext.today': 'Bugün',
'collab.whatsNext.tomorrow': 'Yarın',
'collab.whatsNext.empty': 'Yaklaşan etkinlik yok',
'collab.whatsNext.until': '',
'collab.whatsNext.emptyHint': 'Saati olan etkinlikler burada görünür',
'collab.chat.send': 'Gönder',
'collab.chat.placeholder': 'Mesaj yazın...',
'collab.chat.empty': 'Sohbeti başlatın',
'collab.chat.emptyHint': 'Mesajlar tüm seyahat üyeleriyle paylaşılır',
'collab.chat.emptyDesc':
'Share ideas, plans, and updates with your travel group',
'collab.chat.today': 'Today',
'collab.chat.yesterday': 'Yesterday',
'collab.chat.deletedMessage': 'deleted a message',
'collab.chat.reply': 'Reply',
'collab.chat.loadMore': 'Load older messages',
'collab.chat.justNow': 'just now',
'collab.chat.minutesAgo': '{n}m ago',
'collab.chat.hoursAgo': '{n}h ago',
'collab.notes.title': 'Notes',
'collab.notes.new': 'New Note',
'collab.notes.empty': 'No notes yet',
'collab.notes.emptyHint': 'Start capturing ideas and plans',
'collab.notes.all': 'All',
'collab.notes.titlePlaceholder': 'Note title',
'collab.notes.contentPlaceholder': 'Write something...',
'collab.notes.categoryPlaceholder': 'Category',
'collab.notes.newCategory': 'New category...',
'collab.notes.category': 'Category',
'collab.notes.noCategory': 'No category',
'collab.notes.color': 'Color',
'collab.notes.save': 'Save',
'collab.notes.cancel': 'Cancel',
'collab.notes.edit': 'Edit',
'collab.notes.delete': 'Delete',
'collab.notes.pin': 'Pin',
'collab.notes.unpin': 'Unpin',
'collab.notes.daysAgo': '{n}d ago',
'collab.notes.categorySettings': 'Manage Categories',
'collab.notes.create': 'Create',
'collab.notes.website': 'Website',
'Seyahat grubunuzla fikir, plan ve güncellemeleri paylaşın',
'collab.chat.today': 'Bugün',
'collab.chat.yesterday': 'Dün',
'collab.chat.deletedMessage': 'bir mesajı sildi',
'collab.chat.reply': 'Yanıtla',
'collab.chat.loadMore': 'Eski mesajları yükle',
'collab.chat.justNow': 'az önce',
'collab.chat.minutesAgo': '{n} dk önce',
'collab.chat.hoursAgo': '{n} sa önce',
'collab.notes.title': 'Notlar',
'collab.notes.new': 'Yeni Not',
'collab.notes.empty': 'Henüz not yok',
'collab.notes.emptyHint': 'Fikir ve planları kaydetmeye başlayın',
'collab.notes.all': 'Tüm',
'collab.notes.titlePlaceholder': 'Not başlığı',
'collab.notes.contentPlaceholder': 'Bir şeyler yazın...',
'collab.notes.categoryPlaceholder': 'Kategori',
'collab.notes.newCategory': 'Yeni kategori...',
'collab.notes.category': 'Kategori',
'collab.notes.noCategory': 'Kategori yok',
'collab.notes.color': 'Renk',
'collab.notes.save': 'Kaydet',
'collab.notes.cancel': 'İptal etmek',
'collab.notes.edit': 'Düzenle',
'collab.notes.delete': 'Sil',
'collab.notes.pin': 'Sabitle',
'collab.notes.unpin': 'Sabitlemeyi kaldır',
'collab.notes.daysAgo': '{n} gün önce',
'collab.notes.categorySettings': 'Kategorileri Yönet',
'collab.notes.create': 'Oluştur',
'collab.notes.website': 'Web sitesi',
'collab.notes.websitePlaceholder': 'https://...',
'collab.notes.attachFiles': 'Attach files',
'collab.notes.noCategoriesYet': 'No categories yet',
'collab.notes.emptyDesc': 'Create a note to get started',
'collab.polls.title': 'Polls',
'collab.polls.new': 'New Poll',
'collab.polls.empty': 'No polls yet',
'collab.polls.emptyHint': 'Ask the group and vote together',
'collab.polls.question': 'Question',
'collab.polls.questionPlaceholder': 'What should we do?',
'collab.polls.addOption': '+ Add option',
'collab.polls.optionPlaceholder': 'Option {n}',
'collab.polls.create': 'Create Poll',
'collab.polls.close': 'Close',
'collab.polls.closed': 'Closed',
'collab.polls.votes': '{n} votes',
'collab.polls.vote': '{n} vote',
'collab.polls.multipleChoice': 'Multiple choice',
'collab.polls.multiChoice': 'Multiple choice',
'collab.polls.deadline': 'Deadline',
'collab.polls.option': 'Option',
'collab.polls.options': 'Options',
'collab.polls.delete': 'Delete',
'collab.polls.closedSection': 'Closed',
'collab.notes.attachFiles': 'Dosya ekle',
'collab.notes.noCategoriesYet': 'Henüz kategori yok',
'collab.notes.emptyDesc': 'Başlamak için bir not oluşturun',
'collab.polls.title': 'Anketler',
'collab.polls.new': 'Yeni Anket',
'collab.polls.empty': 'Henüz anket yok',
'collab.polls.emptyHint': 'Gruba sorun ve birlikte oy verin',
'collab.polls.question': 'Soru',
'collab.polls.questionPlaceholder': 'Ne yapalım?',
'collab.polls.addOption': '+ Seçenek ekle',
'collab.polls.optionPlaceholder': 'Seçenek {n}',
'collab.polls.create': 'Anket Oluştur',
'collab.polls.close': 'Kapat',
'collab.polls.closed': 'Kapalı',
'collab.polls.votes': '{n} oy',
'collab.polls.vote': '{n} oy',
'collab.polls.multipleChoice': 'Çoklu seçim',
'collab.polls.multiChoice': 'Çoklu seçim',
'collab.polls.deadline': 'Son tarih',
'collab.polls.option': 'Seçenek',
'collab.polls.options': 'Seçenekler',
'collab.polls.delete': 'Sil',
'collab.polls.closedSection': 'Kapalı',
};
export default collab;
+6 -6
View File
@@ -25,7 +25,7 @@ const common: TranslationStrings = {
'common.upload': 'Yükle',
'common.search': 'Ara',
'common.confirm': 'Onayla',
'common.ok': 'OK',
'common.ok': 'Tamam',
'common.yes': 'Evet',
'common.no': 'Hayır',
'common.or': 'veya',
@@ -36,11 +36,11 @@ const common: TranslationStrings = {
'common.discard': 'Vazgeç',
'common.name': 'Ad',
'common.email': 'E-posta',
'common.password': 'Parola',
'common.password': 'Şifre',
'common.saving': 'Kaydediliyor...',
'common.justNow': 'az önce',
'common.hoursAgo': '{count}s önce',
'common.daysAgo': '{count}g önce',
'common.hoursAgo': '{count} sa. önce',
'common.daysAgo': '{count} gün önce',
'common.saved': 'Kaydedildi',
'common.update': 'Güncelle',
'common.change': 'Değiştir',
@@ -49,7 +49,7 @@ const common: TranslationStrings = {
'common.reset': 'Sıfırla',
'common.expand': 'Genişlet',
'common.collapse': 'Daralt',
'common.copy': 'Copy',
'common.copied': 'Copied',
'common.copy': 'Kopyala',
'common.copied': 'Kopyalandı',
};
export default common;
+89 -90
View File
@@ -1,14 +1,14 @@
import type { TranslationStrings } from '../types';
const dashboard: TranslationStrings = {
'dashboard.title': 'Gezilerim',
'dashboard.subtitle.loading': 'Geziler yükleniyor...',
'dashboard.subtitle.trips': '{count} gezi ({archived} arşivlenmiş)',
'dashboard.subtitle.empty': 'İlk gezinizi başlatın',
'dashboard.subtitle.activeOne': '{count} aktif gezi',
'dashboard.subtitle.activeMany': '{count} aktif gezi',
'dashboard.subtitle.archivedSuffix': ' · {count} arşivlendi',
'dashboard.newTrip': 'Yeni gezi',
'dashboard.title': 'Seyahatlerim',
'dashboard.subtitle.loading': 'Seyahatler yükleniyor...',
'dashboard.subtitle.trips': '{count} seyahat ({archived} arşivde)',
'dashboard.subtitle.empty': 'İlk seyahatinizi başlatın',
'dashboard.subtitle.activeOne': '{count} etkin seyahat',
'dashboard.subtitle.activeMany': '{count} etkin seyahat',
'dashboard.subtitle.archivedSuffix': ' · {count} arşivde',
'dashboard.newTrip': 'Yeni Seyahat',
'dashboard.newTripSub': 'Start blank · or import from another planner',
'dashboard.gridView': 'Izgara görünümü',
'dashboard.listView': 'Liste görünümü',
@@ -16,108 +16,107 @@ const dashboard: TranslationStrings = {
'dashboard.timezone': 'Saat dilimleri',
'dashboard.localTime': 'Yerel',
'dashboard.timezoneCustomTitle': 'Özel saat dilimi',
'dashboard.timezoneCustomLabelPlaceholder': 'Etiket (opsiyonel)',
'dashboard.timezoneCustomTzPlaceholder': 'örn. Europe/Istanbul',
'dashboard.timezoneCustomLabelPlaceholder': 'Etiket (isteğe bağlı)',
'dashboard.timezoneCustomTzPlaceholder': 'örn. America/New_York',
'dashboard.timezoneCustomAdd': 'Ekle',
'dashboard.timezoneCustomErrorEmpty': 'Bir saat dilimi kimliği girin',
'dashboard.timezoneCustomErrorEmpty': 'Saat dilimi tanımlayıcısı girin',
'dashboard.timezoneCustomErrorInvalid':
'Geçersiz saat dilimi. Europe/Istanbul gibi bir format kullanın',
'dashboard.timezoneCustomErrorDuplicate': 'Zaten eklendi',
'dashboard.emptyTitle': 'Henüz gezi yok',
'dashboard.emptyText': 'İlk gezinizi oluşturun ve planlamaya başlayın!',
'dashboard.emptyButton': 'İlk geziyi oluştur',
'dashboard.nextTrip': 'Sıradaki gezi',
'Geçersiz saat dilimi. Europe/Berlin gibi bir biçim kullanın',
'dashboard.timezoneCustomErrorDuplicate': 'Zaten ekli',
'dashboard.emptyTitle': 'Henüz seyahat yok',
'dashboard.emptyText': 'İlk seyahatinizi oluşturup planlamaya başlayın!',
'dashboard.emptyButton': 'İlk Seyahati Oluştur',
'dashboard.nextTrip': 'Sonraki Seyahat',
'dashboard.shared': 'Paylaşılan',
'dashboard.sharedBy': '{name} tarafından paylaşıldı',
'dashboard.days': 'Gün',
'dashboard.places': 'Yer',
'dashboard.members': 'Arkadaş',
'dashboard.sharedBy': '{name} paylaştı',
'dashboard.days': 'Günler',
'dashboard.places': 'Yerler',
'dashboard.members': 'Arkadaşlar',
'dashboard.archive': 'Arşivle',
'dashboard.copyTrip': 'Kopyala',
'dashboard.copySuffix': 'kopya',
'dashboard.restore': 'Geri yükle',
'dashboard.restore': 'Geri al',
'dashboard.archived': 'Arşivlendi',
'dashboard.status.ongoing': 'Devam ediyor',
'dashboard.status.today': 'Bugün',
'dashboard.status.tomorrow': 'Yarın',
'dashboard.status.past': 'Geçmiş',
'dashboard.status.daysLeft': '{count} gün kaldı',
'dashboard.toast.loadError': 'Failed to load trips',
'dashboard.toast.created': 'Trip created successfully!',
'dashboard.toast.createError': 'Failed to create trip',
'dashboard.toast.updated': 'Trip updated!',
'dashboard.toast.updateError': 'Failed to update trip',
'dashboard.toast.deleted': 'Trip deleted',
'dashboard.toast.deleteError': 'Failed to delete trip',
'dashboard.toast.archived': 'Trip archived',
'dashboard.toast.archiveError': 'Failed to archive trip',
'dashboard.toast.restored': 'Trip restored',
'dashboard.toast.restoreError': 'Failed to restore trip',
'dashboard.toast.copied': 'Trip copied!',
'dashboard.toast.copyError': 'Failed to copy trip',
'dashboard.toast.loadError': 'Seyahatler yüklenemedi',
'dashboard.toast.created': 'Seyahat oluşturuldu!',
'dashboard.toast.createError': 'Seyahat oluşturulamadı',
'dashboard.toast.updated': 'Seyahat güncellendi!',
'dashboard.toast.updateError': 'Seyahat güncellenemedi',
'dashboard.toast.deleted': 'Seyahat silindi',
'dashboard.toast.deleteError': 'Seyahat silinemedi',
'dashboard.toast.archived': 'Seyahat arşivlendi',
'dashboard.toast.archiveError': 'Arşivlenemedi',
'dashboard.toast.restored': 'Seyahat geri alındı',
'dashboard.toast.restoreError': 'Geri alınamadı',
'dashboard.toast.copied': 'Seyahat kopyalandı!',
'dashboard.toast.copyError': 'Kopyalanamadı',
'dashboard.confirm.delete':
'Delete trip "{title}"? All places and plans will be permanently deleted.',
'dashboard.confirm.copy.title': 'Copy this trip?',
'dashboard.confirm.copy.willCopy': 'Will be copied',
'dashboard.confirm.copy.will1': 'Days, places & day assignments',
'dashboard.confirm.copy.will2': 'Accommodations & reservations',
'dashboard.confirm.copy.will3': 'Budget items & category order',
'dashboard.confirm.copy.will4': 'Packing lists (unchecked)',
'dashboard.confirm.copy.will5': 'TODOs (unassigned & unchecked)',
'dashboard.confirm.copy.will6': 'Day notes',
'"{title}" seyahatini sil? Tüm yerler ve planlar kalıcı olarak silinir.',
'dashboard.confirm.copy.title': 'Bu seyahat kopyalansın mı?',
'dashboard.confirm.copy.willCopy': 'Kopyalanacak',
'dashboard.confirm.copy.will1': 'Günler, yerler ve gün atamaları',
'dashboard.confirm.copy.will2': 'Konaklama ve rezervasyonlar',
'dashboard.confirm.copy.will3': 'Bütçe kalemleri ve kategori sırası',
'dashboard.confirm.copy.will4': 'Paket listeleri (işaretlenmemiş)',
'dashboard.confirm.copy.will5': 'Yapılacaklar (atanmamış ve işaretlenmemiş)',
'dashboard.confirm.copy.will6': 'Gün notları',
'dashboard.confirm.copy.wontCopy': "Won't be copied",
'dashboard.confirm.copy.wont1': 'Collaborators & member assignments',
'dashboard.confirm.copy.wont2': 'Collab notes, polls & messages',
'dashboard.confirm.copy.wont3': 'Files & photos',
'dashboard.confirm.copy.wont4': 'Share tokens',
'dashboard.confirm.copy.confirm': 'Copy trip',
'dashboard.editTrip': 'Geziyi düzenle',
'dashboard.createTrip': 'Yeni gezi oluştur',
'dashboard.confirm.copy.wont1': 'İşbirlikçiler ve üye atamaları',
'dashboard.confirm.copy.wont2': 'Collab notları, anketler ve mesajlar',
'dashboard.confirm.copy.wont3': 'Dosyalar ve fotoğraflar',
'dashboard.confirm.copy.wont4': 'Paylaşım jetonları',
'dashboard.confirm.copy.confirm': 'Seyahati kopyala',
'dashboard.editTrip': 'Seyahati Düzenle',
'dashboard.createTrip': 'Yeni Seyahat Oluştur',
'dashboard.tripTitle': 'Başlık',
'dashboard.tripTitlePlaceholder': 'e.g. Summer in Japan',
'dashboard.tripTitlePlaceholder': 'örn. Japonya yaz tatili',
'dashboard.tripDescription': 'Açıklama',
'dashboard.tripDescriptionPlaceholder': 'What is this trip about?',
'dashboard.startDate': 'Başlangıç tarihi',
'dashboard.endDate': 'Bitiş tarihi',
'dashboard.tripDescriptionPlaceholder': 'Bu seyahat ne hakkında?',
'dashboard.startDate': 'Başlangıç Tarihi',
'dashboard.endDate': 'Bitiş Tarihi',
'dashboard.dayCount': 'Gün sayısı',
'dashboard.dayCountHint':
'How many days to plan for when no travel dates are set.',
'dashboard.dayCountHint': 'Seyahat tarihi yoksa kaç gün planlanacağı.',
'dashboard.noDateHint':
'No date set — 7 default days will be created. You can change this anytime.',
'dashboard.coverImage': 'Kapak resmi',
'dashboard.addCoverImage': 'Add cover image (or drag & drop)',
'Tarih yok — varsayılan 7 gün oluşturulur. İstediğiniz zaman değiştirebilirsiniz.',
'dashboard.coverImage': 'Kapak Görseli',
'dashboard.addCoverImage': 'Kapak ekle (sürükleyip bırakabilirsiniz)',
'dashboard.addMembers': 'Seyahat arkadaşları',
'dashboard.addMember': 'Üye ekle',
'dashboard.coverSaved': 'Cover image saved',
'dashboard.coverUploadError': 'Failed to upload',
'dashboard.coverRemoveError': 'Failed to remove',
'dashboard.titleRequired': 'Başlık zorunludur',
'dashboard.endDateError': 'Bitiş tarihi başlangıç tarihinden sonra olmalıdır',
'dashboard.greeting.morning': 'Good morning,',
'dashboard.greeting.afternoon': 'Good afternoon,',
'dashboard.greeting.evening': 'Good evening,',
'dashboard.mobile.liveNow': 'Live Now',
'dashboard.mobile.tripProgress': 'Trip progress',
'dashboard.mobile.daysLeft': '{count} days left',
'dashboard.mobile.places': 'Places',
'dashboard.mobile.buddies': 'Buddies',
'dashboard.mobile.newTrip': 'New Trip',
'dashboard.mobile.currency': 'Currency',
'dashboard.mobile.timezone': 'Timezone',
'dashboard.mobile.upcomingTrips': 'Upcoming Trips',
'dashboard.mobile.yourTrips': 'Your Trips',
'dashboard.mobile.trips': 'trips',
'dashboard.mobile.starts': 'Starts',
'dashboard.mobile.duration': 'Duration',
'dashboard.mobile.day': 'day',
'dashboard.mobile.days': 'days',
'dashboard.mobile.ongoing': 'Ongoing',
'dashboard.mobile.startsToday': 'Starts today',
'dashboard.mobile.tomorrow': 'Tomorrow',
'dashboard.mobile.inDays': 'In {count} days',
'dashboard.mobile.inMonths': 'In {count} months',
'dashboard.mobile.completed': 'Completed',
'dashboard.mobile.currencyConverter': 'Currency Converter',
'dashboard.coverSaved': 'Kapak kaydedildi',
'dashboard.coverUploadError': 'Yüklenemedi',
'dashboard.coverRemoveError': 'Kaldırılamadı',
'dashboard.titleRequired': 'Başlık gerekli',
'dashboard.endDateError': 'Bitiş tarihi başlangıçtan sonra olmalı',
'dashboard.greeting.morning': 'Günaydın,',
'dashboard.greeting.afternoon': 'İyi günler,',
'dashboard.greeting.evening': 'İyi akşamlar,',
'dashboard.mobile.liveNow': 'Canlı',
'dashboard.mobile.tripProgress': 'Seyahat ilerlemesi',
'dashboard.mobile.daysLeft': '{count} gün kaldı',
'dashboard.mobile.places': 'Yerler',
'dashboard.mobile.buddies': 'Arkadaşlar',
'dashboard.mobile.newTrip': 'Yeni Seyahat',
'dashboard.mobile.currency': 'Para birimi',
'dashboard.mobile.timezone': 'Saat dilimi',
'dashboard.mobile.upcomingTrips': 'Yaklaşan Seyahatler',
'dashboard.mobile.yourTrips': 'Seyahatleriniz',
'dashboard.mobile.trips': 'seyahat',
'dashboard.mobile.starts': 'Başlıyor',
'dashboard.mobile.duration': 'Süre',
'dashboard.mobile.day': 'gün',
'dashboard.mobile.days': 'gün',
'dashboard.mobile.ongoing': 'Devam ediyor',
'dashboard.mobile.startsToday': 'Bugün başlıyor',
'dashboard.mobile.tomorrow': 'Yarın',
'dashboard.mobile.inDays': '{count} Gün sonra',
'dashboard.mobile.inMonths': '{count} Ay sonra',
'dashboard.mobile.completed': 'Tamamlandı',
'dashboard.mobile.currencyConverter': 'Para birimi dönüştürücü',
'dashboard.filter.planned': 'Planned',
'dashboard.hero.badgeLive': 'LIVE NOW',
'dashboard.hero.badgeToday': 'STARTS TODAY',
+20 -20
View File
@@ -1,26 +1,26 @@
import type { TranslationStrings } from '../types';
const day: TranslationStrings = {
'day.precipProb': 'Rain probability',
'day.precipitation': 'Precipitation',
'day.wind': 'Wind',
'day.sunrise': 'Sunrise',
'day.sunset': 'Sunset',
'day.hourlyForecast': 'Hourly Forecast',
'day.precipProb': 'Yağış olasılığı',
'day.precipitation': 'Yağış',
'day.wind': 'Rüzgâr',
'day.sunrise': 'Gün doğumu',
'day.sunset': 'Gün batımı',
'day.hourlyForecast': 'Saatlik Tahmin',
'day.climateHint':
'Historical averages — real forecast available within 16 days of this date.',
'day.noWeather': 'No weather data available. Add a place with coordinates.',
'day.overview': 'Daily Overview',
'day.accommodation': 'Accommodation',
'day.addAccommodation': 'Add accommodation',
'day.hotelDayRange': 'Apply to days',
'day.noPlacesForHotel': 'Add places to your trip first',
'day.allDays': 'All',
'day.checkIn': 'Check-in',
'day.checkInUntil': 'Until',
'day.checkOut': 'Check-out',
'day.confirmation': 'Confirmation',
'day.editAccommodation': 'Edit accommodation',
'day.reservations': 'Reservations',
'Tarihsel ortalamalar — gerçek tahmin bu tarihten 16 gün öncesine kadar kullanılabilir.',
'day.noWeather': 'Hava durumu verisi yok. Koordinatlı bir yer ekleyin.',
'day.overview': 'Günlük Özet',
'day.accommodation': 'Konaklama',
'day.addAccommodation': 'Konaklama ekle',
'day.hotelDayRange': 'Günlere uygula',
'day.noPlacesForHotel': 'Önce seyahatinize yer ekleyin',
'day.allDays': 'Tüm',
'day.checkIn': 'Giriş',
'day.checkInUntil': 'Kadar',
'day.checkOut': 'Çıkış yapmak',
'day.confirmation': 'Onay kodu',
'day.editAccommodation': 'Konaklamayı düzenle',
'day.reservations': 'Rezervasyonlar',
};
export default day;
+37 -38
View File
@@ -1,48 +1,47 @@
import type { TranslationStrings } from '../types';
const dayplan: TranslationStrings = {
'dayplan.icsTooltip': 'Export calendar (ICS)',
'dayplan.emptyDay': 'No places planned for this day',
'dayplan.icsTooltip': 'İhracat takvimi (ICS)',
'dayplan.emptyDay': 'Bu gün için planlanmış yer yok',
'dayplan.cannotReorderTransport':
'Bookings with a fixed time cannot be reordered',
'dayplan.confirmRemoveTimeTitle': 'Remove time?',
'Sabit zamanlı rezervasyonlar yeniden sıralanamaz',
'dayplan.confirmRemoveTimeTitle': 'Saat kaldırılsın mı?',
'dayplan.confirmRemoveTimeBody':
'This place has a fixed time ({time}). Moving it will remove the time and allow free sorting.',
'dayplan.confirmRemoveTimeAction': 'Remove time & move',
'Bu yerin sabit bir saati var ({time}). Taşımak saati kaldırır ve serbest sıralamaya izin verir.',
'dayplan.confirmRemoveTimeAction': 'Saati kaldır ve taşı',
'dayplan.cannotDropOnTimed':
'Items cannot be placed between time-bound entries',
'Öğeler saate bağlı girişler arasına yerleştirilemez',
'dayplan.cannotBreakChronology':
'This would break the chronological order of timed items and bookings',
'dayplan.addNote': 'Add Note',
'dayplan.expandAll': 'Expand all days',
'dayplan.collapseAll': 'Collapse all days',
'dayplan.editNote': 'Edit Note',
'dayplan.noteAdd': 'Add Note',
'dayplan.noteEdit': 'Edit Note',
'dayplan.noteTitle': 'Note',
'dayplan.noteSubtitle': 'Daily Note',
'dayplan.totalCost': 'Total Cost',
'dayplan.days': 'Days',
'dayplan.dayN': 'Day {n}',
'dayplan.calculating': 'Calculating...',
'dayplan.route': 'Route',
'dayplan.optimize': 'Optimize',
'dayplan.optimized': 'Route optimized',
'dayplan.routeError': 'Failed to calculate route',
'Bu, zamanlı öğelerin kronolojik sırasını bozar',
'dayplan.addNote': 'Not Ekle',
'dayplan.expandAll': 'Tüm günleri genişlet',
'dayplan.collapseAll': 'Tüm günleri daralt',
'dayplan.editNote': 'Notu Düzenle',
'dayplan.noteAdd': 'Not Ekle',
'dayplan.noteEdit': 'Notu Düzenle',
'dayplan.noteTitle': 'Not',
'dayplan.noteSubtitle': 'Günlük Not',
'dayplan.totalCost': 'Toplam Maliyet',
'dayplan.days': 'Günler',
'dayplan.dayN': '{n}. gün',
'dayplan.calculating': 'Hesaplanıyor...',
'dayplan.route': 'Rota',
'dayplan.optimize': 'Optimize et',
'dayplan.optimized': 'Rota optimize edildi',
'dayplan.routeError': 'Rota hesaplanamadı',
'dayplan.toast.needTwoPlaces':
'At least two places needed for route optimization',
'dayplan.toast.routeOptimized': 'Route optimized',
'dayplan.toast.noGeoPlaces':
'No places with coordinates found for route calculation',
'dayplan.confirmed': 'Confirmed',
'dayplan.pendingRes': 'Pending',
'dayplan.pdf': 'PDF',
'dayplan.pdfTooltip': 'Export day plan as PDF',
'dayplan.pdfError': 'Failed to export PDF',
'dayplan.mobile.addPlace': 'Add Place',
'dayplan.mobile.searchPlaces': 'Search places...',
'dayplan.mobile.allAssigned': 'All places assigned',
'dayplan.mobile.noMatch': 'No match',
'dayplan.mobile.createNew': 'Create new place',
'Rota optimizasyonu için en az iki yer gerekli',
'dayplan.toast.routeOptimized': 'Rota optimize edildi',
'dayplan.toast.noGeoPlaces': 'Rota için koordinatlı yer bulunamadı',
'dayplan.confirmed': 'Onaylandı',
'dayplan.pendingRes': 'Beklemede',
'dayplan.pdf': "PDF'ler",
'dayplan.pdfTooltip': 'Gün planını PDF olarak dışa aktar',
'dayplan.pdfError': 'PDF dışa aktarılamadı',
'dayplan.mobile.addPlace': 'Yer Ekle',
'dayplan.mobile.searchPlaces': 'Yer ara...',
'dayplan.mobile.allAssigned': 'Tüm yerler atandı',
'dayplan.mobile.noMatch': 'Eşleşme yok',
'dayplan.mobile.createNew': 'Yeni yer oluştur',
};
export default dayplan;
+54 -54
View File
@@ -1,62 +1,62 @@
import type { TranslationStrings } from '../types';
const files: TranslationStrings = {
'files.title': 'Files',
'files.pageTitle': 'Files & Documents',
'files.subtitle': '{count} files for {trip}',
'files.download': 'Download',
'files.openError': 'Could not open file',
'files.downloadPdf': 'Download PDF',
'files.count': '{count} files',
'files.countSingular': '1 file',
'files.uploaded': '{count} uploaded',
'files.uploadError': 'Upload failed',
'files.dropzone': 'Drop files here',
'files.dropzoneHint': 'or click to browse',
'files.title': 'Dosyalar',
'files.pageTitle': 'Dosyalar ve Belgeler',
'files.subtitle': '{trip} için {count} dosya',
'files.download': 'İndir',
'files.openError': 'Dosya açılamadı',
'files.downloadPdf': 'PDF İndir',
'files.count': '{count} dosya',
'files.countSingular': '1 dosya',
'files.uploaded': '{count} yüklendi',
'files.uploadError': 'Yükleme başarısız oldu',
'files.dropzone': 'Dosyaları buraya bırakın',
'files.dropzoneHint': 'veya göz atmak için tıklayın',
'files.allowedTypes':
'Images, PDF, DOC, DOCX, XLS, XLSX, TXT, CSV · Max 50 MB',
'files.uploading': 'Uploading...',
'files.filterAll': 'All',
'files.filterPdf': 'PDFs',
'files.filterImages': 'Images',
'files.filterDocs': 'Documents',
'files.filterCollab': 'Collab Notes',
'files.sourceCollab': 'From Collab Notes',
'files.empty': 'No files yet',
'files.emptyHint': 'Upload files to attach them to your trip',
'files.openTab': 'Open in new tab',
'files.confirm.delete': 'Are you sure you want to delete this file?',
'files.toast.deleted': 'File deleted',
'files.toast.deleteError': 'Failed to delete file',
'files.sourcePlan': 'Day Plan',
'files.sourceBooking': 'Booking',
'files.sourceTransport': 'Transport',
'files.attach': 'Attach',
'files.pasteHint': 'You can also paste images from clipboard (Ctrl+V)',
'files.trash': 'Trash',
'files.trashEmpty': 'Trash is empty',
'files.emptyTrash': 'Empty Trash',
'files.restore': 'Restore',
'files.star': 'Star',
'files.unstar': 'Unstar',
'files.assign': 'Assign',
'files.assignTitle': 'Assign File',
'files.assignPlace': 'Place',
'files.assignBooking': 'Booking',
'files.assignTransport': 'Transport',
'files.unassigned': 'Unassigned',
'files.unlink': 'Remove link',
'files.toast.trashed': 'Moved to trash',
'files.toast.restored': 'File restored',
'files.toast.trashEmptied': 'Trash emptied',
'files.toast.assigned': 'File assigned',
'files.toast.assignError': 'Assignment failed',
'files.toast.restoreError': 'Restore failed',
'Görsel, PDF, DOC, DOCX, XLS, XLSX, TXT, CSV · Maks. 50 MB',
'files.uploading': 'Yükleniyor...',
'files.filterAll': 'Tüm',
'files.filterPdf': "PDF'ler",
'files.filterImages': 'Görseller',
'files.filterDocs': 'Belgeler',
'files.filterCollab': 'İşbirliği Notları',
'files.sourceCollab': 'İşbirliği notlarından',
'files.empty': 'Henüz dosya yok',
'files.emptyHint': 'Seyahatinize eklemek için dosya yükleyin',
'files.openTab': 'Yeni sekmede aç',
'files.confirm.delete': 'Bu dosyayı silmek istediğinizden emin misiniz?',
'files.toast.deleted': 'Dosya silindi',
'files.toast.deleteError': 'Dosya silinemedi',
'files.sourcePlan': 'Gün Planı',
'files.sourceBooking': 'Rezervasyon',
'files.sourceTransport': 'Ulaşım',
'files.attach': 'Ekle',
'files.pasteHint': 'Panodan görsel de yapıştırabilirsiniz (Ctrl+V)',
'files.trash': 'Çöp kutusu',
'files.trashEmpty': 'Çöp kutusu boş',
'files.emptyTrash': 'Çöp kutusunu boşalt',
'files.restore': 'Geri yükle',
'files.star': 'Yıldızla',
'files.unstar': 'Yıldızı kaldır',
'files.assign': 'Ata',
'files.assignTitle': 'Dosya Ata',
'files.assignPlace': 'Yer',
'files.assignBooking': 'Rezervasyon',
'files.assignTransport': 'Ulaşım',
'files.unassigned': 'Atanmamış',
'files.unlink': 'Bağlantıyı kaldır',
'files.toast.trashed': 'Çöp kutusuna taşındı',
'files.toast.restored': 'Dosya geri yüklendi',
'files.toast.trashEmptied': 'Çöp kutusu boşaltıldı',
'files.toast.assigned': 'Dosya atandı',
'files.toast.assignError': 'Atama başarısız',
'files.toast.restoreError': 'Geri yükleme başarısız',
'files.confirm.permanentDelete':
'Permanently delete this file? This cannot be undone.',
'Bu dosya kalıcı olarak silinsin mi? Bu işlem geri alınamaz.',
'files.confirm.emptyTrash':
'Permanently delete all trashed files? This cannot be undone.',
'files.noteLabel': 'Note',
'files.notePlaceholder': 'Add a note...',
'Çöp kutusundaki tüm dosyalar kalıcı olarak silinsin mi? Bu işlem geri alınamaz.',
'files.noteLabel': 'Not',
'files.notePlaceholder': 'Not ekleyin...',
};
export default files;
+17 -17
View File
@@ -1,22 +1,22 @@
import type { TranslationStrings } from '../types';
const inspector: TranslationStrings = {
'inspector.opened': 'Open',
'inspector.closed': 'Closed',
'inspector.openingHours': 'Opening Hours',
'inspector.showHours': 'Show opening hours',
'inspector.files': 'Files',
'inspector.filesCount': '{count} files',
'inspector.remove': 'Remove',
'inspector.removeFromDay': 'Remove from Day',
'inspector.addToDay': 'Add to Day',
'inspector.confirmedRes': 'Confirmed Reservation',
'inspector.pendingRes': 'Pending Reservation',
'inspector.google': 'Open in Google Maps',
'inspector.website': 'Open Website',
'inspector.addRes': 'Reservation',
'inspector.editRes': 'Edit Reservation',
'inspector.participants': 'Participants',
'inspector.trackStats': 'Track Stats',
'inspector.opened': 'Açık',
'inspector.closed': 'Kapalı',
'inspector.openingHours': 'Açılış Saatleri',
'inspector.showHours': 'Açılış saatlerini göster',
'inspector.files': 'Dosyalar',
'inspector.filesCount': '{count} dosya',
'inspector.remove': 'Kaldırmak',
'inspector.removeFromDay': 'Günden Kaldır',
'inspector.addToDay': 'Güne Ekle',
'inspector.confirmedRes': 'Onaylanmış Rezervasyon',
'inspector.pendingRes': 'Bekleyen Rezervasyon',
'inspector.google': "Google Haritalar'da aç",
'inspector.website': 'Web Sitesini Aç',
'inspector.addRes': 'Rezervasyon',
'inspector.editRes': 'Rezervasyonu Düzenle',
'inspector.participants': 'Katılımcılar',
'inspector.trackStats': 'İstatistikleri Takip Et',
};
export default inspector;
+223 -221
View File
@@ -1,244 +1,246 @@
import type { TranslationStrings } from '../types';
const journey: TranslationStrings = {
'journey.search.placeholder': 'Search journeys…',
'journey.search.noResults': 'No journeys match "{query}"',
'journey.title': 'Journey',
'journey.subtitle': 'Track your travels as they happen',
'journey.new': 'New Journey',
'journey.create': 'Create',
'journey.titlePlaceholder': 'Where are you going?',
'journey.empty': 'No journeys yet',
'journey.emptyHint': 'Start documenting your next trip',
'journey.deleted': 'Journey deleted',
'journey.createError': 'Could not create journey',
'journey.deleteError': 'Could not delete journey',
'journey.deleteConfirmTitle': 'Delete',
'journey.deleteConfirmMessage': 'Delete "{title}"? This cannot be undone.',
'journey.deleteConfirmGeneric': 'Are you sure you want to delete this?',
'journey.notFound': 'Journey not found',
'journey.photos': 'Photos',
'journey.timelineEmpty': 'No stops yet',
'journey.search.placeholder': 'Journey ara…',
'journey.search.noResults': '"{query}" ile eşleşen journey yok',
'journey.title': 'Seyahat',
'journey.subtitle': 'Seyahatlerinizi anında kaydedin',
'journey.new': 'Yeni Journey',
'journey.create': 'Oluştur',
'journey.titlePlaceholder': 'Nereye gidiyorsunuz?',
'journey.empty': 'Henüz journey yok',
'journey.emptyHint': 'Bir sonraki seyahatinizi belgelemeye başlayın',
'journey.deleted': 'Journey silindi',
'journey.createError': 'Journey oluşturulamadı',
'journey.deleteError': 'Journey silinemedi',
'journey.deleteConfirmTitle': 'Sil',
'journey.deleteConfirmMessage':
'"{title}" silinsin mi? Bu işlem geri alınamaz.',
'journey.deleteConfirmGeneric': 'Bunu silmek istediğinizden emin misiniz?',
'journey.notFound': 'Journey bulunamadı',
'journey.photos': 'Fotoğraflar',
'journey.timelineEmpty': 'Henüz durak yok',
'journey.timelineEmptyHint':
'Add a check-in or write a journal entry to get started',
'journey.status.draft': 'Draft',
'journey.status.active': 'Active',
'journey.status.completed': 'Completed',
'journey.status.upcoming': 'Upcoming',
'journey.status.archived': 'Archived',
'journey.checkin.add': 'Check in',
'journey.checkin.namePlaceholder': 'Location name',
'journey.checkin.notesPlaceholder': 'Notes (optional)',
'journey.checkin.save': 'Save',
'journey.checkin.error': 'Could not save check-in',
'journey.entry.add': 'Journal',
'journey.entry.edit': 'Edit entry',
'journey.entry.titlePlaceholder': 'Title (optional)',
'journey.entry.bodyPlaceholder': 'What happened today?',
'journey.entry.save': 'Save',
'journey.entry.error': 'Could not save entry',
'journey.photo.add': 'Photo',
'journey.photo.uploadError': 'Upload failed',
'journey.share.share': 'Share',
'journey.share.public': 'Public',
'journey.share.linkCopied': 'Public link copied',
'journey.share.disabled': 'Public sharing disabled',
'journey.editor.titlePlaceholder': 'Give this moment a name...',
'journey.editor.bodyPlaceholder': 'Tell the story of this day...',
'journey.editor.placePlaceholder': 'Location (optional)',
'Başlamak için check-in ekleyin veya günlük kaydı yazın',
'journey.status.draft': 'Taslak',
'journey.status.active': 'Aktif',
'journey.status.completed': 'Tamamlandı',
'journey.status.upcoming': 'Yaklaşan',
'journey.status.archived': 'Arşivlendi',
'journey.checkin.add': 'Giriş',
'journey.checkin.namePlaceholder': 'Konum adı',
'journey.checkin.notesPlaceholder': 'Notlar (isteğe bağlı)',
'journey.checkin.save': 'Kaydet',
'journey.checkin.error': 'Check-in kaydedilemedi',
'journey.entry.add': 'Günlük',
'journey.entry.edit': 'Kaydı düzenle',
'journey.entry.titlePlaceholder': 'Başlık (isteğe bağlı)',
'journey.entry.bodyPlaceholder': 'Bugün ne oldu?',
'journey.entry.save': 'Kaydet',
'journey.entry.error': 'Kayıt kaydedilemedi',
'journey.photo.add': 'Fotoğraf',
'journey.photo.uploadError': 'Yükleme başarısız oldu',
'journey.share.share': 'Paylaş',
'journey.share.public': 'Herkese açık',
'journey.share.linkCopied': 'Herkese açık bağlantı kopyalandı',
'journey.share.disabled': 'Herkese açık paylaşım kapalı',
'journey.editor.titlePlaceholder': 'Bu ana bir ad verin...',
'journey.editor.bodyPlaceholder': 'Bu günün hikâyesini anlatın...',
'journey.editor.placePlaceholder': 'Konum (isteğe bağlı)',
'journey.editor.tagsPlaceholder':
'Tags: hidden gem, best meal, must revisit...',
'journey.visibility.private': 'Private',
'journey.visibility.shared': 'Shared',
'journey.visibility.public': 'Public',
'journey.emptyState.title': 'Your story starts here',
'Etiketler: gizli cevher, en iyi yemek, tekrar ziyaret...',
'journey.visibility.private': 'Gizli',
'journey.visibility.shared': 'Paylaşılan',
'journey.visibility.public': 'Herkese açık',
'journey.emptyState.title': 'Hikâyeniz burada başlıyor',
'journey.emptyState.subtitle':
'Check in at a place or write your first journal entry',
'Bir yerde check-in yapın veya ilk günlük kaydınızı yazın',
'journey.frontpage.subtitle':
"Turn your trips into stories you'll never forget",
'journey.frontpage.createJourney': 'Create Journey',
'journey.frontpage.activeJourney': 'Active Journey',
'journey.frontpage.allJourneys': 'All Journeys',
'journey.frontpage.journeys': 'journeys',
'journey.frontpage.createNew': 'Create a new Journey',
'journey.frontpage.createJourney': 'Journey Oluştur',
'journey.frontpage.activeJourney': 'Aktif Journey',
'journey.frontpage.allJourneys': "Tüm Journey'ler",
'journey.frontpage.journeys': 'journey',
'journey.frontpage.createNew': 'Yeni Journey oluştur',
'journey.frontpage.createNewSub':
'Pick trips, write stories, share your adventures',
'journey.frontpage.live': 'Live',
'journey.frontpage.synced': 'Synced',
'journey.frontpage.continueWriting': 'Continue writing',
'journey.frontpage.updated': 'Updated {time}',
'journey.frontpage.suggestionLabel': 'Trip just ended',
'Seyahat seçin, hikâyeler yazın, maceralarınızı paylaşın',
'journey.frontpage.live': 'Canlı',
'journey.frontpage.synced': 'Senkronize',
'journey.frontpage.continueWriting': 'Yazmaya devam et',
'journey.frontpage.updated': '{time} Güncellendi',
'journey.frontpage.suggestionLabel': 'Seyahat yeni bitti',
'journey.frontpage.suggestionText':
'Turn <strong>{title}</strong> into a Journey',
'journey.frontpage.dismiss': 'Dismiss',
'journey.frontpage.journeyName': 'Journey Name',
'journey.frontpage.namePlaceholder': 'e.g. Southeast Asia 2026',
'journey.frontpage.selectTrips': 'Select Trips',
'journey.frontpage.tripsSelected': 'trips selected',
'journey.frontpage.trips': 'trips',
'journey.frontpage.placesImported': 'places will be imported',
'journey.frontpage.places': 'places',
'journey.detail.backToJourney': 'Back to Journey',
'journey.detail.syncedWithTrips': 'Synced with Trips',
'journey.detail.addEntry': 'Add Entry',
'journey.detail.newEntry': 'New Entry',
'journey.detail.editEntry': 'Edit Entry',
'journey.detail.noEntries': 'No entries yet',
"<strong>{title}</strong> seyahatini Journey'e dönüştür",
'journey.frontpage.dismiss': 'Kapat',
'journey.frontpage.journeyName': 'Journey Adı',
'journey.frontpage.namePlaceholder': 'örn. Güneydoğu Asya 2026',
'journey.frontpage.selectTrips': 'Seyahat Seç',
'journey.frontpage.tripsSelected': 'seyahat seçildi',
'journey.frontpage.trips': 'seyahat',
'journey.frontpage.placesImported': 'yer içe aktarılacak',
'journey.frontpage.places': 'yer',
'journey.detail.backToJourney': "Journey'e dön",
'journey.detail.syncedWithTrips': 'Seyahatlerle senkronize',
'journey.detail.addEntry': 'Kayıt Ekle',
'journey.detail.newEntry': 'Yeni Kayıt',
'journey.detail.editEntry': 'Kaydı Düzenle',
'journey.detail.noEntries': 'Henüz kayıt yok',
'journey.detail.noEntriesHint':
'Add a trip to get started with skeleton entries',
'journey.detail.noPhotos': 'No photos yet',
'İskelet kayıtlarla başlamak için bir seyahat ekleyin',
'journey.detail.noPhotos': 'Henüz fotoğraf yok',
'journey.detail.noPhotosHint':
'Upload photos to entries or browse your Immich/Synology library',
'journey.detail.journeyTab': 'Journey',
'journey.detail.journeyStats': 'Journey Stats',
'journey.detail.syncedTrips': 'Synced Trips',
'journey.detail.noTripsLinked': 'No trips linked yet',
'journey.detail.contributors': 'Contributors',
'journey.detail.readMore': 'Read more',
'journey.detail.prosCons': 'Pros & Cons',
'journey.detail.photos': 'photos',
'journey.detail.day': 'Day {number}',
'journey.detail.places': 'places',
'journey.stats.days': 'Days',
'journey.stats.cities': 'Cities',
'journey.stats.entries': 'Entries',
'journey.stats.photos': 'Photos',
'journey.stats.places': 'Places',
'journey.skeletons.show': 'Show suggestions',
'journey.skeletons.hide': 'Hide suggestions',
'journey.verdict.lovedIt': 'Loved it',
'journey.verdict.couldBeBetter': 'Could be better',
'journey.synced.places': 'places',
'journey.synced.synced': 'synced',
'Kayıtlara fotoğraf yükleyin veya Immich/Synology kütüphanenize göz atın',
'journey.detail.journeyTab': 'Seyahat',
'journey.detail.journeyStats': 'Journey İstatistikleri',
'journey.detail.syncedTrips': 'Senkronize Seyahatler',
'journey.detail.noTripsLinked': 'Henüz bağlı seyahat yok',
'journey.detail.contributors': 'Katkıda bulunanlar',
'journey.detail.readMore': 'Devamını oku',
'journey.detail.prosCons': 'Artılar ve Eksiler',
'journey.detail.photos': 'fotoğraf',
'journey.detail.day': '{number}. gün',
'journey.detail.places': 'yer',
'journey.stats.days': 'Günler',
'journey.stats.cities': 'Şehirler',
'journey.stats.entries': 'Kayıtlar',
'journey.stats.photos': 'Fotoğraflar',
'journey.stats.places': 'Yer',
'journey.skeletons.show': 'Önerileri göster',
'journey.skeletons.hide': 'Önerileri gizle',
'journey.verdict.lovedIt': 'Çok beğendim',
'journey.verdict.couldBeBetter': 'Daha iyi olabilirdi',
'journey.synced.places': 'yer',
'journey.synced.synced': 'senkronize',
'journey.editor.discardChangesConfirm':
'You have unsaved changes. Discard them?',
'journey.editor.uploadPhotos': 'Upload photos',
'journey.editor.uploading': 'Uploading...',
'journey.editor.fromGallery': 'From Gallery',
'journey.editor.allPhotosAdded': 'All photos already added',
'journey.editor.writeStory': 'Write your story...',
'journey.editor.prosCons': 'Pros & Cons',
'journey.editor.pros': 'Pros',
'journey.editor.cons': 'Cons',
'journey.editor.proPlaceholder': 'Something great...',
'journey.editor.conPlaceholder': 'Not so great...',
'journey.editor.addAnother': 'Add another',
'journey.editor.date': 'Date',
'journey.editor.location': 'Location',
'journey.editor.searchLocation': 'Search location...',
'journey.editor.mood': 'Mood',
'journey.editor.weather': 'Weather',
'journey.editor.photoFirst': '1st',
'journey.editor.makeFirst': 'Make 1st',
'journey.editor.searching': 'Searching...',
'journey.mood.amazing': 'Amazing',
'journey.mood.good': 'Good',
'journey.mood.neutral': 'Neutral',
'journey.mood.rough': 'Rough',
'journey.weather.sunny': 'Sunny',
'journey.weather.partly': 'Partly cloudy',
'journey.weather.cloudy': 'Cloudy',
'journey.weather.rainy': 'Rainy',
'journey.weather.stormy': 'Stormy',
'journey.weather.cold': 'Snowy',
'journey.trips.linkTrip': 'Link Trip',
'journey.trips.searchTrip': 'Search Trip',
'journey.trips.searchPlaceholder': 'Trip name or destination...',
'journey.trips.noTripsAvailable': 'No trips available',
'journey.trips.link': 'Link',
'journey.trips.tripLinked': 'Trip linked',
'journey.trips.linkFailed': 'Failed to link trip',
'journey.trips.addTrip': 'Add Trip',
'journey.trips.unlinkTrip': 'Unlink Trip',
'Kaydedilmemiş değişiklikleriniz var. Vazgeçilsin mi?',
'journey.editor.uploadPhotos': 'Fotoğraf yükle',
'journey.editor.uploading': 'Yükleniyor...',
'journey.editor.fromGallery': 'Galeriden',
'journey.editor.allPhotosAdded': 'Tüm fotoğraflar zaten eklendi',
'journey.editor.writeStory': 'Hikâyenizi yazın...',
'journey.editor.prosCons': 'Artılar ve Eksiler',
'journey.editor.pros': 'Artılar',
'journey.editor.cons': 'Eksiler',
'journey.editor.proPlaceholder': 'Harika bir şey...',
'journey.editor.conPlaceholder': 'Pek iyi değildi...',
'journey.editor.addAnother': 'Bir tane daha ekle',
'journey.editor.date': 'Tarih',
'journey.editor.location': 'Konum',
'journey.editor.searchLocation': 'Konum ara...',
'journey.editor.mood': 'Ruh hali',
'journey.editor.weather': 'Hava durumu',
'journey.editor.photoFirst': '1.',
'journey.editor.makeFirst': '1. yap',
'journey.editor.searching': 'Aranıyor...',
'journey.mood.amazing': 'Muhteşem',
'journey.mood.good': 'İyi',
'journey.mood.neutral': 'Nötr',
'journey.mood.rough': 'Zor',
'journey.weather.sunny': 'Güneşli',
'journey.weather.partly': 'Parçalı bulutlu',
'journey.weather.cloudy': 'Bulutlu',
'journey.weather.rainy': 'Yağmurlu',
'journey.weather.stormy': 'Fırtınalı',
'journey.weather.cold': 'Karlı',
'journey.trips.linkTrip': 'Seyahat Bağla',
'journey.trips.searchTrip': 'Seyahat Ara',
'journey.trips.searchPlaceholder': 'Seyahat adı veya destinasyon...',
'journey.trips.noTripsAvailable': 'Kullanılabilir seyahat yok',
'journey.trips.link': 'Bağla',
'journey.trips.tripLinked': 'Seyahat bağlandı',
'journey.trips.linkFailed': 'Seyahat bağlanamadı',
'journey.trips.addTrip': 'Seyahat Ekle',
'journey.trips.unlinkTrip': 'Seyahat bağlantısını kaldır',
'journey.trips.unlinkMessage':
'Unlink "{title}"? All synced entries and photos from this trip will be permanently deleted. This cannot be undone.',
'journey.trips.unlink': 'Unlink',
'journey.trips.tripUnlinked': 'Trip unlinked',
'journey.trips.unlinkFailed': 'Failed to unlink trip',
'journey.trips.noTripsLinkedSettings': 'No trips linked',
'journey.contributors.invite': 'Invite Contributor',
'journey.contributors.searchUser': 'Search User',
'journey.contributors.searchPlaceholder': 'Username or email...',
'journey.contributors.noUsers': 'No users found',
'journey.contributors.role': 'Role',
'journey.contributors.added': 'Contributor added',
'journey.contributors.addFailed': 'Failed to add contributor',
'journey.contributors.remove': 'Remove contributor',
'journey.contributors.removeConfirm': 'Remove {username} from this journey?',
'journey.contributors.removed': 'Contributor removed',
'journey.contributors.removeFailed': 'Failed to remove contributor',
'journey.share.publicShare': 'Public Share',
'journey.share.createLink': 'Create share link',
'journey.share.linkCreated': 'Share link created',
'journey.share.createFailed': 'Failed to create link',
'journey.share.copy': 'Copy',
'journey.share.copied': 'Copied!',
'journey.share.timeline': 'Timeline',
'journey.share.gallery': 'Gallery',
'journey.share.map': 'Map',
'journey.share.removeLink': 'Remove share link',
'journey.share.linkDeleted': 'Share link deleted',
'journey.share.deleteFailed': 'Failed to delete',
'journey.share.updateFailed': 'Failed to update',
'journey.invite.role': 'Role',
'journey.invite.viewer': 'Viewer',
'journey.invite.editor': 'Editor',
'journey.invite.invite': 'Invite',
'journey.invite.inviting': 'Inviting...',
'journey.settings.title': 'Journey Settings',
'journey.settings.coverImage': 'Cover Image',
'journey.settings.changeCover': 'Change cover',
'journey.settings.addCover': 'Add cover image',
'journey.settings.name': 'Name',
'journey.settings.subtitle': 'Subtitle',
'journey.settings.subtitlePlaceholder': 'e.g. Thailand, Vietnam & Cambodia',
'journey.settings.endJourney': 'Archive Journey',
'journey.settings.reopenJourney': 'Restore Journey',
'journey.settings.archived': 'Journey archived',
'journey.settings.reopened': 'Journey reopened',
'"{title}" bağlantısı kaldırılsın mı? Bu seyahatten senkronize tüm kayıtlar ve fotoğraflar kalıcı olarak silinecek. Bu işlem geri alınamaz.',
'journey.trips.unlink': 'Bağlantıyı kaldır',
'journey.trips.tripUnlinked': 'Seyahat bağlantısı kaldırıldı',
'journey.trips.unlinkFailed': 'Seyahat bağlantısı kaldırılamadı',
'journey.trips.noTripsLinkedSettings': 'Bağlı seyahat yok',
'journey.contributors.invite': 'Katkıda bulunan davet et',
'journey.contributors.searchUser': 'Kullanıcı Ara',
'journey.contributors.searchPlaceholder': 'Kullanıcı adı veya e-posta...',
'journey.contributors.noUsers': 'Kullanıcı bulunamadı',
'journey.contributors.role': 'Rol',
'journey.contributors.added': 'Katkıda bulunan eklendi',
'journey.contributors.addFailed': 'Katkıda bulunan eklenemedi',
'journey.contributors.remove': 'Katkıda bulunanı kaldır',
'journey.contributors.removeConfirm':
"{username} bu journey'den kaldırılsın mı?",
'journey.contributors.removed': 'Katkıda bulunan kaldırıldı',
'journey.contributors.removeFailed': 'Katkıda bulunan kaldırılamadı',
'journey.share.publicShare': 'Herkese açık paylaşım',
'journey.share.createLink': 'Paylaşım bağlantısı oluştur',
'journey.share.linkCreated': 'Paylaşım bağlantısı oluşturuldu',
'journey.share.createFailed': 'Bağlantı oluşturulamadı',
'journey.share.copy': 'Kopyala',
'journey.share.copied': 'Kopyalandı!',
'journey.share.timeline': 'Zaman çizelgesi',
'journey.share.gallery': 'Galeri',
'journey.share.map': 'Harita',
'journey.share.removeLink': 'Paylaşım bağlantısını kaldır',
'journey.share.linkDeleted': 'Paylaşım bağlantısı silindi',
'journey.share.deleteFailed': 'Silinemedi',
'journey.share.updateFailed': 'Güncelleme başarısız oldu',
'journey.invite.role': 'Rol',
'journey.invite.viewer': 'Görüntüleyici',
'journey.invite.editor': 'Düzenleyici',
'journey.invite.invite': 'Davet et',
'journey.invite.inviting': 'Davet ediliyor...',
'journey.settings.title': 'Journey Ayarları',
'journey.settings.coverImage': 'Kapak Görseli',
'journey.settings.changeCover': 'Kapağı değiştir',
'journey.settings.addCover': 'Kapak görseli ekle',
'journey.settings.name': 'İsim',
'journey.settings.subtitle': 'Alt başlık',
'journey.settings.subtitlePlaceholder': 'örn. Tayland, Vietnam ve Kamboçya',
'journey.settings.endJourney': "Journey'i Arşivle",
'journey.settings.reopenJourney': "Journey'i geri aç",
'journey.settings.archived': 'Journey arşivlendi',
'journey.settings.reopened': 'Journey yeniden açıldı',
'journey.settings.endDescription':
'Hides the Live badge. You can reopen anytime.',
'journey.settings.delete': 'Delete',
'journey.settings.deleteJourney': 'Delete Journey',
'Canlı rozetini gizler. İstediğiniz zaman yeniden açabilirsiniz.',
'journey.settings.delete': 'Sil',
'journey.settings.deleteJourney': "Journey'i Sil",
'journey.settings.deleteMessage':
'Delete "{title}"? All entries and photos will be lost.',
'journey.settings.saved': 'Settings saved',
'journey.settings.saveFailed': 'Failed to save',
'journey.settings.coverUpdated': 'Cover updated',
'journey.settings.coverFailed': 'Upload failed',
'journey.settings.failedToDelete': 'Failed to delete',
'journey.entries.deleteTitle': 'Delete Entry',
'journey.photosUploaded': '{count} photos uploaded',
'journey.photosAdded': '{count} photos added',
'journey.public.notFound': 'Not Found',
'"{title}" silinsin mi? Tüm kayıtlar ve fotoğraflar kaybolacak.',
'journey.settings.saved': 'Ayarlar kaydedildi',
'journey.settings.saveFailed': 'Kaydedilemedi',
'journey.settings.coverUpdated': 'Kapak güncellendi',
'journey.settings.coverFailed': 'Yükleme başarısız oldu',
'journey.settings.failedToDelete': 'Silinemedi',
'journey.entries.deleteTitle': 'Kaydı Sil',
'journey.photosUploaded': '{count} fotoğraf yüklendi',
'journey.photosAdded': '{count} fotoğraf eklendi',
'journey.public.notFound': 'Bulunamadı',
'journey.public.notFoundMessage':
"This journey doesn't exist or the link has expired.",
'journey.public.readOnly': 'Read-only · Public Journey',
'journey.public.tagline': 'Travel Resource & Exploration Kit',
'journey.public.sharedVia': 'Shared via',
'journey.public.madeWith': 'Made with',
'journey.pdf.journeyBook': 'Journey Book',
'journey.pdf.madeWith': 'Made with TREK',
'journey.pdf.day': 'Day',
'journey.pdf.theEnd': 'The End',
'journey.pdf.saveAsPdf': 'Save as PDF',
'journey.pdf.pages': 'pages',
'journey.picker.tripPeriod': 'Trip Period',
'journey.picker.dateRange': 'Date Range',
'journey.picker.allPhotos': 'All Photos',
'journey.picker.albums': 'Albums',
'journey.picker.selected': 'selected',
'journey.picker.addTo': 'Add to',
'journey.picker.newGallery': 'New Gallery',
'journey.picker.selectAll': 'Select all',
'journey.picker.deselectAll': 'Deselect all',
'journey.picker.noAlbums': 'No albums found',
'journey.picker.selectDate': 'Select date',
'journey.picker.search': 'Search',
'journey.editor.uploadingProgress': 'Yükleniyor {done}/{total}…',
'journey.public.readOnly': 'Salt okunur · Herkese açık Journey',
'journey.public.tagline': 'Seyahat Kaynak ve Keşif Kiti',
'journey.public.sharedVia': 'Şununla paylaşıldı:',
'journey.public.madeWith': 'İle yapıldı',
'journey.pdf.journeyBook': 'Journey Kitabı',
'journey.pdf.madeWith': 'TREK ile Yapıldı',
'journey.pdf.day': 'Gün',
'journey.pdf.theEnd': 'Son',
'journey.pdf.saveAsPdf': 'PDF olarak Kaydet',
'journey.pdf.pages': 'sayfa',
'journey.picker.tripPeriod': 'Seyahat Dönemi',
'journey.picker.dateRange': 'Tarih Aralığı',
'journey.picker.allPhotos': 'Tüm Fotoğraflar',
'journey.picker.albums': 'Albümler',
'journey.picker.selected': 'seçildi',
'journey.picker.addTo': 'Ekle:',
'journey.picker.newGallery': 'Yeni Galeri',
'journey.picker.selectAll': 'Tümünü seç',
'journey.picker.deselectAll': 'Tümünün seçimini kaldır',
'journey.picker.noAlbums': 'Albüm bulunamadı',
'journey.picker.selectDate': 'Tarih seç',
'journey.picker.search': 'Ara',
'journey.editor.uploadingProgress': '{done}/{total} yükleniyor…',
'journey.editor.uploadFailed': 'Fotoğraf yüklenemedi',
'journey.editor.uploadPartialFailed':
'{total} fotoğraftan {failed} tanesi yüklenemedi — yeniden denemek için tekrar kaydedin',
'{total} fotoğraftan {failed} tanesi başarısız — tekrar denemek için kaydedin',
'journey.photosUploadFailed': 'Bazı fotoğraflar yüklenemedi',
};
export default journey;
+79 -74
View File
@@ -1,95 +1,100 @@
import type { TranslationStrings } from '../types';
const login: TranslationStrings = {
'login.error': 'Login failed. Please check your credentials.',
'login.tagline': 'Your Trips.\nYour Plan.',
'login.error':
'Giriş başarısız oldu. Lütfen kimlik bilgilerinizi kontrol edin.',
'login.tagline': 'Gezileriniz.\\nPlanınız.',
'login.description':
'Plan trips collaboratively with interactive maps, budgets, and real-time sync.',
'login.features.maps': 'Interactive Maps',
'login.features.mapsDesc': 'Google Places, routes & clustering',
'login.features.realtime': 'Real-Time Sync',
'login.features.realtimeDesc': 'Plan together via WebSocket',
'login.features.budget': 'Budget Tracking',
'login.features.budgetDesc': 'Categories, charts & per-person costs',
'login.features.collab': 'Collaboration',
'login.features.collabDesc': 'Multi-user with shared trips',
'login.features.packing': 'Packing Lists',
'login.features.packingDesc': 'Categories, progress & suggestions',
'login.features.bookings': 'Reservations',
'login.features.bookingsDesc': 'Flights, hotels, restaurants & more',
'login.features.files': 'Documents',
'login.features.filesDesc': 'Upload & manage documents',
'login.features.routes': 'Smart Routes',
'login.features.routesDesc': 'Auto-optimize & Google Maps export',
'login.selfHosted': 'Self-hosted · Open Source · Your data stays yours',
'login.title': 'Giriş yap',
'Etkileşimli haritalar, bütçeler ve gerçek zamanlı senkronizasyonla gezileri işbirliği içinde planlayın.',
'login.features.maps': 'İnteraktif Haritalar',
'login.features.mapsDesc': 'Google Rehber, rotalar ve kümeleme',
'login.features.realtime': 'Gerçek Zamanlı Senkronizasyon',
'login.features.realtimeDesc': 'WebSocket aracılığıyla birlikte plan yapın',
'login.features.budget': 'Bütçe Takibi',
'login.features.budgetDesc': 'Kategoriler, grafikler ve kişi başı maliyetler',
'login.features.collab': 'İşbirliği',
'login.features.collabDesc': 'Paylaşılan gezilerle çok kullanıcılı',
'login.features.packing': 'Paketleme Listeleri',
'login.features.packingDesc': 'Kategoriler, ilerleme ve öneriler',
'login.features.bookings': 'Rezervasyonlar',
'login.features.bookingsDesc':
'Uçuşlar, oteller, restoranlar ve daha fazlası',
'login.features.files': 'Belgeler',
'login.features.filesDesc': 'Belgeleri yükleyin ve yönetin',
'login.features.routes': 'Akıllı Rotalar',
'login.features.routesDesc':
"Otomatik optimize etme ve Google Haritalar'ı dışa aktarma",
'login.selfHosted':
'Kendi kendine barındırılan \\u00B7 Açık Kaynak \\u00B7 Verileriniz size ait kalır',
'login.title': 'Oturum Aç',
'login.subtitle': 'Tekrar hoş geldiniz',
'login.signingIn': 'Giriş yapılıyor…',
'login.signIn': 'Giriş yap',
'login.createAdmin': 'Create Admin Account',
'login.createAdminHint': 'Set up the first admin account for TREK.',
'login.setNewPassword': 'Set New Password',
'login.setNewPasswordHint':
'You must change your password before continuing.',
'login.createAccount': 'Hesap oluştur',
'login.createAccountHint': 'Register a new account.',
'login.creating': 'Creating…',
'login.signingIn': 'Oturum açılıyor…',
'login.signIn': 'Oturum Aç',
'login.createAdmin': 'Yönetici Hesabı Oluştur',
'login.createAdminHint': 'TREK için ilk yönetici hesabını kurun.',
'login.setNewPassword': 'Yeni Şifre Belirle',
'login.setNewPasswordHint': 'Devam etmeden önce şifrenizi değiştirmelisiniz.',
'login.createAccount': 'Hesap Oluşturmak',
'login.createAccountHint': 'Yeni bir hesap kaydedin.',
'login.creating': 'Oluşturuluyor…',
'login.noAccount': "Don't have an account?",
'login.hasAccount': 'Zaten hesabınız var mı?',
'login.register': 'Kayıt ol',
'login.emailPlaceholder': 'your@email.com',
'login.hasAccount': 'Zaten bir hesabınız var mı?',
'login.register': 'Kayıt olmak',
'login.emailPlaceholder': 'sizin@e-postanız.com',
'login.username': 'Kullanıcı adı',
'login.oidc.registrationDisabled':
'Registration is disabled. Contact your administrator.',
'login.oidc.noEmail': 'No email received from provider.',
'login.oidc.tokenFailed': 'Authentication failed.',
'login.oidc.invalidState': 'Invalid session. Please try again.',
'login.demoFailed': 'Demo login failed',
'login.oidcSignIn': 'Sign in with {name}',
'Kayıt devre dışı bırakıldı. Yöneticinizle iletişime geçin.',
'login.oidc.noEmail': 'Sağlayıcıdan e-posta alınmadı.',
'login.oidc.tokenFailed': 'Kimlik doğrulama başarısız oldu.',
'login.oidc.invalidState': 'Geçersiz oturum. Lütfen tekrar deneyin.',
'login.demoFailed': 'Demo girişi başarısız oldu',
'login.oidcSignIn': '{name} ile oturum açın',
'login.oidcOnly':
'Password authentication is disabled. Please sign in using your SSO provider.',
'Parola kimlik doğrulaması devre dışı. Lütfen SSO sağlayıcınızı kullanarak oturum açın.',
'login.oidcLoggedOut':
'You have been logged out. Sign in again using your SSO provider.',
'login.demoHint': 'Try the demo — no registration needed',
'login.mfaTitle': 'Two-factor authentication',
'login.mfaSubtitle': 'Enter the 6-digit code from your authenticator app.',
'login.mfaCodeLabel': 'Verification code',
'login.mfaCodeRequired': 'Enter the code from your authenticator app.',
'login.mfaHint': 'Open Google Authenticator, Authy, or another TOTP app.',
'login.mfaBack': '← Back to sign in',
'login.mfaVerify': 'Verify',
'login.invalidInviteLink': 'Invalid or expired invite link',
'login.oidcFailed': 'OIDC login failed',
'login.usernameRequired': 'Username is required',
'login.passwordMinLength': 'Password must be at least 8 characters',
'login.forgotPassword': 'Parolamı unuttum?',
'login.forgotPasswordTitle': 'Reset your password',
'Çıkış yaptınız. SSO sağlayıcınızı kullanarak tekrar oturum açın.',
'login.demoHint': 'Demoyu deneyin; kayıt olmanıza gerek yok',
'login.mfaTitle': 'İki faktörlü kimlik doğrulama',
'login.mfaSubtitle': 'Kimlik doğrulayıcı uygulamanızdan 6 haneli kodu girin.',
'login.mfaCodeLabel': 'Doğrulama kodu',
'login.mfaCodeRequired': 'Kimlik doğrulayıcı uygulamanızdan kodu girin.',
'login.mfaHint':
"Google Authenticator'ı, Authy'yi veya başka bir TOTP uygulamasını açın.",
'login.mfaBack': '← Oturum açmaya geri dön',
'login.mfaVerify': 'Doğrula',
'login.invalidInviteLink': 'Geçersiz veya süresi dolmuş davet bağlantısı',
'login.oidcFailed': 'OIDC girişi başarısız oldu',
'login.usernameRequired': 'Kullanıcı adı gerekli',
'login.passwordMinLength': 'Şifre en az 8 karakter olmalıdır',
'login.forgotPassword': 'Parolanızı mı unuttunuz?',
'login.forgotPasswordTitle': 'Şifrenizi sıfırlayın',
'login.forgotPasswordBody':
"Enter the email address you signed up with. If an account exists, we'll send a reset link.",
'login.forgotPasswordSubmit': 'Send reset link',
'login.forgotPasswordSentTitle': 'Check your email',
'login.forgotPasswordSubmit': 'Sıfırlama bağlantısını gönder',
'login.forgotPasswordSentTitle': 'E-postanızı kontrol edin',
'login.forgotPasswordSentBody':
'If an account exists for that email, a reset link is on its way. It expires in 60 minutes.',
'Söz konusu e-posta için bir hesap mevcutsa sıfırlama bağlantısı yolda olacaktır. 60 dakika içinde sona erer.',
'login.forgotPasswordSmtpHintOff':
"Heads up: your administrator hasn't configured SMTP, so the reset link will be written to the server console instead of being emailed.",
'login.backToLogin': 'Girişe dön',
'login.newPassword': 'New password',
'login.confirmPassword': 'Confirm new password',
'login.passwordsDontMatch': 'Parolalar eşleşmiyor',
'login.mfaCode': '2FA code',
'login.resetPasswordTitle': 'Set a new password',
'login.backToLogin': 'Oturum açmak için geri dön',
'login.newPassword': 'Yeni Şifre',
'login.confirmPassword': 'Yeni şifreyi onayla',
'login.passwordsDontMatch': 'Şifreler eşleşmiyor',
'login.mfaCode': '2FA kodu',
'login.resetPasswordTitle': 'Yeni bir şifre belirleyin',
'login.resetPasswordBody':
'Pick a strong password you havent used here before. Minimum 8 characters.',
'Daha önce burada kullanmadığınız güçlü bir şifre seçin. Minimum 8 karakter.',
'login.resetPasswordMfaBody':
'Enter your 2FA code or a backup code to complete the reset.',
'login.resetPasswordSubmit': 'Reset password',
'login.resetPasswordVerify': 'Verify & reset',
'login.resetPasswordSuccessTitle': 'Password updated',
'Sıfırlamayı tamamlamak için 2FA kodunuzu veya yedek kodu girin.',
'login.resetPasswordSubmit': 'Şifreyi sıfırla',
'login.resetPasswordVerify': 'Doğrula ve sıfırla',
'login.resetPasswordSuccessTitle': 'Şifre güncellendi',
'login.resetPasswordSuccessBody':
'You can now sign in with your new password.',
'login.resetPasswordInvalidLink': 'Invalid reset link',
'Artık yeni şifrenizle giriş yapabilirsiniz.',
'login.resetPasswordInvalidLink': 'Geçersiz sıfırlama bağlantısı',
'login.resetPasswordInvalidLinkBody':
'This link is missing or broken. Request a new one to continue.',
'login.resetPasswordFailed': 'Reset failed. The link may have expired.',
'Bu bağlantı eksik veya bozuk. Devam etmek için yeni bir tane isteyin.',
'login.resetPasswordFailed':
'Sıfırlama başarısız oldu. Bağlantının süresi dolmuş olabilir.',
};
export default login;
+3 -3
View File
@@ -1,8 +1,8 @@
import type { TranslationStrings } from '../types';
const map: TranslationStrings = {
'map.connections': 'Connections',
'map.showConnections': 'Show booking routes',
'map.hideConnections': 'Hide booking routes',
'map.connections': 'Bağlantılar',
'map.showConnections': 'Rezervasyon rotalarını göster',
'map.hideConnections': 'Rezervasyon rotalarını gizle',
};
export default map;
+20 -19
View File
@@ -1,24 +1,25 @@
import type { TranslationStrings } from '../types';
const members: TranslationStrings = {
'members.shareTrip': 'Share Trip',
'members.inviteUser': 'Invite User',
'members.selectUser': 'Select user…',
'members.invite': 'Invite',
'members.allHaveAccess': 'All users already have access.',
'members.access': 'Access',
'members.person': 'person',
'members.persons': 'persons',
'members.you': 'you',
'members.owner': 'Owner',
'members.leaveTrip': 'Leave trip',
'members.removeAccess': 'Remove access',
'members.confirmLeave': 'Leave trip? You will lose access.',
'members.confirmRemove': 'Remove access for this user?',
'members.loadError': 'Failed to load members',
'members.added': 'added',
'members.addError': 'Failed to add',
'members.removed': 'Member removed',
'members.removeError': 'Failed to remove',
'members.shareTrip': 'Seyahati Paylaş',
'members.inviteUser': 'Kullanıcı davet et',
'members.selectUser': 'Kullanıcı seç…',
'members.invite': 'Davet et',
'members.allHaveAccess': 'Tüm kullanıcıların zaten erişimi var.',
'members.access': 'Erişim',
'members.person': 'kişi',
'members.persons': 'kişi',
'members.you': 'siz',
'members.owner': 'Sahip',
'members.leaveTrip': 'Seyahatten ayrıl',
'members.removeAccess': 'Erişimi kaldır',
'members.confirmLeave':
'Seyahatten ayrılmak İstiyor musunuz? Erişiminizi kaybedersiniz.',
'members.confirmRemove': 'Bu kullanıcının erişimi kaldırılsın mı?',
'members.loadError': 'Üyeler yüklenemedi',
'members.added': 'eklendi',
'members.addError': 'Eklenemedi',
'members.removed': 'Üye kaldırıldı',
'members.removeError': 'Kaldırılamadı',
};
export default members;
+67 -66
View File
@@ -1,80 +1,81 @@
import type { TranslationStrings } from '../types';
const memories: TranslationStrings = {
'memories.title': 'Photos',
'memories.notConnected': '{provider_name} not connected',
'memories.title': 'Fotoğraflar',
'memories.notConnected': '{provider_name} bağlı değil',
'memories.notConnectedHint':
'Connect your {provider_name} instance in Settings to be able add photos to this trip.',
"Bu seyahate fotoğraf eklemek için Ayarlar'dan {provider_name} örneğinizi bağlayın.",
'memories.notConnectedMultipleHint':
'Connect any of these photo providers: {provider_names} in Settings to be able add photos to this trip.',
'memories.noDates': 'Add dates to your trip to load photos.',
'memories.noPhotos': 'No photos found',
"Bu seyahate fotoğraf eklemek için Ayarlar'dan şu fotoğraf sağlayıcılarından birini bağlayın: {provider_names}",
'memories.noDates': 'Fotoğrafları yüklemek için seyahatinize tarih ekleyin.',
'memories.noPhotos': 'Fotoğraf bulunamadı',
'memories.noPhotosHint':
"No photos found in {provider_name} for this trip's date range.",
'memories.photosFound': 'photos',
'memories.fromOthers': 'from others',
'memories.sharePhotos': 'Share photos',
'memories.sharing': 'Sharing',
'memories.reviewTitle': 'Review your photos',
'memories.reviewHint': 'Click photos to exclude them from sharing.',
'memories.shareCount': 'Share {count} photos',
'memories.providerUrl': 'Server URL',
'memories.providerApiKey': 'API Key',
'memories.providerUsername': 'Username',
'memories.providerPassword': 'Password',
'memories.providerOTP': 'MFA code (if enabled)',
'memories.skipSSLVerification': 'Skip SSL certificate verification',
'memories.immichAutoUpload': 'Mirror journey photos to Immich on upload',
'memories.photosFound': 'fotoğraf',
'memories.fromOthers': 'başkalarından',
'memories.sharePhotos': 'Fotoğrafları paylaş',
'memories.sharing': 'Paylaşma',
'memories.reviewTitle': 'Fotoğraflarınızı gözden geçirin',
'memories.reviewHint': 'Paylaşımdan hariç tutmak için fotoğraflara tıklayın.',
'memories.shareCount': '{count} Fotoğraf paylaş',
'memories.providerUrl': "Sunucu URL'si",
'memories.providerApiKey': 'API Anahtarı',
'memories.providerUsername': 'Kullanıcı adı',
'memories.providerPassword': 'Şifre',
'memories.providerOTP': 'MFA kodu (etkinse)',
'memories.skipSSLVerification': 'SSL Sertifika doğrulamasını atla',
'memories.immichAutoUpload':
"Journey fotoğraflarını yüklerken Immich'e yansıt",
'memories.providerUrlHintSynology':
'Include the Photos app path in the URL, e.g. https://nas:5001/photo',
'memories.testConnection': 'Test connection',
'memories.testShort': 'Test',
'memories.testFirst': 'Test connection first',
'memories.connected': 'Connected',
'memories.disconnected': 'Not connected',
'memories.connectionSuccess': 'Connected to {provider_name}',
'memories.connectionError': 'Could not connect to {provider_name}',
'memories.saved': '{provider_name} settings saved',
"URL'ye Photos uygulama yolunu ekleyin, örn. https://nas:5001/photo",
'memories.testConnection': 'Bağlantıyı test et',
'memories.testShort': 'Dene',
'memories.testFirst': 'Önce bağlantıyı test edin',
'memories.connected': 'Bağlı',
'memories.disconnected': 'Bağlı değil',
'memories.connectionSuccess': '{provider_name} ile bağlandı',
'memories.connectionError': '{provider_name} ile bağlanılamadı',
'memories.saved': '{provider_name} ayarları kaydedildi',
'memories.providerDisconnectedBanner':
'Your {provider_name} connection is lost. Reconnect in Settings to view photos.',
'memories.saveError': 'Could not save {provider_name} settings',
'memories.addPhotos': 'Add photos',
'memories.linkAlbum': 'Link Album',
'memories.selectAlbum': 'Select {provider_name} Album',
'memories.selectAlbumMultiple': 'Select Album',
'memories.noAlbums': 'No albums found',
'memories.syncAlbum': 'Sync album',
'memories.unlinkAlbum': 'Unlink album',
'memories.photos': 'photos',
'memories.selectPhotos': 'Select photos from {provider_name}',
'memories.selectPhotosMultiple': 'Select Photos',
'memories.selectHint': 'Tap photos to select them.',
'memories.selected': 'selected',
'memories.addSelected': 'Add {count} photos',
'memories.alreadyAdded': 'Added',
'memories.private': 'Private',
'memories.stopSharing': 'Stop sharing',
'memories.oldest': 'Oldest first',
'memories.newest': 'Newest first',
'memories.allLocations': 'All locations',
'memories.tripDates': 'Trip dates',
'memories.allPhotos': 'All photos',
'memories.confirmShareTitle': 'Share with trip members?',
"{provider_name} Bağlantınız kesildi. Fotoğrafları görmek için Ayarlar'dan yeniden bağlanın.",
'memories.saveError': '{provider_name} Ayarları kaydedilemedi',
'memories.addPhotos': 'Fotoğraf ekle',
'memories.linkAlbum': 'Albüm Bağla',
'memories.selectAlbum': '{provider_name} Albümü Seç',
'memories.selectAlbumMultiple': 'Albüm Seç',
'memories.noAlbums': 'Albüm bulunamadı',
'memories.syncAlbum': 'Albümü senkronize et',
'memories.unlinkAlbum': 'Albüm bağlantısını kaldır',
'memories.photos': 'fotoğraf',
'memories.selectPhotos': '{provider_name} Fotoğraflarını seç',
'memories.selectPhotosMultiple': 'Fotoğraf Seç',
'memories.selectHint': 'Seçmek için fotoğraflara dokunun.',
'memories.selected': 'seçildi',
'memories.addSelected': '{count} Fotoğraf ekle',
'memories.alreadyAdded': 'Eklendi',
'memories.private': 'Gizli',
'memories.stopSharing': 'Paylaşımı durdur',
'memories.oldest': 'En eski önce',
'memories.newest': 'En yeni önce',
'memories.allLocations': 'Tüm konumlar',
'memories.tripDates': 'Seyahat tarihleri',
'memories.allPhotos': 'Tüm fotoğraflar',
'memories.confirmShareTitle': 'Seyahat üyeleriyle paylaşılsın mı?',
'memories.confirmShareHint':
'{count} photos will be visible to all members of this trip. You can make individual photos private later.',
'memories.confirmShareButton': 'Share photos',
'memories.error.loadAlbums': 'Failed to load albums',
'memories.error.linkAlbum': 'Failed to link album',
'memories.error.unlinkAlbum': 'Failed to unlink album',
'memories.error.syncAlbum': 'Failed to sync album',
'memories.error.loadPhotos': 'Failed to load photos',
'memories.error.addPhotos': 'Failed to add photos',
'memories.error.removePhoto': 'Failed to remove photo',
'memories.error.toggleSharing': 'Failed to update sharing',
'{count} fotoğraf bu seyahatin tüm üyelerine görünür olacak. Daha sonra tek tek gizli yapabilirsiniz.',
'memories.confirmShareButton': 'Fotoğrafları paylaş',
'memories.error.loadAlbums': 'Albümler yüklenemedi',
'memories.error.linkAlbum': 'Albüm bağlanamadı',
'memories.error.unlinkAlbum': 'Albüm bağlantısı kaldırılamadı',
'memories.error.syncAlbum': 'Albüm senkronize edilemedi',
'memories.error.loadPhotos': 'Fotoğraflar yüklenemedi',
'memories.error.addPhotos': 'Fotoğraflar eklenemedi',
'memories.error.removePhoto': 'Fotoğraf kaldırılamadı',
'memories.error.toggleSharing': 'Paylaşım güncellenemedi',
'memories.saveRouteNotConfigured':
'Save route is not configured for this provider',
'Bu sağlayıcı için kaydetme yolu yapılandırılmamış',
'memories.testRouteNotConfigured':
'Test route is not configured for this provider',
'memories.fillRequiredFields': 'Please fill all required fields',
'Bu sağlayıcı için test yolu yapılandırılmamış',
'memories.fillRequiredFields': 'Lütfen tüm zorunlu alanları doldurun',
};
export default memories;
+7 -7
View File
@@ -1,19 +1,19 @@
import type { TranslationStrings } from '../types';
const nav: TranslationStrings = {
'nav.trip': 'Gezi',
'nav.trip': 'Seyahat',
'nav.share': 'Paylaş',
'nav.settings': 'Ayarlar',
'nav.admin': 'Yönetim',
'nav.admin': 'Yönetici',
'nav.logout': 'Çıkış yap',
'nav.lightMode': 'Açık tema',
'nav.darkMode': 'Koyu tema',
'nav.autoMode': 'Otomatik tema',
'nav.lightMode': 'Açık Tema',
'nav.darkMode': 'Koyu Tema',
'nav.autoMode': 'Otomatik Tema',
'nav.administrator': 'Yönetici',
'nav.myTrips': 'Gezilerim',
'nav.myTrips': 'Seyahatlerim',
'nav.profile': 'Profil',
'nav.bottomSettings': 'Ayarlar',
'nav.bottomAdmin': 'Yönetim ayarları',
'nav.bottomAdmin': 'Yönetici Ayarları',
'nav.bottomLogout': 'Çıkış',
'nav.bottomAdminBadge': 'Yönetici',
};
+39 -35
View File
@@ -1,41 +1,45 @@
import type { TranslationStrings } from '../types';
const notif: TranslationStrings = {
'notif.test.title': '[Test] Notification',
'notif.test.simple.text': 'This is a simple test notification.',
'notif.test.boolean.text': 'Do you accept this test notification?',
'notif.test.navigate.text': 'Click below to navigate to the dashboard.',
'notif.trip_invite.title': 'Trip Invitation',
'notif.trip_invite.text': '{actor} invited you to {trip}',
'notif.booking_change.title': 'Booking Updated',
'notif.booking_change.text': '{actor} updated a booking in {trip}',
'notif.trip_reminder.title': 'Trip Reminder',
'notif.trip_reminder.text': 'Your trip {trip} is coming up soon!',
'notif.todo_due.title': 'To-do due',
'notif.todo_due.text': '{todo} in {trip} is due on {due}',
'notif.vacay_invite.title': 'Vacay Fusion Invite',
'notif.vacay_invite.text': '{actor} invited you to fuse vacation plans',
'notif.photos_shared.title': 'Photos Shared',
'notif.photos_shared.text': '{actor} shared {count} photo(s) in {trip}',
'notif.collab_message.title': 'New Message',
'notif.collab_message.text': '{actor} sent a message in {trip}',
'notif.packing_tagged.title': 'Packing Assignment',
'notif.packing_tagged.text': '{actor} assigned you to {category} in {trip}',
'notif.version_available.title': 'New Version Available',
'notif.version_available.text': 'TREK {version} is now available',
'notif.action.view_trip': 'View Trip',
'notif.action.view_collab': 'View Messages',
'notif.action.view_packing': 'View Packing',
'notif.action.view_photos': 'View Photos',
'notif.action.view_vacay': 'View Vacay',
'notif.action.view_admin': 'Go to Admin',
'notif.action.view': 'View',
'notif.action.accept': 'Accept',
'notif.action.decline': 'Decline',
'notif.generic.title': 'Notification',
'notif.generic.text': 'You have a new notification',
'notif.dev.unknown_event.title': '[DEV] Unknown Event',
'notif.test.title': '[Test] Bildirim',
'notif.test.simple.text': 'Bu basit bir test bildirimidir.',
'notif.test.boolean.text': 'Bu test bildirimini kabul ediyor musunuz?',
'notif.test.navigate.text': 'Gösterge paneline gitmek için aşağıya tıklayın.',
'notif.trip_invite.title': 'Seyahat Daveti',
'notif.trip_invite.text': '{actor} sizi {trip} seyahatine davet etti',
'notif.booking_change.title': 'Rezervasyon Güncellendi',
'notif.booking_change.text':
'{actor}, {trip} içindeki bir rezervasyonu güncelledi',
'notif.trip_reminder.title': 'Seyahat Hatırlatıcısı',
'notif.trip_reminder.text': '{trip} Seyahatiniz yaklaşıyor!',
'notif.todo_due.title': 'Yapılacak vadesi',
'notif.todo_due.text': '{trip} içindeki {todo} — son tarih: {due}',
'notif.vacay_invite.title': 'Vacay Birleştirme Daveti',
'notif.vacay_invite.text':
'{actor} tatil planlarını birleştirmeniz için sizi davet etti',
'notif.photos_shared.title': 'Fotoğraflar Paylaşıldı',
'notif.photos_shared.text':
'{actor}, {trip} içinde {count} fotoğraf paylaştı',
'notif.collab_message.title': 'Yeni Mesaj',
'notif.collab_message.text': '{actor}, {trip} içinde mesaj gönderdi',
'notif.packing_tagged.title': 'Paket listesi ataması',
'notif.packing_tagged.text':
'{actor} sizi {trip} içinde {category} kategorisine atadı',
'notif.version_available.title': 'Yeni Sürüm Mevcut',
'notif.version_available.text': 'TREK {version} artık kullanılabilir',
'notif.action.view_trip': 'Seyahati Görüntüle',
'notif.action.view_collab': 'Mesajları Görüntüle',
'notif.action.view_packing': 'Paket listesini görüntüle',
'notif.action.view_photos': 'Fotoğrafları Görüntüle',
'notif.action.view_vacay': "Vacay'ı Görüntüle",
'notif.action.view_admin': 'Yöneticiye git',
'notif.action.view': 'Görüntüle',
'notif.action.accept': 'Kabul et',
'notif.action.decline': 'Reddet',
'notif.generic.title': 'Bildirim',
'notif.generic.text': 'Yeni bir bildiriminiz var',
'notif.dev.unknown_event.title': '[GEL] Bilinmeyen Olay',
'notif.dev.unknown_event.text':
'Event type "{event}" is not registered in EVENT_NOTIFICATION_CONFIG',
'"{event}" olay türü EVENT_NOTIFICATION_CONFIG içinde kayıtlı değil',
};
export default notif;
+30 -29
View File
@@ -1,38 +1,39 @@
import type { TranslationStrings } from '../types';
const notifications: TranslationStrings = {
'notifications.title': 'Notifications',
'notifications.markAllRead': 'Mark all read',
'notifications.deleteAll': 'Delete all',
'notifications.showAll': 'Show all notifications',
'notifications.empty': 'No notifications',
'notifications.title': 'Bildirimler',
'notifications.markAllRead': 'Tümünü okundu işaretle',
'notifications.deleteAll': 'Tümünü sil',
'notifications.showAll': 'Tüm bildirimleri göster',
'notifications.empty': 'Bildirim yok',
'notifications.emptyDescription': "You're all caught up!",
'notifications.all': 'All',
'notifications.unreadOnly': 'Unread',
'notifications.markRead': 'Mark as read',
'notifications.markUnread': 'Mark as unread',
'notifications.delete': 'Delete',
'notifications.system': 'System',
'notifications.synologySessionCleared.title': 'Synology Photos disconnected',
'notifications.all': 'Tümü',
'notifications.unreadOnly': 'Okunmamış',
'notifications.markRead': 'Okundu işaretle',
'notifications.markUnread': 'Okunmadı işaretle',
'notifications.delete': 'Sil',
'notifications.system': 'Sistem',
'notifications.synologySessionCleared.title':
'Synology Photos bağlantısı kesildi',
'notifications.synologySessionCleared.text':
'Your server or account changed — go to Settings to test your connection again.',
'notifications.versionAvailable.title': 'Update Available',
'notifications.versionAvailable.text': 'TREK {version} is now available.',
'notifications.versionAvailable.button': 'View Details',
'notifications.test.title': 'Test notification from {actor}',
'notifications.test.text': 'This is a simple test notification.',
'notifications.test.booleanTitle': '{actor} asks for your approval',
"Sunucunuz veya hesabınız değişti — bağlantıyı test etmek için Ayarlar'a gidin.",
'notifications.versionAvailable.title': 'Güncelleme Mevcut',
'notifications.versionAvailable.text': 'TREK {version} artık kullanılabilir.',
'notifications.versionAvailable.button': 'Ayrıntıları Görüntüle',
'notifications.test.title': '{actor} Kaynaklı test bildirimi',
'notifications.test.text': 'Bu basit bir test bildirimidir.',
'notifications.test.booleanTitle': '{actor} onayınızı istiyor',
'notifications.test.booleanText':
'This is a test boolean notification. Choose an action below.',
'notifications.test.accept': 'Approve',
'notifications.test.decline': 'Decline',
'notifications.test.navigateTitle': 'Check something out',
'notifications.test.navigateText': 'This is a test navigate notification.',
'notifications.test.goThere': 'Go there',
'notifications.test.adminTitle': 'Admin broadcast',
'Bu bir test boolean bildirimidir. Aşağıdan bir eylem seçin.',
'notifications.test.accept': 'Onayla',
'notifications.test.decline': 'Reddet',
'notifications.test.navigateTitle': 'Bir şeye göz atın',
'notifications.test.navigateText': 'Bu bir test navigasyon bildirimidir.',
'notifications.test.goThere': 'Git',
'notifications.test.adminTitle': 'Yönetici yayını',
'notifications.test.adminText':
'{actor} sent a test notification to all admins.',
'notifications.test.tripTitle': '{actor} posted in your trip',
'notifications.test.tripText': 'Test notification for trip "{trip}".',
'{actor} tüm yöneticilere test bildirimi gönderdi.',
'notifications.test.tripTitle': '{actor} seyahatinizde bir şey paylaştı',
'notifications.test.tripText': '"{trip}" seyahati için test bildirimi.',
};
export default notifications;
+66 -66
View File
@@ -1,99 +1,99 @@
import type { TranslationStrings } from '../types';
const oauth: TranslationStrings = {
'oauth.scope.group.trips': 'Trips',
'oauth.scope.group.places': 'Places',
'oauth.scope.group.trips': 'Geziler',
'oauth.scope.group.places': 'Yer',
'oauth.scope.group.atlas': 'Atlas',
'oauth.scope.group.packing': 'Packing',
'oauth.scope.group.todos': 'To-dos',
'oauth.scope.group.budget': 'Budget',
'oauth.scope.group.reservations': 'Reservations',
'oauth.scope.group.collab': 'Collaboration',
'oauth.scope.group.notifications': 'Notifications',
'oauth.scope.group.vacay': 'Vacation',
'oauth.scope.group.geo': 'Geo',
'oauth.scope.group.weather': 'Weather',
'oauth.scope.group.journey': 'Journey',
'oauth.scope.trips:read.label': 'View trips & itineraries',
'oauth.scope.group.packing': 'Ambalaj',
'oauth.scope.group.todos': 'Yapılacaklar',
'oauth.scope.group.budget': 'Bütçe',
'oauth.scope.group.reservations': 'Rezervasyonlar',
'oauth.scope.group.collab': 'İşbirliği',
'oauth.scope.group.notifications': 'Bildirimler',
'oauth.scope.group.vacay': 'Tatil',
'oauth.scope.group.geo': 'Coğrafi',
'oauth.scope.group.weather': 'Hava durumu',
'oauth.scope.group.journey': 'Seyahat',
'oauth.scope.trips:read.label': 'Seyahatleri ve programları görüntüle',
'oauth.scope.trips:read.description':
'Read trips, days, day notes, and members',
'oauth.scope.trips:write.label': 'Edit trips & itineraries',
'Seyahatleri, günleri, gün notlarını ve üyeleri oku',
'oauth.scope.trips:write.label': 'Seyahatleri ve programları düzenle',
'oauth.scope.trips:write.description':
'Create and update trips, days, notes, and manage members',
'oauth.scope.trips:delete.label': 'Delete trips',
'Seyahatleri, günleri, notları oluştur ve güncelle; üyeleri yönet',
'oauth.scope.trips:delete.label': 'Seyahatleri sil',
'oauth.scope.trips:delete.description':
'Permanently delete entire trips — this action is irreversible',
'oauth.scope.trips:share.label': 'Manage share links',
'Tüm seyahatleri kalıcı olarak sil — bu işlem geri alınamaz',
'oauth.scope.trips:share.label': 'Paylaşım bağlantılarını yönet',
'oauth.scope.trips:share.description':
'Create, update, and revoke public share links for trips',
'oauth.scope.places:read.label': 'View places & map data',
'Seyahatler için herkese açık paylaşım bağlantıları oluştur, güncelle ve iptal et',
'oauth.scope.places:read.label': 'Yerleri ve harita verilerini görüntüle',
'oauth.scope.places:read.description':
'Read places, day assignments, tags, and categories',
'oauth.scope.places:write.label': 'Manage places',
'Yerleri, gün atamalarını, etiketleri ve kategorileri oku',
'oauth.scope.places:write.label': 'Yerleri yönet',
'oauth.scope.places:write.description':
'Create, update, and delete places, assignments, and tags',
'oauth.scope.atlas:read.label': 'View Atlas',
'Yerleri, atamaları ve etiketleri oluştur, güncelle ve sil',
'oauth.scope.atlas:read.label': "Atlas'ı Görüntüle",
'oauth.scope.atlas:read.description':
'Read visited countries, regions, and bucket list',
'oauth.scope.atlas:write.label': 'Manage Atlas',
'Ziyaret edilen ülkeleri, bölgeleri ve yapılacaklar listesini oku',
'oauth.scope.atlas:write.label': "Atlas'ı Yönet",
'oauth.scope.atlas:write.description':
'Mark countries and regions visited, manage bucket list',
'oauth.scope.packing:read.label': 'View packing lists',
'Ülke ve bölgeleri ziyaret edildi olarak işaretle, yapılacaklar listesini yönet',
'oauth.scope.packing:read.label': 'Paket listelerini görüntüle',
'oauth.scope.packing:read.description':
'Read packing items, bags, and category assignees',
'oauth.scope.packing:write.label': 'Manage packing lists',
'Paket öğelerini, çantaları ve kategori atamalarını oku',
'oauth.scope.packing:write.label': 'Paket listelerini yönet',
'oauth.scope.packing:write.description':
'Add, update, delete, toggle, and reorder packing items and bags',
'oauth.scope.todos:read.label': 'View to-do lists',
'Paket öğelerini ve çantaları ekle, güncelle, sil, işaretle ve yeniden sırala',
'oauth.scope.todos:read.label': 'Yapılacak listelerini görüntüle',
'oauth.scope.todos:read.description':
'Read trip to-do items and category assignees',
'oauth.scope.todos:write.label': 'Manage to-do lists',
'Seyahat yapılacak öğelerini ve kategori atamalarını oku',
'oauth.scope.todos:write.label': 'Yapılacak listelerini yönet',
'oauth.scope.todos:write.description':
'Create, update, toggle, delete, and reorder to-do items',
'oauth.scope.budget:read.label': 'View budget',
'Yapılacak öğeleri oluştur, güncelle, işaretle, sil ve yeniden sırala',
'oauth.scope.budget:read.label': 'Bütçeyi görüntüle',
'oauth.scope.budget:read.description':
'Read budget items and expense breakdown',
'oauth.scope.budget:write.label': 'Manage budget',
'Bütçe kalemlerini ve harcama dökümünü oku',
'oauth.scope.budget:write.label': 'Bütçeyi yönet',
'oauth.scope.budget:write.description':
'Create, update, and delete budget items',
'oauth.scope.reservations:read.label': 'View reservations',
'Bütçe kalemlerini oluştur, güncelle ve sil',
'oauth.scope.reservations:read.label': 'Rezervasyonları görüntüle',
'oauth.scope.reservations:read.description':
'Read reservations and accommodation details',
'oauth.scope.reservations:write.label': 'Manage reservations',
'Rezervasyonları ve konaklama ayrıntılarını oku',
'oauth.scope.reservations:write.label': 'Rezervasyonları yönet',
'oauth.scope.reservations:write.description':
'Create, update, delete, and reorder reservations',
'oauth.scope.collab:read.label': 'View collaboration',
'Rezervasyonları oluştur, güncelle, sil ve yeniden sırala',
'oauth.scope.collab:read.label': 'İşbirliğini görüntüle',
'oauth.scope.collab:read.description':
'Read collab notes, polls, and messages',
'oauth.scope.collab:write.label': 'Manage collaboration',
'İşbirliği notlarını, anketleri ve mesajları oku',
'oauth.scope.collab:write.label': 'İşbirliğini yönet',
'oauth.scope.collab:write.description':
'Create, update, and delete collab notes, polls, and messages',
'oauth.scope.notifications:read.label': 'View notifications',
'İşbirliği notlarını, anketleri ve mesajları oluştur, güncelle ve sil',
'oauth.scope.notifications:read.label': 'Bildirimleri görüntüle',
'oauth.scope.notifications:read.description':
'Read in-app notifications and unread counts',
'oauth.scope.notifications:write.label': 'Manage notifications',
'Uygulama içi bildirimleri ve okunmamış sayıları oku',
'oauth.scope.notifications:write.label': 'Bildirimleri yönet',
'oauth.scope.notifications:write.description':
'Mark notifications as read and respond to them',
'oauth.scope.vacay:read.label': 'View vacation plans',
'Bildirimleri okundu işaretle ve yanıtla',
'oauth.scope.vacay:read.label': 'Tatil planlarını görüntüle',
'oauth.scope.vacay:read.description':
'Read vacation planning data, entries, and stats',
'oauth.scope.vacay:write.label': 'Manage vacation plans',
'Tatil planlama verilerini, kayıtları ve istatistikleri oku',
'oauth.scope.vacay:write.label': 'Tatil planlarını yönet',
'oauth.scope.vacay:write.description':
'Create and manage vacation entries, holidays, and team plans',
'oauth.scope.geo:read.label': 'Maps & geocoding',
'Tatil kayıtlarını, resmi tatilleri ve ekip planlarını oluştur ve yönet',
'oauth.scope.geo:read.label': 'Haritalar ve coğrafi kodlama',
'oauth.scope.geo:read.description':
'Search locations, resolve map URLs, and reverse geocode coordinates',
'oauth.scope.weather:read.label': 'Weather forecasts',
"Konum ara, harita URL'lerini çöz ve koordinatları ters coğrafi kodla",
'oauth.scope.weather:read.label': 'Hava durumu tahminleri',
'oauth.scope.weather:read.description':
'Fetch weather forecasts for trip locations and dates',
'oauth.scope.journey:read.label': 'View journeys',
'Seyahat konumları ve tarihleri için hava durumu tahminlerini getir',
'oauth.scope.journey:read.label': "Journey'leri görüntüle",
'oauth.scope.journey:read.description':
'Read journeys, entries, and contributor list',
'oauth.scope.journey:write.label': 'Manage journeys',
"Journey'leri, kayıtları ve katkıda bulunan listesini oku",
'oauth.scope.journey:write.label': "Journey'leri yönet",
'oauth.scope.journey:write.description':
'Create, update, and delete journeys and their entries',
'oauth.scope.journey:share.label': 'Manage journey links',
"Journey'leri ve kayıtlarını oluştur, güncelle ve sil",
'oauth.scope.journey:share.label': 'Journey bağlantılarını yönet',
'oauth.scope.journey:share.description':
'Create, update, and revoke public share links for journeys',
"Journey'ler için herkese açık paylaşım bağlantıları oluştur, güncelle ve iptal et",
};
export default oauth;
+85 -175
View File
@@ -1,186 +1,96 @@
import type { TranslationStrings } from '../types';
const packing: TranslationStrings = {
'packing.title': 'Packing List',
'packing.empty': 'Packing list is empty',
'packing.import': 'Import',
'packing.importTitle': 'Import Packing List',
'packing.title': 'Paket Listesi',
'packing.empty': 'Paket listesi boş',
'packing.import': 'İçe aktar',
'packing.importTitle': 'Paket listesini içe aktar',
'packing.importHint':
'One item per line. Format: Category, Name, Weight in g (optional), Bag (optional), checked/unchecked (optional)',
'Satır başına bir öğe. Biçim: Kategori, Ad, Ağırlık (g, isteğe bağlı), Çanta (isteğe bağlı), işaretli/işaretsiz (isteğe bağlı)',
'packing.importPlaceholder':
'Hygiene, Toothbrush\nClothing, T-Shirts, 200\nDocuments, Passport, , Carry-on\nElectronics, Charger, 50, Suitcase, checked',
'packing.importCsv': 'Load CSV/TXT',
'packing.importAction': 'Import {count}',
'packing.importSuccess': '{count} items imported',
'packing.importError': 'Import failed',
'packing.importEmpty': 'No items to import',
'packing.progress': '{packed} of {total} packed ({percent}%)',
'packing.clearChecked': 'Remove {count} checked',
'packing.clearCheckedShort': 'Remove {count}',
'packing.suggestions': 'Suggestions',
'packing.suggestionsTitle': 'Add Suggestions',
'packing.allSuggested': 'All suggestions added',
'packing.allPacked': 'All packed!',
'packing.addPlaceholder': 'Add new item...',
'packing.categoryPlaceholder': 'Category...',
'packing.filterAll': 'All',
'packing.filterOpen': 'Open',
'packing.filterDone': 'Done',
'packing.emptyTitle': 'Packing list is empty',
'packing.emptyHint': 'Add items or use the suggestions',
'packing.emptyFiltered': 'No items match this filter',
'packing.menuRename': 'Rename',
'packing.menuCheckAll': 'Check All',
'packing.menuUncheckAll': 'Uncheck All',
'packing.menuDeleteCat': 'Delete Category',
'packing.noMembers': 'No trip members',
'packing.addItem': 'Add item',
'packing.addItemPlaceholder': 'Item name...',
'packing.addCategory': 'Add category',
'packing.newCategoryPlaceholder': 'Category name (e.g. Clothing)',
'packing.applyTemplate': 'Apply template',
'packing.template': 'Template',
'packing.templateApplied': '{count} items added from template',
'packing.templateError': 'Failed to apply template',
'packing.saveAsTemplate': 'Save as template',
'packing.templateName': 'Template name',
'packing.templateSaved': 'Packing list saved as template',
'packing.bags': 'Bags',
'packing.noBag': 'Unassigned',
'packing.totalWeight': 'Total weight',
'packing.bagName': 'Bag name...',
'packing.addBag': 'Add bag',
'packing.changeCategory': 'Change Category',
'Hijyen, Diş fırçası\\nGiyim, Tişört, 200\\nBelgeler, Pasaport, , El bagajı\\nElektronik, Şarj cihazı, 50, Bavul, işaretli',
'packing.importCsv': 'CSV/TXT Yükle',
'packing.importAction': '{count} Öğeyi içe aktar',
'packing.importSuccess': '{count} öğe içe aktarıldı',
'packing.importError': 'İçe aktarma başarısız oldu',
'packing.importEmpty': 'İçe aktarılacak öğe yok',
'packing.progress': '{total} öğeden {packed} paketlendi (%{percent})',
'packing.clearChecked': '{count} İşaretli öğeyi kaldır',
'packing.clearCheckedShort': '{count} Kaldır',
'packing.suggestions': 'Öneriler',
'packing.suggestionsTitle': 'Öneri Ekle',
'packing.allSuggested': 'Tüm öneriler eklendi',
'packing.allPacked': 'Hepsi paketlendi!',
'packing.addPlaceholder': 'Yeni öğe ekle...',
'packing.categoryPlaceholder': 'Kategori...',
'packing.filterAll': 'Tüm',
'packing.filterOpen': 'Açık',
'packing.filterDone': 'Tamamlamak',
'packing.emptyTitle': 'Paket listesi boş',
'packing.emptyHint': 'Öğe ekleyin veya önerileri kullanın',
'packing.emptyFiltered': 'Bu filtreye uyan öğe yok',
'packing.menuRename': 'Yeniden adlandır',
'packing.menuCheckAll': 'Tümünü İşaretle',
'packing.menuUncheckAll': 'Tüm işaretleri kaldır',
'packing.menuDeleteCat': 'Kategoriyi Sil',
'packing.noMembers': 'Seyahat üyesi yok',
'packing.addItem': 'Öğe ekle',
'packing.addItemPlaceholder': 'Öğe adı...',
'packing.addCategory': 'Kategori ekle',
'packing.newCategoryPlaceholder': 'Kategori adı (ör. Giyim)',
'packing.applyTemplate': 'Şablon uygula',
'packing.template': 'Şablon',
'packing.templateApplied': 'Şablondan {count} öğe eklendi',
'packing.templateError': 'Şablon uygulanamadı',
'packing.saveAsTemplate': 'Şablon olarak kaydet',
'packing.templateName': 'Şablon adı',
'packing.templateSaved': 'Paket listesi şablon olarak kaydedildi',
'packing.bags': 'Çantalar',
'packing.noBag': 'Atanmamış',
'packing.totalWeight': 'Toplam ağırlık',
'packing.bagName': 'Çanta adı...',
'packing.addBag': 'Çanta ekle',
'packing.changeCategory': 'Kategoriyi Değiştir',
'packing.confirm.clearChecked':
'Are you sure you want to remove {count} checked items?',
'{count} İşaretli öğeyi kaldırmak istediğinizden emin misiniz?',
'packing.confirm.deleteCat':
'Are you sure you want to delete the category "{name}" with {count} items?',
'packing.defaultCategory': 'Other',
'packing.toast.saveError': 'Failed to save',
'packing.toast.deleteError': 'Failed to delete',
'packing.toast.renameError': 'Failed to rename',
'packing.toast.addError': 'Failed to add',
'"{name}" kategorisini {count} öğeyle birlikte silmek istediğinizden emin misiniz?',
'packing.defaultCategory': 'Diğer',
'packing.toast.saveError': 'Kaydedilemedi',
'packing.toast.deleteError': 'Silinemedi',
'packing.toast.renameError': 'Yeniden adlandırılamadı',
'packing.toast.addError': 'Eklenemedi',
'packing.suggestions.items': [
{
name: 'Passport',
category: 'Documents',
},
{
name: 'ID Card',
category: 'Documents',
},
{
name: 'Travel Insurance',
category: 'Documents',
},
{
name: 'Flight Tickets',
category: 'Documents',
},
{
name: 'Credit Card',
category: 'Finances',
},
{
name: 'Cash',
category: 'Finances',
},
{
name: 'Visa',
category: 'Documents',
},
{
name: 'T-Shirts',
category: 'Clothing',
},
{
name: 'Pants',
category: 'Clothing',
},
{
name: 'Underwear',
category: 'Clothing',
},
{
name: 'Socks',
category: 'Clothing',
},
{
name: 'Jacket',
category: 'Clothing',
},
{
name: 'Sleepwear',
category: 'Clothing',
},
{
name: 'Swimwear',
category: 'Clothing',
},
{
name: 'Rain Jacket',
category: 'Clothing',
},
{
name: 'Comfortable Shoes',
category: 'Clothing',
},
{
name: 'Toothbrush',
category: 'Toiletries',
},
{
name: 'Toothpaste',
category: 'Toiletries',
},
{
name: 'Shampoo',
category: 'Toiletries',
},
{
name: 'Deodorant',
category: 'Toiletries',
},
{
name: 'Sunscreen',
category: 'Toiletries',
},
{
name: 'Razor',
category: 'Toiletries',
},
{
name: 'Charger',
category: 'Electronics',
},
{
name: 'Power Bank',
category: 'Electronics',
},
{
name: 'Headphones',
category: 'Electronics',
},
{
name: 'Travel Adapter',
category: 'Electronics',
},
{
name: 'Camera',
category: 'Electronics',
},
{
name: 'Pain Medication',
category: 'Health',
},
{
name: 'Band-Aids',
category: 'Health',
},
{
name: 'Disinfectant',
category: 'Health',
},
{ name: 'Pasaport', category: 'Belgeler' },
{ name: 'Kimlik kartı', category: 'Belgeler' },
{ name: 'Seyahat sigortası', category: 'Belgeler' },
{ name: 'Uçak biletleri', category: 'Belgeler' },
{ name: 'Kredi kartı', category: 'Finans' },
{ name: 'Nakit', category: 'Finans' },
{ name: 'Vize', category: 'Belgeler' },
{ name: 'Tişört', category: 'Giyim' },
{ name: 'Pantolon', category: 'Giyim' },
{ name: 'İç çamaşırı', category: 'Giyim' },
{ name: 'Çorap', category: 'Giyim' },
{ name: 'Ceket', category: 'Giyim' },
{ name: 'Pijama', category: 'Giyim' },
{ name: 'Mayo', category: 'Giyim' },
{ name: 'Yağmurluk', category: 'Giyim' },
{ name: 'Rahat ayakkabı', category: 'Giyim' },
{ name: 'Diş fırçası', category: 'Hijyen' },
{ name: 'Diş macunu', category: 'Hijyen' },
{ name: 'Şampuan', category: 'Hijyen' },
{ name: 'Deodorant', category: 'Hijyen' },
{ name: 'Güneş kremi', category: 'Hijyen' },
{ name: 'Tıraş bıçağı', category: 'Hijyen' },
{ name: 'Şarj cihazı', category: 'Elektronik' },
{ name: 'Powerbank', category: 'Elektronik' },
{ name: 'Kulaklık', category: 'Elektronik' },
{ name: 'Seyahat adaptörü', category: 'Elektronik' },
{ name: 'Kamera', category: 'Elektronik' },
{ name: 'Ağrı kesici', category: 'Sağlık' },
{ name: 'Yara bandı', category: 'Sağlık' },
{ name: 'Dezenfektan', category: 'Sağlık' },
],
};
export default packing;
+5 -5
View File
@@ -1,10 +1,10 @@
import type { TranslationStrings } from '../types';
const pdf: TranslationStrings = {
'pdf.travelPlan': 'Travel Plan',
'pdf.planned': 'Planned',
'pdf.costLabel': 'Cost EUR',
'pdf.preview': 'PDF Preview',
'pdf.saveAsPdf': 'Save as PDF',
'pdf.travelPlan': 'Seyahat Planı',
'pdf.planned': 'Planlandı',
'pdf.costLabel': 'Maliyet EUR',
'pdf.preview': 'PDF Önizleme',
'pdf.saveAsPdf': 'PDF olarak Kaydet',
};
export default pdf;
+54 -46
View File
@@ -1,57 +1,65 @@
import type { TranslationStrings } from '../types';
const perm: TranslationStrings = {
'perm.title': 'Permission Settings',
'perm.subtitle': 'Control who can perform actions across the application',
'perm.saved': 'Permission settings saved',
'perm.resetDefaults': 'Reset to defaults',
'perm.customized': 'customized',
'perm.level.admin': 'Admin only',
'perm.level.tripOwner': 'Trip owner',
'perm.level.tripMember': 'Trip members',
'perm.level.everybody': 'Everyone',
'perm.cat.trip': 'Trip Management',
'perm.cat.members': 'Member Management',
'perm.cat.files': 'Files',
'perm.cat.content': 'Content & Schedule',
'perm.cat.extras': 'Budget, Packing & Collaboration',
'perm.action.trip_create': 'Create trips',
'perm.action.trip_edit': 'Edit trip details',
'perm.action.trip_delete': 'Delete trips',
'perm.action.trip_archive': 'Archive / unarchive trips',
'perm.action.trip_cover_upload': 'Upload cover image',
'perm.action.member_manage': 'Add / remove members',
'perm.action.file_upload': 'Upload files',
'perm.action.file_edit': 'Edit file metadata',
'perm.action.file_delete': 'Delete files',
'perm.action.place_edit': 'Add / edit / delete places',
'perm.action.day_edit': 'Edit days, notes & assignments',
'perm.action.reservation_edit': 'Manage reservations',
'perm.action.budget_edit': 'Manage budget',
'perm.action.packing_edit': 'Manage packing lists',
'perm.action.collab_edit': 'Collaboration (notes, polls, chat)',
'perm.action.share_manage': 'Manage share links',
'perm.actionHint.trip_create': 'Who can create new trips',
'perm.title': 'İzin Ayarları',
'perm.subtitle':
'Uygulama genelinde kimlerin hangi işlemleri yapabileceğini belirleyin',
'perm.saved': 'İzin ayarları kaydedildi',
'perm.resetDefaults': 'Varsayılanlara sıfırla',
'perm.customized': 'özelleştirildi',
'perm.level.admin': 'Yalnızca yönetici',
'perm.level.tripOwner': 'Seyahat sahibi',
'perm.level.tripMember': 'Seyahat üyeleri',
'perm.level.everybody': 'Herkes',
'perm.cat.trip': 'Seyahat Yönetimi',
'perm.cat.members': 'Üye Yönetimi',
'perm.cat.files': 'Dosyalar',
'perm.cat.content': 'İçerik ve Program',
'perm.cat.extras': 'Bütçe, Paketleme ve İşbirliği',
'perm.action.trip_create': 'Seyahat oluştur',
'perm.action.trip_edit': 'Seyahat ayrıntılarını düzenle',
'perm.action.trip_delete': 'Seyahatleri sil',
'perm.action.trip_archive': 'Seyahatleri arşivle / geri al',
'perm.action.trip_cover_upload': 'Kapak görseli yükle',
'perm.action.member_manage': 'Üye ekle / kaldır',
'perm.action.file_upload': 'Dosya yükle',
'perm.action.file_edit': 'Dosya meta verisini düzenle',
'perm.action.file_delete': 'Dosyaları sil',
'perm.action.place_edit': 'Yer ekle / düzenle / sil',
'perm.action.day_edit': 'Günleri, notları ve atamaları düzenle',
'perm.action.reservation_edit': 'Rezervasyonları yönet',
'perm.action.budget_edit': 'Bütçeyi yönet',
'perm.action.packing_edit': 'Paket listelerini yönet',
'perm.action.collab_edit': 'İşbirliği (notlar, anketler, sohbet)',
'perm.action.share_manage': 'Paylaşım bağlantılarını yönet',
'perm.actionHint.trip_create': 'Kimler yeni seyahat oluşturabilir',
'perm.actionHint.trip_edit':
'Who can change trip name, dates, description and currency',
'perm.actionHint.trip_delete': 'Who can permanently delete a trip',
'perm.actionHint.trip_archive': 'Who can archive or unarchive a trip',
'Kimler seyahat adını, tarihlerini, açıklamasını ve para birimini değiştirebilir',
'perm.actionHint.trip_delete': 'Kimler bir seyahati kalıcı olarak silebilir',
'perm.actionHint.trip_archive':
'Kimler seyahati arşivleyebilir veya geri alabilir',
'perm.actionHint.trip_cover_upload':
'Who can upload or change the cover image',
'perm.actionHint.member_manage': 'Who can invite or remove trip members',
'perm.actionHint.file_upload': 'Who can upload files to a trip',
'perm.actionHint.file_edit': 'Who can edit file descriptions and links',
'Kimler kapak görseli yükleyebilir veya değiştirebilir',
'perm.actionHint.member_manage':
'Kimler seyahat üyesi davet edebilir veya kaldırabilir',
'perm.actionHint.file_upload': 'Kimler seyahate dosya yükleyebilir',
'perm.actionHint.file_edit':
'Kimler dosya açıklamalarını ve bağlantılarını düzenleyebilir',
'perm.actionHint.file_delete':
'Who can move files to trash or permanently delete them',
'perm.actionHint.place_edit': 'Who can add, edit or delete places',
'Kimler dosyaları çöp kutusuna taşıyabilir veya kalıcı silebilir',
'perm.actionHint.place_edit':
'Kimler yer ekleyebilir, düzenleyebilir veya silebilir',
'perm.actionHint.day_edit':
'Who can edit days, day notes and place assignments',
'Kimler günleri, gün notlarını ve yer atamalarını düzenleyebilir',
'perm.actionHint.reservation_edit':
'Who can create, edit or delete reservations',
'perm.actionHint.budget_edit': 'Who can create, edit or delete budget items',
'perm.actionHint.packing_edit': 'Who can manage packing items and bags',
'Kimler rezervasyon oluşturabilir, düzenleyebilir veya silebilir',
'perm.actionHint.budget_edit':
'Kimler bütçe kalemleri oluşturabilir, düzenleyebilir veya silebilir',
'perm.actionHint.packing_edit':
'Kimler paket öğelerini ve çantaları yönetebilir',
'perm.actionHint.collab_edit':
'Who can create notes, polls and send messages',
'perm.actionHint.share_manage': 'Who can create or delete public share links',
'Kimler not, anket oluşturabilir ve mesaj gönderebilir',
'perm.actionHint.share_manage':
'Kimler genel paylaşım bağlantısı oluşturabilir veya silebilir',
};
export default perm;
+20 -20
View File
@@ -1,25 +1,25 @@
import type { TranslationStrings } from '../types';
const photos: TranslationStrings = {
'photos.title': 'Photos',
'photos.subtitle': '{count} photos for {trip}',
'photos.dropHere': 'Drop photos here...',
'photos.dropHereActive': 'Drop photos here',
'photos.captionForAll': 'Caption (for all)',
'photos.captionPlaceholder': 'Optional caption...',
'photos.addCaption': 'Add caption...',
'photos.allDays': 'All Days',
'photos.noPhotos': 'No photos yet',
'photos.uploadHint': 'Upload your travel photos',
'photos.clickToSelect': 'or click to select',
'photos.linkPlace': 'Link Place',
'photos.noPlace': 'No Place',
'photos.uploadN': '{n} photo(s) upload',
'photos.linkDay': 'Link Day',
'photos.noDay': 'No Day',
'photos.dayLabel': 'Day {number}',
'photos.photoSelected': 'Photo selected',
'photos.photosSelected': 'Photos selected',
'photos.fileTypeHint': 'JPG, PNG, WebP · max. 10 MB · up to 30 photos',
'photos.title': 'Fotoğraflar',
'photos.subtitle': '{trip} için {count} fotoğraf',
'photos.dropHere': 'Fotoğrafları buraya bırakın...',
'photos.dropHereActive': 'Fotoğrafları buraya bırakın',
'photos.captionForAll': 'Açıklama (hepsi için)',
'photos.captionPlaceholder': 'İsteğe bağlı açıklama...',
'photos.addCaption': 'Açıklama ekle...',
'photos.allDays': 'Tüm Günler',
'photos.noPhotos': 'Henüz fotoğraf yok',
'photos.uploadHint': 'Seyahat fotoğraflarınızı yükleyin',
'photos.clickToSelect': 'veya seçmek için tıklayın',
'photos.linkPlace': 'Yere Bağla',
'photos.noPlace': 'Yer Yok',
'photos.uploadN': '{n} fotoğraf yükle',
'photos.linkDay': 'Güne Bağla',
'photos.noDay': 'Gün Yok',
'photos.dayLabel': '{number}. gün',
'photos.photoSelected': 'Fotoğraf seçildi',
'photos.photosSelected': 'Fotoğraflar seçildi',
'photos.fileTypeHint': 'JPG, PNG, WebP · maks. 10 MB · en fazla 30 fotoğraf',
};
export default photos;
+78 -78
View File
@@ -1,91 +1,91 @@
import type { TranslationStrings } from '../types';
const places: TranslationStrings = {
'places.addPlace': 'Add Place/Activity',
'places.importFile': 'Import file',
'places.sidebarDrop': 'Drop to import',
'places.addPlace': 'Yer/etkinlik Ekle',
'places.importFile': 'Dosyayı içe aktar',
'places.sidebarDrop': 'İçe aktarmak için bırakın',
'places.importFileHint':
'Import .gpx, .kml or .kmz files from tools like Google My Maps, Google Earth, or a GPS tracker.',
'places.importFileDropHere': 'Click to select a file or drag and drop here',
'places.importFileDropActive': 'Drop file to select',
'Google Haritalarım, Google Earth veya GPS izleyici gibi araçlardan .gpx, .kml veya .kmz dosyalarını içe aktarın.',
'places.importFileDropHere':
'Bir dosya seçmek için tıklayın veya buraya sürükleyip bırakın',
'places.importFileDropActive': 'Seçmek için dosyayı bırakın',
'places.importFileUnsupported':
'Unsupported file type. Use .gpx, .kml or .kmz.',
'Desteklenmeyen dosya türü. .gpx, .kml veya .kmz kullanın.',
'places.importFileTooLarge':
'File is too large. Maximum upload size is {maxMb} MB.',
'places.importFileError': 'Import failed',
'places.importAllSkipped': 'All places were already in the trip.',
'places.gpxImported': '{count} places imported from GPX',
'places.gpxImportTypes': 'What do you want to import?',
'places.gpxImportWaypoints': 'Waypoints',
'places.gpxImportRoutes': 'Routes',
'places.gpxImportTracks': 'Tracks (with path geometry)',
'places.gpxImportNoneSelected': 'Select at least one type to import.',
'places.kmlImportTypes': 'What do you want to import?',
'places.kmlImportPoints': 'Points (Placemarks)',
'places.kmlImportPaths': 'Paths (LineStrings)',
'places.kmlImportNoneSelected': 'Select at least one type to import.',
'places.selectionCount': '{count} selected',
'places.deleteSelected': 'Delete selected',
'places.kmlKmzImported': '{count} places imported from KMZ/KML',
'places.urlResolved': 'Place imported from URL',
'places.importList': 'List Import',
"Dosya çok büyük. Maksimum yükleme boyutu {maxMb} MB'tır.",
'places.importFileError': 'İçe aktarma başarısız oldu',
'places.importAllSkipped': 'Tüm yerler zaten yolculuktaydı.',
'places.gpxImported': "{count} yer GPX'ten içe Aktarıldı",
'places.gpxImportTypes': 'Neyi içe aktarmak istiyorsunuz?',
'places.gpxImportWaypoints': 'Ara noktalar',
'places.gpxImportRoutes': 'Rotalar',
'places.gpxImportTracks': 'İzler (yol geometrisi ile)',
'places.gpxImportNoneSelected': 'İçe aktarılacak en az bir tür seçin.',
'places.kmlImportTypes': 'Neyi içe aktarmak istiyorsunuz?',
'places.kmlImportPoints': 'Noktalar (Yer İşaretleri)',
'places.kmlImportPaths': "Yollar (LineString'ler)",
'places.kmlImportNoneSelected': 'İçe aktarılacak en az bir tür seçin.',
'places.selectionCount': '{count} seçildi',
'places.deleteSelected': 'Seçileni sil',
'places.kmlKmzImported': "KMZ/KML'den {count} yer içe Aktarıldı",
'places.urlResolved': "URL'den içe aktarılan Yer",
'places.importList': 'Liste İçe Aktarma',
'places.kmlKmzSummaryValues':
'Placemarks: {total} • Imported: {created} • Skipped: {skipped}',
'places.importGoogleList': 'Google List',
'places.importNaverList': 'Naver List',
'Yer işaretleri: {total} • İçe aktarıldı: {created} • Atlandı: {skipped}',
'places.importGoogleList': 'Google Listesi',
'places.importNaverList': 'Naver Listesi',
'places.googleListHint':
'Paste a shared Google Maps list link to import all places.',
'places.googleListImported': '{count} places imported from "{list}"',
'places.googleListError': 'Failed to import Google Maps list',
'Tüm yerleri içe aktarmak için paylaşılan bir Google Haritalar listesi bağlantısını yapıştırın.',
'places.googleListImported': '"{list}"ten {count} yer içe aktarıldı',
'places.googleListError': 'Google Haritalar listesi içe aktarılamadı',
'places.naverListHint':
'Paste a shared Naver Maps list link to import all places.',
'places.naverListImported': '{count} places imported from "{list}"',
'places.naverListError': 'Failed to import Naver Maps list',
'places.viewDetails': 'View Details',
'places.assignToDay': 'Add to which day?',
'places.all': 'All',
'places.unplanned': 'Unplanned',
'places.filterTracks': 'Tracks',
'places.search': 'Search places...',
'places.allCategories': 'All Categories',
'places.categoriesSelected': 'categories',
'places.clearFilter': 'Clear filter',
'places.count': '{count} places',
'places.countSingular': '1 place',
'places.allPlanned': 'All places are planned',
'places.noneFound': 'No places found',
'places.editPlace': 'Edit Place',
'places.formName': 'Name',
'places.formNamePlaceholder': 'e.g. Eiffel Tower',
'places.formDescription': 'Description',
'places.formDescriptionPlaceholder': 'Short description...',
'places.formAddress': 'Address',
'places.formAddressPlaceholder': 'Street, City, Country',
'places.formLat': 'Latitude (e.g. 48.8566)',
'places.formLng': 'Longitude (e.g. 2.3522)',
'places.formCategory': 'Category',
'places.noCategory': 'No Category',
'places.categoryNamePlaceholder': 'Category name',
'places.formTime': 'Time',
'places.startTime': 'Start',
'places.endTime': 'End',
'places.endTimeBeforeStart': 'End time is before start time',
'places.timeCollision': 'Time overlap with:',
'places.formWebsite': 'Website',
'places.formNotes': 'Notes',
'places.formNotesPlaceholder': 'Personal notes...',
'places.formReservation': 'Reservation',
'places.reservationNotesPlaceholder':
'Reservation notes, confirmation number...',
'places.mapsSearchPlaceholder': 'Search places...',
'places.mapsSearchError': 'Place search failed.',
'places.loadingDetails': 'Loading place details…',
'Tüm yerleri içe aktarmak için paylaşılan bir Naver Haritalar listesi bağlantısını yapıştırın.',
'places.naverListImported': '"{list}"ten {count} yer içe aktarıldı',
'places.naverListError': 'Naver Haritalar listesi içe aktarılamadı',
'places.viewDetails': 'Ayrıntıları Görüntüle',
'places.assignToDay': 'Hangi güne eklensin?',
'places.all': 'Tüm',
'places.unplanned': 'Planlanmamış',
'places.filterTracks': 'Parçalar',
'places.search': 'Yer ara...',
'places.allCategories': 'Tüm Kategoriler',
'places.categoriesSelected': 'kategoriler',
'places.clearFilter': 'Filtreyi temizle',
'places.count': '{count} yer',
'places.countSingular': '1 yer',
'places.allPlanned': 'Bütün yerler planlandı',
'places.noneFound': 'Hiçbir yer bulunamadı',
'places.editPlace': 'Yeri Düzenle',
'places.formName': 'İsim',
'places.formNamePlaceholder': 'örneğin Eyfel Kulesi',
'places.formDescription': 'Tanım',
'places.formDescriptionPlaceholder': 'Kısa açıklama...',
'places.formAddress': 'Adres',
'places.formAddressPlaceholder': 'Sokak, Şehir, Ülke',
'places.formLat': 'Enlem (ör. 48,8566)',
'places.formLng': 'Boylam (ör. 2,3522)',
'places.formCategory': 'Kategori',
'places.noCategory': 'Kategori Yok',
'places.categoryNamePlaceholder': 'Kategori adı',
'places.formTime': 'Zaman',
'places.startTime': 'Başlangıç',
'places.endTime': 'Son',
'places.endTimeBeforeStart': 'Bitiş zamanı başlangıç zamanından önce',
'places.timeCollision': 'Zaman şununla çakışıyor:',
'places.formWebsite': 'Web sitesi',
'places.formNotes': 'Notlar',
'places.formNotesPlaceholder': 'Kişisel notlar...',
'places.formReservation': 'Rezervasyon',
'places.reservationNotesPlaceholder': 'Rezervasyon notları, onay numarası...',
'places.mapsSearchPlaceholder': 'Yerleri ara...',
'places.mapsSearchError': 'Yer arama başarısız oldu.',
'places.loadingDetails': 'Yer ayrıntıları yükleniyor…',
'places.osmHint':
'Using OpenStreetMap search (no photos, opening hours, or ratings). Add a Google API key in settings for full details.',
'OpenStreetMap aramasını kullanma (fotoğraf, açılış saatleri veya derecelendirme yok). Tüm ayrıntılar için ayarlara bir Google API anahtarı ekleyin.',
'places.osmActive':
'Search via OpenStreetMap (no photos, ratings or opening hours). Add a Google API key in Settings for enhanced data.',
'places.categoryCreateError': 'Failed to create category',
'places.nameRequired': 'Please enter a name',
'places.saveError': 'Failed to save',
"OpenStreetMap aracılığıyla arama yapın (fotoğraf, derecelendirme veya çalışma saatleri yok). Gelişmiş veriler için Ayarlar'a bir Google API anahtarı ekleyin.",
'places.categoryCreateError': 'Kategori oluşturulamadı',
'places.nameRequired': 'Lütfen bir ad girin',
'places.saveError': 'Kaydedilemedi',
};
export default places;
+61 -61
View File
@@ -1,68 +1,68 @@
import type { TranslationStrings } from '../types';
const planner: TranslationStrings = {
'planner.places': 'Places',
'planner.bookings': 'Bookings',
'planner.packingList': 'Packing List',
'planner.documents': 'Documents',
'planner.dayPlan': 'Day Plan',
'planner.reservations': 'Reservations',
'planner.minTwoPlaces': 'At least 2 places with coordinates needed',
'planner.noGeoPlaces': 'No places with coordinates available',
'planner.routeCalculated': 'Route calculated',
'planner.routeCalcFailed': 'Route could not be calculated',
'planner.routeError': 'Error calculating route',
'planner.icsExportFailed': 'ICS export failed',
'planner.routeOptimized': 'Route optimized',
'planner.reservationUpdated': 'Reservation updated',
'planner.reservationAdded': 'Reservation added',
'planner.confirmDeleteReservation': 'Delete reservation?',
'planner.reservationDeleted': 'Reservation deleted',
'planner.days': 'Days',
'planner.allPlaces': 'All Places',
'planner.totalPlaces': '{n} places total',
'planner.noDaysPlanned': 'No days planned yet',
'planner.editTrip': 'Edit trip →',
'planner.placeOne': '1 place',
'planner.placeN': '{n} places',
'planner.addNote': 'Add note',
'planner.noEntries': 'No entries for this day',
'planner.addPlace': 'Add place/activity',
'planner.addPlaceShort': '+ Add place/activity',
'planner.resPending': 'Reservation pending · ',
'planner.resConfirmed': 'Reservation confirmed · ',
'planner.notePlaceholder': 'Note…',
'planner.noteTimePlaceholder': 'Time (optional)',
'planner.places': 'Yer',
'planner.bookings': 'Rezervasyonlar',
'planner.packingList': 'Paket Listesi',
'planner.documents': 'Belgeler',
'planner.dayPlan': 'Gün Planı',
'planner.reservations': 'Rezervasyonlar',
'planner.minTwoPlaces': 'En az 2 koordinatlı yer gerekli',
'planner.noGeoPlaces': 'Koordinatlı yer bulunamadı',
'planner.routeCalculated': 'Rota hesaplandı',
'planner.routeCalcFailed': 'Rota hesaplanamadı',
'planner.routeError': 'Rota hesaplanırken hata',
'planner.icsExportFailed': 'ICS dışa aktarma başarısız',
'planner.routeOptimized': 'Rota optimize edildi',
'planner.reservationUpdated': 'Rezervasyon güncellendi',
'planner.reservationAdded': 'Rezervasyon eklendi',
'planner.confirmDeleteReservation': 'Rezervasyon silinsin mi?',
'planner.reservationDeleted': 'Rezervasyon silindi',
'planner.days': 'Günler',
'planner.allPlaces': 'Tüm Yerler',
'planner.totalPlaces': 'toplam {n} yer',
'planner.noDaysPlanned': 'Henüz gün planlanmadı',
'planner.editTrip': 'Seyahati düzenle →',
'planner.placeOne': '1 yer',
'planner.placeN': '{n} yer',
'planner.addNote': 'Not ekle',
'planner.noEntries': 'Bu gün için kayıt yok',
'planner.addPlace': 'Yer/etkinlik ekle',
'planner.addPlaceShort': '+ Yer/etkinlik ekle',
'planner.resPending': 'Rezervasyon beklemede · ',
'planner.resConfirmed': 'Rezervasyon onaylandı · ',
'planner.notePlaceholder': 'Not…',
'planner.noteTimePlaceholder': 'Saat (isteğe bağlı)',
'planner.noteExamplePlaceholder':
'e.g. S3 at 14:30 from central station, ferry from pier 7, lunch break…',
'planner.totalCost': 'Total cost',
'planner.searchPlaces': 'Search places…',
'planner.allCategories': 'All Categories',
'planner.noPlacesFound': 'No places found',
'planner.addFirstPlace': 'Add first place',
'planner.noReservations': 'No reservations',
'planner.addFirstReservation': 'Add first reservation',
'planner.new': 'New',
'planner.addToDay': '+ Day',
'planner.calculating': 'Calculating…',
'planner.route': 'Route',
'planner.optimize': 'Optimize',
'planner.openGoogleMaps': 'Open in Google Maps',
"örn. Merkez istasyondan 14:30'da S3, iskele 7'den feribot, öğle molası…",
'planner.totalCost': 'Toplam maliyet',
'planner.searchPlaces': 'Yer ara…',
'planner.allCategories': 'Tüm Kategoriler',
'planner.noPlacesFound': 'Hiçbir yer bulunamadı',
'planner.addFirstPlace': 'İlk yeri ekle',
'planner.noReservations': 'Rezervasyon yok',
'planner.addFirstReservation': 'İlk rezervasyonu ekle',
'planner.new': 'Yeni',
'planner.addToDay': '+ Gün',
'planner.calculating': 'Hesaplanıyor…',
'planner.route': 'Rota',
'planner.optimize': 'Optimize et',
'planner.openGoogleMaps': "Google Haritalar'da aç",
'planner.selectDayHint':
'Select a day from the left list to see the day plan',
'planner.noPlacesForDay': 'No places for this day yet',
'planner.addPlacesLink': 'Add places →',
'planner.minTotal': 'min. total',
'planner.noReservation': 'No reservation',
'planner.removeFromDay': 'Remove from day',
'planner.addToThisDay': 'Add to day',
'planner.overview': 'Overview',
'planner.noDays': 'No days yet',
'planner.editTripToAddDays': 'Edit trip to add days',
'planner.dayCount': '{n} Days',
'planner.clickToUnlock': 'Click to unlock',
'planner.keepPosition': 'Keep position during route optimization',
'planner.dayDetails': 'Day details',
'planner.dayN': 'Day {n}',
'Gün planını görmek için soldaki listeden bir gün seçin',
'planner.noPlacesForDay': 'Bu gün için henüz yer yok',
'planner.addPlacesLink': 'Yer ekle →',
'planner.minTotal': 'dk. toplam',
'planner.noReservation': 'Rezervasyon yok',
'planner.removeFromDay': 'Günden kaldır',
'planner.addToThisDay': 'Güne ekle',
'planner.overview': 'Genel bakış',
'planner.noDays': 'Henüz gün yok',
'planner.editTripToAddDays': 'Gün eklemek için seyahati düzenleyin',
'planner.dayCount': '{n} Gün',
'planner.clickToUnlock': 'Kilidi açmak için tıklayın',
'planner.keepPosition': 'Rota optimizasyonunda konumu koru',
'planner.dayDetails': 'Gün ayrıntıları',
'planner.dayN': '{n}. gün',
};
export default planner;
+19 -19
View File
@@ -1,26 +1,26 @@
import type { TranslationStrings } from '../types';
const register: TranslationStrings = {
'register.passwordMismatch': 'Passwords do not match',
'register.passwordTooShort': 'Password must be at least 8 characters',
'register.failed': 'Registration failed',
'register.passwordMismatch': 'Şifreler eşleşmiyor',
'register.passwordTooShort': 'Şifre en az 8 karakter olmalıdır',
'register.failed': 'Kayıt başarısız oldu',
'register.getStarted': 'Başlayın',
'register.subtitle':
'Hesap oluşturun ve hayalinizdeki gezileri planlamaya başlayın.',
'register.feature1': 'Unlimited trip plans',
'register.feature2': 'Interactive map view',
'register.feature3': 'Manage places and categories',
'register.feature4': 'Track reservations',
'register.feature5': 'Create packing lists',
'register.feature6': 'Store photos and files',
'register.createAccount': 'Hesap oluştur',
'register.startPlanning': 'Start your trip planning',
'register.minChars': 'Min. 6 characters',
'register.confirmPassword': 'Confirm Password',
'register.repeatPassword': 'Repeat password',
'register.registering': 'Registering...',
'register.register': 'Kayıt ol',
'register.hasAccount': 'Zaten hesabınız var mı?',
'register.signIn': 'Giriş yap',
'Bir hesap oluşturun ve hayalinizdeki gezileri planlamaya başlayın.',
'register.feature1': 'Sınırsız gezi planları',
'register.feature2': 'İnteraktif harita görünümü',
'register.feature3': 'Yerleri ve kategorileri yönetin',
'register.feature4': 'Rezervasyonları takip edin',
'register.feature5': 'Paketleme listeleri oluşturun',
'register.feature6': 'Fotoğrafları ve dosyaları saklayın',
'register.createAccount': 'Hesap Oluşturmak',
'register.startPlanning': 'Seyahat planlamanıza başlayın',
'register.minChars': 'Min. 6 karakter',
'register.confirmPassword': 'Şifreyi Onayla',
'register.repeatPassword': 'Şifreyi tekrar girin',
'register.registering': 'Kaydediliyor...',
'register.register': 'Kayıt olmak',
'register.hasAccount': 'Zaten bir hesabınız var mı?',
'register.signIn': 'Oturum Aç',
};
export default register;
+109 -108
View File
@@ -1,118 +1,119 @@
import type { TranslationStrings } from '../types';
const reservations: TranslationStrings = {
'reservations.title': 'Bookings',
'reservations.empty': 'No reservations yet',
'reservations.emptyHint': 'Add reservations for flights, hotels and more',
'reservations.add': 'Add Reservation',
'reservations.addManual': 'Manual Booking',
'reservations.title': 'Rezervasyonlar',
'reservations.empty': 'Henüz rezervasyon yok',
'reservations.emptyHint':
'Uçuşlar, oteller ve daha fazlası için rezervasyon ekleyin',
'reservations.add': 'Rezervasyon Ekle',
'reservations.addManual': 'Manuel Rezervasyon',
'reservations.placeHint':
'Tip: Reservations are best created directly from a place to link them with your day plan.',
'reservations.confirmed': 'Confirmed',
'reservations.pending': 'Pending',
'reservations.summary': '{confirmed} confirmed, {pending} pending',
'reservations.fromPlan': 'From Plan',
'reservations.showFiles': 'Show Files',
'reservations.editTitle': 'Edit Reservation',
'reservations.status': 'Status',
'reservations.datetime': 'Date & Time',
'reservations.startTime': 'Start time',
'reservations.endTime': 'End time',
'reservations.date': 'Date',
'reservations.time': 'Time',
'reservations.timeAlt': 'Time (alternative, e.g. 19:30)',
'reservations.notes': 'Notes',
'reservations.notesPlaceholder': 'Additional notes...',
'reservations.meta.airline': 'Airline',
'reservations.meta.flightNumber': 'Flight No.',
'reservations.meta.from': 'From',
'reservations.meta.to': 'To',
'reservations.needsReview': 'Review',
'İpucu: Rezervasyonları doğrudan günlük planınıza bağlayacak bir yerden oluşturmak en iyisidir.',
'reservations.confirmed': 'Onaylandı',
'reservations.pending': 'Askıda olması',
'reservations.summary': '{confirmed} onaylandı, {pending} beklemede',
'reservations.fromPlan': 'Plandan',
'reservations.showFiles': 'Dosyaları Göster',
'reservations.editTitle': 'Rezervasyonu Düzenle',
'reservations.status': 'Durum',
'reservations.datetime': 'Tarih ve Saat',
'reservations.startTime': 'Başlangıç zamanı',
'reservations.endTime': 'Bitiş zamanı',
'reservations.date': 'Tarih',
'reservations.time': 'Zaman',
'reservations.timeAlt': 'Saat (alternatif, örneğin 19:30)',
'reservations.notes': 'Notlar',
'reservations.notesPlaceholder': 'Ek notlar...',
'reservations.meta.airline': 'Havayolu',
'reservations.meta.flightNumber': 'Uçuş No.',
'reservations.meta.from': 'İtibaren',
'reservations.meta.to': 'İle',
'reservations.needsReview': 'Gözden geçirmek',
'reservations.needsReviewHint':
'Airport could not be matched automatically — please confirm the location.',
'reservations.searchLocation': 'Search station, port, address…',
'reservations.meta.trainNumber': 'Train No.',
'reservations.meta.platform': 'Platform',
'reservations.meta.seat': 'Seat',
'reservations.meta.checkIn': 'Check-in',
'reservations.meta.checkInUntil': 'Check-in until',
'reservations.meta.checkOut': 'Check-out',
'reservations.meta.linkAccommodation': 'Accommodation',
'reservations.meta.pickAccommodation': 'Link to accommodation',
'reservations.meta.noAccommodation': 'None',
'reservations.meta.hotelPlace': 'Accommodation',
'reservations.meta.pickHotel': 'Select accommodation',
'reservations.meta.fromDay': 'From',
'reservations.meta.toDay': 'To',
'reservations.meta.selectDay': 'Select day',
'reservations.type.flight': 'Flight',
'reservations.type.hotel': 'Accommodation',
'reservations.type.restaurant': 'Restaurant',
'reservations.type.train': 'Train',
'reservations.type.car': 'Car',
'reservations.type.cruise': 'Cruise',
'reservations.type.event': 'Event',
'reservations.type.tour': 'Tour',
'reservations.type.other': 'Other',
'Havaalanı otomatik olarak eşleştirilemedi; lütfen konumu onaylayın.',
'reservations.searchLocation': 'İstasyonu, limanı, adresi arayın…',
'reservations.meta.trainNumber': 'Tren No.',
'reservations.meta.platform': 'Platformu',
'reservations.meta.seat': 'Koltuk',
'reservations.meta.checkIn': 'Giriş',
'reservations.meta.checkInUntil': 'Giriş tarihi şu tarihe kadar:',
'reservations.meta.checkOut': 'Çıkış yapmak',
'reservations.meta.linkAccommodation': 'Konaklama',
'reservations.meta.pickAccommodation': 'Konaklama bağlantısı',
'reservations.meta.noAccommodation': 'Hiçbiri',
'reservations.meta.hotelPlace': 'Konaklama',
'reservations.meta.pickHotel': 'Konaklama seçin',
'reservations.meta.fromDay': 'İtibaren',
'reservations.meta.toDay': 'İle',
'reservations.meta.selectDay': 'Günü seçin',
'reservations.type.flight': 'Uçuş',
'reservations.type.hotel': 'Konaklama',
'reservations.type.restaurant': 'Restoran',
'reservations.type.train': 'Tren',
'reservations.type.car': 'Araba',
'reservations.type.cruise': 'Dolaşmak',
'reservations.type.event': 'Etkinlik',
'reservations.type.tour': 'Tur',
'reservations.type.other': 'Diğer',
'reservations.confirm.delete':
'Are you sure you want to delete the reservation "{name}"?',
'reservations.confirm.deleteTitle': 'Delete booking?',
'reservations.confirm.deleteBody': '"{name}" will be permanently deleted.',
'reservations.toast.updated': 'Reservation updated',
'reservations.toast.removed': 'Reservation deleted',
'reservations.toast.fileUploaded': 'File uploaded',
'reservations.toast.uploadError': 'Failed to upload',
'reservations.newTitle': 'New Reservation',
'reservations.bookingType': 'Booking Type',
'reservations.titleLabel': 'Title',
'reservations.titlePlaceholder': 'e.g. Lufthansa LH123, Hotel Adlon, ...',
'reservations.locationAddress': 'Location / Address',
'reservations.locationPlaceholder': 'Address, Airport, Hotel...',
'reservations.confirmationCode': 'Booking Code',
'reservations.confirmationPlaceholder': 'e.g. ABC12345',
'reservations.day': 'Day',
'reservations.noDay': 'No Day',
'reservations.place': 'Place',
'reservations.noPlace': 'No Place',
'reservations.pendingSave': 'will be saved…',
'reservations.uploading': 'Uploading...',
'reservations.attachFile': 'Attach file',
'reservations.linkExisting': 'Link existing file',
'reservations.toast.saveError': 'Failed to save',
'reservations.toast.updateError': 'Failed to update',
'reservations.toast.deleteError': 'Failed to delete',
'reservations.confirm.remove': 'Remove reservation for "{name}"?',
'reservations.linkAssignment': 'Link to day assignment',
'reservations.pickAssignment': 'Select an assignment from your plan...',
'reservations.noAssignment': 'No link (standalone)',
'reservations.price': 'Price',
'reservations.budgetCategory': 'Budget category',
'reservations.budgetCategoryPlaceholder': 'e.g. Transport, Accommodation',
'reservations.budgetCategoryAuto': 'Auto (from booking type)',
'"{name}" rezervasyonunu silmek istediğinizden emin misiniz?',
'reservations.confirm.deleteTitle': 'Rezervasyon silinsin mi?',
'reservations.confirm.deleteBody': '"{name}" kalıcı olarak silinecek.',
'reservations.toast.updated': 'Rezervasyon güncellendi',
'reservations.toast.removed': 'Rezervasyon silindi',
'reservations.toast.fileUploaded': 'Dosya yüklendi',
'reservations.toast.uploadError': 'Yükleme başarısız oldu',
'reservations.newTitle': 'Yeni Rezervasyon',
'reservations.bookingType': 'Rezervasyon Türü',
'reservations.titleLabel': 'Başlık',
'reservations.titlePlaceholder': 'örneğin Lufthansa LH123, Otel Adlon, ...',
'reservations.locationAddress': 'Konum / Adres',
'reservations.locationPlaceholder': 'Adres, Havaalanı, Otel...',
'reservations.confirmationCode': 'Rezervasyon Kodu',
'reservations.confirmationPlaceholder': 'örn. ABC12345',
'reservations.day': 'Gün',
'reservations.noDay': 'Gün Yok',
'reservations.place': 'Yer',
'reservations.noPlace': 'Yer Yok',
'reservations.pendingSave': 'kaydedilecek…',
'reservations.uploading': 'Yükleniyor...',
'reservations.attachFile': 'Dosya ekle',
'reservations.linkExisting': 'Mevcut dosyayı bağla',
'reservations.toast.saveError': 'Kaydedilemedi',
'reservations.toast.updateError': 'Güncelleme başarısız oldu',
'reservations.toast.deleteError': 'Silinemedi',
'reservations.confirm.remove': '"{name}" için rezervasyon kaldırılsın mı?',
'reservations.linkAssignment': 'Gün atamasına bağla',
'reservations.pickAssignment': 'Planınızdan bir atama seçin...',
'reservations.noAssignment': 'Bağlantı yok (bağımsız)',
'reservations.price': 'Fiyat',
'reservations.budgetCategory': 'Bütçe kategorisi',
'reservations.budgetCategoryPlaceholder': 'örn. Ulaşım, Konaklama',
'reservations.budgetCategoryAuto': 'Otomatik (rezervasyon türünden)',
'reservations.budgetHint':
'A budget entry will be created automatically when saving.',
'reservations.departureDate': 'Departure',
'reservations.arrivalDate': 'Arrival',
'reservations.departureTime': 'Dep. time',
'reservations.arrivalTime': 'Arr. time',
'reservations.pickupDate': 'Pickup',
'reservations.returnDate': 'Return',
'reservations.pickupTime': 'Pickup time',
'reservations.returnTime': 'Return time',
'reservations.endDate': 'End date',
'reservations.meta.departureTimezone': 'Dep. TZ',
'reservations.meta.arrivalTimezone': 'Arr. TZ',
'reservations.span.departure': 'Departure',
'reservations.span.arrival': 'Arrival',
'reservations.span.inTransit': 'In transit',
'reservations.span.pickup': 'Pickup',
'reservations.span.return': 'Return',
'reservations.span.active': 'Active',
'reservations.span.start': 'Start',
'reservations.span.end': 'End',
'reservations.span.ongoing': 'Ongoing',
'Kaydederken otomatik olarak bir bütçe kaydı oluşturulur.',
'reservations.departureDate': 'Kalkış',
'reservations.arrivalDate': 'Varış',
'reservations.departureTime': 'Kalkış saati',
'reservations.arrivalTime': 'Varış saati',
'reservations.pickupDate': 'Alış',
'reservations.returnDate': 'İade',
'reservations.pickupTime': 'Alış saati',
'reservations.returnTime': 'İade saati',
'reservations.endDate': 'Bitiş tarihi',
'reservations.meta.departureTimezone': 'Kalkış SD',
'reservations.meta.arrivalTimezone': 'Varış SD',
'reservations.span.departure': 'Kalkış',
'reservations.span.arrival': 'Varış',
'reservations.span.inTransit': 'Yolda',
'reservations.span.pickup': 'Alış',
'reservations.span.return': 'İade',
'reservations.span.active': 'Aktif',
'reservations.span.start': 'Başlangıç',
'reservations.span.end': 'Son',
'reservations.span.ongoing': 'Devam ediyor',
'reservations.validation.endBeforeStart':
'End date/time must be after start date/time',
'reservations.addBooking': 'Add booking',
'Bitiş tarihi/saati başlangıçtan sonra olmalı',
'reservations.addBooking': 'Rezervasyon ekle',
};
export default reservations;
+222 -216
View File
@@ -10,284 +10,290 @@ const settings: TranslationStrings = {
'settings.tabs.account': 'Hesap',
'settings.tabs.offline': 'Çevrimdışı',
'settings.tabs.about': 'Hakkında',
'settings.map': 'Map',
'settings.mapTemplate': 'Map Template',
'settings.mapTemplatePlaceholder.select': 'Select template...',
'settings.mapDefaultHint': 'Leave empty for OpenStreetMap (default)',
'settings.map': 'Harita',
'settings.mapTemplate': 'Harita Şablonu',
'settings.mapTemplatePlaceholder.select': 'Şablon seçin...',
'settings.mapDefaultHint': 'OpenStreetMap için boş bırakın (varsayılan)',
'settings.mapTemplatePlaceholder':
'https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png',
'settings.mapHint': 'URL template for map tiles',
'settings.mapProvider': 'Map Provider',
'settings.mapHint': 'Harita kutucukları için URL şablonu',
'settings.mapProvider': 'Harita Sağlayıcısı',
'settings.mapProviderHint':
'Affects Trip Planner and Journey maps. Atlas always uses Leaflet.',
'settings.mapLeafletSubtitle': 'Classic 2D, any raster tiles',
'settings.mapMapboxSubtitle': 'Vector tiles, 3D buildings & terrain',
'settings.mapExperimental': 'Experimental',
'settings.mapMapboxToken': 'Mapbox Access Token',
'settings.mapMapboxTokenHint': 'Public token (pk.*) from',
'settings.mapMapboxTokenLink': 'mapbox.com → Access tokens',
'settings.mapStyle': 'Map Style',
'settings.mapStylePlaceholder': 'Select a Mapbox style',
'settings.mapStyleHint': 'Preset or your own mapbox://styles/USER/ID URL',
'settings.map3dBuildings': '3D Buildings & Terrain',
'Seyahat planlayıcı ve Journey haritalarını etkiler. Atlas her zaman Leaflet kullanır.',
'settings.mapLeafletSubtitle': 'Klasik 2D, herhangi bir raster kutucuk',
'settings.mapMapboxSubtitle': 'Vektör kutucuklar, 3D binalar ve arazi',
'settings.mapExperimental': 'Deneysel',
'settings.mapMapboxToken': 'Mapbox Erişim Anahtarı',
'settings.mapMapboxTokenHint': 'Genel anahtar (pk.*) kaynağı:',
'settings.mapMapboxTokenLink': 'Mapbox.com → Jetonlara erişim',
'settings.mapStyle': 'Harita Stili',
'settings.mapStylePlaceholder': 'Bir Mapbox stili seçin',
'settings.mapStyleHint':
'Ön ayar veya kendi mapbox://styles/KULLANICI/ID adresiniz',
'settings.map3dBuildings': '3D Binalar ve Arazi',
'settings.map3dHint':
'Pitch + real 3D building extrusions — works on every style, including satellite.',
'settings.mapHighQuality': 'High Quality Mode',
'Eğim + gerçek 3D bina çıkıntıları — uydu dahil her stilde çalışır.',
'settings.mapHighQuality': 'Yüksek Kalite Modu',
'settings.mapHighQualityHint':
'Antialiasing + globe projection for sharper edges and a realistic world view.',
'Keskin kenarlar ve gerçekçi dünya görünümü için antialiasing + küre projeksiyonu.',
'settings.mapHighQualityWarning':
'May impact performance on lower-end devices.',
'settings.mapTipLabel': 'Tip:',
'Düşük donanımlı cihazlarda performansı etkileyebilir.',
'settings.mapTipLabel': 'İpucu:',
'settings.mapTip':
'right-click and drag to rotate/pitch the map. Middle-click to add a place (right-click is reserved for rotation).',
'settings.latitude': 'Latitude',
'settings.longitude': 'Longitude',
'settings.saveMap': 'Save Map',
'settings.apiKeys': 'API Keys',
'settings.mapsKey': 'Google Maps API Key',
'Haritayı döndürmek/eğmek için sağ tıklayıp sürükleyin. Yer eklemek için orta tıklama (sağ tık döndürmeye ayrılmıştır).',
'settings.latitude': 'Enlem',
'settings.longitude': 'Boylam',
'settings.saveMap': 'Haritayı Kaydet',
'settings.apiKeys': 'API Anahtarları',
'settings.mapsKey': 'Google Maps API Anahtarı',
'settings.mapsKeyHint':
'For place search. Requires Places API (New). Get at console.cloud.google.com',
'settings.weatherKey': 'OpenWeatherMap API Key',
'settings.weatherKeyHint': 'For weather data. Free at openweathermap.org/api',
'settings.keyPlaceholder': 'Enter key...',
'settings.configured': 'Configured',
'settings.saveKeys': 'Save Keys',
'Yer araması için. Places API (New) gerekir. console.cloud.google.com',
'settings.weatherKey': 'OpenWeatherMap API Anahtarı',
'settings.weatherKeyHint':
'Hava verisi için. Ücretsiz: openweathermap.org/api',
'settings.keyPlaceholder': 'Anahtarı girin...',
'settings.configured': 'Yapılandırıldı',
'settings.saveKeys': 'Anahtarları Kaydet',
'settings.display': 'Görünüm',
'settings.colorMode': 'Tema modu',
'settings.colorMode': 'Renk Modu',
'settings.light': 'Açık',
'settings.dark': 'Koyu',
'settings.auto': 'Otomatik',
'settings.language': 'Dil',
'settings.temperature': 'Sıcaklık birimi',
'settings.timeFormat': 'Saat biçimi',
'settings.bookingLabels': 'Booking route labels',
'settings.temperature': 'Sıcaklık Birimi',
'settings.timeFormat': 'Saat Biçimi',
'settings.bookingLabels': 'Rezervasyon rota etiketleri',
'settings.bookingLabelsHint':
'Show station / airport names on the map. When off, only the icon is shown.',
'settings.blurBookingCodes': 'Blur Booking Codes',
'Haritada istasyon / havalimanı adlarını göster. Kapalıyken yalnızca simge görünür.',
'settings.blurBookingCodes': 'Rezervasyon Kodlarını Bulanıklaştır',
'settings.notifications': 'Bildirimler',
'settings.notifyTripInvite': 'Trip invitations',
'settings.notifyBookingChange': 'Booking changes',
'settings.notifyTripReminder': 'Trip reminders',
'settings.notifyTodoDue': 'Todo due soon',
'settings.notifyVacayInvite': 'Vacay fusion invitations',
'settings.notifyPhotosShared': 'Shared photos (Immich)',
'settings.notifyCollabMessage': 'Chat messages (Collab)',
'settings.notifyPackingTagged': 'Packing list: assignments',
'settings.notifyWebhook': 'Webhook notifications',
'settings.notifyVersionAvailable': 'New version available',
'settings.notificationPreferences.email': 'Email',
'settings.notificationPreferences.webhook': 'Webhook',
'settings.notificationPreferences.inapp': 'In-App',
'settings.notifyTripInvite': 'Seyahat davetleri',
'settings.notifyBookingChange': 'Rezervasyon değişiklikleri',
'settings.notifyTripReminder': 'Seyahat hatırlatıcıları',
'settings.notifyTodoDue': 'Yapılacak vadesi yakında',
'settings.notifyVacayInvite': 'Vacay birleştirme davetleri',
'settings.notifyPhotosShared': 'Paylaşılan fotoğraflar (Immich)',
'settings.notifyCollabMessage': 'Sohbet mesajları (Collab)',
'settings.notifyPackingTagged': 'Paket listesi: atamalar',
'settings.notifyWebhook': 'Webhook bildirimleri',
'settings.notifyVersionAvailable': 'Yeni sürüm mevcut',
'settings.notificationPreferences.email': 'E-posta',
'settings.notificationPreferences.webhook': 'Web kancası',
'settings.notificationPreferences.inapp': 'Uygulama içi',
'settings.notificationPreferences.ntfy': 'Ntfy',
'settings.notificationPreferences.noChannels':
'No notification channels are configured. Ask an admin to set up email or webhook notifications.',
'settings.webhookUrl.label': 'Webhook URL',
'Bildirim kanalı yapılandırılmadı. Yöneticiden e-posta veya webhook kurmasını isteyin.',
'settings.webhookUrl.label': "Web kancası URL'si",
'settings.webhookUrl.placeholder': 'https://discord.com/api/webhooks/...',
'settings.webhookUrl.hint':
'Enter your Discord, Slack, or custom webhook URL to receive notifications.',
'settings.webhookUrl.saved': 'Webhook URL saved',
'settings.webhookUrl.test': 'Test',
'settings.webhookUrl.testSuccess': 'Test webhook sent successfully',
'settings.webhookUrl.testFailed': 'Test webhook failed',
'settings.ntfyUrl.topicLabel': 'Ntfy Topic',
'settings.ntfyUrl.topicPlaceholder': 'my-trek-alerts',
'settings.ntfyUrl.serverLabel': 'Ntfy Server URL (optional)',
"Bildirim almak için Discord, Slack veya özel webhook URL'nizi girin.",
'settings.webhookUrl.saved': 'Webhook URL kaydedildi',
'settings.webhookUrl.test': 'Dene',
'settings.webhookUrl.testSuccess': 'Test webhook başarıyla gönderildi',
'settings.webhookUrl.testFailed': 'Test webhook başarısız',
'settings.ntfyUrl.topicLabel': 'Ntfy Konusu',
'settings.ntfyUrl.topicPlaceholder': 'benim-trek-uyarilari',
'settings.ntfyUrl.serverLabel': "Ntfy sunucu URL'si (isteğe bağlı)",
'settings.ntfyUrl.serverPlaceholder': 'https://ntfy.sh',
'settings.ntfyUrl.hint':
'Enter your ntfy topic to receive push notifications. Leave server blank to use the default configured by your admin.',
'settings.ntfyUrl.tokenLabel': 'Access Token (optional)',
'settings.ntfyUrl.tokenHint': 'Required for password-protected topics.',
'settings.ntfyUrl.saved': 'Ntfy settings saved',
'settings.ntfyUrl.test': 'Test',
'settings.ntfyUrl.testSuccess': 'Test ntfy notification sent successfully',
'settings.ntfyUrl.testFailed': 'Test ntfy notification failed',
'settings.ntfyUrl.tokenCleared': 'Access token cleared',
'Anlık bildirim için ntfy konusunu girin. Sunucuyu boş bırakırsanız yöneticinin varsayılanı kullanılır.',
'settings.ntfyUrl.tokenLabel': 'Erişim anahtarı (isteğe bağlı)',
'settings.ntfyUrl.tokenHint': 'Parola korumalı konular için gerekli.',
'settings.ntfyUrl.saved': 'Ntfy ayarları kaydedildi',
'settings.ntfyUrl.test': 'Dene',
'settings.ntfyUrl.testSuccess': 'Test ntfy bildirimi gönderildi',
'settings.ntfyUrl.testFailed': 'Test ntfy bildirimi başarısız',
'settings.ntfyUrl.tokenCleared': 'Erişim anahtarı temizlendi',
'settings.notificationsDisabled':
'Notifications are not configured. Ask an admin to enable email or webhook notifications.',
'settings.notificationsActive': 'Active channel',
'Bildirimler yapılandırılmadı. Yöneticiden e-posta veya webhook açmasını isteyin.',
'settings.notificationsActive': 'Etkin kanal',
'settings.notificationsManagedByAdmin':
'Notification events are configured by your administrator.',
'settings.on': 'On',
'settings.off': 'Off',
'settings.mcp.title': 'MCP Configuration',
'settings.mcp.endpoint': 'MCP Endpoint',
'settings.mcp.clientConfig': 'Client Configuration',
'Bildirim olayları yöneticiniz tarafından yapılandırılır.',
'settings.on': 'Açık',
'settings.off': 'Kapalı',
'settings.mcp.title': 'MCP Yapılandırması',
'settings.mcp.endpoint': 'MCP Uç Noktası',
'settings.mcp.clientConfig': 'İstemci Yapılandırması',
'settings.mcp.clientConfigHint':
'Replace <your_token> with an API token from the list below. The path to npx may need to be adjusted for your system (e.g. C:\\PROGRA~1\\nodejs\\npx.cmd on Windows).',
"<your_token> öğesini aşağıdaki listeden bir API belirteciyle değiştirin. Npx yolunun sisteminize göre ayarlanması gerekebilir (örn. Windows'ta C:\\\\\\\\PROGRA~1\\\\\\\\nodejs\\\\\\\\npx.cmd).",
'settings.mcp.clientConfigHintOAuth':
'Replace <your_client_id> and <your_client_secret> with the credentials shown in the OAuth 2.1 client you created above. mcp-remote will open your browser to complete the authorization the first time you connect. The path to npx may need to be adjusted for your system (e.g. C:PROGRA~1\nodejs\npx.cmd on Windows).',
'settings.mcp.copy': 'Copy',
'settings.mcp.copied': 'Copied!',
'settings.mcp.apiTokens': 'API Tokens',
'settings.mcp.createToken': 'Create New Token',
'settings.mcp.noTokens': 'No tokens yet. Create one to connect MCP clients.',
'settings.mcp.tokenCreatedAt': 'Created',
'settings.mcp.tokenUsedAt': 'Used',
'settings.mcp.deleteTokenTitle': 'Delete Token',
"<client_id> ve <client_secret> değerlerini yukarıda oluşturduğunuz OAuth 2.1 istemcisinde gösterilen kimlik bilgileriyle değiştirin. mcp-remote, ilk bağlandığınızda yetkilendirmeyi tamamlamak için tarayıcınızı açacaktır. Npx yolunun sisteminize göre ayarlanması gerekebilir (örn. Windows'ta C:\\PROGRA~1\\nodejs\\npx.cmd).",
'settings.mcp.copy': 'Kopyala',
'settings.mcp.copied': 'Kopyalandı!',
'settings.mcp.apiTokens': 'API Belirteçleri',
'settings.mcp.createToken': 'Yeni Jeton Oluştur',
'settings.mcp.noTokens':
'Henüz jeton yok. MCP istemcilerini bağlamak için bir tane oluşturun.',
'settings.mcp.tokenCreatedAt': 'Oluşturuldu',
'settings.mcp.tokenUsedAt': 'Kullanılmış',
'settings.mcp.deleteTokenTitle': 'Jetonu Sil',
'settings.mcp.deleteTokenMessage':
'This token will stop working immediately. Any MCP client using it will lose access.',
'settings.mcp.modal.createTitle': 'Create API Token',
'settings.mcp.modal.tokenName': 'Token Name',
'settings.mcp.modal.tokenNamePlaceholder': 'e.g. Claude Desktop, Work laptop',
'settings.mcp.modal.creating': 'Creating…',
'settings.mcp.modal.create': 'Create Token',
'settings.mcp.modal.createdTitle': 'Token Created',
'Bu jeton hemen çalışmayı durduracak. Bunu kullanan herhangi bir MCP istemcisi erişimi kaybedecektir.',
'settings.mcp.modal.createTitle': 'API Jetonu Oluştur',
'settings.mcp.modal.tokenName': 'Jeton Adı',
'settings.mcp.modal.tokenNamePlaceholder':
'örneğin Claude Masaüstü, İş dizüstü bilgisayarı',
'settings.mcp.modal.creating': 'Oluşturuluyor…',
'settings.mcp.modal.create': 'Jeton Oluştur',
'settings.mcp.modal.createdTitle': 'Jeton Oluşturuldu',
'settings.mcp.modal.createdWarning':
'This token will only be shown once. Copy and store it now — it cannot be recovered.',
'settings.mcp.modal.done': 'Done',
'settings.mcp.toast.created': 'Token created',
'settings.mcp.toast.createError': 'Failed to create token',
'settings.mcp.toast.deleted': 'Token deleted',
'settings.mcp.toast.deleteError': 'Failed to delete token',
'Bu jeton yalnızca bir kez gösterilecektir. Şimdi kopyalayıp saklayın; kurtarılamaz.',
'settings.mcp.modal.done': 'Tamamlamak',
'settings.mcp.toast.created': 'Jeton oluşturuldu',
'settings.mcp.toast.createError': 'Jeton oluşturulamadı',
'settings.mcp.toast.deleted': 'Jeton silindi',
'settings.mcp.toast.deleteError': 'Jeton silinemedi',
'settings.mcp.apiTokensDeprecated':
'API Tokens are deprecated and will be removed in a future release. Please use OAuth 2.1 Clients instead.',
'settings.oauth.clients': 'OAuth 2.1 Clients',
'API Belirteçleri kullanımdan kaldırıldı ve gelecekteki bir sürümde kaldırılacak. Lütfen bunun yerine OAuth 2.1 İstemcilerini kullanın.',
'settings.oauth.clients': 'OAuth 2.1 İstemcileri',
'settings.oauth.clientsHint':
'Register OAuth 2.1 clients to let third-party MCP applications (Claude Web, Cursor, etc.) connect without static tokens.',
'settings.oauth.createClient': 'New Client',
'settings.oauth.noClients': 'No OAuth clients registered.',
'settings.oauth.clientId': 'Client ID',
'settings.oauth.clientSecret': 'Client Secret',
'settings.oauth.deleteClient': 'Delete Client',
'Üçüncü taraf MCP uygulamalarının (Claude Web, Cursor vb.) statik belirteçler olmadan bağlanmasına izin vermek için OAuth 2.1 istemcilerini kaydedin.',
'settings.oauth.createClient': 'Yeni Müşteri',
'settings.oauth.noClients': 'Kayıtlı OAuth istemcisi yok.',
'settings.oauth.clientId': 'Müşteri Kimliği',
'settings.oauth.clientSecret': 'Müşteri Sırrı',
'settings.oauth.deleteClient': 'İstemciyi Sil',
'settings.oauth.deleteClientMessage':
'This client and all active sessions will be permanently removed. Any application using it will lose access immediately.',
'settings.oauth.rotateSecret': 'Rotate Secret',
'Bu istemci ve tüm aktif oturumlar kalıcı olarak kaldırılacak. Bunu kullanan herhangi bir uygulama erişimi anında kaybedecektir.',
'settings.oauth.rotateSecret': 'Gizli Anahtarı Döndür',
'settings.oauth.rotateSecretMessage':
'A new client secret will be generated and all existing sessions will be invalidated immediately. Update your application before closing this dialog.',
'settings.oauth.rotateSecretConfirm': 'Rotate',
'settings.oauth.rotateSecretConfirming': 'Rotating…',
'settings.oauth.rotateSecretDoneTitle': 'New Secret Generated',
'Yeni bir istemci sırrı oluşturulacak ve mevcut tüm oturumlar derhal geçersiz kılınacaktır. Bu iletişim kutusunu kapatmadan önce uygulamanızı güncelleyin.',
'settings.oauth.rotateSecretConfirm': 'Döndür',
'settings.oauth.rotateSecretConfirming': 'Dönüyor…',
'settings.oauth.rotateSecretDoneTitle': 'Yeni Gizli Oluşturuldu',
'settings.oauth.rotateSecretDoneWarning':
'This secret is shown only once. Copy it now and update your application — all previous sessions have been invalidated.',
'settings.oauth.activeSessions': 'Active OAuth Sessions',
'settings.oauth.sessionScopes': 'Scopes',
'settings.oauth.sessionExpires': 'Expires',
'settings.oauth.revoke': 'Revoke',
'settings.oauth.revokeSession': 'Revoke Session',
'Bu sır yalnızca bir kez gösterilir. Şimdi kopyalayın ve uygulamanızı güncelleyin; önceki tüm oturumlar geçersiz kılınmıştır.',
'settings.oauth.activeSessions': 'Aktif OAuth Oturumları',
'settings.oauth.sessionScopes': 'Kapsamlar',
'settings.oauth.sessionExpires': 'Süresi doluyor',
'settings.oauth.revoke': 'Geri çekmek',
'settings.oauth.revokeSession': 'Oturumu İptal Et',
'settings.oauth.revokeSessionMessage':
'This will immediately revoke access for this OAuth session.',
'settings.oauth.modal.createTitle': 'Register OAuth Client',
'settings.oauth.modal.presets': 'Quick presets',
'settings.oauth.modal.clientName': 'Application Name',
'settings.oauth.modal.clientNamePlaceholder': 'e.g. Claude Web, My MCP App',
'settings.oauth.modal.redirectUris': 'Redirect URIs',
'Bu, bu OAuth oturumuna erişimi anında iptal edecektir.',
'settings.oauth.modal.createTitle': 'OAuth İstemcisini Kaydedin',
'settings.oauth.modal.presets': 'Hızlı ön ayarlar',
'settings.oauth.modal.clientName': 'Uygulama Adı',
'settings.oauth.modal.clientNamePlaceholder':
'örneğin Claude Web, MCP Uygulamam',
'settings.oauth.modal.redirectUris': "URI'leri Yönlendir",
'settings.oauth.modal.redirectUrisPlaceholder':
'https://your-app.com/callback\nhttps://your-app.com/auth',
'https://uygulamaniz.com/callback\\nhttps://uygulamaniz.com/auth',
'settings.oauth.modal.redirectUrisHint':
'One URI per line. HTTPS required (localhost exempt). Exact match enforced.',
'settings.oauth.modal.scopes': 'Allowed Scopes',
'Satır başına bir URI. HTTPS gerekli (yerel ana bilgisayar hariç). Tam eşleşme uygulandı.',
'settings.oauth.modal.scopes': 'İzin Verilen Kapsamlar',
'settings.oauth.modal.scopesHint':
'list_trips and get_trip_summary are always available — no scope required. They let the AI discover trip IDs needed to use any other tool.',
'settings.oauth.modal.selectAll': 'Select all',
'settings.oauth.modal.deselectAll': 'Deselect all',
'settings.oauth.modal.creating': 'Registering…',
'settings.oauth.modal.create': 'Register Client',
'settings.oauth.modal.createdTitle': 'Client Registered',
'list_trips ve get_trip_summary her zaman kullanılabilir; kapsam gerektirmez. Yapay zekanın başka herhangi bir aracı kullanmak için gereken yolculuk kimliklerini keşfetmesine olanak tanıyorlar.',
'settings.oauth.modal.selectAll': 'Tümünü seç',
'settings.oauth.modal.deselectAll': 'Tümünün seçimini kaldır',
'settings.oauth.modal.creating': 'Kaydediliyor…',
'settings.oauth.modal.create': 'Müşteriyi Kaydet',
'settings.oauth.modal.createdTitle': 'Müşteri Kayıtlı',
'settings.oauth.modal.createdWarning':
'The client secret is shown only once. Copy it now — it cannot be recovered.',
'settings.oauth.toast.createError': 'Failed to register OAuth client',
'settings.oauth.toast.deleted': 'OAuth client deleted',
'settings.oauth.toast.deleteError': 'Failed to delete OAuth client',
'settings.oauth.toast.revoked': 'Session revoked',
'settings.oauth.toast.revokeError': 'Failed to revoke session',
'settings.oauth.toast.rotateError': 'Failed to rotate client secret',
'İstemci sırrı yalnızca bir kez gösterilir. Şimdi kopyalayın; kurtarılamaz.',
'settings.oauth.toast.createError': 'OAuth istemcisi kaydedilemedi',
'settings.oauth.toast.deleted': 'OAuth istemcisi silindi',
'settings.oauth.toast.deleteError': 'OAuth istemcisi silinemedi',
'settings.oauth.toast.revoked': 'Oturum iptal edildi',
'settings.oauth.toast.revokeError': 'Oturum iptal edilemedi',
'settings.oauth.toast.rotateError': 'İstemci sırrı döndürülemedi',
'settings.account': 'Hesap',
'settings.about': 'Hakkında',
'settings.about.reportBug': 'Report a Bug',
'settings.about.reportBugHint': 'Found an issue? Let us know',
'settings.about.featureRequest': 'Feature Request',
'settings.about.featureRequestHint': 'Suggest a new feature',
'settings.about.wikiHint': 'Documentation & guides',
'settings.about.supporters.badge': 'Monthly Supporters',
'settings.about.supporters.title': 'Travel companions for TREK',
'settings.about.reportBug': 'Hata Bildir',
'settings.about.reportBugHint': 'Bir sorun mu buldunuz? Bize bildirin',
'settings.about.featureRequest': 'Özellik İsteği',
'settings.about.featureRequestHint': 'Yeni bir özellik önerin',
'settings.about.wikiHint': 'Belgeler ve kılavuzlar',
'settings.about.supporters.badge': 'Aylık Destekçiler',
'settings.about.supporters.title': 'TREK için seyahat Arkadaşları',
'settings.about.supporters.subtitle':
"While you're planning your next route, these folks are helping plan TREK's future. Their monthly contribution goes straight into development and real hours spent — so TREK stays Open Source.",
'settings.about.supporters.since': 'supporter since {date}',
'settings.about.supporters.tierEmpty': 'Be the first',
'settings.about.supporter.tier.noReturnTicket': 'No Return Ticket',
'settings.about.supporter.tier.lostLuggageVip': 'Lost Luggage VIP',
'settings.about.supporters.since': '{date} tarihinden beri destekçimiz',
'settings.about.supporters.tierEmpty': 'İlk olun',
'settings.about.supporter.tier.noReturnTicket': 'Dönüş Bileti Yok',
'settings.about.supporter.tier.lostLuggageVip': 'Kayıp Bagaj VIP',
'settings.about.supporter.tier.businessClassDreamer':
'Business Class Dreamer',
'settings.about.supporter.tier.budgetTraveller': 'Budget Traveller',
'settings.about.supporter.tier.hostelBunkmate': 'Hostel Bunkmate',
'Business Class Hayalperest',
'settings.about.supporter.tier.budgetTraveller': 'Bütçe Gezgini',
'settings.about.supporter.tier.hostelBunkmate': 'Hostel Yatakhane Arkadaşı',
'settings.about.description':
'TREK is a self-hosted travel planner that helps you organize your trips from the first idea to the last memory. Day planning, budget, packing lists, photos and much more — all in one place, on your own server.',
'settings.about.madeWith': 'Made with',
'settings.about.madeBy': 'by Maurice and a growing open-source community.',
'TREK, seyahatlerinizi ilk fikirden son anıya kadar organize etmenize yardımcı olan, kendi kendine barındırılan bir seyahat planlayıcıdır. Gün planlaması, bütçe, paketleme listeleri, fotoğraflar ve çok daha fazlası; hepsi tek bir yerde, kendi sunucunuzda.',
'settings.about.madeWith': 'İle yapıldı',
'settings.about.madeBy':
'Maurice ve büyüyen bir açık kaynak topluluğu tarafından.',
'settings.username': 'Kullanıcı adı',
'settings.email': 'Email',
'settings.email': 'E-posta',
'settings.role': 'Rol',
'settings.roleAdmin': 'Yönetici',
'settings.oidcLinked': 'Linked with',
'settings.changePassword': 'Parolayı değiştir',
'settings.currentPassword': 'Mevcut parola',
'settings.currentPasswordRequired': 'Current password is required',
'settings.newPassword': 'Yeni parola',
'settings.confirmPassword': 'Yeni parolayı doğrula',
'settings.updatePassword': 'Parolayı güncelle',
'settings.passwordRequired': 'Please enter current and new password',
'settings.passwordTooShort': 'Password must be at least 8 characters',
'settings.passwordMismatch': 'Passwords do not match',
'settings.oidcLinked': 'ile bağlantılı',
'settings.changePassword': 'Şifre Değiştir',
'settings.currentPassword': 'Mevcut Şifre',
'settings.currentPasswordRequired': 'Mevcut şifre gerekli',
'settings.newPassword': 'Yeni Şifre',
'settings.confirmPassword': 'Yeni şifreyi onayla',
'settings.updatePassword': 'Şifreyi güncelle',
'settings.passwordRequired': 'Lütfen mevcut ve yeni şifrenizi giriniz',
'settings.passwordTooShort': 'Şifre en az 8 karakter olmalıdır',
'settings.passwordMismatch': 'Şifreler eşleşmiyor',
'settings.passwordWeak':
'Password must contain uppercase, lowercase, a number, and a special character',
'settings.passwordChanged': 'Password changed successfully',
'Şifre büyük harf, küçük harf, sayı ve özel karakter içermelidir',
'settings.passwordChanged': 'Şifre başarıyla değiştirildi',
'settings.mustChangePassword':
'You must change your password before you can continue. Please set a new password below.',
'Devam etmeden önce şifrenizi değiştirmelisiniz. Lütfen aşağıdan yeni bir şifre belirleyin.',
'settings.deleteAccount': 'Hesabı sil',
'settings.deleteAccountTitle': 'Delete your account?',
'settings.deleteAccountTitle': 'Hesabınız silinsin mi?',
'settings.deleteAccountWarning':
'Your account and all your trips, places, and files will be permanently deleted. This action cannot be undone.',
'settings.deleteAccountConfirm': 'Delete permanently',
'settings.deleteBlockedTitle': 'Deletion not possible',
'Hesabınız ve tüm gezileriniz, yerleriniz ve dosyalarınız kalıcı olarak silinecek. Bu eylem geri alınamaz.',
'settings.deleteAccountConfirm': 'Kalıcı olarak sil',
'settings.deleteBlockedTitle': 'Silme mümkün değil',
'settings.deleteBlockedMessage':
'You are the only administrator. Promote another user to admin before deleting your account.',
'Tek yönetici sizsiniz. Hesabınızı silmeden önce başka bir kullanıcıyı yönetici olarak atayın.',
'settings.roleUser': 'Kullanıcı',
'settings.saveProfile': 'Profili kaydet',
'settings.toast.mapSaved': 'Map settings saved',
'settings.toast.keysSaved': 'API keys saved',
'settings.toast.displaySaved': 'Display settings saved',
'settings.toast.profileSaved': 'Profile saved',
'settings.uploadAvatar': 'Upload Profile Picture',
'settings.removeAvatar': 'Remove Profile Picture',
'settings.avatarUploaded': 'Profile picture updated',
'settings.avatarRemoved': 'Profile picture removed',
'settings.avatarError': 'Upload failed',
'settings.mfa.title': 'Two-factor authentication (2FA)',
'settings.saveProfile': 'Profili Kaydet',
'settings.toast.mapSaved': 'Harita ayarları kaydedildi',
'settings.toast.keysSaved': 'API anahtarları kaydedildi',
'settings.toast.displaySaved': 'Ekran ayarları kaydedildi',
'settings.toast.profileSaved': 'Profil kaydedildi',
'settings.uploadAvatar': 'Profil Resmini Yükle',
'settings.removeAvatar': 'Profil Resmini Kaldır',
'settings.avatarUploaded': 'Profil resmi güncellendi',
'settings.avatarRemoved': 'Profil resmi kaldırıldı',
'settings.avatarError': 'Yükleme başarısız oldu',
'settings.mfa.title': 'İki faktörlü kimlik doğrulama (2FA)',
'settings.mfa.description':
'Adds a second step when you sign in with email and password. Use an authenticator app (Google Authenticator, Authy, etc.).',
'E-posta ve şifreyle oturum açtığınızda ikinci bir adım ekler. Bir kimlik doğrulama uygulaması kullanın (Google Authenticator, Authy vb.).',
'settings.mfa.requiredByPolicy':
'Your administrator requires two-factor authentication. Set up an authenticator app below before continuing.',
'settings.mfa.backupTitle': 'Backup codes',
'Yöneticiniz iki faktörlü kimlik doğrulama gerektiriyor. Devam etmeden önce aşağıdan bir kimlik doğrulama uygulaması kurun.',
'settings.mfa.backupTitle': 'Yedekleme kodları',
'settings.mfa.backupDescription':
'Use these one-time backup codes if you lose access to your authenticator app.',
'Kimlik doğrulayıcı uygulamanıza erişimi kaybederseniz bu tek seferlik yedek kodları kullanın.',
'settings.mfa.backupWarning':
'Save these codes now. Each code can only be used once.',
'settings.mfa.backupCopy': 'Copy codes',
'settings.mfa.backupDownload': 'Download TXT',
'settings.mfa.backupPrint': 'Print / PDF',
'settings.mfa.backupCopied': 'Backup codes copied',
'settings.mfa.enabled': '2FA is enabled on your account.',
'settings.mfa.disabled': '2FA is not enabled.',
'settings.mfa.setup': 'Set up authenticator',
'Şimdi bu kodları kaydedin. Her kod yalnızca bir kez kullanılabilir.',
'settings.mfa.backupCopy': 'Kodları kopyala',
'settings.mfa.backupDownload': "TXT'yi İndirin",
'settings.mfa.backupPrint': 'Yazdır / PDF',
'settings.mfa.backupCopied': 'Yedek kodlar kopyalandı',
'settings.mfa.enabled': 'Hesabınızda 2FA etkin.',
'settings.mfa.disabled': '2FA etkin değil.',
'settings.mfa.setup': 'Kimlik doğrulayıcıyı ayarla',
'settings.mfa.scanQr':
'Scan this QR code with your app, or enter the secret manually.',
'settings.mfa.secretLabel': 'Secret key (manual entry)',
'settings.mfa.codePlaceholder': '6-digit code',
'settings.mfa.enable': 'Enable 2FA',
'settings.mfa.cancelSetup': 'Cancel',
'settings.mfa.disableTitle': 'Disable 2FA',
'Bu QR kodunu uygulamanızla tarayın veya sırrı manuel olarak girin.',
'settings.mfa.secretLabel': 'Gizli anahtar (manuel giriş)',
'settings.mfa.codePlaceholder': '6 haneli kod',
'settings.mfa.enable': "2FA'yı Etkinleştir",
'settings.mfa.cancelSetup': 'İptal etmek',
'settings.mfa.disableTitle': "2FA'yı devre dışı bırak",
'settings.mfa.disableHint':
'Enter your account password and a current code from your authenticator.',
'settings.mfa.disable': 'Disable 2FA',
'settings.mfa.toastEnabled': 'Two-factor authentication enabled',
'settings.mfa.toastDisabled': 'Two-factor authentication disabled',
'settings.mfa.demoBlocked': 'Not available in demo mode',
'Hesap şifrenizi ve kimlik doğrulayıcınızdan aldığınız geçerli kodu girin.',
'settings.mfa.disable': "2FA'yı devre dışı bırak",
'settings.mfa.toastEnabled': 'İki faktörlü kimlik doğrulama etkin',
'settings.mfa.toastDisabled': 'İki faktörlü kimlik doğrulama devre dışı',
'settings.mfa.demoBlocked': 'Demo modunda kullanılamaz',
'settings.oauth.modal.machineClient':
'Makine istemcisi (tarayıcı girişi yok)',
'Makine istemcisi (tarayıcıda oturum açma yok)',
'settings.oauth.modal.machineClientHint':
"client_credentials iznini kullanın — yönlendirme URI'lerine gerek yoktur. Belirteç doğrudan client_id + client_secret ile verilir ve seçilen kapsamlar dahilinde sizin adınıza hareket eder.",
'settings.oauth.modal.machineClientUsage':
'Belirteç alın: grant_type=client_credentials, client_id ve client_secret ile POST /oauth/token gönderin. Tarayıcı yok, yenileme belirteci yok.',
'Bir jeton alın: grant_type=client_credentials, client_id ve client_secret ile POST /oauth/token. Tarayıcı yok, yenileme belirteci yok.',
'settings.oauth.badge.machine': 'makine',
};
export default settings;
+10 -10
View File
@@ -1,16 +1,16 @@
import type { TranslationStrings } from '../types';
const share: TranslationStrings = {
'share.linkTitle': 'Public Link',
'share.linkTitle': 'Genel Bağlantı',
'share.linkHint':
'Create a link anyone can use to view this trip without logging in. Read-only — no editing possible.',
'share.createLink': 'Create link',
'share.deleteLink': 'Delete link',
'share.createError': 'Could not create link',
'share.permMap': 'Map & Plan',
'share.permBookings': 'Bookings',
'share.permPacking': 'Packing',
'share.permBudget': 'Budget',
'share.permCollab': 'Chat',
'Herkesin giriş yapmadan bu geziyi görüntülemek için kullanabileceği bir bağlantı oluşturun. Salt okunur — düzenleme mümkün değildir.',
'share.createLink': 'Bağlantı oluştur',
'share.deleteLink': 'Bağlantıyı sil',
'share.createError': 'Bağlantı oluşturulamadı',
'share.permMap': 'Harita ve Plan',
'share.permBookings': 'Rezervasyonlar',
'share.permPacking': 'Ambalaj',
'share.permBudget': 'Bütçe',
'share.permCollab': 'Sohbet',
};
export default share;
+16 -16
View File
@@ -1,21 +1,21 @@
import type { TranslationStrings } from '../types';
const shared: TranslationStrings = {
'shared.expired': 'Link expired or invalid',
'shared.expiredHint': 'This shared trip link is no longer active.',
'shared.readOnly': 'Read-only shared view',
'shared.tabPlan': 'Plan',
'shared.tabBookings': 'Bookings',
'shared.tabPacking': 'Packing',
'shared.tabBudget': 'Budget',
'shared.tabChat': 'Chat',
'shared.days': 'days',
'shared.places': 'places',
'shared.other': 'Other',
'shared.totalBudget': 'Total Budget',
'shared.messages': 'messages',
'shared.sharedVia': 'Shared via',
'shared.confirmed': 'Confirmed',
'shared.pending': 'Pending',
'shared.expired': 'Bağlantının süresi dolmuş veya geçersiz',
'shared.expiredHint': 'Bu paylaşılan gezi bağlantısı artık etkin değil.',
'shared.readOnly': 'Salt okunur paylaşılan görünüm',
'shared.tabPlan': 'Planı',
'shared.tabBookings': 'Rezervasyonlar',
'shared.tabPacking': 'Ambalaj',
'shared.tabBudget': 'Bütçe',
'shared.tabChat': 'Sohbet',
'shared.days': 'günler',
'shared.places': 'yer',
'shared.other': 'Diğer',
'shared.totalBudget': 'Toplam Bütçe',
'shared.messages': 'mesajlar',
'shared.sharedVia': 'Şununla paylaşıldı:',
'shared.confirmed': 'Onaylandı',
'shared.pending': 'Askıda olması',
};
export default shared;
+8 -8
View File
@@ -1,13 +1,13 @@
import type { TranslationStrings } from '../types';
const stats: TranslationStrings = {
'stats.countries': 'Countries',
'stats.cities': 'Cities',
'stats.trips': 'Trips',
'stats.places': 'Places',
'stats.worldProgress': 'World Progress',
'stats.visited': 'visited',
'stats.remaining': 'remaining',
'stats.visitedCountries': 'Visited Countries',
'stats.countries': 'Ülkeler',
'stats.cities': 'Şehirler',
'stats.trips': 'Seyahatler',
'stats.places': 'Yerler',
'stats.worldProgress': 'Dünya İlerlemesi',
'stats.visited': 'ziyaret edildi',
'stats.remaining': 'kalan',
'stats.visitedCountries': 'Ziyaret Edilen Ülkeler',
};
export default stats;
+43 -38
View File
@@ -1,60 +1,65 @@
import type { TranslationStrings } from '../types';
const system_notice: TranslationStrings = {
'system_notice.v3_photos.title': 'Photos have moved in 3.0',
'system_notice.v3_photos.title': "Fotoğraflar 3.0'da taşındı",
'system_notice.v3_photos.body':
'**Photos** in the Trip Planner have been removed. Your photos are safe — TREK never modified your Immich or Synology library.\n\nPhotos now live in the **Journey** addon. Journey is optional — if it is not yet available, ask your admin to enable it under Admin → Addons.',
'system_notice.v3_journey.title': 'Meet Journey — travel journal',
"Seyahat Planlayıcı'daki **Fotoğraflar** kaldırıldı. Fotoğraflarınız güvende — TREK Immich veya Synology kütüphanenizi asla değiştirmedi.\\n\\nFotoğraflar artık **Journey** eklentisinde. Journey isteğe bağlıdır — henüz kullanılamıyorsa yöneticinizden Yönetici → Eklentiler bölümünden etkinleştirmesini isteyin.",
'system_notice.v3_journey.title': 'Journey ile tanışın — seyahat günlüğü',
'system_notice.v3_journey.body':
'Document your trips as rich travel stories with timelines, photo galleries, and interactive maps.',
'system_notice.v3_journey.cta_label': 'Open Journey',
'Seyahatlerinizi zaman çizelgeleri, fotoğraf galerileri ve etkileşimli haritalarla zengin hikâyelere dönüştürün.',
'system_notice.v3_journey.cta_label': "Journey'i Aç",
'system_notice.v3_journey.highlight_timeline':
'Day-by-day timeline & gallery',
'system_notice.v3_journey.highlight_photos': 'Import from Immich or Synology',
'Gün gün zaman çizelgesi ve galeri',
'system_notice.v3_journey.highlight_photos':
"Immich veya Synology'den içe Aktar",
'system_notice.v3_journey.highlight_share':
'Share publicly — no login needed',
'system_notice.v3_journey.highlight_export': 'Export as a PDF photo book',
'system_notice.v3_features.title': 'More highlights in 3.0',
'Herkese açık paylaş — giriş gerekmez',
'system_notice.v3_journey.highlight_export':
'PDF fotoğraf kitabı Olarak dışa aktar',
'system_notice.v3_features.title': "3.0'Daki diğer öne çıkanlar",
'system_notice.v3_features.body':
'A few more things worth knowing about this release.',
'Bu sürüm hakkında bilmeniz gereken birkaç şey daha.',
'system_notice.v3_features.highlight_dashboard':
'Mobile-first dashboard redesign',
'system_notice.v3_features.highlight_offline': 'Full offline mode as a PWA',
'Mobil öncelikli gösterge paneli yenilemesi',
'system_notice.v3_features.highlight_offline':
'PWA olarak tam çevrimdışı mod',
'system_notice.v3_features.highlight_search':
'Real-time place search autocomplete',
'Gerçek zamanlı yer arama otomatik tamamlama',
'system_notice.v3_features.highlight_import':
'Import places from KMZ/KML files',
'system_notice.v3_mcp.title': 'MCP: OAuth 2.1 upgrade',
'KMZ/KML dosyalarından yer İçe aktarma',
'system_notice.v3_mcp.title': 'MCP: OAuth 2.1 yükseltmesi',
'system_notice.v3_mcp.body':
'The MCP integration has been fully overhauled. OAuth 2.1 is now the recommended auth method. Legacy static tokens (trek_…) are deprecated and will be removed in a future release.',
'system_notice.v3_mcp.highlight_oauth': 'OAuth 2.1 recommended (mcp-remote)',
'system_notice.v3_mcp.highlight_scopes': '24 fine-grained permission scopes',
'system_notice.v3_mcp.highlight_deprecated': 'Static trek_ tokens deprecated',
'system_notice.v3_mcp.highlight_tools': 'Expanded toolset & prompts',
'system_notice.v3_thankyou.title': 'A personal note from me',
'MCP entegrasyonu tamamen yenilendi. OAuth 2.1 artık önerilen kimlik doğrulama yöntemidir. Eski statik jetonlar (trek_…) kullanımdan kaldırıldı ve gelecekteki bir sürümde kaldırılacak.',
'system_notice.v3_mcp.highlight_oauth': 'OAuth 2.1 önerilir (mcp-remote)',
'system_notice.v3_mcp.highlight_scopes': '24 ayrıntılı izin kapsamı',
'system_notice.v3_mcp.highlight_deprecated':
'Statik trek_ jetonları kullanımdan kaldırıldı',
'system_notice.v3_mcp.highlight_tools': 'Genişletilmiş araç seti ve istemler',
'system_notice.v3_thankyou.title': 'Benden kişisel bir not',
'system_notice.v3_thankyou.body':
"Before you go — I want to take a moment.\n\nTREK started as a side project I built for my own trips. I never imagined it would grow into something that 4,000 of you now trust to plan your adventures. Every star, every issue, every feature request — I read them all, and they keep me going through late nights between a full-time job and university.\n\nI want you to know: TREK will always be open source, always self-hosted, always yours. No tracking, no subscriptions, no strings attached. Just a tool built by someone who loves traveling as much as you do.\n\nSpecial thanks to [jubnl](https://github.com/jubnl) — you have become an incredible collaborator. So much of what makes 3.0 great carries your fingerprints. Thank you for believing in this project when it was still rough around the edges.\n\nAnd to every single one of you who filed a bug, translated a string, shared TREK with a friend, or simply used it to plan a trip — **thank you**. You are the reason this exists.\n\nHere's to many more adventures together.\n\n— Maurice\n\n---\n\n[Join the community on Discord](https://discord.gg/7Q6M6jDwzf)\n\nIf TREK makes your travels better, a [small coffee](https://ko-fi.com/mauriceboe) always keeps the lights on.",
'system_notice.v3014_whitespace_collision.title':
'Action required: user account conflict',
'İşlem gerekli: kullanıcı hesabı çakışması',
'system_notice.v3014_whitespace_collision.body':
'The 3.0.14 upgrade detected one or more username or email collisions caused by leading/trailing whitespace in stored accounts. Affected accounts were renamed automatically. Check the server logs for lines starting with **[migration] WHITESPACE COLLISION** to identify which accounts need review.',
'system_notice.welcome_v1.title': 'Welcome to TREK',
'3.0.14 yükseltmesi, kayıtlı hesaplardaki baştaki/sondaki boşluklardan kaynaklanan bir veya daha fazla kullanıcı adı veya e-posta çakışması tespit etti. Etkilenen hesaplar otomatik olarak yeniden adlandırıldı. Hangi hesapların incelenmesi gerektiğini belirlemek için sunucu günlüklerinde **[migration] WHITESPACE COLLISION** ile başlayan satırlara bakın.',
'system_notice.welcome_v1.title': "TREK'e hoş Geldiniz",
'system_notice.welcome_v1.body':
'Your all-in-one travel planner. Build itineraries, share trips with friends, and stay organized — online or offline.',
'system_notice.welcome_v1.cta_label': 'Plan a trip',
'Hepsi bir arada seyahat planlayıcınız. Program oluşturun, seyahatleri arkadaşlarınızla paylaşın ve çevrimiçi veya çevrimdışı düzenli kalın.',
'system_notice.welcome_v1.cta_label': 'Seyahat planla',
'system_notice.welcome_v1.hero_alt':
'A scenic travel destination with TREK planning UI overlay',
'TREK planlama arayüzü kaplamalı manzaralı bir seyahat destinasyonu',
'system_notice.welcome_v1.highlight_plan':
'Day-by-day itineraries for any trip',
'Her seyahat için gün gün programlar',
'system_notice.welcome_v1.highlight_share':
'Collaborate with travel partners',
'system_notice.welcome_v1.highlight_offline': 'Works offline on mobile',
'system_notice.dev_test_modal.title': '[Dev] Test notice',
'system_notice.dev_test_modal.body': 'This is a dev-only test notice.',
'system_notice.pager.prev': 'Previous notice',
'system_notice.pager.next': 'Next notice',
'system_notice.pager.counter': '{current} / {total}',
'system_notice.pager.goto': 'Go to notice {n}',
'system_notice.pager.position': 'Notice {current} of {total}',
'Seyahat partnerleriyle işbirliği',
'system_notice.welcome_v1.highlight_offline': 'Mobilde çevrimdışı çalışır',
'system_notice.dev_test_modal.title': '[Dev] Test bildirimi',
'system_notice.dev_test_modal.body':
'Bu yalnızca geliştirme ortamına özel bir test bildirimidir.',
'system_notice.pager.prev': 'Önceki bildirim',
'system_notice.pager.next': 'Sonraki bildirim',
'system_notice.pager.counter': '{güncel} / {toplam}',
'system_notice.pager.goto': '{n}. bildirime git',
'system_notice.pager.position': '{total} Bildirimden {current}.',
};
export default system_notice;
+35 -35
View File
@@ -1,40 +1,40 @@
import type { TranslationStrings } from '../types';
const todo: TranslationStrings = {
'todo.subtab.packing': 'Packing List',
'todo.subtab.todo': 'To-Do',
'todo.completed': 'completed',
'todo.filter.all': 'All',
'todo.filter.open': 'Open',
'todo.filter.done': 'Done',
'todo.uncategorized': 'Uncategorized',
'todo.namePlaceholder': 'Task name',
'todo.descriptionPlaceholder': 'Description (optional)',
'todo.unassigned': 'Unassigned',
'todo.noCategory': 'No category',
'todo.hasDescription': 'Has description',
'todo.addItem': 'Add new task',
'todo.sidebar.sortBy': 'Sort by',
'todo.priority': 'Priority',
'todo.newCategoryLabel': 'new',
'todo.newCategory': 'Category name',
'todo.addCategory': 'Add category',
'todo.newItem': 'New task',
'todo.empty': 'No tasks yet. Add a task to get started!',
'todo.filter.my': 'My Tasks',
'todo.filter.overdue': 'Overdue',
'todo.sidebar.tasks': 'Tasks',
'todo.sidebar.categories': 'Categories',
'todo.detail.title': 'Task',
'todo.detail.description': 'Description',
'todo.detail.category': 'Category',
'todo.detail.dueDate': 'Due date',
'todo.detail.assignedTo': 'Assigned to',
'todo.detail.delete': 'Delete',
'todo.detail.save': 'Save changes',
'todo.sortByPrio': 'Priority',
'todo.detail.priority': 'Priority',
'todo.detail.noPriority': 'None',
'todo.detail.create': 'Create task',
'todo.subtab.packing': 'Paket Listesi',
'todo.subtab.todo': 'Yapılacaklar',
'todo.completed': 'tamamlandı',
'todo.filter.all': 'Tümü',
'todo.filter.open': 'Açık',
'todo.filter.done': 'Tamamlandı',
'todo.uncategorized': 'Kategorisiz',
'todo.namePlaceholder': 'Görev adı',
'todo.descriptionPlaceholder': 'Açıklama (isteğe bağlı)',
'todo.unassigned': 'Atanmamış',
'todo.noCategory': 'Kategori yok',
'todo.hasDescription': 'Açıklama var',
'todo.addItem': 'Yeni görev ekle',
'todo.sidebar.sortBy': 'Sırala',
'todo.priority': 'Öncelik',
'todo.newCategoryLabel': 'yeni',
'todo.newCategory': 'Kategori adı',
'todo.addCategory': 'Kategori ekle',
'todo.newItem': 'Yeni görev',
'todo.empty': 'Henüz görev yok. Başlamak için bir görev ekleyin!',
'todo.filter.my': 'Görevlerim',
'todo.filter.overdue': 'Gecikmiş',
'todo.sidebar.tasks': 'Görevler',
'todo.sidebar.categories': 'Kategoriler',
'todo.detail.title': 'Görev',
'todo.detail.description': 'Açıklama',
'todo.detail.category': 'Kategori',
'todo.detail.dueDate': 'Son tarih',
'todo.detail.assignedTo': 'Atanan',
'todo.detail.delete': 'Sil',
'todo.detail.save': 'Değişiklikleri kaydet',
'todo.sortByPrio': 'Öncelik',
'todo.detail.priority': 'Öncelik',
'todo.detail.noPriority': 'Yok',
'todo.detail.create': 'Görev oluştur',
};
export default todo;
+5 -5
View File
@@ -1,10 +1,10 @@
import type { TranslationStrings } from '../types';
const transport: TranslationStrings = {
'transport.addTransport': 'Add transport',
'transport.modalTitle.create': 'Add transport',
'transport.modalTitle.edit': 'Edit transport',
'transport.title': 'Transports',
'transport.addManual': 'Manual Transport',
'transport.addTransport': 'Ulaşım ekle',
'transport.modalTitle.create': 'Ulaşım ekle',
'transport.modalTitle.edit': 'Ulaşımı düzenle',
'transport.title': 'Ulaşım',
'transport.addManual': 'Manuel Ulaşım',
};
export default transport;
+26 -26
View File
@@ -1,31 +1,31 @@
import type { TranslationStrings } from '../types';
const trip: TranslationStrings = {
'trip.tabs.plan': 'Plan',
'trip.tabs.transports': 'Transports',
'trip.tabs.reservations': 'Bookings',
'trip.tabs.reservationsShort': 'Book',
'trip.tabs.packing': 'Packing List',
'trip.tabs.packingShort': 'Packing',
'trip.tabs.lists': 'Lists',
'trip.tabs.listsShort': 'Lists',
'trip.tabs.budget': 'Budget',
'trip.tabs.files': 'Files',
'trip.loading': 'Loading trip...',
'trip.loadingPhotos': 'Loading place photos...',
'trip.mobilePlan': 'Plan',
'trip.mobilePlaces': 'Places',
'trip.toast.placeUpdated': 'Place updated',
'trip.toast.placeAdded': 'Place added',
'trip.toast.placeDeleted': 'Place deleted',
'trip.toast.selectDay': 'Please select a day first',
'trip.toast.assignedToDay': 'Place assigned to day',
'trip.toast.reorderError': 'Failed to reorder',
'trip.toast.reservationUpdated': 'Reservation updated',
'trip.toast.reservationAdded': 'Reservation added',
'trip.toast.deleted': 'Deleted',
'trip.confirm.deletePlace': 'Are you sure you want to delete this place?',
'trip.confirm.deletePlaces': 'Delete {count} places?',
'trip.toast.placesDeleted': '{count} places deleted',
'trip.tabs.plan': 'Planı',
'trip.tabs.transports': 'Ulaşım',
'trip.tabs.reservations': 'Rezervasyonlar',
'trip.tabs.reservationsShort': 'Rezerv.',
'trip.tabs.packing': 'Paket Listesi',
'trip.tabs.packingShort': 'Paket',
'trip.tabs.lists': 'Listeler',
'trip.tabs.listsShort': 'Liste',
'trip.tabs.budget': 'Bütçe',
'trip.tabs.files': 'Dosyalar',
'trip.loading': 'Seyahat yükleniyor...',
'trip.loadingPhotos': 'Yer fotoğrafları yükleniyor...',
'trip.mobilePlan': 'Planı',
'trip.mobilePlaces': 'Yerler',
'trip.toast.placeUpdated': 'Yer güncellendi',
'trip.toast.placeAdded': 'Yer eklendi',
'trip.toast.placeDeleted': 'Yer silindi',
'trip.toast.selectDay': 'Lütfen önce bir gün seçin',
'trip.toast.assignedToDay': 'Yer güne atandı',
'trip.toast.reorderError': 'Sıralama yapılamadı',
'trip.toast.reservationUpdated': 'Rezervasyon güncellendi',
'trip.toast.reservationAdded': 'Rezervasyon eklendi',
'trip.toast.deleted': 'Silindi',
'trip.confirm.deletePlace': 'Bu yeri silmek istediğinizden emin misiniz?',
'trip.confirm.deletePlaces': '{count} Yer silinsin mi?',
'trip.toast.placesDeleted': '{count} yer silindi',
};
export default trip;
+3 -3
View File
@@ -5,13 +5,13 @@ const trips: TranslationStrings = {
'trips.memberRemoveError': 'Kaldırılamadı',
'trips.memberAdded': '{username} eklendi',
'trips.memberAddError': 'Eklenemedi',
'trips.reminder': 'Hatırlatma',
'trips.reminder': 'Hatırlatıcı',
'trips.reminderNone': 'Yok',
'trips.reminderDay': 'gün',
'trips.reminderDays': 'gün',
'trips.reminderCustom': 'Özel',
'trips.reminderDaysBefore': 'kalkıştan önceki gün sayısı',
'trips.reminderDaysBefore': 'hareketten önce gün',
'trips.reminderDisabledHint':
'Gezi hatırlatmaları devre dışı. Yönetim > Ayarlar > Bildirimler bölümünden etkinleştirin.',
'Seyahat hatırlatıcıları kapalı. Yönetici > Ayarlar > Bildirimler bölümünden açın.',
};
export default trips;
+16 -16
View File
@@ -1,21 +1,21 @@
import type { TranslationStrings } from '../types';
const undo: TranslationStrings = {
'undo.button': 'Undo',
'undo.tooltip': 'Undo: {action}',
'undo.assignPlace': 'Place assigned to day',
'undo.removeAssignment': 'Place removed from day',
'undo.reorder': 'Places reordered',
'undo.optimize': 'Route optimized',
'undo.deletePlace': 'Place deleted',
'undo.deletePlaces': 'Places deleted',
'undo.moveDay': 'Place moved to another day',
'undo.lock': 'Place lock toggled',
'undo.importGpx': 'GPX import',
'undo.importKeyholeMarkup': 'KMZ/KML import',
'undo.importGoogleList': 'Google Maps import',
'undo.importNaverList': 'Naver Maps import',
'undo.addPlace': 'Place added',
'undo.done': 'Undone: {action}',
'undo.button': 'Geri al',
'undo.tooltip': 'Geri al: {action}',
'undo.assignPlace': 'Yer güne atandı',
'undo.removeAssignment': 'Yer günden kaldırıldı',
'undo.reorder': 'Yerler yeniden sıralandı',
'undo.optimize': 'Rota optimize edildi',
'undo.deletePlace': 'Yer silindi',
'undo.deletePlaces': 'Yerler silindi',
'undo.moveDay': 'Yer başka güne taşındı',
'undo.lock': 'Yer kilidi değiştirildi',
'undo.importGpx': 'GPX içe aktarma',
'undo.importKeyholeMarkup': 'KMZ/KML içe aktarma',
'undo.importGoogleList': 'Google Haritalar içe aktarma',
'undo.importNaverList': 'Naver Haritalar içe aktarma',
'undo.addPlace': 'Yer eklendi',
'undo.done': 'Geri alındı: {action}',
};
export default undo;
+90 -88
View File
@@ -1,103 +1,105 @@
import type { TranslationStrings } from '../types';
const vacay: TranslationStrings = {
'vacay.subtitle': 'Plan and manage vacation days',
'vacay.settings': 'Settings',
'vacay.year': 'Year',
'vacay.addYear': 'Add next year',
'vacay.addPrevYear': 'Add previous year',
'vacay.removeYear': 'Remove year',
'vacay.removeYearConfirm': 'Remove {year}?',
'vacay.subtitle': 'Tatil günlerini planlayın ve yönetin',
'vacay.settings': 'Ayarlar',
'vacay.year': 'Yıl',
'vacay.addYear': 'Gelecek yıl ekle',
'vacay.addPrevYear': 'Önceki yılı ekle',
'vacay.removeYear': 'Yılı kaldır',
'vacay.removeYearConfirm': '{year} Kaldırılsın mı?',
'vacay.removeYearHint':
'All vacation entries and company holidays for this year will be permanently deleted.',
'vacay.remove': 'Remove',
'vacay.persons': 'Persons',
'vacay.noPersons': 'No persons added',
'vacay.addPerson': 'Add Person',
'vacay.editPerson': 'Edit Person',
'vacay.removePerson': 'Remove Person',
'vacay.removePersonConfirm': 'Remove {name}?',
'Bu yılın tüm tatil girişleri ve şirket tatilleri kalıcı olarak silinecek.',
'vacay.remove': 'Kaldırmak',
'vacay.persons': 'Kişiler',
'vacay.noPersons': 'Hiç kişi eklenmedi',
'vacay.addPerson': 'Kişi Ekle',
'vacay.editPerson': 'Kişiyi Düzenle',
'vacay.removePerson': 'Kişiyi Kaldır',
'vacay.removePersonConfirm': '{name} Kaldırılsın mı?',
'vacay.removePersonHint':
'All vacation entries for this person will be permanently deleted.',
'vacay.personName': 'Name',
'vacay.personNamePlaceholder': 'Enter name',
'vacay.color': 'Color',
'vacay.add': 'Add',
'vacay.legend': 'Legend',
'vacay.publicHoliday': 'Public Holiday',
'vacay.companyHoliday': 'Company Holiday',
'vacay.weekend': 'Weekend',
'vacay.modeVacation': 'Vacation',
'vacay.modeCompany': 'Company Holiday',
'vacay.entitlement': 'Entitlement',
'vacay.entitlementDays': 'Days',
'vacay.used': 'Used',
'vacay.remaining': 'Left',
'vacay.carriedOver': 'from {year}',
'vacay.blockWeekends': 'Block Weekends',
'vacay.blockWeekendsHint': 'Prevent vacation entries on weekend days',
'vacay.weekendDays': 'Weekend days',
'vacay.mon': 'Mon',
'vacay.tue': 'Tue',
'vacay.wed': 'Wed',
'vacay.thu': 'Thu',
'vacay.fri': 'Fri',
'vacay.sat': 'Sat',
'vacay.sun': 'Sun',
'vacay.publicHolidays': 'Public Holidays',
'vacay.publicHolidaysHint': 'Mark public holidays in the calendar',
'vacay.selectCountry': 'Select country',
'vacay.selectRegion': 'Select region (optional)',
'vacay.addCalendar': 'Add calendar',
'vacay.calendarLabel': 'Label (optional)',
'vacay.calendarColor': 'Color',
'vacay.noCalendars': 'No holiday calendars added yet',
'vacay.companyHolidays': 'Company Holidays',
'vacay.companyHolidaysHint': 'Allow marking company-wide holiday days',
'Bu kişinin tüm tatil girişleri kalıcı olarak silinecek.',
'vacay.personName': 'İsim',
'vacay.personNamePlaceholder': 'Ad girin',
'vacay.color': 'Renk',
'vacay.add': 'Eklemek',
'vacay.legend': 'Efsane',
'vacay.publicHoliday': 'Resmi Tatil',
'vacay.companyHoliday': 'Şirket Tatili',
'vacay.weekend': 'Hafta sonu',
'vacay.modeVacation': 'Tatil',
'vacay.modeCompany': 'Şirket Tatili',
'vacay.entitlement': 'Yetki',
'vacay.entitlementDays': 'Günler',
'vacay.used': 'Kullanılmış',
'vacay.remaining': 'Sol',
'vacay.carriedOver': '{yıl} tarihinden itibaren',
'vacay.blockWeekends': 'Hafta Sonlarını Engelle',
'vacay.blockWeekendsHint': 'Hafta sonu günlerinde tatil girişlerini önleyin',
'vacay.weekendDays': 'Hafta sonu günleri',
'vacay.mon': 'Pazartesi',
'vacay.tue': 'Salı',
'vacay.wed': 'Çar',
'vacay.thu': 'Per',
'vacay.fri': 'Cuma',
'vacay.sat': 'Doygunluk',
'vacay.sun': 'Güneş',
'vacay.publicHolidays': 'Resmi Tatiller',
'vacay.publicHolidaysHint': 'Resmi tatil günlerini takvimde işaretleyin',
'vacay.selectCountry': 'Ülke seçin',
'vacay.selectRegion': 'Bölge seçin (isteğe bağlı)',
'vacay.addCalendar': 'Takvim ekle',
'vacay.calendarLabel': 'Etiket (isteğe bağlı)',
'vacay.calendarColor': 'Renk',
'vacay.noCalendars': 'Henüz tatil takvimi eklenmedi',
'vacay.companyHolidays': 'Şirket Tatilleri',
'vacay.companyHolidaysHint':
'Şirket çapında tatil günlerinin işaretlenmesine izin ver',
'vacay.companyHolidaysNoDeduct':
'Company holidays do not count towards vacation days.',
'vacay.weekStart': 'Week starts on',
'Şirket tatilleri tatil günlerinden sayılmaz.',
'vacay.weekStart': 'Hafta başlıyor',
'vacay.weekStartHint':
'Choose whether the calendar week starts on Monday or Sunday',
'vacay.carryOver': 'Carry Over',
'Takvim haftasının Pazartesi mi yoksa Pazar günü mü başlayacağını seçin',
'vacay.carryOver': 'Devret',
'vacay.carryOverHint':
'Automatically carry remaining vacation days into the next year',
'vacay.sharing': 'Sharing',
'vacay.sharingHint': 'Share your vacation plan with other TREK users',
'vacay.owner': 'Owner',
'vacay.shareEmailPlaceholder': 'Email of TREK user',
'vacay.shareSuccess': 'Plan shared successfully',
'vacay.shareError': 'Could not share plan',
'vacay.dissolve': 'Dissolve Fusion',
'vacay.dissolveHint': 'Separate calendars again. Your entries will be kept.',
'vacay.dissolveAction': 'Dissolve',
'vacay.dissolved': 'Calendar separated',
'vacay.fusedWith': 'Fused with',
'vacay.you': 'you',
'vacay.noData': 'No data',
'vacay.changeColor': 'Change color',
'vacay.inviteUser': 'Invite User',
'Kalan tatil günlerini otomatik olarak bir sonraki yıla taşıyın',
'vacay.sharing': 'Paylaşma',
'vacay.sharingHint': 'Tatil planınızı diğer TREK kullanıcılarıyla paylaşın',
'vacay.owner': 'Mal sahibi',
'vacay.shareEmailPlaceholder': 'TREK kullanıcısının e-postası',
'vacay.shareSuccess': 'Plan başarıyla paylaşıldı',
'vacay.shareError': 'Plan paylaşılamadı',
'vacay.dissolve': 'Füzyonu Çözün',
'vacay.dissolveHint': 'Takvimleri tekrar ayırın. Girişleriniz saklanacaktır.',
'vacay.dissolveAction': 'Çözün',
'vacay.dissolved': 'Takvim ayrıldı',
'vacay.fusedWith': 'İle kaynaşmış',
'vacay.you': 'Sen',
'vacay.noData': 'Veri yok',
'vacay.changeColor': 'Rengi değiştir',
'vacay.inviteUser': 'Kullanıcıyı Davet Et',
'vacay.inviteHint':
'Invite another TREK user to share a combined vacation calendar.',
'vacay.selectUser': 'Select user',
'vacay.sendInvite': 'Send Invite',
'vacay.inviteSent': 'Invite sent',
'vacay.inviteError': 'Could not send invite',
'vacay.pending': 'pending',
'vacay.noUsersAvailable': 'No users available',
'vacay.accept': 'Accept',
'vacay.decline': 'Decline',
'vacay.acceptFusion': 'Accept & Fuse',
'vacay.inviteTitle': 'Fusion Request',
'vacay.inviteWantsToFuse': 'wants to share a vacation calendar with you.',
'Başka bir TREK kullanıcısını birleşik bir tatil takvimini paylaşmaya davet edin.',
'vacay.selectUser': 'Kullanıcı seç',
'vacay.sendInvite': 'Davet Gönder',
'vacay.inviteSent': 'Davet gönderildi',
'vacay.inviteError': 'Davet gönderilemedi',
'vacay.pending': 'askıda olması',
'vacay.noUsersAvailable': 'Kullanılabilir kullanıcı yok',
'vacay.accept': 'Kabul etmek',
'vacay.decline': 'Reddetmek',
'vacay.acceptFusion': 'Kabul Et ve Sigortala',
'vacay.inviteTitle': 'Füzyon Talebi',
'vacay.inviteWantsToFuse': 'sizinle bir tatil takvimi paylaşmak istiyor.',
'vacay.fuseInfo1':
'Both of you will see all vacation entries in one shared calendar.',
'vacay.fuseInfo2': 'Both parties can create and edit entries for each other.',
'İkiniz de tüm tatil kayıtlarını tek bir paylaşılan takvimde göreceksiniz.',
'vacay.fuseInfo2':
'Her iki taraf da birbirleri için girişler oluşturabilir ve düzenleyebilir.',
'vacay.fuseInfo3':
'Both parties can delete entries and change vacation entitlements.',
'Her iki taraf da girişleri silebilir ve tatil haklarını değiştirebilir.',
'vacay.fuseInfo4':
'Settings like public holidays and company holidays are shared.',
'Resmi tatiller ve şirket tatilleri gibi ayarlar paylaşılır.',
'vacay.fuseInfo5':
'The fusion can be dissolved at any time by either party. Your entries will be preserved.',
'Birleşme her iki tarafça da herhangi bir zamanda feshedilebilir. Girişleriniz korunacaktır.',
};
export default vacay;