* 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'), ja: () => import('@trek/shared/i18n/ja'),
ko: () => import('@trek/shared/i18n/ko'), ko: () => import('@trek/shared/i18n/ko'),
uk: () => import('@trek/shared/i18n/uk'), 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 // 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', () => { describe('SUPPORTED_LANGUAGES', () => {
it('FE-COMP-I18N-009: contains expected entries with value/label shape', () => { it('FE-COMP-I18N-009: contains expected entries with value/label shape', () => {
expect(Array.isArray(SUPPORTED_LANGUAGES)).toBe(true) 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: 'en', label: 'English' }))
expect(SUPPORTED_LANGUAGES).toContainEqual(expect.objectContaining({ value: 'tr', label: 'Türkçe' })) expect(SUPPORTED_LANGUAGES).toContainEqual(expect.objectContaining({ value: 'tr', label: 'Türkçe' }))
expect(SUPPORTED_LANGUAGES).toContainEqual(expect.objectContaining({ value: 'ja', label: '日本語' })) 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: 'ja', label: '日本語', locale: 'ja-JP' },
{ value: 'ko', label: '한국어', locale: 'ko-KR' }, { value: 'ko', label: '한국어', locale: 'ko-KR' },
{ value: 'uk', label: 'Українська', locale: 'uk-UA' }, { value: 'uk', label: 'Українська', locale: 'uk-UA' },
{ value: 'gr', label: 'Ελληνικά', locale: 'el-GR' },
] as const; ] as const;
export type SupportedLanguageCode = export type SupportedLanguageCode =
+292 -283
View File
@@ -1,70 +1,74 @@
import type { TranslationStrings } from '../types'; import type { TranslationStrings } from '../types';
const admin: TranslationStrings = { const admin: TranslationStrings = {
'admin.notifications.title': 'Notifications', 'admin.notifications.title': 'Bildirimler',
'admin.notifications.hint': 'admin.notifications.hint':
'Choose one notification channel. Only one can be active at a time.', 'Bir bildirim kanalı seçin. Aynı anda yalnızca biri etkin olabilir.',
'admin.notifications.none': 'Disabled', 'admin.notifications.none': 'Kapalı',
'admin.notifications.email': 'Email (SMTP)', 'admin.notifications.email': 'E-posta (SMTP)',
'admin.notifications.webhook': 'Webhook', 'admin.notifications.webhook': 'Web kancası',
'admin.notifications.ntfy': 'Ntfy', 'admin.notifications.ntfy': 'Ntfy',
'admin.ntfy.hint': 'admin.ntfy.hint':
'Allow users to configure their own ntfy topics for push notifications. Set the default server below to pre-fill user settings.', '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': 'Save notification settings', 'admin.notifications.save': 'Bildirim ayarlarını kaydet',
'admin.notifications.saved': 'Notification settings saved', 'admin.notifications.saved': 'Bildirim ayarları kaydedildi',
'admin.notifications.testWebhook': 'Send test webhook', 'admin.notifications.testWebhook': 'Test webhook gönder',
'admin.notifications.testWebhookSuccess': 'Test webhook sent successfully', 'admin.notifications.testWebhookSuccess': 'Test webhook gönderildi',
'admin.notifications.testWebhookFailed': 'Test webhook failed', 'admin.notifications.testWebhookFailed': 'Test webhook başarısız',
'admin.notifications.testNtfy': 'Send test ntfy', 'admin.notifications.testNtfy': 'Test ntfy gönder',
'admin.notifications.testNtfySuccess': 'Test ntfy sent successfully', 'admin.notifications.testNtfySuccess': 'Test ntfy gönderildi',
'admin.notifications.testNtfyFailed': 'Test ntfy failed', 'admin.notifications.testNtfyFailed': 'Test ntfy başarısız',
'admin.notifications.emailPanel.title': 'Email (SMTP)', 'admin.notifications.emailPanel.title': 'E-posta (SMTP)',
'admin.notifications.webhookPanel.title': 'Webhook', 'admin.notifications.webhookPanel.title': 'Web kancası',
'admin.notifications.inappPanel.title': 'In-App', 'admin.notifications.inappPanel.title': 'Uygulama içi',
'admin.notifications.inappPanel.hint': 'admin.notifications.inappPanel.hint':
'In-app notifications are always active and cannot be disabled globally.', 'Uygulama içi bildirimler her zaman açıktır ve genel olarak kapatılamaz.',
'admin.notifications.adminWebhookPanel.title': 'Admin Webhook', 'admin.notifications.adminWebhookPanel.title': 'Yönetici Webhook',
'admin.notifications.adminWebhookPanel.hint': '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.', "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': 'Admin webhook URL saved', 'admin.notifications.adminWebhookPanel.saved':
'Yönetici webhook URL kaydedildi',
'admin.notifications.adminWebhookPanel.testSuccess': 'admin.notifications.adminWebhookPanel.testSuccess':
'Test webhook sent successfully', 'Test webhook gönderildi',
'admin.notifications.adminWebhookPanel.testFailed': 'Test webhook failed', 'admin.notifications.adminWebhookPanel.testFailed': 'Test webhook başarısız',
'admin.notifications.adminWebhookPanel.alwaysOnHint': 'admin.notifications.adminWebhookPanel.alwaysOnHint':
'Admin webhook always fires when a URL is configured', 'URL yapılandırıldığında yönetici webhook her zaman tetiklenir',
'admin.notifications.adminNtfyPanel.title': 'Admin Ntfy', 'admin.notifications.adminNtfyPanel.title': 'Yönetici Ntfy',
'admin.notifications.adminNtfyPanel.hint': '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.', '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 Server URL', 'admin.notifications.adminNtfyPanel.serverLabel': "Ntfy Sunucu URL'si",
'admin.notifications.adminNtfyPanel.serverHint': '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.serverPlaceholder': 'https://ntfy.sh',
'admin.notifications.adminNtfyPanel.topicLabel': 'Admin Topic', 'admin.notifications.adminNtfyPanel.topicLabel': 'Yönetici Konusu',
'admin.notifications.adminNtfyPanel.topicPlaceholder': 'trek-admin-alerts', 'admin.notifications.adminNtfyPanel.topicPlaceholder':
'admin.notifications.adminNtfyPanel.tokenLabel': 'Access Token (optional)', 'yürüyüş-yönetici-uyarıları',
'admin.notifications.adminNtfyPanel.tokenLabel':
'Erişim anahtarı (isteğe bağlı)',
'admin.notifications.adminNtfyPanel.tokenCleared': 'admin.notifications.adminNtfyPanel.tokenCleared':
'Admin access token cleared', 'Yönetici erişim anahtarı temizlendi',
'admin.notifications.adminNtfyPanel.saved': 'Admin ntfy settings saved', 'admin.notifications.adminNtfyPanel.saved':
'admin.notifications.adminNtfyPanel.test': 'Send test ntfy', 'Yönetici ntfy ayarları kaydedildi',
'admin.notifications.adminNtfyPanel.testSuccess': 'admin.notifications.adminNtfyPanel.test': 'Test ntfy gönder',
'Test ntfy sent successfully', 'admin.notifications.adminNtfyPanel.testSuccess': 'Test ntfy gönderildi',
'admin.notifications.adminNtfyPanel.testFailed': 'Test ntfy failed', 'admin.notifications.adminNtfyPanel.testFailed': 'Test ntfy başarısız',
'admin.notifications.adminNtfyPanel.alwaysOnHint': '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': 'admin.notifications.adminNotificationsHint':
'Configure which channels deliver admin-only notifications (e.g. version alerts).', 'Yalnızca yönetici bildirimlerinin hangi kanallardan iletileceğini yapılandırın.',
'admin.notifications.tripReminders.title': 'Trip Reminders', 'admin.notifications.tripReminders.title': 'Seyahat Hatırlatıcıları',
'admin.notifications.tripReminders.hint': 'admin.notifications.tripReminders.hint':
'Send a reminder notification before a trip starts (requires reminder days to be set on the trip).', 'Seyahat başlamadan önce hatırlatma gönderir (seyahatte hatırlatma günü ayarlı olmalıdır).',
'admin.notifications.tripReminders.enabled': 'Trip reminders enabled', 'admin.notifications.tripReminders.enabled': 'Seyahat hatırlatıcıları açık',
'admin.notifications.tripReminders.disabled': 'Trip reminders disabled', 'admin.notifications.tripReminders.disabled':
'admin.smtp.title': 'Email & Notifications', 'Seyahat hatırlatıcıları kapalı',
'admin.smtp.hint': 'SMTP configuration for sending email notifications.', 'admin.smtp.title': 'E-posta ve Bildirimler',
'admin.smtp.testButton': 'Send test email', 'admin.smtp.hint': 'E-posta bildirimleri için SMTP yapılandırması.',
'admin.smtp.testButton': 'Test e-postası gönder',
'admin.webhook.hint': 'admin.webhook.hint':
'Allow users to configure their own webhook URLs for notifications (Discord, Slack, etc.).', "Kullanıcıların bildirimler için kendi webhook URL'lerini (Discord, Slack vb.) yapılandırmasına izin verin.",
'admin.smtp.testSuccess': 'Test email sent successfully', 'admin.smtp.testSuccess': 'Test e-postası gönderildi',
'admin.smtp.testFailed': 'Test email failed', 'admin.smtp.testFailed': 'Test e-postası başarısız',
'admin.title': 'Yönetim', 'admin.title': 'Yönetim',
'admin.subtitle': 'Kullanıcı yönetimi ve sistem ayarları', 'admin.subtitle': 'Kullanıcı yönetimi ve sistem ayarları',
'admin.tabs.users': 'Kullanıcılar', 'admin.tabs.users': 'Kullanıcılar',
@@ -72,287 +76,292 @@ const admin: TranslationStrings = {
'admin.tabs.backup': 'Yedekleme', 'admin.tabs.backup': 'Yedekleme',
'admin.tabs.notifications': 'Bildirimler', 'admin.tabs.notifications': 'Bildirimler',
'admin.tabs.audit': 'Denetim', 'admin.tabs.audit': 'Denetim',
'admin.stats.users': 'Kullanıcı', 'admin.stats.users': 'Kullanıcılar',
'admin.stats.trips': 'Gezi', 'admin.stats.trips': 'Seyahatler',
'admin.stats.places': 'Yer', 'admin.stats.places': 'Yerler',
'admin.stats.photos': 'Fotoğraf', 'admin.stats.photos': 'Fotoğraflar',
'admin.stats.files': 'Dosya', 'admin.stats.files': 'Dosyalar',
'admin.table.user': 'User', 'admin.table.user': 'Kullanıcı',
'admin.table.email': 'Email', 'admin.table.email': 'E-posta',
'admin.table.role': 'Role', 'admin.table.role': 'Rol',
'admin.table.created': 'Created', 'admin.table.created': 'Oluşturulma',
'admin.table.lastLogin': 'Last Login', 'admin.table.lastLogin': 'Son Giriş',
'admin.table.actions': 'Actions', 'admin.table.actions': 'İşlemler',
'admin.you': '(You)', 'admin.you': '(Siz)',
'admin.editUser': 'Edit User', 'admin.editUser': 'Kullanıcıyı Düzenle',
'admin.newPassword': 'New Password', 'admin.newPassword': 'Yeni Şifre',
'admin.newPasswordHint': 'Leave empty to keep current password', 'admin.newPasswordHint': 'Mevcut şifreyi korumak için boş bırakın',
'admin.deleteUser': 'admin.deleteUser':
'Delete user "{name}"? All trips will be permanently deleted.', '"{name}" kullanıcısı silinsin mi? Tüm geziler kalıcı olarak silinecek.',
'admin.deleteUserTitle': 'Delete user', 'admin.deleteUserTitle': 'Kullanıcıyı sil',
'admin.newPasswordPlaceholder': 'Enter new password…', 'admin.newPasswordPlaceholder': 'Yeni şifreyi girin…',
'admin.toast.loadError': 'Failed to load admin data', 'admin.toast.loadError': 'Yönetici verileri yüklenemedi',
'admin.toast.userUpdated': 'User updated', 'admin.toast.userUpdated': 'Kullanıcı güncellendi',
'admin.toast.updateError': 'Failed to update', 'admin.toast.updateError': 'Güncelleme başarısız oldu',
'admin.toast.userDeleted': 'User deleted', 'admin.toast.userDeleted': 'Kullanıcı silindi',
'admin.toast.deleteError': 'Failed to delete', 'admin.toast.deleteError': 'Silinemedi',
'admin.toast.cannotDeleteSelf': 'Cannot delete your own account', 'admin.toast.cannotDeleteSelf': 'Kendi hesabınızı silemiyorum',
'admin.toast.userCreated': 'User created', 'admin.toast.userCreated': 'Kullanıcı oluşturuldu',
'admin.toast.createError': 'Failed to create user', 'admin.toast.createError': 'Kullanıcı oluşturulamadı',
'admin.toast.fieldsRequired': 'Username, email and password are required', 'admin.toast.fieldsRequired': 'Kullanıcı adı, e-posta ve şifre gerekli',
'admin.createUser': 'Create User', 'admin.createUser': 'Kullanıcı Oluştur',
'admin.invite.title': 'Invite Links', 'admin.invite.title': 'Bağlantıları Davet Et',
'admin.invite.subtitle': 'Create one-time registration links', 'admin.invite.subtitle': 'Tek seferlik kayıt bağlantıları oluşturun',
'admin.invite.create': 'Create Link', 'admin.invite.create': 'Bağlantı Oluştur',
'admin.invite.createAndCopy': 'Create & Copy', 'admin.invite.createAndCopy': 'Oluştur ve Kopyala',
'admin.invite.empty': 'No invite links created yet', 'admin.invite.empty': 'Henüz davet bağlantısı oluşturulmadı',
'admin.invite.maxUses': 'Max. Uses', 'admin.invite.maxUses': 'Maks. Kullanım Alanları',
'admin.invite.expiry': 'Expires after', 'admin.invite.expiry': 'Şu tarihten sonra sona erer:',
'admin.invite.uses': 'used', 'admin.invite.uses': 'kullanılmış',
'admin.invite.expiresAt': 'expires', 'admin.invite.expiresAt': 'süresi doluyor',
'admin.invite.createdBy': 'by', 'admin.invite.createdBy': 'ile',
'admin.invite.active': 'Active', 'admin.invite.active': 'Aktif',
'admin.invite.expired': 'Expired', 'admin.invite.expired': 'Günü geçmiş',
'admin.invite.usedUp': 'Used up', 'admin.invite.usedUp': 'Kullanılmış',
'admin.invite.copied': 'Invite link copied to clipboard', 'admin.invite.copied': 'Davet bağlantısı panoya kopyalandı',
'admin.invite.copyLink': 'Copy link', 'admin.invite.copyLink': 'Bağlantıyı kopyala',
'admin.invite.deleted': 'Invite link deleted', 'admin.invite.deleted': 'Davet bağlantısı silindi',
'admin.invite.createError': 'Failed to create invite link', 'admin.invite.createError': 'Davet bağlantısı oluşturulamadı',
'admin.invite.deleteError': 'Failed to delete invite link', 'admin.invite.deleteError': 'Davet bağlantısı silinemedi',
'admin.tabs.settings': 'Ayarlar', 'admin.tabs.settings': 'Ayarlar',
'admin.allowRegistration': 'Allow Registration', 'admin.allowRegistration': 'Kayda İzin Ver',
'admin.allowRegistrationHint': 'New users can register themselves', 'admin.allowRegistrationHint':
'admin.authMethods': 'Authentication Methods', 'Yeni kullanıcılar kendileri kayıt olabilirler',
'admin.passwordLogin': 'Password Login', 'admin.authMethods': 'Kimlik Doğrulama Yöntemleri',
'admin.passwordLoginHint': 'Allow users to sign in with email and password', 'admin.passwordLogin': 'Şifre Girişi',
'admin.passwordRegistration': 'Password Registration', 'admin.passwordLoginHint':
'Kullanıcıların e-posta ve şifreyle oturum açmasına izin ver',
'admin.passwordRegistration': 'Şifre Kaydı',
'admin.passwordRegistrationHint': 'admin.passwordRegistrationHint':
'Allow new users to register with email and password', 'Yeni kullanıcıların e-posta ve şifreyle kaydolmasına izin ver',
'admin.oidcLogin': 'SSO Login', 'admin.oidcLogin': 'TOA Girişi',
'admin.oidcLoginHint': 'Allow users to sign in with SSO', 'admin.oidcLoginHint': 'Kullanıcıların SSO ile oturum açmasına izin Ver',
'admin.oidcRegistration': 'SSO Auto-Provisioning', 'admin.oidcRegistration': 'SSO Otomatik Temel Hazırlığı',
'admin.oidcRegistrationHint': 'admin.oidcRegistrationHint':
'Automatically create accounts for new SSO users', 'Yeni SSO kullanıcıları için otomatik olarak hesap oluşturun',
'admin.envOverrideHint': 'admin.envOverrideHint':
'Password login settings are controlled by the OIDC_ONLY environment variable and cannot be changed here.', 'Şifre oturum açma ayarları OIDC_ONLY ortam değişkeni tarafından kontrol edilir ve burada değiştirilemez.',
'admin.lockoutWarning': 'At least one login method must remain enabled', 'admin.lockoutWarning': 'En az bir oturum açma yöntemi etkin kalmalıdır',
'admin.requireMfa': 'Require two-factor authentication (2FA)', 'admin.requireMfa': 'İki faktörlü kimlik doğrulama (2FA) gerektir',
'admin.requireMfaHint': 'admin.requireMfaHint':
'Users without 2FA must complete setup in Settings before using the app.', "2FA'sı olmayan kullanıcıların uygulamayı kullanmadan önce Ayarlar'da kurulumu tamamlaması gerekir.",
'admin.apiKeys': 'API Keys', 'admin.apiKeys': 'API Anahtarları',
'admin.apiKeysHint': 'admin.apiKeysHint':
'Optional. Enables extended place data like photos and weather.', 'İsteğe bağlı. Fotoğraflar ve hava durumu gibi genişletilmiş yer verilerini etkinleştirir.',
'admin.mapsKey': 'Google Maps API Key', 'admin.mapsKey': 'Google Haritalar API Anahtarı',
'admin.mapsKeyHint': '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': '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.', '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': 'Recommended', 'admin.recommended': 'Tavsiye edilen',
'admin.weatherKey': 'OpenWeatherMap API Key', 'admin.weatherKey': 'OpenWeatherMap API Anahtarı',
'admin.weatherKeyHint': 'For weather data. Free at openweathermap.org', 'admin.weatherKeyHint':
'admin.validateKey': 'Test', "Hava durumu verileri için. openweathermap.org'da ücretsiz",
'admin.keyValid': 'Connected', 'admin.validateKey': 'Test et',
'admin.keyInvalid': 'Invalid', 'admin.keyValid': 'Bağlı',
'admin.keySaved': 'API keys saved', 'admin.keyInvalid': 'Geçersiz',
'admin.oidcTitle': 'Single Sign-On (OIDC)', 'admin.keySaved': 'API anahtarları kaydedildi',
'admin.oidcTitle': 'Tek Oturum Açma (OIDC)',
'admin.oidcSubtitle': 'admin.oidcSubtitle':
'Allow login via external providers like Google, Apple, Authentik or Keycloak.', 'Google, Apple, Authentik veya Keycloak gibi harici sağlayıcılar aracılığıyla oturum açmaya izin verin.',
'admin.oidcDisplayName': 'Display Name', 'admin.oidcDisplayName': 'Ekran Adı',
'admin.oidcIssuer': 'Issuer URL', 'admin.oidcIssuer': "Veren URL'si",
'admin.oidcIssuerHint': 'admin.oidcIssuerHint':
'The OpenID Connect Issuer URL of the provider. e.g. https://accounts.google.com', "Sağlayıcının OpenID Connect Veren URL'si. örneğin https://accounts.google.com",
'admin.oidcSaved': 'OIDC configuration saved', 'admin.oidcSaved': 'OIDC yapılandırması kaydedildi',
'admin.oidcOnlyMode': 'Disable password authentication', 'admin.oidcOnlyMode': 'Parola kimlik doğrulamasını devre dışı bırak',
'admin.oidcOnlyModeHint': 'admin.oidcOnlyModeHint':
'When enabled, only SSO login is permitted. Password-based login and registration are blocked.', 'Etkinleştirildiğinde yalnızca SSO girişine izin verilir. Şifre tabanlı oturum açma ve kayıt engellenir.',
'admin.fileTypes': 'Allowed File Types', 'admin.fileTypes': 'İzin Verilen Dosya Türleri',
'admin.fileTypesHint': 'Configure which file types users can upload.', 'admin.fileTypesHint':
'Kullanıcıların hangi dosya türlerini yükleyebileceğini yapılandırın.',
'admin.fileTypesFormat': 'admin.fileTypesFormat':
'Comma-separated extensions (e.g. jpg,png,pdf,doc). Use * to allow all types.', 'Virgülle ayrılmış uzantılar (ör. jpg,png,pdf,doc). Tüm türlere izin vermek için * kullanın.',
'admin.fileTypesSaved': 'File type settings saved', 'admin.fileTypesSaved': 'Dosya türü ayarları kaydedildi',
'admin.placesPhotos.title': 'Place Photos', 'admin.placesPhotos.title': 'Fotoğrafları Yerleştir',
'admin.placesPhotos.subtitle': 'admin.placesPhotos.subtitle':
'Fetch photos from the Google Places API. Disable to save API quota. Wikimedia photos are unaffected.', "Fotoğrafları Google Rehber API'sinden alın. API kotasını kaydetmeyi devre dışı bırakın. Wikimedia fotoğrafları etkilenmez.",
'admin.placesAutocomplete.title': 'Place Autocomplete', 'admin.placesAutocomplete.title': 'Otomatik Tamamlamayı Yerleştir',
'admin.placesAutocomplete.subtitle': 'admin.placesAutocomplete.subtitle':
'Use the Google Places API for search suggestions. Disable to save API quota.', "Arama önerileri için Google Rehber API'sini kullanın. API kotasını kaydetmeyi devre dışı bırakın.",
'admin.placesDetails.title': 'Place Details', 'admin.placesDetails.title': 'Yer Detayları',
'admin.placesDetails.subtitle': 'admin.placesDetails.subtitle':
'Fetch detailed place information (hours, rating, website) from the Google Places API. Disable to save API quota.', "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': 'Bag Tracking', 'admin.bagTracking.title': 'Çanta Takibi',
'admin.bagTracking.subtitle': 'admin.bagTracking.subtitle':
'Enable weight and bag assignment for packing items', 'Paketleme öğeleri için ağırlık ve torba atamasını etkinleştirin',
'admin.collab.chat.title': 'Chat', 'admin.collab.chat.title': 'Sohbet',
'admin.collab.chat.subtitle': 'Real-time messaging for trip collaboration', 'admin.collab.chat.subtitle':
'admin.collab.notes.title': 'Notes', 'Seyahat işbirliği için gerçek zamanlı mesajlaşma',
'admin.collab.notes.subtitle': 'Shared notes and documents', 'admin.collab.notes.title': 'Notlar',
'admin.collab.polls.title': 'Polls', 'admin.collab.notes.subtitle': 'Paylaşılan notlar ve belgeler',
'admin.collab.polls.subtitle': 'Group polls and voting', 'admin.collab.polls.title': 'Anketler',
'admin.collab.polls.subtitle': 'Grup anketleri ve oylama',
'admin.collab.whatsnext.title': "What's Next", 'admin.collab.whatsnext.title': "What's Next",
'admin.collab.whatsnext.subtitle': 'Activity suggestions and next steps', 'admin.collab.whatsnext.subtitle': 'Etkinlik önerileri ve sonraki adımlar',
'admin.tabs.config': 'Personalization', 'admin.tabs.config': 'Kişiselleştirme',
'admin.tabs.defaults': 'User Defaults', 'admin.tabs.defaults': 'Kullanıcı Varsayılanları',
'admin.defaultSettings.title': 'Default User Settings', 'admin.defaultSettings.title': 'Varsayılan Kullanıcı Ayarları',
'admin.defaultSettings.description': 'admin.defaultSettings.description':
'Set instance-wide defaults. Users who have not changed a setting will see these values. Their own changes always take priority.', 'Ö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': 'Default saved', 'admin.defaultSettings.saved': 'Varsayılan kaydedildi',
'admin.defaultSettings.reset': 'Reset to built-in default', 'admin.defaultSettings.reset': 'Yerleşik varsayılana sıfırla',
'admin.defaultSettings.resetToBuiltIn': 'reset', 'admin.defaultSettings.resetToBuiltIn': 'sıfırlama',
'admin.tabs.templates': 'Packing Templates', 'admin.tabs.templates': 'Paketleme Şablonları',
'admin.packingTemplates.title': 'Packing Templates', 'admin.packingTemplates.title': 'Paketleme Şablonları',
'admin.packingTemplates.subtitle': 'admin.packingTemplates.subtitle':
'Create reusable packing lists for your trips', 'Seyahatleriniz için yeniden kullanılabilir paketleme listeleri oluşturun',
'admin.packingTemplates.create': 'New Template', 'admin.packingTemplates.create': 'Yeni Şablon',
'admin.packingTemplates.namePlaceholder': 'admin.packingTemplates.namePlaceholder': 'Şablon adı (ör. Plaj Tatili)',
'Template name (e.g. Beach Holiday)', 'admin.packingTemplates.empty': 'Henüz şablon oluşturulmadı',
'admin.packingTemplates.empty': 'No templates created yet', 'admin.packingTemplates.items': 'öğeler',
'admin.packingTemplates.items': 'items', 'admin.packingTemplates.categories': 'kategoriler',
'admin.packingTemplates.categories': 'categories', 'admin.packingTemplates.itemName': 'Öğe adı',
'admin.packingTemplates.itemName': 'Item name', 'admin.packingTemplates.itemCategory': 'Kategori',
'admin.packingTemplates.itemCategory': 'Category', 'admin.packingTemplates.categoryName': 'Kategori adı (ör. Giyim)',
'admin.packingTemplates.categoryName': 'Category name (e.g. Clothing)', 'admin.packingTemplates.addCategory': 'Kategori ekle',
'admin.packingTemplates.addCategory': 'Add category', 'admin.packingTemplates.created': 'Şablon oluşturuldu',
'admin.packingTemplates.created': 'Template created', 'admin.packingTemplates.deleted': 'Şablon silindi',
'admin.packingTemplates.deleted': 'Template deleted', 'admin.packingTemplates.loadError': 'Şablonlar yüklenemedi',
'admin.packingTemplates.loadError': 'Failed to load templates', 'admin.packingTemplates.createError': 'Şablon oluşturulamadı',
'admin.packingTemplates.createError': 'Failed to create template', 'admin.packingTemplates.deleteError': 'Şablon silinemedi',
'admin.packingTemplates.deleteError': 'Failed to delete template', 'admin.packingTemplates.saveError': 'Kaydedilemedi',
'admin.packingTemplates.saveError': 'Failed to save', 'admin.tabs.addons': 'Eklentiler',
'admin.tabs.addons': 'Addons', 'admin.addons.title': 'Eklentiler',
'admin.addons.title': 'Addons',
'admin.addons.subtitle': 'admin.addons.subtitle':
'Enable or disable features to customize your TREK experience.', 'TREK deneyiminizi özelleştirmek için özellikleri etkinleştirin veya devre dışı bırakın.',
'admin.addons.catalog.packing.name': 'Lists', 'admin.addons.catalog.packing.name': 'Listeler',
'admin.addons.catalog.packing.description': 'admin.addons.catalog.packing.description':
'Packing lists and to-do tasks for your trips', 'Seyahatleriniz için paket listeleri ve yapılacak işler',
'admin.addons.catalog.budget.name': 'Budget', 'admin.addons.catalog.budget.name': 'Bütçe',
'admin.addons.catalog.budget.description': 'admin.addons.catalog.budget.description':
'Track expenses and plan your trip budget', 'Harcamaları takip edin ve seyahat bütçenizi planlayın',
'admin.addons.catalog.documents.name': 'Documents', 'admin.addons.catalog.documents.name': 'Belgeler',
'admin.addons.catalog.documents.description': 'admin.addons.catalog.documents.description':
'Store and manage travel documents', 'Seyahat belgelerini saklayın ve yönetin',
'admin.addons.catalog.vacay.name': 'Vacay', 'admin.addons.catalog.vacay.name': 'Tatil',
'admin.addons.catalog.vacay.description': '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.name': 'Atlas',
'admin.addons.catalog.atlas.description': 'admin.addons.catalog.atlas.description':
'World map with visited countries and travel stats', 'Ziyaret edilen ülkeleri ve seyahat istatistiklerini içeren dünya haritası',
'admin.addons.catalog.collab.name': 'Collab', 'admin.addons.catalog.collab.name': 'İş birliği',
'admin.addons.catalog.collab.description': 'admin.addons.catalog.collab.description':
'Real-time notes, polls, and chat for trip planning', 'Seyahat planlaması için gerçek zamanlı notlar, anketler ve sohbet',
'admin.addons.catalog.memories.name': 'Photos (Immich)', 'admin.addons.catalog.memories.name': 'Fotoğraflar (Immich)',
'admin.addons.catalog.memories.description': '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.name': 'MCP',
'admin.addons.catalog.mcp.description': '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': 'admin.addons.subtitleBefore':
'Enable or disable features to customize your ', 'Kişiselleştirmenizi özelleştirmek için özellikleri etkinleştirin veya devre dışı bırakın.',
'admin.addons.subtitleAfter': ' experience.', 'admin.addons.subtitleAfter': 'deneyim.',
'admin.addons.enabled': 'Enabled', 'admin.addons.enabled': 'Etkinleştirilmiş',
'admin.addons.disabled': 'Disabled', 'admin.addons.disabled': 'Engelli',
'admin.addons.type.trip': 'Trip', 'admin.addons.type.trip': 'Seyahat',
'admin.addons.type.global': 'Global', 'admin.addons.type.global': 'Küresel',
'admin.addons.type.integration': 'Integration', 'admin.addons.type.integration': 'Entegrasyon',
'admin.addons.tripHint': 'Available as a tab within each trip', 'admin.addons.tripHint': 'Her yolculukta bir sekme olarak mevcuttur',
'admin.addons.globalHint': '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': 'admin.addons.integrationHint':
'Backend services and API integrations with no dedicated page', 'Özel bir sayfa olmadan arka uç hizmetleri ve API entegrasyonları',
'admin.addons.toast.updated': 'Addon updated', 'admin.addons.toast.updated': 'Eklenti güncellendi',
'admin.addons.toast.error': 'Failed to update addon', 'admin.addons.toast.error': 'Eklenti güncellenemedi',
'admin.addons.noAddons': 'No addons available', 'admin.addons.noAddons': 'Kullanılabilir eklenti yok',
'admin.weather.title': 'Weather Data', 'admin.weather.title': 'Hava Durumu Verileri',
'admin.weather.badge': 'Since March 24, 2026', 'admin.weather.badge': "24 Mart 2026'dan beri",
'admin.weather.description': '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.', "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-day forecast', 'admin.weather.forecast': '16 günlük tahmin',
'admin.weather.forecastDesc': 'Previously 5 days (OpenWeatherMap)', 'admin.weather.forecastDesc': 'Daha önce 5 gün (OpenWeatherMap)',
'admin.weather.climate': 'Historical climate data', 'admin.weather.climate': 'Geçmiş iklim verileri',
'admin.weather.climateDesc': 'admin.weather.climateDesc':
'Averages from the last 85 years for days beyond the 16-day forecast', '16 günlük tahminin ötesindeki günler için son 85 yılın ortalamaları',
'admin.weather.requests': '10,000 requests / day', 'admin.weather.requests': '10.000 istek / gün',
'admin.weather.requestsDesc': 'Free, no API key required', 'admin.weather.requestsDesc': 'Ücretsiz, API anahtarı gerekmez',
'admin.weather.locationHint': '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.', '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 Access', 'admin.tabs.mcpTokens': 'MCP Erişimi',
'admin.mcpTokens.title': 'MCP Access', 'admin.mcpTokens.title': 'MCP Erişimi',
'admin.mcpTokens.subtitle': 'admin.mcpTokens.subtitle':
'Manage OAuth sessions and API tokens across all users', 'Tüm Kullanıcılar genelinde OAuth Oturumlarını ve API belirteçlerini yönetin',
'admin.mcpTokens.sectionTitle': 'API Tokens', 'admin.mcpTokens.sectionTitle': 'API Belirteçleri',
'admin.mcpTokens.owner': 'Owner', 'admin.mcpTokens.owner': 'Mal sahibi',
'admin.mcpTokens.tokenName': 'Token Name', 'admin.mcpTokens.tokenName': 'Jeton Adı',
'admin.mcpTokens.created': 'Created', 'admin.mcpTokens.created': 'Oluşturuldu',
'admin.mcpTokens.lastUsed': 'Last Used', 'admin.mcpTokens.lastUsed': 'Son Kullanılan',
'admin.mcpTokens.never': 'Never', 'admin.mcpTokens.never': 'Asla',
'admin.mcpTokens.empty': 'No MCP tokens have been created yet', 'admin.mcpTokens.empty': 'Henüz MCP tokenı oluşturulmadı',
'admin.mcpTokens.deleteTitle': 'Delete Token', 'admin.mcpTokens.deleteTitle': 'Jetonu Sil',
'admin.mcpTokens.deleteMessage': 'admin.mcpTokens.deleteMessage':
'This will revoke the token immediately. The user will lose MCP access through this token.', 'Bu, jetonu anında iptal edecektir. Kullanıcı bu belirteç aracılığıyla MCP erişimini kaybedecektir.',
'admin.mcpTokens.deleteSuccess': 'Token deleted', 'admin.mcpTokens.deleteSuccess': 'Jeton silindi',
'admin.mcpTokens.deleteError': 'Failed to delete token', 'admin.mcpTokens.deleteError': 'Jeton silinemedi',
'admin.mcpTokens.loadError': 'Failed to load tokens', 'admin.mcpTokens.loadError': 'Jetonlar yüklenemedi',
'admin.oauthSessions.sectionTitle': 'OAuth Sessions', 'admin.oauthSessions.sectionTitle': 'OAuth Oturumları',
'admin.oauthSessions.clientName': 'Client', 'admin.oauthSessions.clientName': 'Müşteri',
'admin.oauthSessions.owner': 'Owner', 'admin.oauthSessions.owner': 'Mal sahibi',
'admin.oauthSessions.scopes': 'Scopes', 'admin.oauthSessions.scopes': 'Kapsamlar',
'admin.oauthSessions.created': 'Created', 'admin.oauthSessions.created': 'Oluşturuldu',
'admin.oauthSessions.empty': 'No active OAuth sessions', 'admin.oauthSessions.empty': 'Aktif OAuth Oturumu yok',
'admin.oauthSessions.revokeTitle': 'Revoke Session', 'admin.oauthSessions.revokeTitle': 'Oturumu İptal Et',
'admin.oauthSessions.revokeMessage': 'admin.oauthSessions.revokeMessage':
'This will revoke the OAuth session immediately. The client will lose MCP access.', 'Bu, OAuth oturumunu hemen iptal edecektir. İstemci MCP erişimini kaybedecek.',
'admin.oauthSessions.revokeSuccess': 'Session revoked', 'admin.oauthSessions.revokeSuccess': 'Oturum iptal edildi',
'admin.oauthSessions.revokeError': 'Failed to revoke session', 'admin.oauthSessions.revokeError': 'Oturum iptal edilemedi',
'admin.oauthSessions.loadError': 'Failed to load OAuth sessions', 'admin.oauthSessions.loadError': 'OAuth oturumları yüklenemedi',
'admin.tabs.github': 'GitHub', 'admin.tabs.github': 'GitHub',
'admin.audit.subtitle': 'admin.audit.subtitle':
'Security-sensitive and administration events (backups, users, MFA, settings).', 'Güvenlik açısından hassas olaylar ve yönetim olayları (yedeklemeler, kullanıcılar, MFA, ayarlar).',
'admin.audit.empty': 'No audit entries yet.', 'admin.audit.empty': 'Henüz denetim girişi yok.',
'admin.audit.refresh': 'Refresh', 'admin.audit.refresh': 'Yenile',
'admin.audit.loadMore': 'Load more', 'admin.audit.loadMore': 'Daha fazlasını yükle',
'admin.audit.showing': '{count} loaded · {total} total', 'admin.audit.showing': '{count} yüklendi · {total} toplam',
'admin.audit.col.time': 'Time', 'admin.audit.col.time': 'Zaman',
'admin.audit.col.user': 'User', 'admin.audit.col.user': 'Kullanıcı',
'admin.audit.col.action': 'Action', 'admin.audit.col.action': 'Aksiyon',
'admin.audit.col.resource': 'Resource', 'admin.audit.col.resource': 'Kaynak',
'admin.audit.col.ip': 'IP', 'admin.audit.col.ip': 'IP',
'admin.audit.col.details': 'Details', 'admin.audit.col.details': 'Detaylar',
'admin.github.title': 'Release History', 'admin.github.title': 'Sürüm Geçmişi',
'admin.github.subtitle': 'Latest updates from {repo}', 'admin.github.subtitle': "{repo}'dan en son güncellemeler",
'admin.github.latest': 'Latest', 'admin.github.latest': 'En sonuncu',
'admin.github.prerelease': 'Pre-release', 'admin.github.prerelease': 'Ön sürüm',
'admin.github.showDetails': 'Show details', 'admin.github.showDetails': 'Ayrıntıları göster',
'admin.github.hideDetails': 'Hide details', 'admin.github.hideDetails': 'Ayrıntıları gizle',
'admin.github.loadMore': 'Load more', 'admin.github.loadMore': 'Daha fazlasını yükle',
'admin.github.loading': 'Loading...', 'admin.github.loading': 'Yükleniyor...',
'admin.github.error': 'Failed to load releases', 'admin.github.error': 'Sürümler yüklenemedi',
'admin.github.by': 'by', 'admin.github.by': 'ile',
'admin.github.support': 'Helps me keep building TREK', 'admin.github.support': "TREK'i geliştirmeye devam etmeme yardımcı oluyor",
'admin.update.available': 'Update available', 'admin.update.available': 'Güncelleme mevcut',
'admin.update.text': 'admin.update.text': 'TREK {versiyon} mevcut. {current} çalıştırıyorsunuz.',
'TREK {version} is available. You are running {current}.', 'admin.update.button': "GitHub'da görüntüle",
'admin.update.button': 'View on GitHub', 'admin.update.install': 'Güncellemeyi Yükle',
'admin.update.install': 'Install Update', 'admin.update.confirmTitle': 'Güncelleme Yüklensin mi?',
'admin.update.confirmTitle': 'Install Update?',
'admin.update.confirmText': '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': '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': 'admin.update.warning':
'The app will be briefly unavailable during the restart.', 'Yeniden başlatma sırasında uygulama kısa süreliğine kullanılamayacaktır.',
'admin.update.confirm': 'Update Now', 'admin.update.confirm': 'Şimdi Güncelle',
'admin.update.installing': 'Updating…', 'admin.update.installing': 'Güncelleniyor…',
'admin.update.success': 'Update installed! Server is restarting…', 'admin.update.success': 'Güncelleme yüklendi! Sunucu yeniden başlatılıyor…',
'admin.update.failed': 'Update failed', 'admin.update.failed': 'Güncelleme başarısız oldu',
'admin.update.backupHint': 'We recommend creating a backup before updating.', 'admin.update.backupHint':
'admin.update.backupLink': 'Go to Backup', 'Güncellemeden önce bir yedek oluşturmanızı öneririz.',
'admin.update.howTo': 'How to Update', 'admin.update.backupLink': 'Yedeklemeye Git',
'admin.update.howTo': 'Nasıl Güncellenir?',
'admin.update.dockerText': 'admin.update.dockerText':
'Your TREK instance runs in Docker. To update to {version}, run the following commands on your server:', "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': 'Please reload the page in a few seconds.', 'admin.update.reloadHint':
'admin.tabs.permissions': 'Permissions', 'Lütfen birkaç saniye içinde sayfayı yeniden yükleyin.',
'admin.addons.catalog.journey.name': 'Journey', 'admin.tabs.permissions': 'İzinler',
'admin.addons.catalog.journey.name': 'Seyahat',
'admin.addons.catalog.journey.description': '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; export default admin;
+1 -1
View File
@@ -1,6 +1,6 @@
import type { TranslationStrings } from '../types'; import type { TranslationStrings } from '../types';
const airport: TranslationStrings = { const airport: TranslationStrings = {
'airport.searchPlaceholder': 'Airport code or city (e.g. FRA)', 'airport.searchPlaceholder': 'Havaalanı kodu veya şehir (ör. FRA)',
}; };
export default airport; export default airport;
+55 -53
View File
@@ -1,58 +1,60 @@
import type { TranslationStrings } from '../types'; import type { TranslationStrings } from '../types';
const atlas: TranslationStrings = { const atlas: TranslationStrings = {
'atlas.subtitle': 'Your travel footprint around the world', 'atlas.subtitle': 'Dünya çapında seyahat iziniz',
'atlas.countries': 'Countries', 'atlas.countries': 'Ülkeler',
'atlas.trips': 'Trips', 'atlas.trips': 'Geziler',
'atlas.places': 'Places', 'atlas.places': 'Yer',
'atlas.unmark': 'Remove', 'atlas.unmark': 'Kaldırmak',
'atlas.confirmMark': 'Mark this country as visited?', 'atlas.confirmMark': 'Bu ülke ziyaret edildi olarak işaretlensin mi?',
'atlas.confirmUnmark': 'Remove this country from your visited list?', 'atlas.confirmUnmark': 'Bu ülke ziyaret ettiğiniz listeden kaldırılsın mı?',
'atlas.confirmUnmarkRegion': 'Remove this region from your visited list?', 'atlas.confirmUnmarkRegion':
'atlas.markVisited': 'Mark as visited', 'Bu bölge ziyaret ettiğiniz listeden kaldırılsın mı?',
'atlas.markVisitedHint': 'Add this country to your visited list', 'atlas.markVisited': 'Ziyaret edildi olarak işaretle',
'atlas.markRegionVisitedHint': 'Add this region to your visited list', 'atlas.markVisitedHint': 'Bu ülkeyi ziyaret ettiğiniz listeye ekleyin',
'atlas.addToBucket': 'Add to bucket list', 'atlas.markRegionVisitedHint': 'Bu bölgeyi ziyaret ettiğiniz listeye ekleyin',
'atlas.addPoi': 'Add place', 'atlas.addToBucket': 'Yapılacaklar listesine ekle',
'atlas.searchCountry': 'Search a country...', 'atlas.addPoi': 'Yer ekle',
'atlas.bucketNamePlaceholder': 'Name (country, city, place...)', 'atlas.searchCountry': 'Bir ülkeyi arayın...',
'atlas.month': 'Month', 'atlas.bucketNamePlaceholder': 'İsim (ülke, şehir, yer...)',
'atlas.year': 'Year', 'atlas.month': 'Ay',
'atlas.addToBucketHint': 'Save as a place you want to visit', 'atlas.year': 'Yıl',
'atlas.bucketWhen': 'When do you plan to visit?', 'atlas.addToBucketHint': 'Ziyaret etmek istediğiniz yer olarak kaydedin',
'atlas.statsTab': 'Stats', 'atlas.bucketWhen': 'Ne zaman ziyaret etmeyi planlıyorsunuz?',
'atlas.bucketTab': 'Bucket List', 'atlas.statsTab': 'İstatistikler',
'atlas.addBucket': 'Add to bucket list', 'atlas.bucketTab': 'Yapılacaklar Listesi',
'atlas.bucketNotesPlaceholder': 'Notes (optional)', 'atlas.addBucket': 'Yapılacaklar listesine ekle',
'atlas.bucketEmpty': 'Your bucket list is empty', 'atlas.bucketNotesPlaceholder': 'Notlar (isteğe bağlı)',
'atlas.bucketEmptyHint': 'Add places you dream of visiting', 'atlas.bucketEmpty': 'Yapılacaklar listeniz boş',
'atlas.days': 'Days', 'atlas.bucketEmptyHint': 'Ziyaret etmeyi hayal ettiğiniz yerleri ekleyin',
'atlas.visitedCountries': 'Visited Countries', 'atlas.days': 'Günler',
'atlas.cities': 'Cities', 'atlas.visitedCountries': 'Ziyaret Edilen Ülkeler',
'atlas.noData': 'No travel data yet', 'atlas.cities': 'Şehirler',
'atlas.noDataHint': 'Create a trip and add places to see your world map', 'atlas.noData': 'Henüz seyahat verisi yok',
'atlas.lastTrip': 'Last trip', 'atlas.noDataHint':
'atlas.nextTrip': 'Next trip', 'Bir gezi oluşturun ve dünya haritanızı göreceğiniz yerleri ekleyin',
'atlas.daysLeft': 'days left', 'atlas.lastTrip': 'Son yolculuk',
'atlas.streak': 'Streak', 'atlas.nextTrip': 'Sonraki gezi',
'atlas.years': 'years', 'atlas.daysLeft': 'kalan günler',
'atlas.yearInRow': 'year in a row', 'atlas.streak': 'Rüzgâr gibi geçmek',
'atlas.yearsInRow': 'years in a row', 'atlas.years': 'yıllar',
'atlas.tripIn': 'trip in', 'atlas.yearInRow': 'yıl üst üste',
'atlas.tripsIn': 'trips in', 'atlas.yearsInRow': 'yıllar üst üste',
'atlas.since': 'since', 'atlas.tripIn': 'yolculuk',
'atlas.europe': 'Europe', 'atlas.tripsIn': 'geziler',
'atlas.asia': 'Asia', 'atlas.since': 'o zamandan beri',
'atlas.northAmerica': 'N. America', 'atlas.europe': 'Avrupa',
'atlas.southAmerica': 'S. America', 'atlas.asia': 'Asya',
'atlas.africa': 'Africa', 'atlas.northAmerica': 'Kuzey Amerika',
'atlas.oceania': 'Oceania', 'atlas.southAmerica': 'G. Amerika',
'atlas.other': 'Other', 'atlas.africa': 'Afrika',
'atlas.firstVisit': 'First trip', 'atlas.oceania': 'Okyanusya',
'atlas.lastVisitLabel': 'Last trip', 'atlas.other': 'Diğer',
'atlas.tripSingular': 'Trip', 'atlas.firstVisit': 'İlk yolculuk',
'atlas.tripPlural': 'Trips', 'atlas.lastVisitLabel': 'Son yolculuk',
'atlas.placeVisited': 'Place visited', 'atlas.tripSingular': 'Seyahat',
'atlas.placesVisited': 'Places visited', 'atlas.tripPlural': 'Geziler',
'atlas.placeVisited': 'Ziyaret edilen yer',
'atlas.placesVisited': 'Ziyaret edilen yerler',
}; };
export default atlas; export default atlas;
+65 -66
View File
@@ -1,77 +1,76 @@
import type { TranslationStrings } from '../types'; import type { TranslationStrings } from '../types';
const backup: TranslationStrings = { const backup: TranslationStrings = {
'backup.title': 'Data Backup', 'backup.title': 'Veri Yedekleme',
'backup.subtitle': 'Database and all uploaded files', 'backup.subtitle': 'Veritabanı ve tüm yüklenen dosyalar',
'backup.refresh': 'Refresh', 'backup.refresh': 'Yenile',
'backup.upload': 'Upload Backup', 'backup.upload': 'Yedek Yükle',
'backup.uploading': 'Uploading…', 'backup.uploading': 'Yükleniyor…',
'backup.create': 'Create Backup', 'backup.create': 'Yedek Oluştur',
'backup.creating': 'Creating…', 'backup.creating': 'Oluşturuluyor…',
'backup.empty': 'No backups yet', 'backup.empty': 'Henüz yedek yok',
'backup.createFirst': 'Create first backup', 'backup.createFirst': 'İlk yedeği oluştur',
'backup.download': 'Download', 'backup.download': 'İndir',
'backup.restore': 'Restore', 'backup.restore': 'Geri yükle',
'backup.confirm.restore': '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': 'backup.confirm.uploadRestore':
'Upload and restore backup file "{name}"?\n\nAll current data will be overwritten.', '"{name}" yedek dosyası yüklenip geri yüklensin mi?\\\\n\\\\nTüm mevcut verilerin üzerine yazılacak.',
'backup.confirm.delete': 'Delete backup "{name}"?', 'backup.confirm.delete': '"{name}" yedeği silinsin mi?',
'backup.toast.loadError': 'Failed to load backups', 'backup.toast.loadError': 'Yedekler yüklenemedi',
'backup.toast.created': 'Backup created successfully', 'backup.toast.created': 'Yedek başarıyla oluşturuldu',
'backup.toast.createError': 'Failed to create backup', 'backup.toast.createError': 'Yedek oluşturulamadı',
'backup.toast.restored': 'Backup restored. Page will reload…', 'backup.toast.restored': 'Yedek geri Yüklendi. Sayfa yenilenecek…',
'backup.toast.restoreError': 'Failed to restore', 'backup.toast.restoreError': 'Geri yükleme başarısız',
'backup.toast.uploadError': 'Failed to upload', 'backup.toast.uploadError': 'Yükleme başarısız oldu',
'backup.toast.deleted': 'Backup deleted', 'backup.toast.deleted': 'Yedek silindi',
'backup.toast.deleteError': 'Failed to delete', 'backup.toast.deleteError': 'Silinemedi',
'backup.toast.downloadError': 'Download failed', 'backup.toast.downloadError': 'İndirme başarısız',
'backup.toast.settingsSaved': 'Auto-backup settings saved', 'backup.toast.settingsSaved': 'Otomatik yedekleme ayarları kaydedildi',
'backup.toast.settingsError': 'Failed to save settings', 'backup.toast.settingsError': 'Ayarlar kaydedilemedi',
'backup.auto.title': 'Auto-Backup', 'backup.auto.title': 'Otomatik yedekleme',
'backup.auto.subtitle': 'Automatic backup on a schedule', 'backup.auto.subtitle': 'Zamanlanmış otomatik yedekleme',
'backup.auto.enable': 'Enable auto-backup', 'backup.auto.enable': 'Otomatik yedeklemeyi etkinleştir',
'backup.auto.enableHint': 'backup.auto.enableHint':
'Backups will be created automatically on the chosen schedule', 'Yedekler seçilen programa göre otomatik oluşturulur',
'backup.auto.interval': 'Interval', 'backup.auto.interval': 'Aralık',
'backup.auto.hour': 'Run at hour', 'backup.auto.hour': 'Çalışma saati',
'backup.auto.hourHint': 'Server local time ({format} format)', 'backup.auto.hourHint': 'Sunucu yerel saati ({format} biçimi)',
'backup.auto.dayOfWeek': 'Day of week', 'backup.auto.dayOfWeek': 'Haftanın günü',
'backup.auto.dayOfMonth': 'Day of month', 'backup.auto.dayOfMonth': 'Ayın günü',
'backup.auto.dayOfMonthHint': 'backup.auto.dayOfMonthHint': 'Tüm aylarla uyumluluk için 128 ile sınırlı',
'Limited to 128 for compatibility with all months', 'backup.auto.scheduleSummary': 'Program',
'backup.auto.scheduleSummary': 'Schedule', 'backup.auto.summaryDaily': 'Her gün saat {hour}:00',
'backup.auto.summaryDaily': 'Every day at {hour}:00', 'backup.auto.summaryWeekly': 'Her {day} saat {hour}:00',
'backup.auto.summaryWeekly': 'Every {day} at {hour}:00', 'backup.auto.summaryMonthly': 'Her ayın {day}. günü saat {hour}:00',
'backup.auto.summaryMonthly': 'Day {day} of every month at {hour}:00', 'backup.auto.envLocked': 'Liman işçisi',
'backup.auto.envLocked': 'Docker',
'backup.auto.envLockedHint': 'backup.auto.envLockedHint':
'Auto-backup is configured via Docker environment variables. To change these settings, update your docker-compose.yml and restart the container.', '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': 'Copy Docker env vars', 'backup.auto.copyEnv': 'Docker Ortam değişkenlerini kopyala',
'backup.auto.envCopied': 'Docker env vars copied to clipboard', 'backup.auto.envCopied': 'Docker ortam değişkenleri panoya kopyalandı',
'backup.auto.keepLabel': 'Delete old backups after', 'backup.auto.keepLabel': 'Eski yedekleri şu süreden sonra sil',
'backup.dow.sunday': 'Sun', 'backup.dow.sunday': 'Güneş',
'backup.dow.monday': 'Mon', 'backup.dow.monday': 'Pazartesi',
'backup.dow.tuesday': 'Tue', 'backup.dow.tuesday': 'Salı',
'backup.dow.wednesday': 'Wed', 'backup.dow.wednesday': 'Çar',
'backup.dow.thursday': 'Thu', 'backup.dow.thursday': 'Per',
'backup.dow.friday': 'Fri', 'backup.dow.friday': 'Cuma',
'backup.dow.saturday': 'Sat', 'backup.dow.saturday': 'Doygunluk',
'backup.interval.hourly': 'Hourly', 'backup.interval.hourly': 'Saatlik',
'backup.interval.daily': 'Daily', 'backup.interval.daily': 'Günlük',
'backup.interval.weekly': 'Weekly', 'backup.interval.weekly': 'Haftalık',
'backup.interval.monthly': 'Monthly', 'backup.interval.monthly': 'Aylık',
'backup.keep.1day': '1 day', 'backup.keep.1day': '1 gün',
'backup.keep.3days': '3 days', 'backup.keep.3days': '3 gün',
'backup.keep.7days': '7 days', 'backup.keep.7days': '7 gün',
'backup.keep.14days': '14 days', 'backup.keep.14days': '14 gün',
'backup.keep.30days': '30 days', 'backup.keep.30days': '30 gün',
'backup.keep.forever': 'Keep forever', 'backup.keep.forever': 'Sonsuza kadar sakla',
'backup.restoreConfirmTitle': 'Restore Backup?', 'backup.restoreConfirmTitle': 'Yedek geri yüklensin mi?',
'backup.restoreWarning': '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': 'backup.restoreTip':
'Tip: Create a backup of the current state before restoring.', 'İpucu: Geri yüklemeden önce mevcut durumun yedeğini oluşturun.',
'backup.restoreConfirm': 'Yes, restore', 'backup.restoreConfirm': 'Evet, geri yükle',
}; };
export default backup; export default backup;
+35 -35
View File
@@ -1,43 +1,43 @@
import type { TranslationStrings } from '../types'; import type { TranslationStrings } from '../types';
const budget: TranslationStrings = { const budget: TranslationStrings = {
'budget.title': 'Budget', 'budget.title': 'Bütçe',
'budget.exportCsv': 'Export CSV', 'budget.exportCsv': 'CSV dışa aktar',
'budget.emptyTitle': 'No budget created yet', 'budget.emptyTitle': 'Henüz bütçe oluşturulmadı',
'budget.emptyText': 'budget.emptyText':
'Create categories and entries to plan your travel budget', 'Seyahat bütçenizi planlamak için kategoriler ve kayıtlar oluşturun',
'budget.emptyPlaceholder': 'Enter category name...', 'budget.emptyPlaceholder': 'Kategori adı girin...',
'budget.createCategory': 'Create Category', 'budget.createCategory': 'Kategori Oluştur',
'budget.category': 'Category', 'budget.category': 'Kategori',
'budget.categoryName': 'Category Name', 'budget.categoryName': 'Kategori Adı',
'budget.table.name': 'Name', 'budget.table.name': 'İsim',
'budget.table.total': 'Total', 'budget.table.total': 'Toplam',
'budget.table.persons': 'Persons', 'budget.table.persons': 'Kişiler',
'budget.table.days': 'Days', 'budget.table.days': 'Günler',
'budget.table.perPerson': 'Per Person', 'budget.table.perPerson': 'Kişi Başı',
'budget.table.perDay': 'Per Day', 'budget.table.perDay': 'Gün Başı',
'budget.table.perPersonDay': 'P. p / Day', 'budget.table.perPersonDay': 'Kişi/gün',
'budget.table.note': 'Note', 'budget.table.note': 'Not',
'budget.table.date': 'Date', 'budget.table.date': 'Tarih',
'budget.newEntry': 'New Entry', 'budget.newEntry': 'Yeni Kayıt',
'budget.defaultEntry': 'New Entry', 'budget.defaultEntry': 'Yeni Kayıt',
'budget.defaultCategory': 'New Category', 'budget.defaultCategory': 'Yeni Kategori',
'budget.total': 'Total', 'budget.total': 'Toplam',
'budget.totalBudget': 'Total Budget', 'budget.totalBudget': 'Toplam Bütçe',
'budget.byCategory': 'By Category', 'budget.byCategory': 'Kategoriye Göre',
'budget.editTooltip': 'Click to edit', 'budget.editTooltip': 'Düzenlemek için tıklayın',
'budget.linkedToReservation': 'Linked to a reservation — edit the name there', 'budget.linkedToReservation': 'Bir rezervasyona bağlı — adı orada düzenleyin',
'budget.confirm.deleteCategory': 'budget.confirm.deleteCategory':
'Are you sure you want to delete the category "{name}" with {count} entries?', '"{name}" kategorisini {count} kayıtla birlikte silmek istediğinizden emin misiniz?',
'budget.deleteCategory': 'Delete Category', 'budget.deleteCategory': 'Kategoriyi Sil',
'budget.perPerson': 'Per Person', 'budget.perPerson': 'Kişi Başı',
'budget.paid': 'Paid', 'budget.paid': 'Ödendi',
'budget.open': 'Open', 'budget.open': 'Açık',
'budget.noMembers': 'No members assigned', 'budget.noMembers': 'Atanmış üye yok',
'budget.settlement': 'Settlement', 'budget.settlement': 'Hesaplaşma',
'budget.settlementInfo': '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.', '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 Balances', 'budget.netBalances': 'Net Bakiyeler',
'budget.categoriesLabel': 'categories', 'budget.categoriesLabel': 'kategoriler',
}; };
export default budget; export default budget;
+20 -20
View File
@@ -1,26 +1,26 @@
import type { TranslationStrings } from '../types'; import type { TranslationStrings } from '../types';
const categories: TranslationStrings = { const categories: TranslationStrings = {
'categories.title': 'Categories', 'categories.title': 'Kategoriler',
'categories.subtitle': 'Manage categories for places', 'categories.subtitle': 'Yer kategorilerini yönetin',
'categories.new': 'New Category', 'categories.new': 'Yeni Kategori',
'categories.empty': 'No categories yet', 'categories.empty': 'Henüz kategori yok',
'categories.namePlaceholder': 'Category name', 'categories.namePlaceholder': 'Kategori adı',
'categories.icon': 'Icon', 'categories.icon': 'Simge',
'categories.color': 'Color', 'categories.color': 'Renk',
'categories.customColor': 'Choose custom color', 'categories.customColor': 'Özel renk seç',
'categories.preview': 'Preview', 'categories.preview': 'Önizleme',
'categories.defaultName': 'Category', 'categories.defaultName': 'Kategori',
'categories.update': 'Update', 'categories.update': 'Güncelle',
'categories.create': 'Create', 'categories.create': 'Oluştur',
'categories.confirm.delete': 'categories.confirm.delete':
'Delete category? Places in this category will not be deleted.', 'Kategori silinsin mi? Bu kategorideki yerler silinmez.',
'categories.toast.loadError': 'Failed to load categories', 'categories.toast.loadError': 'Kategoriler yüklenemedi',
'categories.toast.nameRequired': 'Please enter a name', 'categories.toast.nameRequired': 'Lütfen bir ad girin',
'categories.toast.updated': 'Category updated', 'categories.toast.updated': 'Kategori güncellendi',
'categories.toast.created': 'Category created', 'categories.toast.created': 'Kategori oluşturuldu',
'categories.toast.saveError': 'Failed to save', 'categories.toast.saveError': 'Kaydedilemedi',
'categories.toast.deleted': 'Category deleted', 'categories.toast.deleted': 'Kategori silindi',
'categories.toast.deleteError': 'Failed to delete', 'categories.toast.deleteError': 'Silinemedi',
}; };
export default categories; export default categories;
+66 -66
View File
@@ -1,74 +1,74 @@
import type { TranslationStrings } from '../types'; import type { TranslationStrings } from '../types';
const collab: TranslationStrings = { const collab: TranslationStrings = {
'collab.tabs.chat': 'Chat', 'collab.tabs.chat': 'Sohbet',
'collab.tabs.notes': 'Notes', 'collab.tabs.notes': 'Notlar',
'collab.tabs.polls': 'Polls', 'collab.tabs.polls': 'Anketler',
'collab.whatsNext.title': "What's Next", 'collab.whatsNext.title': "What's Next",
'collab.whatsNext.today': 'Today', 'collab.whatsNext.today': 'Bugün',
'collab.whatsNext.tomorrow': 'Tomorrow', 'collab.whatsNext.tomorrow': 'Yarın',
'collab.whatsNext.empty': 'No upcoming activities', 'collab.whatsNext.empty': 'Yaklaşan etkinlik yok',
'collab.whatsNext.until': 'to', 'collab.whatsNext.until': '',
'collab.whatsNext.emptyHint': 'Activities with times will appear here', 'collab.whatsNext.emptyHint': 'Saati olan etkinlikler burada görünür',
'collab.chat.send': 'Send', 'collab.chat.send': 'Gönder',
'collab.chat.placeholder': 'Type a message...', 'collab.chat.placeholder': 'Mesaj yazın...',
'collab.chat.empty': 'Start the conversation', 'collab.chat.empty': 'Sohbeti başlatın',
'collab.chat.emptyHint': 'Messages are shared with all trip members', 'collab.chat.emptyHint': 'Mesajlar tüm seyahat üyeleriyle paylaşılır',
'collab.chat.emptyDesc': 'collab.chat.emptyDesc':
'Share ideas, plans, and updates with your travel group', 'Seyahat grubunuzla fikir, plan ve güncellemeleri paylaşın',
'collab.chat.today': 'Today', 'collab.chat.today': 'Bugün',
'collab.chat.yesterday': 'Yesterday', 'collab.chat.yesterday': 'Dün',
'collab.chat.deletedMessage': 'deleted a message', 'collab.chat.deletedMessage': 'bir mesajı sildi',
'collab.chat.reply': 'Reply', 'collab.chat.reply': 'Yanıtla',
'collab.chat.loadMore': 'Load older messages', 'collab.chat.loadMore': 'Eski mesajları yükle',
'collab.chat.justNow': 'just now', 'collab.chat.justNow': 'az önce',
'collab.chat.minutesAgo': '{n}m ago', 'collab.chat.minutesAgo': '{n} dk önce',
'collab.chat.hoursAgo': '{n}h ago', 'collab.chat.hoursAgo': '{n} sa önce',
'collab.notes.title': 'Notes', 'collab.notes.title': 'Notlar',
'collab.notes.new': 'New Note', 'collab.notes.new': 'Yeni Not',
'collab.notes.empty': 'No notes yet', 'collab.notes.empty': 'Henüz not yok',
'collab.notes.emptyHint': 'Start capturing ideas and plans', 'collab.notes.emptyHint': 'Fikir ve planları kaydetmeye başlayın',
'collab.notes.all': 'All', 'collab.notes.all': 'Tüm',
'collab.notes.titlePlaceholder': 'Note title', 'collab.notes.titlePlaceholder': 'Not başlığı',
'collab.notes.contentPlaceholder': 'Write something...', 'collab.notes.contentPlaceholder': 'Bir şeyler yazın...',
'collab.notes.categoryPlaceholder': 'Category', 'collab.notes.categoryPlaceholder': 'Kategori',
'collab.notes.newCategory': 'New category...', 'collab.notes.newCategory': 'Yeni kategori...',
'collab.notes.category': 'Category', 'collab.notes.category': 'Kategori',
'collab.notes.noCategory': 'No category', 'collab.notes.noCategory': 'Kategori yok',
'collab.notes.color': 'Color', 'collab.notes.color': 'Renk',
'collab.notes.save': 'Save', 'collab.notes.save': 'Kaydet',
'collab.notes.cancel': 'Cancel', 'collab.notes.cancel': 'İptal etmek',
'collab.notes.edit': 'Edit', 'collab.notes.edit': 'Düzenle',
'collab.notes.delete': 'Delete', 'collab.notes.delete': 'Sil',
'collab.notes.pin': 'Pin', 'collab.notes.pin': 'Sabitle',
'collab.notes.unpin': 'Unpin', 'collab.notes.unpin': 'Sabitlemeyi kaldır',
'collab.notes.daysAgo': '{n}d ago', 'collab.notes.daysAgo': '{n} gün önce',
'collab.notes.categorySettings': 'Manage Categories', 'collab.notes.categorySettings': 'Kategorileri Yönet',
'collab.notes.create': 'Create', 'collab.notes.create': 'Oluştur',
'collab.notes.website': 'Website', 'collab.notes.website': 'Web sitesi',
'collab.notes.websitePlaceholder': 'https://...', 'collab.notes.websitePlaceholder': 'https://...',
'collab.notes.attachFiles': 'Attach files', 'collab.notes.attachFiles': 'Dosya ekle',
'collab.notes.noCategoriesYet': 'No categories yet', 'collab.notes.noCategoriesYet': 'Henüz kategori yok',
'collab.notes.emptyDesc': 'Create a note to get started', 'collab.notes.emptyDesc': 'Başlamak için bir not oluşturun',
'collab.polls.title': 'Polls', 'collab.polls.title': 'Anketler',
'collab.polls.new': 'New Poll', 'collab.polls.new': 'Yeni Anket',
'collab.polls.empty': 'No polls yet', 'collab.polls.empty': 'Henüz anket yok',
'collab.polls.emptyHint': 'Ask the group and vote together', 'collab.polls.emptyHint': 'Gruba sorun ve birlikte oy verin',
'collab.polls.question': 'Question', 'collab.polls.question': 'Soru',
'collab.polls.questionPlaceholder': 'What should we do?', 'collab.polls.questionPlaceholder': 'Ne yapalım?',
'collab.polls.addOption': '+ Add option', 'collab.polls.addOption': '+ Seçenek ekle',
'collab.polls.optionPlaceholder': 'Option {n}', 'collab.polls.optionPlaceholder': 'Seçenek {n}',
'collab.polls.create': 'Create Poll', 'collab.polls.create': 'Anket Oluştur',
'collab.polls.close': 'Close', 'collab.polls.close': 'Kapat',
'collab.polls.closed': 'Closed', 'collab.polls.closed': 'Kapalı',
'collab.polls.votes': '{n} votes', 'collab.polls.votes': '{n} oy',
'collab.polls.vote': '{n} vote', 'collab.polls.vote': '{n} oy',
'collab.polls.multipleChoice': 'Multiple choice', 'collab.polls.multipleChoice': 'Çoklu seçim',
'collab.polls.multiChoice': 'Multiple choice', 'collab.polls.multiChoice': 'Çoklu seçim',
'collab.polls.deadline': 'Deadline', 'collab.polls.deadline': 'Son tarih',
'collab.polls.option': 'Option', 'collab.polls.option': 'Seçenek',
'collab.polls.options': 'Options', 'collab.polls.options': 'Seçenekler',
'collab.polls.delete': 'Delete', 'collab.polls.delete': 'Sil',
'collab.polls.closedSection': 'Closed', 'collab.polls.closedSection': 'Kapalı',
}; };
export default collab; export default collab;
+6 -6
View File
@@ -25,7 +25,7 @@ const common: TranslationStrings = {
'common.upload': 'Yükle', 'common.upload': 'Yükle',
'common.search': 'Ara', 'common.search': 'Ara',
'common.confirm': 'Onayla', 'common.confirm': 'Onayla',
'common.ok': 'OK', 'common.ok': 'Tamam',
'common.yes': 'Evet', 'common.yes': 'Evet',
'common.no': 'Hayır', 'common.no': 'Hayır',
'common.or': 'veya', 'common.or': 'veya',
@@ -36,11 +36,11 @@ const common: TranslationStrings = {
'common.discard': 'Vazgeç', 'common.discard': 'Vazgeç',
'common.name': 'Ad', 'common.name': 'Ad',
'common.email': 'E-posta', 'common.email': 'E-posta',
'common.password': 'Parola', 'common.password': 'Şifre',
'common.saving': 'Kaydediliyor...', 'common.saving': 'Kaydediliyor...',
'common.justNow': 'az önce', 'common.justNow': 'az önce',
'common.hoursAgo': '{count}s önce', 'common.hoursAgo': '{count} sa. önce',
'common.daysAgo': '{count}g önce', 'common.daysAgo': '{count} gün önce',
'common.saved': 'Kaydedildi', 'common.saved': 'Kaydedildi',
'common.update': 'Güncelle', 'common.update': 'Güncelle',
'common.change': 'Değiştir', 'common.change': 'Değiştir',
@@ -49,7 +49,7 @@ const common: TranslationStrings = {
'common.reset': 'Sıfırla', 'common.reset': 'Sıfırla',
'common.expand': 'Genişlet', 'common.expand': 'Genişlet',
'common.collapse': 'Daralt', 'common.collapse': 'Daralt',
'common.copy': 'Copy', 'common.copy': 'Kopyala',
'common.copied': 'Copied', 'common.copied': 'Kopyalandı',
}; };
export default common; export default common;
+89 -90
View File
@@ -1,14 +1,14 @@
import type { TranslationStrings } from '../types'; import type { TranslationStrings } from '../types';
const dashboard: TranslationStrings = { const dashboard: TranslationStrings = {
'dashboard.title': 'Gezilerim', 'dashboard.title': 'Seyahatlerim',
'dashboard.subtitle.loading': 'Geziler yükleniyor...', 'dashboard.subtitle.loading': 'Seyahatler yükleniyor...',
'dashboard.subtitle.trips': '{count} gezi ({archived} arşivlenmiş)', 'dashboard.subtitle.trips': '{count} seyahat ({archived} arşivde)',
'dashboard.subtitle.empty': 'İlk gezinizi başlatın', 'dashboard.subtitle.empty': 'İlk seyahatinizi başlatın',
'dashboard.subtitle.activeOne': '{count} aktif gezi', 'dashboard.subtitle.activeOne': '{count} etkin seyahat',
'dashboard.subtitle.activeMany': '{count} aktif gezi', 'dashboard.subtitle.activeMany': '{count} etkin seyahat',
'dashboard.subtitle.archivedSuffix': ' · {count} arşivlendi', 'dashboard.subtitle.archivedSuffix': ' · {count} arşivde',
'dashboard.newTrip': 'Yeni gezi', 'dashboard.newTrip': 'Yeni Seyahat',
'dashboard.newTripSub': 'Start blank · or import from another planner', 'dashboard.newTripSub': 'Start blank · or import from another planner',
'dashboard.gridView': 'Izgara görünümü', 'dashboard.gridView': 'Izgara görünümü',
'dashboard.listView': 'Liste görünümü', 'dashboard.listView': 'Liste görünümü',
@@ -16,108 +16,107 @@ const dashboard: TranslationStrings = {
'dashboard.timezone': 'Saat dilimleri', 'dashboard.timezone': 'Saat dilimleri',
'dashboard.localTime': 'Yerel', 'dashboard.localTime': 'Yerel',
'dashboard.timezoneCustomTitle': 'Özel saat dilimi', 'dashboard.timezoneCustomTitle': 'Özel saat dilimi',
'dashboard.timezoneCustomLabelPlaceholder': 'Etiket (opsiyonel)', 'dashboard.timezoneCustomLabelPlaceholder': 'Etiket (isteğe bağlı)',
'dashboard.timezoneCustomTzPlaceholder': 'örn. Europe/Istanbul', 'dashboard.timezoneCustomTzPlaceholder': 'örn. America/New_York',
'dashboard.timezoneCustomAdd': 'Ekle', 'dashboard.timezoneCustomAdd': 'Ekle',
'dashboard.timezoneCustomErrorEmpty': 'Bir saat dilimi kimliği girin', 'dashboard.timezoneCustomErrorEmpty': 'Saat dilimi tanımlayıcısı girin',
'dashboard.timezoneCustomErrorInvalid': 'dashboard.timezoneCustomErrorInvalid':
'Geçersiz saat dilimi. Europe/Istanbul gibi bir format kullanın', 'Geçersiz saat dilimi. Europe/Berlin gibi bir biçim kullanın',
'dashboard.timezoneCustomErrorDuplicate': 'Zaten eklendi', 'dashboard.timezoneCustomErrorDuplicate': 'Zaten ekli',
'dashboard.emptyTitle': 'Henüz gezi yok', 'dashboard.emptyTitle': 'Henüz seyahat yok',
'dashboard.emptyText': 'İlk gezinizi oluşturun ve planlamaya başlayın!', 'dashboard.emptyText': 'İlk seyahatinizi oluşturup planlamaya başlayın!',
'dashboard.emptyButton': 'İlk geziyi oluştur', 'dashboard.emptyButton': 'İlk Seyahati Oluştur',
'dashboard.nextTrip': 'Sıradaki gezi', 'dashboard.nextTrip': 'Sonraki Seyahat',
'dashboard.shared': 'Paylaşılan', 'dashboard.shared': 'Paylaşılan',
'dashboard.sharedBy': '{name} tarafından paylaşıldı', 'dashboard.sharedBy': '{name} paylaştı',
'dashboard.days': 'Gün', 'dashboard.days': 'Günler',
'dashboard.places': 'Yer', 'dashboard.places': 'Yerler',
'dashboard.members': 'Arkadaş', 'dashboard.members': 'Arkadaşlar',
'dashboard.archive': 'Arşivle', 'dashboard.archive': 'Arşivle',
'dashboard.copyTrip': 'Kopyala', 'dashboard.copyTrip': 'Kopyala',
'dashboard.copySuffix': 'kopya', 'dashboard.copySuffix': 'kopya',
'dashboard.restore': 'Geri yükle', 'dashboard.restore': 'Geri al',
'dashboard.archived': 'Arşivlendi', 'dashboard.archived': 'Arşivlendi',
'dashboard.status.ongoing': 'Devam ediyor', 'dashboard.status.ongoing': 'Devam ediyor',
'dashboard.status.today': 'Bugün', 'dashboard.status.today': 'Bugün',
'dashboard.status.tomorrow': 'Yarın', 'dashboard.status.tomorrow': 'Yarın',
'dashboard.status.past': 'Geçmiş', 'dashboard.status.past': 'Geçmiş',
'dashboard.status.daysLeft': '{count} gün kaldı', 'dashboard.status.daysLeft': '{count} gün kaldı',
'dashboard.toast.loadError': 'Failed to load trips', 'dashboard.toast.loadError': 'Seyahatler yüklenemedi',
'dashboard.toast.created': 'Trip created successfully!', 'dashboard.toast.created': 'Seyahat oluşturuldu!',
'dashboard.toast.createError': 'Failed to create trip', 'dashboard.toast.createError': 'Seyahat oluşturulamadı',
'dashboard.toast.updated': 'Trip updated!', 'dashboard.toast.updated': 'Seyahat güncellendi!',
'dashboard.toast.updateError': 'Failed to update trip', 'dashboard.toast.updateError': 'Seyahat güncellenemedi',
'dashboard.toast.deleted': 'Trip deleted', 'dashboard.toast.deleted': 'Seyahat silindi',
'dashboard.toast.deleteError': 'Failed to delete trip', 'dashboard.toast.deleteError': 'Seyahat silinemedi',
'dashboard.toast.archived': 'Trip archived', 'dashboard.toast.archived': 'Seyahat arşivlendi',
'dashboard.toast.archiveError': 'Failed to archive trip', 'dashboard.toast.archiveError': 'Arşivlenemedi',
'dashboard.toast.restored': 'Trip restored', 'dashboard.toast.restored': 'Seyahat geri alındı',
'dashboard.toast.restoreError': 'Failed to restore trip', 'dashboard.toast.restoreError': 'Geri alınamadı',
'dashboard.toast.copied': 'Trip copied!', 'dashboard.toast.copied': 'Seyahat kopyalandı!',
'dashboard.toast.copyError': 'Failed to copy trip', 'dashboard.toast.copyError': 'Kopyalanamadı',
'dashboard.confirm.delete': 'dashboard.confirm.delete':
'Delete trip "{title}"? All places and plans will be permanently deleted.', '"{title}" seyahatini sil? Tüm yerler ve planlar kalıcı olarak silinir.',
'dashboard.confirm.copy.title': 'Copy this trip?', 'dashboard.confirm.copy.title': 'Bu seyahat kopyalansın mı?',
'dashboard.confirm.copy.willCopy': 'Will be copied', 'dashboard.confirm.copy.willCopy': 'Kopyalanacak',
'dashboard.confirm.copy.will1': 'Days, places & day assignments', 'dashboard.confirm.copy.will1': 'Günler, yerler ve gün atamaları',
'dashboard.confirm.copy.will2': 'Accommodations & reservations', 'dashboard.confirm.copy.will2': 'Konaklama ve rezervasyonlar',
'dashboard.confirm.copy.will3': 'Budget items & category order', 'dashboard.confirm.copy.will3': 'Bütçe kalemleri ve kategori sırası',
'dashboard.confirm.copy.will4': 'Packing lists (unchecked)', 'dashboard.confirm.copy.will4': 'Paket listeleri (işaretlenmemiş)',
'dashboard.confirm.copy.will5': 'TODOs (unassigned & unchecked)', 'dashboard.confirm.copy.will5': 'Yapılacaklar (atanmamış ve işaretlenmemiş)',
'dashboard.confirm.copy.will6': 'Day notes', 'dashboard.confirm.copy.will6': 'Gün notları',
'dashboard.confirm.copy.wontCopy': "Won't be copied", 'dashboard.confirm.copy.wontCopy': "Won't be copied",
'dashboard.confirm.copy.wont1': 'Collaborators & member assignments', 'dashboard.confirm.copy.wont1': 'İşbirlikçiler ve üye atamaları',
'dashboard.confirm.copy.wont2': 'Collab notes, polls & messages', 'dashboard.confirm.copy.wont2': 'Collab notları, anketler ve mesajlar',
'dashboard.confirm.copy.wont3': 'Files & photos', 'dashboard.confirm.copy.wont3': 'Dosyalar ve fotoğraflar',
'dashboard.confirm.copy.wont4': 'Share tokens', 'dashboard.confirm.copy.wont4': 'Paylaşım jetonları',
'dashboard.confirm.copy.confirm': 'Copy trip', 'dashboard.confirm.copy.confirm': 'Seyahati kopyala',
'dashboard.editTrip': 'Geziyi düzenle', 'dashboard.editTrip': 'Seyahati Düzenle',
'dashboard.createTrip': 'Yeni gezi oluştur', 'dashboard.createTrip': 'Yeni Seyahat Oluştur',
'dashboard.tripTitle': 'Başlık', 'dashboard.tripTitle': 'Başlık',
'dashboard.tripTitlePlaceholder': 'e.g. Summer in Japan', 'dashboard.tripTitlePlaceholder': 'örn. Japonya yaz tatili',
'dashboard.tripDescription': 'Açıklama', 'dashboard.tripDescription': 'Açıklama',
'dashboard.tripDescriptionPlaceholder': 'What is this trip about?', 'dashboard.tripDescriptionPlaceholder': 'Bu seyahat ne hakkında?',
'dashboard.startDate': 'Başlangıç tarihi', 'dashboard.startDate': 'Başlangıç Tarihi',
'dashboard.endDate': 'Bitiş tarihi', 'dashboard.endDate': 'Bitiş Tarihi',
'dashboard.dayCount': 'Gün sayısı', 'dashboard.dayCount': 'Gün sayısı',
'dashboard.dayCountHint': 'dashboard.dayCountHint': 'Seyahat tarihi yoksa kaç gün planlanacağı.',
'How many days to plan for when no travel dates are set.',
'dashboard.noDateHint': 'dashboard.noDateHint':
'No date set — 7 default days will be created. You can change this anytime.', 'Tarih yok — varsayılan 7 gün oluşturulur. İstediğiniz zaman değiştirebilirsiniz.',
'dashboard.coverImage': 'Kapak resmi', 'dashboard.coverImage': 'Kapak Görseli',
'dashboard.addCoverImage': 'Add cover image (or drag & drop)', 'dashboard.addCoverImage': 'Kapak ekle (sürükleyip bırakabilirsiniz)',
'dashboard.addMembers': 'Seyahat arkadaşları', 'dashboard.addMembers': 'Seyahat arkadaşları',
'dashboard.addMember': 'Üye ekle', 'dashboard.addMember': 'Üye ekle',
'dashboard.coverSaved': 'Cover image saved', 'dashboard.coverSaved': 'Kapak kaydedildi',
'dashboard.coverUploadError': 'Failed to upload', 'dashboard.coverUploadError': 'Yüklenemedi',
'dashboard.coverRemoveError': 'Failed to remove', 'dashboard.coverRemoveError': 'Kaldırılamadı',
'dashboard.titleRequired': 'Başlık zorunludur', 'dashboard.titleRequired': 'Başlık gerekli',
'dashboard.endDateError': 'Bitiş tarihi başlangıç tarihinden sonra olmalıdır', 'dashboard.endDateError': 'Bitiş tarihi başlangıçtan sonra olmalı',
'dashboard.greeting.morning': 'Good morning,', 'dashboard.greeting.morning': 'Günaydın,',
'dashboard.greeting.afternoon': 'Good afternoon,', 'dashboard.greeting.afternoon': 'İyi günler,',
'dashboard.greeting.evening': 'Good evening,', 'dashboard.greeting.evening': 'İyi akşamlar,',
'dashboard.mobile.liveNow': 'Live Now', 'dashboard.mobile.liveNow': 'Canlı',
'dashboard.mobile.tripProgress': 'Trip progress', 'dashboard.mobile.tripProgress': 'Seyahat ilerlemesi',
'dashboard.mobile.daysLeft': '{count} days left', 'dashboard.mobile.daysLeft': '{count} gün kaldı',
'dashboard.mobile.places': 'Places', 'dashboard.mobile.places': 'Yerler',
'dashboard.mobile.buddies': 'Buddies', 'dashboard.mobile.buddies': 'Arkadaşlar',
'dashboard.mobile.newTrip': 'New Trip', 'dashboard.mobile.newTrip': 'Yeni Seyahat',
'dashboard.mobile.currency': 'Currency', 'dashboard.mobile.currency': 'Para birimi',
'dashboard.mobile.timezone': 'Timezone', 'dashboard.mobile.timezone': 'Saat dilimi',
'dashboard.mobile.upcomingTrips': 'Upcoming Trips', 'dashboard.mobile.upcomingTrips': 'Yaklaşan Seyahatler',
'dashboard.mobile.yourTrips': 'Your Trips', 'dashboard.mobile.yourTrips': 'Seyahatleriniz',
'dashboard.mobile.trips': 'trips', 'dashboard.mobile.trips': 'seyahat',
'dashboard.mobile.starts': 'Starts', 'dashboard.mobile.starts': 'Başlıyor',
'dashboard.mobile.duration': 'Duration', 'dashboard.mobile.duration': 'Süre',
'dashboard.mobile.day': 'day', 'dashboard.mobile.day': 'gün',
'dashboard.mobile.days': 'days', 'dashboard.mobile.days': 'gün',
'dashboard.mobile.ongoing': 'Ongoing', 'dashboard.mobile.ongoing': 'Devam ediyor',
'dashboard.mobile.startsToday': 'Starts today', 'dashboard.mobile.startsToday': 'Bugün başlıyor',
'dashboard.mobile.tomorrow': 'Tomorrow', 'dashboard.mobile.tomorrow': 'Yarın',
'dashboard.mobile.inDays': 'In {count} days', 'dashboard.mobile.inDays': '{count} Gün sonra',
'dashboard.mobile.inMonths': 'In {count} months', 'dashboard.mobile.inMonths': '{count} Ay sonra',
'dashboard.mobile.completed': 'Completed', 'dashboard.mobile.completed': 'Tamamlandı',
'dashboard.mobile.currencyConverter': 'Currency Converter', 'dashboard.mobile.currencyConverter': 'Para birimi dönüştürücü',
'dashboard.filter.planned': 'Planned', 'dashboard.filter.planned': 'Planned',
'dashboard.hero.badgeLive': 'LIVE NOW', 'dashboard.hero.badgeLive': 'LIVE NOW',
'dashboard.hero.badgeToday': 'STARTS TODAY', 'dashboard.hero.badgeToday': 'STARTS TODAY',
+20 -20
View File
@@ -1,26 +1,26 @@
import type { TranslationStrings } from '../types'; import type { TranslationStrings } from '../types';
const day: TranslationStrings = { const day: TranslationStrings = {
'day.precipProb': 'Rain probability', 'day.precipProb': 'Yağış olasılığı',
'day.precipitation': 'Precipitation', 'day.precipitation': 'Yağış',
'day.wind': 'Wind', 'day.wind': 'Rüzgâr',
'day.sunrise': 'Sunrise', 'day.sunrise': 'Gün doğumu',
'day.sunset': 'Sunset', 'day.sunset': 'Gün batımı',
'day.hourlyForecast': 'Hourly Forecast', 'day.hourlyForecast': 'Saatlik Tahmin',
'day.climateHint': 'day.climateHint':
'Historical averages — real forecast available within 16 days of this date.', 'Tarihsel ortalamalar — gerçek tahmin bu tarihten 16 gün öncesine kadar kullanılabilir.',
'day.noWeather': 'No weather data available. Add a place with coordinates.', 'day.noWeather': 'Hava durumu verisi yok. Koordinatlı bir yer ekleyin.',
'day.overview': 'Daily Overview', 'day.overview': 'Günlük Özet',
'day.accommodation': 'Accommodation', 'day.accommodation': 'Konaklama',
'day.addAccommodation': 'Add accommodation', 'day.addAccommodation': 'Konaklama ekle',
'day.hotelDayRange': 'Apply to days', 'day.hotelDayRange': 'Günlere uygula',
'day.noPlacesForHotel': 'Add places to your trip first', 'day.noPlacesForHotel': 'Önce seyahatinize yer ekleyin',
'day.allDays': 'All', 'day.allDays': 'Tüm',
'day.checkIn': 'Check-in', 'day.checkIn': 'Giriş',
'day.checkInUntil': 'Until', 'day.checkInUntil': 'Kadar',
'day.checkOut': 'Check-out', 'day.checkOut': 'Çıkış yapmak',
'day.confirmation': 'Confirmation', 'day.confirmation': 'Onay kodu',
'day.editAccommodation': 'Edit accommodation', 'day.editAccommodation': 'Konaklamayı düzenle',
'day.reservations': 'Reservations', 'day.reservations': 'Rezervasyonlar',
}; };
export default day; export default day;
+37 -38
View File
@@ -1,48 +1,47 @@
import type { TranslationStrings } from '../types'; import type { TranslationStrings } from '../types';
const dayplan: TranslationStrings = { const dayplan: TranslationStrings = {
'dayplan.icsTooltip': 'Export calendar (ICS)', 'dayplan.icsTooltip': 'İhracat takvimi (ICS)',
'dayplan.emptyDay': 'No places planned for this day', 'dayplan.emptyDay': 'Bu gün için planlanmış yer yok',
'dayplan.cannotReorderTransport': 'dayplan.cannotReorderTransport':
'Bookings with a fixed time cannot be reordered', 'Sabit zamanlı rezervasyonlar yeniden sıralanamaz',
'dayplan.confirmRemoveTimeTitle': 'Remove time?', 'dayplan.confirmRemoveTimeTitle': 'Saat kaldırılsın mı?',
'dayplan.confirmRemoveTimeBody': 'dayplan.confirmRemoveTimeBody':
'This place has a fixed time ({time}). Moving it will remove the time and allow free sorting.', 'Bu yerin sabit bir saati var ({time}). Taşımak saati kaldırır ve serbest sıralamaya izin verir.',
'dayplan.confirmRemoveTimeAction': 'Remove time & move', 'dayplan.confirmRemoveTimeAction': 'Saati kaldır ve taşı',
'dayplan.cannotDropOnTimed': 'dayplan.cannotDropOnTimed':
'Items cannot be placed between time-bound entries', 'Öğeler saate bağlı girişler arasına yerleştirilemez',
'dayplan.cannotBreakChronology': 'dayplan.cannotBreakChronology':
'This would break the chronological order of timed items and bookings', 'Bu, zamanlı öğelerin kronolojik sırasını bozar',
'dayplan.addNote': 'Add Note', 'dayplan.addNote': 'Not Ekle',
'dayplan.expandAll': 'Expand all days', 'dayplan.expandAll': 'Tüm günleri genişlet',
'dayplan.collapseAll': 'Collapse all days', 'dayplan.collapseAll': 'Tüm günleri daralt',
'dayplan.editNote': 'Edit Note', 'dayplan.editNote': 'Notu Düzenle',
'dayplan.noteAdd': 'Add Note', 'dayplan.noteAdd': 'Not Ekle',
'dayplan.noteEdit': 'Edit Note', 'dayplan.noteEdit': 'Notu Düzenle',
'dayplan.noteTitle': 'Note', 'dayplan.noteTitle': 'Not',
'dayplan.noteSubtitle': 'Daily Note', 'dayplan.noteSubtitle': 'Günlük Not',
'dayplan.totalCost': 'Total Cost', 'dayplan.totalCost': 'Toplam Maliyet',
'dayplan.days': 'Days', 'dayplan.days': 'Günler',
'dayplan.dayN': 'Day {n}', 'dayplan.dayN': '{n}. gün',
'dayplan.calculating': 'Calculating...', 'dayplan.calculating': 'Hesaplanıyor...',
'dayplan.route': 'Route', 'dayplan.route': 'Rota',
'dayplan.optimize': 'Optimize', 'dayplan.optimize': 'Optimize et',
'dayplan.optimized': 'Route optimized', 'dayplan.optimized': 'Rota optimize edildi',
'dayplan.routeError': 'Failed to calculate route', 'dayplan.routeError': 'Rota hesaplanamadı',
'dayplan.toast.needTwoPlaces': 'dayplan.toast.needTwoPlaces':
'At least two places needed for route optimization', 'Rota optimizasyonu için en az iki yer gerekli',
'dayplan.toast.routeOptimized': 'Route optimized', 'dayplan.toast.routeOptimized': 'Rota optimize edildi',
'dayplan.toast.noGeoPlaces': 'dayplan.toast.noGeoPlaces': 'Rota için koordinatlı yer bulunamadı',
'No places with coordinates found for route calculation', 'dayplan.confirmed': 'Onaylandı',
'dayplan.confirmed': 'Confirmed', 'dayplan.pendingRes': 'Beklemede',
'dayplan.pendingRes': 'Pending', 'dayplan.pdf': "PDF'ler",
'dayplan.pdf': 'PDF', 'dayplan.pdfTooltip': 'Gün planını PDF olarak dışa aktar',
'dayplan.pdfTooltip': 'Export day plan as PDF', 'dayplan.pdfError': 'PDF dışa aktarılamadı',
'dayplan.pdfError': 'Failed to export PDF', 'dayplan.mobile.addPlace': 'Yer Ekle',
'dayplan.mobile.addPlace': 'Add Place', 'dayplan.mobile.searchPlaces': 'Yer ara...',
'dayplan.mobile.searchPlaces': 'Search places...', 'dayplan.mobile.allAssigned': 'Tüm yerler atandı',
'dayplan.mobile.allAssigned': 'All places assigned', 'dayplan.mobile.noMatch': 'Eşleşme yok',
'dayplan.mobile.noMatch': 'No match', 'dayplan.mobile.createNew': 'Yeni yer oluştur',
'dayplan.mobile.createNew': 'Create new place',
}; };
export default dayplan; export default dayplan;
+54 -54
View File
@@ -1,62 +1,62 @@
import type { TranslationStrings } from '../types'; import type { TranslationStrings } from '../types';
const files: TranslationStrings = { const files: TranslationStrings = {
'files.title': 'Files', 'files.title': 'Dosyalar',
'files.pageTitle': 'Files & Documents', 'files.pageTitle': 'Dosyalar ve Belgeler',
'files.subtitle': '{count} files for {trip}', 'files.subtitle': '{trip} için {count} dosya',
'files.download': 'Download', 'files.download': 'İndir',
'files.openError': 'Could not open file', 'files.openError': 'Dosya açılamadı',
'files.downloadPdf': 'Download PDF', 'files.downloadPdf': 'PDF İndir',
'files.count': '{count} files', 'files.count': '{count} dosya',
'files.countSingular': '1 file', 'files.countSingular': '1 dosya',
'files.uploaded': '{count} uploaded', 'files.uploaded': '{count} yüklendi',
'files.uploadError': 'Upload failed', 'files.uploadError': 'Yükleme başarısız oldu',
'files.dropzone': 'Drop files here', 'files.dropzone': 'Dosyaları buraya bırakın',
'files.dropzoneHint': 'or click to browse', 'files.dropzoneHint': 'veya göz atmak için tıklayın',
'files.allowedTypes': 'files.allowedTypes':
'Images, PDF, DOC, DOCX, XLS, XLSX, TXT, CSV · Max 50 MB', 'Görsel, PDF, DOC, DOCX, XLS, XLSX, TXT, CSV · Maks. 50 MB',
'files.uploading': 'Uploading...', 'files.uploading': 'Yükleniyor...',
'files.filterAll': 'All', 'files.filterAll': 'Tüm',
'files.filterPdf': 'PDFs', 'files.filterPdf': "PDF'ler",
'files.filterImages': 'Images', 'files.filterImages': 'Görseller',
'files.filterDocs': 'Documents', 'files.filterDocs': 'Belgeler',
'files.filterCollab': 'Collab Notes', 'files.filterCollab': 'İşbirliği Notları',
'files.sourceCollab': 'From Collab Notes', 'files.sourceCollab': 'İşbirliği notlarından',
'files.empty': 'No files yet', 'files.empty': 'Henüz dosya yok',
'files.emptyHint': 'Upload files to attach them to your trip', 'files.emptyHint': 'Seyahatinize eklemek için dosya yükleyin',
'files.openTab': 'Open in new tab', 'files.openTab': 'Yeni sekmede aç',
'files.confirm.delete': 'Are you sure you want to delete this file?', 'files.confirm.delete': 'Bu dosyayı silmek istediğinizden emin misiniz?',
'files.toast.deleted': 'File deleted', 'files.toast.deleted': 'Dosya silindi',
'files.toast.deleteError': 'Failed to delete file', 'files.toast.deleteError': 'Dosya silinemedi',
'files.sourcePlan': 'Day Plan', 'files.sourcePlan': 'Gün Planı',
'files.sourceBooking': 'Booking', 'files.sourceBooking': 'Rezervasyon',
'files.sourceTransport': 'Transport', 'files.sourceTransport': 'Ulaşım',
'files.attach': 'Attach', 'files.attach': 'Ekle',
'files.pasteHint': 'You can also paste images from clipboard (Ctrl+V)', 'files.pasteHint': 'Panodan görsel de yapıştırabilirsiniz (Ctrl+V)',
'files.trash': 'Trash', 'files.trash': 'Çöp kutusu',
'files.trashEmpty': 'Trash is empty', 'files.trashEmpty': 'Çöp kutusu boş',
'files.emptyTrash': 'Empty Trash', 'files.emptyTrash': 'Çöp kutusunu boşalt',
'files.restore': 'Restore', 'files.restore': 'Geri yükle',
'files.star': 'Star', 'files.star': 'Yıldızla',
'files.unstar': 'Unstar', 'files.unstar': 'Yıldızı kaldır',
'files.assign': 'Assign', 'files.assign': 'Ata',
'files.assignTitle': 'Assign File', 'files.assignTitle': 'Dosya Ata',
'files.assignPlace': 'Place', 'files.assignPlace': 'Yer',
'files.assignBooking': 'Booking', 'files.assignBooking': 'Rezervasyon',
'files.assignTransport': 'Transport', 'files.assignTransport': 'Ulaşım',
'files.unassigned': 'Unassigned', 'files.unassigned': 'Atanmamış',
'files.unlink': 'Remove link', 'files.unlink': 'Bağlantıyı kaldır',
'files.toast.trashed': 'Moved to trash', 'files.toast.trashed': 'Çöp kutusuna taşındı',
'files.toast.restored': 'File restored', 'files.toast.restored': 'Dosya geri yüklendi',
'files.toast.trashEmptied': 'Trash emptied', 'files.toast.trashEmptied': 'Çöp kutusu boşaltıldı',
'files.toast.assigned': 'File assigned', 'files.toast.assigned': 'Dosya atandı',
'files.toast.assignError': 'Assignment failed', 'files.toast.assignError': 'Atama başarısız',
'files.toast.restoreError': 'Restore failed', 'files.toast.restoreError': 'Geri yükleme başarısız',
'files.confirm.permanentDelete': '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': 'files.confirm.emptyTrash':
'Permanently delete all trashed files? This cannot be undone.', 'Çöp kutusundaki tüm dosyalar kalıcı olarak silinsin mi? Bu işlem geri alınamaz.',
'files.noteLabel': 'Note', 'files.noteLabel': 'Not',
'files.notePlaceholder': 'Add a note...', 'files.notePlaceholder': 'Not ekleyin...',
}; };
export default files; export default files;
+17 -17
View File
@@ -1,22 +1,22 @@
import type { TranslationStrings } from '../types'; import type { TranslationStrings } from '../types';
const inspector: TranslationStrings = { const inspector: TranslationStrings = {
'inspector.opened': 'Open', 'inspector.opened': 'Açık',
'inspector.closed': 'Closed', 'inspector.closed': 'Kapalı',
'inspector.openingHours': 'Opening Hours', 'inspector.openingHours': 'Açılış Saatleri',
'inspector.showHours': 'Show opening hours', 'inspector.showHours': 'Açılış saatlerini göster',
'inspector.files': 'Files', 'inspector.files': 'Dosyalar',
'inspector.filesCount': '{count} files', 'inspector.filesCount': '{count} dosya',
'inspector.remove': 'Remove', 'inspector.remove': 'Kaldırmak',
'inspector.removeFromDay': 'Remove from Day', 'inspector.removeFromDay': 'Günden Kaldır',
'inspector.addToDay': 'Add to Day', 'inspector.addToDay': 'Güne Ekle',
'inspector.confirmedRes': 'Confirmed Reservation', 'inspector.confirmedRes': 'Onaylanmış Rezervasyon',
'inspector.pendingRes': 'Pending Reservation', 'inspector.pendingRes': 'Bekleyen Rezervasyon',
'inspector.google': 'Open in Google Maps', 'inspector.google': "Google Haritalar'da aç",
'inspector.website': 'Open Website', 'inspector.website': 'Web Sitesini Aç',
'inspector.addRes': 'Reservation', 'inspector.addRes': 'Rezervasyon',
'inspector.editRes': 'Edit Reservation', 'inspector.editRes': 'Rezervasyonu Düzenle',
'inspector.participants': 'Participants', 'inspector.participants': 'Katılımcılar',
'inspector.trackStats': 'Track Stats', 'inspector.trackStats': 'İstatistikleri Takip Et',
}; };
export default inspector; export default inspector;
+223 -221
View File
@@ -1,244 +1,246 @@
import type { TranslationStrings } from '../types'; import type { TranslationStrings } from '../types';
const journey: TranslationStrings = { const journey: TranslationStrings = {
'journey.search.placeholder': 'Search journeys…', 'journey.search.placeholder': 'Journey ara…',
'journey.search.noResults': 'No journeys match "{query}"', 'journey.search.noResults': '"{query}" ile eşleşen journey yok',
'journey.title': 'Journey', 'journey.title': 'Seyahat',
'journey.subtitle': 'Track your travels as they happen', 'journey.subtitle': 'Seyahatlerinizi anında kaydedin',
'journey.new': 'New Journey', 'journey.new': 'Yeni Journey',
'journey.create': 'Create', 'journey.create': 'Oluştur',
'journey.titlePlaceholder': 'Where are you going?', 'journey.titlePlaceholder': 'Nereye gidiyorsunuz?',
'journey.empty': 'No journeys yet', 'journey.empty': 'Henüz journey yok',
'journey.emptyHint': 'Start documenting your next trip', 'journey.emptyHint': 'Bir sonraki seyahatinizi belgelemeye başlayın',
'journey.deleted': 'Journey deleted', 'journey.deleted': 'Journey silindi',
'journey.createError': 'Could not create journey', 'journey.createError': 'Journey oluşturulamadı',
'journey.deleteError': 'Could not delete journey', 'journey.deleteError': 'Journey silinemedi',
'journey.deleteConfirmTitle': 'Delete', 'journey.deleteConfirmTitle': 'Sil',
'journey.deleteConfirmMessage': 'Delete "{title}"? This cannot be undone.', 'journey.deleteConfirmMessage':
'journey.deleteConfirmGeneric': 'Are you sure you want to delete this?', '"{title}" silinsin mi? Bu işlem geri alınamaz.',
'journey.notFound': 'Journey not found', 'journey.deleteConfirmGeneric': 'Bunu silmek istediğinizden emin misiniz?',
'journey.photos': 'Photos', 'journey.notFound': 'Journey bulunamadı',
'journey.timelineEmpty': 'No stops yet', 'journey.photos': 'Fotoğraflar',
'journey.timelineEmpty': 'Henüz durak yok',
'journey.timelineEmptyHint': 'journey.timelineEmptyHint':
'Add a check-in or write a journal entry to get started', 'Başlamak için check-in ekleyin veya günlük kaydı yazın',
'journey.status.draft': 'Draft', 'journey.status.draft': 'Taslak',
'journey.status.active': 'Active', 'journey.status.active': 'Aktif',
'journey.status.completed': 'Completed', 'journey.status.completed': 'Tamamlandı',
'journey.status.upcoming': 'Upcoming', 'journey.status.upcoming': 'Yaklaşan',
'journey.status.archived': 'Archived', 'journey.status.archived': 'Arşivlendi',
'journey.checkin.add': 'Check in', 'journey.checkin.add': 'Giriş',
'journey.checkin.namePlaceholder': 'Location name', 'journey.checkin.namePlaceholder': 'Konum adı',
'journey.checkin.notesPlaceholder': 'Notes (optional)', 'journey.checkin.notesPlaceholder': 'Notlar (isteğe bağlı)',
'journey.checkin.save': 'Save', 'journey.checkin.save': 'Kaydet',
'journey.checkin.error': 'Could not save check-in', 'journey.checkin.error': 'Check-in kaydedilemedi',
'journey.entry.add': 'Journal', 'journey.entry.add': 'Günlük',
'journey.entry.edit': 'Edit entry', 'journey.entry.edit': 'Kaydı düzenle',
'journey.entry.titlePlaceholder': 'Title (optional)', 'journey.entry.titlePlaceholder': 'Başlık (isteğe bağlı)',
'journey.entry.bodyPlaceholder': 'What happened today?', 'journey.entry.bodyPlaceholder': 'Bugün ne oldu?',
'journey.entry.save': 'Save', 'journey.entry.save': 'Kaydet',
'journey.entry.error': 'Could not save entry', 'journey.entry.error': 'Kayıt kaydedilemedi',
'journey.photo.add': 'Photo', 'journey.photo.add': 'Fotoğraf',
'journey.photo.uploadError': 'Upload failed', 'journey.photo.uploadError': 'Yükleme başarısız oldu',
'journey.share.share': 'Share', 'journey.share.share': 'Paylaş',
'journey.share.public': 'Public', 'journey.share.public': 'Herkese açık',
'journey.share.linkCopied': 'Public link copied', 'journey.share.linkCopied': 'Herkese açık bağlantı kopyalandı',
'journey.share.disabled': 'Public sharing disabled', 'journey.share.disabled': 'Herkese açık paylaşım kapalı',
'journey.editor.titlePlaceholder': 'Give this moment a name...', 'journey.editor.titlePlaceholder': 'Bu ana bir ad verin...',
'journey.editor.bodyPlaceholder': 'Tell the story of this day...', 'journey.editor.bodyPlaceholder': 'Bu günün hikâyesini anlatın...',
'journey.editor.placePlaceholder': 'Location (optional)', 'journey.editor.placePlaceholder': 'Konum (isteğe bağlı)',
'journey.editor.tagsPlaceholder': 'journey.editor.tagsPlaceholder':
'Tags: hidden gem, best meal, must revisit...', 'Etiketler: gizli cevher, en iyi yemek, tekrar ziyaret...',
'journey.visibility.private': 'Private', 'journey.visibility.private': 'Gizli',
'journey.visibility.shared': 'Shared', 'journey.visibility.shared': 'Paylaşılan',
'journey.visibility.public': 'Public', 'journey.visibility.public': 'Herkese açık',
'journey.emptyState.title': 'Your story starts here', 'journey.emptyState.title': 'Hikâyeniz burada başlıyor',
'journey.emptyState.subtitle': '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': 'journey.frontpage.subtitle':
"Turn your trips into stories you'll never forget", "Turn your trips into stories you'll never forget",
'journey.frontpage.createJourney': 'Create Journey', 'journey.frontpage.createJourney': 'Journey Oluştur',
'journey.frontpage.activeJourney': 'Active Journey', 'journey.frontpage.activeJourney': 'Aktif Journey',
'journey.frontpage.allJourneys': 'All Journeys', 'journey.frontpage.allJourneys': "Tüm Journey'ler",
'journey.frontpage.journeys': 'journeys', 'journey.frontpage.journeys': 'journey',
'journey.frontpage.createNew': 'Create a new Journey', 'journey.frontpage.createNew': 'Yeni Journey oluştur',
'journey.frontpage.createNewSub': 'journey.frontpage.createNewSub':
'Pick trips, write stories, share your adventures', 'Seyahat seçin, hikâyeler yazın, maceralarınızı paylaşın',
'journey.frontpage.live': 'Live', 'journey.frontpage.live': 'Canlı',
'journey.frontpage.synced': 'Synced', 'journey.frontpage.synced': 'Senkronize',
'journey.frontpage.continueWriting': 'Continue writing', 'journey.frontpage.continueWriting': 'Yazmaya devam et',
'journey.frontpage.updated': 'Updated {time}', 'journey.frontpage.updated': '{time} Güncellendi',
'journey.frontpage.suggestionLabel': 'Trip just ended', 'journey.frontpage.suggestionLabel': 'Seyahat yeni bitti',
'journey.frontpage.suggestionText': 'journey.frontpage.suggestionText':
'Turn <strong>{title}</strong> into a Journey', "<strong>{title}</strong> seyahatini Journey'e dönüştür",
'journey.frontpage.dismiss': 'Dismiss', 'journey.frontpage.dismiss': 'Kapat',
'journey.frontpage.journeyName': 'Journey Name', 'journey.frontpage.journeyName': 'Journey Adı',
'journey.frontpage.namePlaceholder': 'e.g. Southeast Asia 2026', 'journey.frontpage.namePlaceholder': 'örn. Güneydoğu Asya 2026',
'journey.frontpage.selectTrips': 'Select Trips', 'journey.frontpage.selectTrips': 'Seyahat Seç',
'journey.frontpage.tripsSelected': 'trips selected', 'journey.frontpage.tripsSelected': 'seyahat seçildi',
'journey.frontpage.trips': 'trips', 'journey.frontpage.trips': 'seyahat',
'journey.frontpage.placesImported': 'places will be imported', 'journey.frontpage.placesImported': 'yer içe aktarılacak',
'journey.frontpage.places': 'places', 'journey.frontpage.places': 'yer',
'journey.detail.backToJourney': 'Back to Journey', 'journey.detail.backToJourney': "Journey'e dön",
'journey.detail.syncedWithTrips': 'Synced with Trips', 'journey.detail.syncedWithTrips': 'Seyahatlerle senkronize',
'journey.detail.addEntry': 'Add Entry', 'journey.detail.addEntry': 'Kayıt Ekle',
'journey.detail.newEntry': 'New Entry', 'journey.detail.newEntry': 'Yeni Kayıt',
'journey.detail.editEntry': 'Edit Entry', 'journey.detail.editEntry': 'Kaydı Düzenle',
'journey.detail.noEntries': 'No entries yet', 'journey.detail.noEntries': 'Henüz kayıt yok',
'journey.detail.noEntriesHint': 'journey.detail.noEntriesHint':
'Add a trip to get started with skeleton entries', 'İskelet kayıtlarla başlamak için bir seyahat ekleyin',
'journey.detail.noPhotos': 'No photos yet', 'journey.detail.noPhotos': 'Henüz fotoğraf yok',
'journey.detail.noPhotosHint': 'journey.detail.noPhotosHint':
'Upload photos to entries or browse your Immich/Synology library', 'Kayıtlara fotoğraf yükleyin veya Immich/Synology kütüphanenize göz atın',
'journey.detail.journeyTab': 'Journey', 'journey.detail.journeyTab': 'Seyahat',
'journey.detail.journeyStats': 'Journey Stats', 'journey.detail.journeyStats': 'Journey İstatistikleri',
'journey.detail.syncedTrips': 'Synced Trips', 'journey.detail.syncedTrips': 'Senkronize Seyahatler',
'journey.detail.noTripsLinked': 'No trips linked yet', 'journey.detail.noTripsLinked': 'Henüz bağlı seyahat yok',
'journey.detail.contributors': 'Contributors', 'journey.detail.contributors': 'Katkıda bulunanlar',
'journey.detail.readMore': 'Read more', 'journey.detail.readMore': 'Devamını oku',
'journey.detail.prosCons': 'Pros & Cons', 'journey.detail.prosCons': 'Artılar ve Eksiler',
'journey.detail.photos': 'photos', 'journey.detail.photos': 'fotoğraf',
'journey.detail.day': 'Day {number}', 'journey.detail.day': '{number}. gün',
'journey.detail.places': 'places', 'journey.detail.places': 'yer',
'journey.stats.days': 'Days', 'journey.stats.days': 'Günler',
'journey.stats.cities': 'Cities', 'journey.stats.cities': 'Şehirler',
'journey.stats.entries': 'Entries', 'journey.stats.entries': 'Kayıtlar',
'journey.stats.photos': 'Photos', 'journey.stats.photos': 'Fotoğraflar',
'journey.stats.places': 'Places', 'journey.stats.places': 'Yer',
'journey.skeletons.show': 'Show suggestions', 'journey.skeletons.show': 'Önerileri göster',
'journey.skeletons.hide': 'Hide suggestions', 'journey.skeletons.hide': 'Önerileri gizle',
'journey.verdict.lovedIt': 'Loved it', 'journey.verdict.lovedIt': 'Çok beğendim',
'journey.verdict.couldBeBetter': 'Could be better', 'journey.verdict.couldBeBetter': 'Daha iyi olabilirdi',
'journey.synced.places': 'places', 'journey.synced.places': 'yer',
'journey.synced.synced': 'synced', 'journey.synced.synced': 'senkronize',
'journey.editor.discardChangesConfirm': 'journey.editor.discardChangesConfirm':
'You have unsaved changes. Discard them?', 'Kaydedilmemiş değişiklikleriniz var. Vazgeçilsin mi?',
'journey.editor.uploadPhotos': 'Upload photos', 'journey.editor.uploadPhotos': 'Fotoğraf yükle',
'journey.editor.uploading': 'Uploading...', 'journey.editor.uploading': 'Yükleniyor...',
'journey.editor.fromGallery': 'From Gallery', 'journey.editor.fromGallery': 'Galeriden',
'journey.editor.allPhotosAdded': 'All photos already added', 'journey.editor.allPhotosAdded': 'Tüm fotoğraflar zaten eklendi',
'journey.editor.writeStory': 'Write your story...', 'journey.editor.writeStory': 'Hikâyenizi yazın...',
'journey.editor.prosCons': 'Pros & Cons', 'journey.editor.prosCons': 'Artılar ve Eksiler',
'journey.editor.pros': 'Pros', 'journey.editor.pros': 'Artılar',
'journey.editor.cons': 'Cons', 'journey.editor.cons': 'Eksiler',
'journey.editor.proPlaceholder': 'Something great...', 'journey.editor.proPlaceholder': 'Harika bir şey...',
'journey.editor.conPlaceholder': 'Not so great...', 'journey.editor.conPlaceholder': 'Pek iyi değildi...',
'journey.editor.addAnother': 'Add another', 'journey.editor.addAnother': 'Bir tane daha ekle',
'journey.editor.date': 'Date', 'journey.editor.date': 'Tarih',
'journey.editor.location': 'Location', 'journey.editor.location': 'Konum',
'journey.editor.searchLocation': 'Search location...', 'journey.editor.searchLocation': 'Konum ara...',
'journey.editor.mood': 'Mood', 'journey.editor.mood': 'Ruh hali',
'journey.editor.weather': 'Weather', 'journey.editor.weather': 'Hava durumu',
'journey.editor.photoFirst': '1st', 'journey.editor.photoFirst': '1.',
'journey.editor.makeFirst': 'Make 1st', 'journey.editor.makeFirst': '1. yap',
'journey.editor.searching': 'Searching...', 'journey.editor.searching': 'Aranıyor...',
'journey.mood.amazing': 'Amazing', 'journey.mood.amazing': 'Muhteşem',
'journey.mood.good': 'Good', 'journey.mood.good': 'İyi',
'journey.mood.neutral': 'Neutral', 'journey.mood.neutral': 'Nötr',
'journey.mood.rough': 'Rough', 'journey.mood.rough': 'Zor',
'journey.weather.sunny': 'Sunny', 'journey.weather.sunny': 'Güneşli',
'journey.weather.partly': 'Partly cloudy', 'journey.weather.partly': 'Parçalı bulutlu',
'journey.weather.cloudy': 'Cloudy', 'journey.weather.cloudy': 'Bulutlu',
'journey.weather.rainy': 'Rainy', 'journey.weather.rainy': 'Yağmurlu',
'journey.weather.stormy': 'Stormy', 'journey.weather.stormy': 'Fırtınalı',
'journey.weather.cold': 'Snowy', 'journey.weather.cold': 'Karlı',
'journey.trips.linkTrip': 'Link Trip', 'journey.trips.linkTrip': 'Seyahat Bağla',
'journey.trips.searchTrip': 'Search Trip', 'journey.trips.searchTrip': 'Seyahat Ara',
'journey.trips.searchPlaceholder': 'Trip name or destination...', 'journey.trips.searchPlaceholder': 'Seyahat adı veya destinasyon...',
'journey.trips.noTripsAvailable': 'No trips available', 'journey.trips.noTripsAvailable': 'Kullanılabilir seyahat yok',
'journey.trips.link': 'Link', 'journey.trips.link': 'Bağla',
'journey.trips.tripLinked': 'Trip linked', 'journey.trips.tripLinked': 'Seyahat bağlandı',
'journey.trips.linkFailed': 'Failed to link trip', 'journey.trips.linkFailed': 'Seyahat bağlanamadı',
'journey.trips.addTrip': 'Add Trip', 'journey.trips.addTrip': 'Seyahat Ekle',
'journey.trips.unlinkTrip': 'Unlink Trip', 'journey.trips.unlinkTrip': 'Seyahat bağlantısını kaldır',
'journey.trips.unlinkMessage': 'journey.trips.unlinkMessage':
'Unlink "{title}"? All synced entries and photos from this trip will be permanently deleted. This cannot be undone.', '"{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': 'Unlink', 'journey.trips.unlink': 'Bağlantıyı kaldır',
'journey.trips.tripUnlinked': 'Trip unlinked', 'journey.trips.tripUnlinked': 'Seyahat bağlantısı kaldırıldı',
'journey.trips.unlinkFailed': 'Failed to unlink trip', 'journey.trips.unlinkFailed': 'Seyahat bağlantısı kaldırılamadı',
'journey.trips.noTripsLinkedSettings': 'No trips linked', 'journey.trips.noTripsLinkedSettings': 'Bağlı seyahat yok',
'journey.contributors.invite': 'Invite Contributor', 'journey.contributors.invite': 'Katkıda bulunan davet et',
'journey.contributors.searchUser': 'Search User', 'journey.contributors.searchUser': 'Kullanıcı Ara',
'journey.contributors.searchPlaceholder': 'Username or email...', 'journey.contributors.searchPlaceholder': 'Kullanıcı adı veya e-posta...',
'journey.contributors.noUsers': 'No users found', 'journey.contributors.noUsers': 'Kullanıcı bulunamadı',
'journey.contributors.role': 'Role', 'journey.contributors.role': 'Rol',
'journey.contributors.added': 'Contributor added', 'journey.contributors.added': 'Katkıda bulunan eklendi',
'journey.contributors.addFailed': 'Failed to add contributor', 'journey.contributors.addFailed': 'Katkıda bulunan eklenemedi',
'journey.contributors.remove': 'Remove contributor', 'journey.contributors.remove': 'Katkıda bulunanı kaldır',
'journey.contributors.removeConfirm': 'Remove {username} from this journey?', 'journey.contributors.removeConfirm':
'journey.contributors.removed': 'Contributor removed', "{username} bu journey'den kaldırılsın mı?",
'journey.contributors.removeFailed': 'Failed to remove contributor', 'journey.contributors.removed': 'Katkıda bulunan kaldırıldı',
'journey.share.publicShare': 'Public Share', 'journey.contributors.removeFailed': 'Katkıda bulunan kaldırılamadı',
'journey.share.createLink': 'Create share link', 'journey.share.publicShare': 'Herkese açık paylaşım',
'journey.share.linkCreated': 'Share link created', 'journey.share.createLink': 'Paylaşım bağlantısı oluştur',
'journey.share.createFailed': 'Failed to create link', 'journey.share.linkCreated': 'Paylaşım bağlantısı oluşturuldu',
'journey.share.copy': 'Copy', 'journey.share.createFailed': 'Bağlantı oluşturulamadı',
'journey.share.copied': 'Copied!', 'journey.share.copy': 'Kopyala',
'journey.share.timeline': 'Timeline', 'journey.share.copied': 'Kopyalandı!',
'journey.share.gallery': 'Gallery', 'journey.share.timeline': 'Zaman çizelgesi',
'journey.share.map': 'Map', 'journey.share.gallery': 'Galeri',
'journey.share.removeLink': 'Remove share link', 'journey.share.map': 'Harita',
'journey.share.linkDeleted': 'Share link deleted', 'journey.share.removeLink': 'Paylaşım bağlantısını kaldır',
'journey.share.deleteFailed': 'Failed to delete', 'journey.share.linkDeleted': 'Paylaşım bağlantısı silindi',
'journey.share.updateFailed': 'Failed to update', 'journey.share.deleteFailed': 'Silinemedi',
'journey.invite.role': 'Role', 'journey.share.updateFailed': 'Güncelleme başarısız oldu',
'journey.invite.viewer': 'Viewer', 'journey.invite.role': 'Rol',
'journey.invite.editor': 'Editor', 'journey.invite.viewer': 'Görüntüleyici',
'journey.invite.invite': 'Invite', 'journey.invite.editor': 'Düzenleyici',
'journey.invite.inviting': 'Inviting...', 'journey.invite.invite': 'Davet et',
'journey.settings.title': 'Journey Settings', 'journey.invite.inviting': 'Davet ediliyor...',
'journey.settings.coverImage': 'Cover Image', 'journey.settings.title': 'Journey Ayarları',
'journey.settings.changeCover': 'Change cover', 'journey.settings.coverImage': 'Kapak Görseli',
'journey.settings.addCover': 'Add cover image', 'journey.settings.changeCover': 'Kapağı değiştir',
'journey.settings.name': 'Name', 'journey.settings.addCover': 'Kapak görseli ekle',
'journey.settings.subtitle': 'Subtitle', 'journey.settings.name': 'İsim',
'journey.settings.subtitlePlaceholder': 'e.g. Thailand, Vietnam & Cambodia', 'journey.settings.subtitle': 'Alt başlık',
'journey.settings.endJourney': 'Archive Journey', 'journey.settings.subtitlePlaceholder': 'örn. Tayland, Vietnam ve Kamboçya',
'journey.settings.reopenJourney': 'Restore Journey', 'journey.settings.endJourney': "Journey'i Arşivle",
'journey.settings.archived': 'Journey archived', 'journey.settings.reopenJourney': "Journey'i geri aç",
'journey.settings.reopened': 'Journey reopened', 'journey.settings.archived': 'Journey arşivlendi',
'journey.settings.reopened': 'Journey yeniden açıldı',
'journey.settings.endDescription': 'journey.settings.endDescription':
'Hides the Live badge. You can reopen anytime.', 'Canlı rozetini gizler. İstediğiniz zaman yeniden açabilirsiniz.',
'journey.settings.delete': 'Delete', 'journey.settings.delete': 'Sil',
'journey.settings.deleteJourney': 'Delete Journey', 'journey.settings.deleteJourney': "Journey'i Sil",
'journey.settings.deleteMessage': 'journey.settings.deleteMessage':
'Delete "{title}"? All entries and photos will be lost.', '"{title}" silinsin mi? Tüm kayıtlar ve fotoğraflar kaybolacak.',
'journey.settings.saved': 'Settings saved', 'journey.settings.saved': 'Ayarlar kaydedildi',
'journey.settings.saveFailed': 'Failed to save', 'journey.settings.saveFailed': 'Kaydedilemedi',
'journey.settings.coverUpdated': 'Cover updated', 'journey.settings.coverUpdated': 'Kapak güncellendi',
'journey.settings.coverFailed': 'Upload failed', 'journey.settings.coverFailed': 'Yükleme başarısız oldu',
'journey.settings.failedToDelete': 'Failed to delete', 'journey.settings.failedToDelete': 'Silinemedi',
'journey.entries.deleteTitle': 'Delete Entry', 'journey.entries.deleteTitle': 'Kaydı Sil',
'journey.photosUploaded': '{count} photos uploaded', 'journey.photosUploaded': '{count} fotoğraf yüklendi',
'journey.photosAdded': '{count} photos added', 'journey.photosAdded': '{count} fotoğraf eklendi',
'journey.public.notFound': 'Not Found', 'journey.public.notFound': 'Bulunamadı',
'journey.public.notFoundMessage': 'journey.public.notFoundMessage':
"This journey doesn't exist or the link has expired.", "This journey doesn't exist or the link has expired.",
'journey.public.readOnly': 'Read-only · Public Journey', 'journey.public.readOnly': 'Salt okunur · Herkese açık Journey',
'journey.public.tagline': 'Travel Resource & Exploration Kit', 'journey.public.tagline': 'Seyahat Kaynak ve Keşif Kiti',
'journey.public.sharedVia': 'Shared via', 'journey.public.sharedVia': 'Şununla paylaşıldı:',
'journey.public.madeWith': 'Made with', 'journey.public.madeWith': 'İle yapıldı',
'journey.pdf.journeyBook': 'Journey Book', 'journey.pdf.journeyBook': 'Journey Kitabı',
'journey.pdf.madeWith': 'Made with TREK', 'journey.pdf.madeWith': 'TREK ile Yapıldı',
'journey.pdf.day': 'Day', 'journey.pdf.day': 'Gün',
'journey.pdf.theEnd': 'The End', 'journey.pdf.theEnd': 'Son',
'journey.pdf.saveAsPdf': 'Save as PDF', 'journey.pdf.saveAsPdf': 'PDF olarak Kaydet',
'journey.pdf.pages': 'pages', 'journey.pdf.pages': 'sayfa',
'journey.picker.tripPeriod': 'Trip Period', 'journey.picker.tripPeriod': 'Seyahat Dönemi',
'journey.picker.dateRange': 'Date Range', 'journey.picker.dateRange': 'Tarih Aralığı',
'journey.picker.allPhotos': 'All Photos', 'journey.picker.allPhotos': 'Tüm Fotoğraflar',
'journey.picker.albums': 'Albums', 'journey.picker.albums': 'Albümler',
'journey.picker.selected': 'selected', 'journey.picker.selected': 'seçildi',
'journey.picker.addTo': 'Add to', 'journey.picker.addTo': 'Ekle:',
'journey.picker.newGallery': 'New Gallery', 'journey.picker.newGallery': 'Yeni Galeri',
'journey.picker.selectAll': 'Select all', 'journey.picker.selectAll': 'Tümünü seç',
'journey.picker.deselectAll': 'Deselect all', 'journey.picker.deselectAll': 'Tümünün seçimini kaldır',
'journey.picker.noAlbums': 'No albums found', 'journey.picker.noAlbums': 'Albüm bulunamadı',
'journey.picker.selectDate': 'Select date', 'journey.picker.selectDate': 'Tarih seç',
'journey.picker.search': 'Search', 'journey.picker.search': 'Ara',
'journey.editor.uploadingProgress': 'Yükleniyor {done}/{total}…', 'journey.editor.uploadingProgress': '{done}/{total} yükleniyor…',
'journey.editor.uploadFailed': 'Fotoğraf yüklenemedi', 'journey.editor.uploadFailed': 'Fotoğraf yüklenemedi',
'journey.editor.uploadPartialFailed': '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', 'journey.photosUploadFailed': 'Bazı fotoğraflar yüklenemedi',
}; };
export default journey; export default journey;
+79 -74
View File
@@ -1,95 +1,100 @@
import type { TranslationStrings } from '../types'; import type { TranslationStrings } from '../types';
const login: TranslationStrings = { const login: TranslationStrings = {
'login.error': 'Login failed. Please check your credentials.', 'login.error':
'login.tagline': 'Your Trips.\nYour Plan.', 'Giriş başarısız oldu. Lütfen kimlik bilgilerinizi kontrol edin.',
'login.tagline': 'Gezileriniz.\\nPlanınız.',
'login.description': 'login.description':
'Plan trips collaboratively with interactive maps, budgets, and real-time sync.', 'Etkileşimli haritalar, bütçeler ve gerçek zamanlı senkronizasyonla gezileri işbirliği içinde planlayın.',
'login.features.maps': 'Interactive Maps', 'login.features.maps': 'İnteraktif Haritalar',
'login.features.mapsDesc': 'Google Places, routes & clustering', 'login.features.mapsDesc': 'Google Rehber, rotalar ve kümeleme',
'login.features.realtime': 'Real-Time Sync', 'login.features.realtime': 'Gerçek Zamanlı Senkronizasyon',
'login.features.realtimeDesc': 'Plan together via WebSocket', 'login.features.realtimeDesc': 'WebSocket aracılığıyla birlikte plan yapın',
'login.features.budget': 'Budget Tracking', 'login.features.budget': 'Bütçe Takibi',
'login.features.budgetDesc': 'Categories, charts & per-person costs', 'login.features.budgetDesc': 'Kategoriler, grafikler ve kişi başı maliyetler',
'login.features.collab': 'Collaboration', 'login.features.collab': 'İşbirliği',
'login.features.collabDesc': 'Multi-user with shared trips', 'login.features.collabDesc': 'Paylaşılan gezilerle çok kullanıcılı',
'login.features.packing': 'Packing Lists', 'login.features.packing': 'Paketleme Listeleri',
'login.features.packingDesc': 'Categories, progress & suggestions', 'login.features.packingDesc': 'Kategoriler, ilerleme ve öneriler',
'login.features.bookings': 'Reservations', 'login.features.bookings': 'Rezervasyonlar',
'login.features.bookingsDesc': 'Flights, hotels, restaurants & more', 'login.features.bookingsDesc':
'login.features.files': 'Documents', 'Uçuşlar, oteller, restoranlar ve daha fazlası',
'login.features.filesDesc': 'Upload & manage documents', 'login.features.files': 'Belgeler',
'login.features.routes': 'Smart Routes', 'login.features.filesDesc': 'Belgeleri yükleyin ve yönetin',
'login.features.routesDesc': 'Auto-optimize & Google Maps export', 'login.features.routes': 'Akıllı Rotalar',
'login.selfHosted': 'Self-hosted · Open Source · Your data stays yours', 'login.features.routesDesc':
'login.title': 'Giriş yap', "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.subtitle': 'Tekrar hoş geldiniz',
'login.signingIn': 'Giriş yapılıyor…', 'login.signingIn': 'Oturum açılıyor…',
'login.signIn': 'Giriş yap', 'login.signIn': 'Oturum Aç',
'login.createAdmin': 'Create Admin Account', 'login.createAdmin': 'Yönetici Hesabı Oluştur',
'login.createAdminHint': 'Set up the first admin account for TREK.', 'login.createAdminHint': 'TREK için ilk yönetici hesabını kurun.',
'login.setNewPassword': 'Set New Password', 'login.setNewPassword': 'Yeni Şifre Belirle',
'login.setNewPasswordHint': 'login.setNewPasswordHint': 'Devam etmeden önce şifrenizi değiştirmelisiniz.',
'You must change your password before continuing.', 'login.createAccount': 'Hesap Oluşturmak',
'login.createAccount': 'Hesap oluştur', 'login.createAccountHint': 'Yeni bir hesap kaydedin.',
'login.createAccountHint': 'Register a new account.', 'login.creating': 'Oluşturuluyor…',
'login.creating': 'Creating…',
'login.noAccount': "Don't have an account?", 'login.noAccount': "Don't have an account?",
'login.hasAccount': 'Zaten hesabınız var mı?', 'login.hasAccount': 'Zaten bir hesabınız var mı?',
'login.register': 'Kayıt ol', 'login.register': 'Kayıt olmak',
'login.emailPlaceholder': 'your@email.com', 'login.emailPlaceholder': 'sizin@e-postanız.com',
'login.username': 'Kullanıcı adı', 'login.username': 'Kullanıcı adı',
'login.oidc.registrationDisabled': 'login.oidc.registrationDisabled':
'Registration is disabled. Contact your administrator.', 'Kayıt devre dışı bırakıldı. Yöneticinizle iletişime geçin.',
'login.oidc.noEmail': 'No email received from provider.', 'login.oidc.noEmail': 'Sağlayıcıdan e-posta alınmadı.',
'login.oidc.tokenFailed': 'Authentication failed.', 'login.oidc.tokenFailed': 'Kimlik doğrulama başarısız oldu.',
'login.oidc.invalidState': 'Invalid session. Please try again.', 'login.oidc.invalidState': 'Geçersiz oturum. Lütfen tekrar deneyin.',
'login.demoFailed': 'Demo login failed', 'login.demoFailed': 'Demo girişi başarısız oldu',
'login.oidcSignIn': 'Sign in with {name}', 'login.oidcSignIn': '{name} ile oturum açın',
'login.oidcOnly': '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': 'login.oidcLoggedOut':
'You have been logged out. Sign in again using your SSO provider.', 'Çıkış yaptınız. SSO sağlayıcınızı kullanarak tekrar oturum açın.',
'login.demoHint': 'Try the demo — no registration needed', 'login.demoHint': 'Demoyu deneyin; kayıt olmanıza gerek yok',
'login.mfaTitle': 'Two-factor authentication', 'login.mfaTitle': 'İki faktörlü kimlik doğrulama',
'login.mfaSubtitle': 'Enter the 6-digit code from your authenticator app.', 'login.mfaSubtitle': 'Kimlik doğrulayıcı uygulamanızdan 6 haneli kodu girin.',
'login.mfaCodeLabel': 'Verification code', 'login.mfaCodeLabel': 'Doğrulama kodu',
'login.mfaCodeRequired': 'Enter the code from your authenticator app.', 'login.mfaCodeRequired': 'Kimlik doğrulayıcı uygulamanızdan kodu girin.',
'login.mfaHint': 'Open Google Authenticator, Authy, or another TOTP app.', 'login.mfaHint':
'login.mfaBack': '← Back to sign in', "Google Authenticator'ı, Authy'yi veya başka bir TOTP uygulamasını açın.",
'login.mfaVerify': 'Verify', 'login.mfaBack': '← Oturum açmaya geri dön',
'login.invalidInviteLink': 'Invalid or expired invite link', 'login.mfaVerify': 'Doğrula',
'login.oidcFailed': 'OIDC login failed', 'login.invalidInviteLink': 'Geçersiz veya süresi dolmuş davet bağlantısı',
'login.usernameRequired': 'Username is required', 'login.oidcFailed': 'OIDC girişi başarısız oldu',
'login.passwordMinLength': 'Password must be at least 8 characters', 'login.usernameRequired': 'Kullanıcı adı gerekli',
'login.forgotPassword': 'Parolamı unuttum?', 'login.passwordMinLength': 'Şifre en az 8 karakter olmalıdır',
'login.forgotPasswordTitle': 'Reset your password', 'login.forgotPassword': 'Parolanızı mı unuttunuz?',
'login.forgotPasswordTitle': 'Şifrenizi sıfırlayın',
'login.forgotPasswordBody': 'login.forgotPasswordBody':
"Enter the email address you signed up with. If an account exists, we'll send a reset link.", "Enter the email address you signed up with. If an account exists, we'll send a reset link.",
'login.forgotPasswordSubmit': 'Send reset link', 'login.forgotPasswordSubmit': 'Sıfırlama bağlantısını gönder',
'login.forgotPasswordSentTitle': 'Check your email', 'login.forgotPasswordSentTitle': 'E-postanızı kontrol edin',
'login.forgotPasswordSentBody': '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': '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.", "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.backToLogin': 'Oturum açmak için geri dön',
'login.newPassword': 'New password', 'login.newPassword': 'Yeni Şifre',
'login.confirmPassword': 'Confirm new password', 'login.confirmPassword': 'Yeni şifreyi onayla',
'login.passwordsDontMatch': 'Parolalar eşleşmiyor', 'login.passwordsDontMatch': 'Şifreler eşleşmiyor',
'login.mfaCode': '2FA code', 'login.mfaCode': '2FA kodu',
'login.resetPasswordTitle': 'Set a new password', 'login.resetPasswordTitle': 'Yeni bir şifre belirleyin',
'login.resetPasswordBody': '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': 'login.resetPasswordMfaBody':
'Enter your 2FA code or a backup code to complete the reset.', 'Sıfırlamayı tamamlamak için 2FA kodunuzu veya yedek kodu girin.',
'login.resetPasswordSubmit': 'Reset password', 'login.resetPasswordSubmit': 'Şifreyi sıfırla',
'login.resetPasswordVerify': 'Verify & reset', 'login.resetPasswordVerify': 'Doğrula ve sıfırla',
'login.resetPasswordSuccessTitle': 'Password updated', 'login.resetPasswordSuccessTitle': 'Şifre güncellendi',
'login.resetPasswordSuccessBody': 'login.resetPasswordSuccessBody':
'You can now sign in with your new password.', 'Artık yeni şifrenizle giriş yapabilirsiniz.',
'login.resetPasswordInvalidLink': 'Invalid reset link', 'login.resetPasswordInvalidLink': 'Geçersiz sıfırlama bağlantısı',
'login.resetPasswordInvalidLinkBody': 'login.resetPasswordInvalidLinkBody':
'This link is missing or broken. Request a new one to continue.', 'Bu bağlantı eksik veya bozuk. Devam etmek için yeni bir tane isteyin.',
'login.resetPasswordFailed': 'Reset failed. The link may have expired.', 'login.resetPasswordFailed':
'Sıfırlama başarısız oldu. Bağlantının süresi dolmuş olabilir.',
}; };
export default login; export default login;
+3 -3
View File
@@ -1,8 +1,8 @@
import type { TranslationStrings } from '../types'; import type { TranslationStrings } from '../types';
const map: TranslationStrings = { const map: TranslationStrings = {
'map.connections': 'Connections', 'map.connections': 'Bağlantılar',
'map.showConnections': 'Show booking routes', 'map.showConnections': 'Rezervasyon rotalarını göster',
'map.hideConnections': 'Hide booking routes', 'map.hideConnections': 'Rezervasyon rotalarını gizle',
}; };
export default map; export default map;
+20 -19
View File
@@ -1,24 +1,25 @@
import type { TranslationStrings } from '../types'; import type { TranslationStrings } from '../types';
const members: TranslationStrings = { const members: TranslationStrings = {
'members.shareTrip': 'Share Trip', 'members.shareTrip': 'Seyahati Paylaş',
'members.inviteUser': 'Invite User', 'members.inviteUser': 'Kullanıcı davet et',
'members.selectUser': 'Select user…', 'members.selectUser': 'Kullanıcı seç…',
'members.invite': 'Invite', 'members.invite': 'Davet et',
'members.allHaveAccess': 'All users already have access.', 'members.allHaveAccess': 'Tüm kullanıcıların zaten erişimi var.',
'members.access': 'Access', 'members.access': 'Erişim',
'members.person': 'person', 'members.person': 'kişi',
'members.persons': 'persons', 'members.persons': 'kişi',
'members.you': 'you', 'members.you': 'siz',
'members.owner': 'Owner', 'members.owner': 'Sahip',
'members.leaveTrip': 'Leave trip', 'members.leaveTrip': 'Seyahatten ayrıl',
'members.removeAccess': 'Remove access', 'members.removeAccess': 'Erişimi kaldır',
'members.confirmLeave': 'Leave trip? You will lose access.', 'members.confirmLeave':
'members.confirmRemove': 'Remove access for this user?', 'Seyahatten ayrılmak İstiyor musunuz? Erişiminizi kaybedersiniz.',
'members.loadError': 'Failed to load members', 'members.confirmRemove': 'Bu kullanıcının erişimi kaldırılsın mı?',
'members.added': 'added', 'members.loadError': 'Üyeler yüklenemedi',
'members.addError': 'Failed to add', 'members.added': 'eklendi',
'members.removed': 'Member removed', 'members.addError': 'Eklenemedi',
'members.removeError': 'Failed to remove', 'members.removed': 'Üye kaldırıldı',
'members.removeError': 'Kaldırılamadı',
}; };
export default members; export default members;
+67 -66
View File
@@ -1,80 +1,81 @@
import type { TranslationStrings } from '../types'; import type { TranslationStrings } from '../types';
const memories: TranslationStrings = { const memories: TranslationStrings = {
'memories.title': 'Photos', 'memories.title': 'Fotoğraflar',
'memories.notConnected': '{provider_name} not connected', 'memories.notConnected': '{provider_name} bağlı değil',
'memories.notConnectedHint': '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': 'memories.notConnectedMultipleHint':
'Connect any of these photo providers: {provider_names} in Settings to be able add photos to this trip.', "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': 'Add dates to your trip to load photos.', 'memories.noDates': 'Fotoğrafları yüklemek için seyahatinize tarih ekleyin.',
'memories.noPhotos': 'No photos found', 'memories.noPhotos': 'Fotoğraf bulunamadı',
'memories.noPhotosHint': 'memories.noPhotosHint':
"No photos found in {provider_name} for this trip's date range.", "No photos found in {provider_name} for this trip's date range.",
'memories.photosFound': 'photos', 'memories.photosFound': 'fotoğraf',
'memories.fromOthers': 'from others', 'memories.fromOthers': 'başkalarından',
'memories.sharePhotos': 'Share photos', 'memories.sharePhotos': 'Fotoğrafları paylaş',
'memories.sharing': 'Sharing', 'memories.sharing': 'Paylaşma',
'memories.reviewTitle': 'Review your photos', 'memories.reviewTitle': 'Fotoğraflarınızı gözden geçirin',
'memories.reviewHint': 'Click photos to exclude them from sharing.', 'memories.reviewHint': 'Paylaşımdan hariç tutmak için fotoğraflara tıklayın.',
'memories.shareCount': 'Share {count} photos', 'memories.shareCount': '{count} Fotoğraf paylaş',
'memories.providerUrl': 'Server URL', 'memories.providerUrl': "Sunucu URL'si",
'memories.providerApiKey': 'API Key', 'memories.providerApiKey': 'API Anahtarı',
'memories.providerUsername': 'Username', 'memories.providerUsername': 'Kullanıcı adı',
'memories.providerPassword': 'Password', 'memories.providerPassword': 'Şifre',
'memories.providerOTP': 'MFA code (if enabled)', 'memories.providerOTP': 'MFA kodu (etkinse)',
'memories.skipSSLVerification': 'Skip SSL certificate verification', 'memories.skipSSLVerification': 'SSL Sertifika doğrulamasını atla',
'memories.immichAutoUpload': 'Mirror journey photos to Immich on upload', 'memories.immichAutoUpload':
"Journey fotoğraflarını yüklerken Immich'e yansıt",
'memories.providerUrlHintSynology': 'memories.providerUrlHintSynology':
'Include the Photos app path in the URL, e.g. https://nas:5001/photo', "URL'ye Photos uygulama yolunu ekleyin, örn. https://nas:5001/photo",
'memories.testConnection': 'Test connection', 'memories.testConnection': 'Bağlantıyı test et',
'memories.testShort': 'Test', 'memories.testShort': 'Dene',
'memories.testFirst': 'Test connection first', 'memories.testFirst': 'Önce bağlantıyı test edin',
'memories.connected': 'Connected', 'memories.connected': 'Bağlı',
'memories.disconnected': 'Not connected', 'memories.disconnected': 'Bağlı değil',
'memories.connectionSuccess': 'Connected to {provider_name}', 'memories.connectionSuccess': '{provider_name} ile bağlandı',
'memories.connectionError': 'Could not connect to {provider_name}', 'memories.connectionError': '{provider_name} ile bağlanılamadı',
'memories.saved': '{provider_name} settings saved', 'memories.saved': '{provider_name} ayarları kaydedildi',
'memories.providerDisconnectedBanner': 'memories.providerDisconnectedBanner':
'Your {provider_name} connection is lost. Reconnect in Settings to view photos.', "{provider_name} Bağlantınız kesildi. Fotoğrafları görmek için Ayarlar'dan yeniden bağlanın.",
'memories.saveError': 'Could not save {provider_name} settings', 'memories.saveError': '{provider_name} Ayarları kaydedilemedi',
'memories.addPhotos': 'Add photos', 'memories.addPhotos': 'Fotoğraf ekle',
'memories.linkAlbum': 'Link Album', 'memories.linkAlbum': 'Albüm Bağla',
'memories.selectAlbum': 'Select {provider_name} Album', 'memories.selectAlbum': '{provider_name} Albümü Seç',
'memories.selectAlbumMultiple': 'Select Album', 'memories.selectAlbumMultiple': 'Albüm Seç',
'memories.noAlbums': 'No albums found', 'memories.noAlbums': 'Albüm bulunamadı',
'memories.syncAlbum': 'Sync album', 'memories.syncAlbum': 'Albümü senkronize et',
'memories.unlinkAlbum': 'Unlink album', 'memories.unlinkAlbum': 'Albüm bağlantısını kaldır',
'memories.photos': 'photos', 'memories.photos': 'fotoğraf',
'memories.selectPhotos': 'Select photos from {provider_name}', 'memories.selectPhotos': '{provider_name} Fotoğraflarını seç',
'memories.selectPhotosMultiple': 'Select Photos', 'memories.selectPhotosMultiple': 'Fotoğraf Seç',
'memories.selectHint': 'Tap photos to select them.', 'memories.selectHint': 'Seçmek için fotoğraflara dokunun.',
'memories.selected': 'selected', 'memories.selected': 'seçildi',
'memories.addSelected': 'Add {count} photos', 'memories.addSelected': '{count} Fotoğraf ekle',
'memories.alreadyAdded': 'Added', 'memories.alreadyAdded': 'Eklendi',
'memories.private': 'Private', 'memories.private': 'Gizli',
'memories.stopSharing': 'Stop sharing', 'memories.stopSharing': 'Paylaşımı durdur',
'memories.oldest': 'Oldest first', 'memories.oldest': 'En eski önce',
'memories.newest': 'Newest first', 'memories.newest': 'En yeni önce',
'memories.allLocations': 'All locations', 'memories.allLocations': 'Tüm konumlar',
'memories.tripDates': 'Trip dates', 'memories.tripDates': 'Seyahat tarihleri',
'memories.allPhotos': 'All photos', 'memories.allPhotos': 'Tüm fotoğraflar',
'memories.confirmShareTitle': 'Share with trip members?', 'memories.confirmShareTitle': 'Seyahat üyeleriyle paylaşılsın mı?',
'memories.confirmShareHint': 'memories.confirmShareHint':
'{count} photos will be visible to all members of this trip. You can make individual photos private later.', '{count} fotoğraf bu seyahatin tüm üyelerine görünür olacak. Daha sonra tek tek gizli yapabilirsiniz.',
'memories.confirmShareButton': 'Share photos', 'memories.confirmShareButton': 'Fotoğrafları paylaş',
'memories.error.loadAlbums': 'Failed to load albums', 'memories.error.loadAlbums': 'Albümler yüklenemedi',
'memories.error.linkAlbum': 'Failed to link album', 'memories.error.linkAlbum': 'Albüm bağlanamadı',
'memories.error.unlinkAlbum': 'Failed to unlink album', 'memories.error.unlinkAlbum': 'Albüm bağlantısı kaldırılamadı',
'memories.error.syncAlbum': 'Failed to sync album', 'memories.error.syncAlbum': 'Albüm senkronize edilemedi',
'memories.error.loadPhotos': 'Failed to load photos', 'memories.error.loadPhotos': 'Fotoğraflar yüklenemedi',
'memories.error.addPhotos': 'Failed to add photos', 'memories.error.addPhotos': 'Fotoğraflar eklenemedi',
'memories.error.removePhoto': 'Failed to remove photo', 'memories.error.removePhoto': 'Fotoğraf kaldırılamadı',
'memories.error.toggleSharing': 'Failed to update sharing', 'memories.error.toggleSharing': 'Paylaşım güncellenemedi',
'memories.saveRouteNotConfigured': 'memories.saveRouteNotConfigured':
'Save route is not configured for this provider', 'Bu sağlayıcı için kaydetme yolu yapılandırılmamış',
'memories.testRouteNotConfigured': 'memories.testRouteNotConfigured':
'Test route is not configured for this provider', 'Bu sağlayıcı için test yolu yapılandırılmamış',
'memories.fillRequiredFields': 'Please fill all required fields', 'memories.fillRequiredFields': 'Lütfen tüm zorunlu alanları doldurun',
}; };
export default memories; export default memories;
+7 -7
View File
@@ -1,19 +1,19 @@
import type { TranslationStrings } from '../types'; import type { TranslationStrings } from '../types';
const nav: TranslationStrings = { const nav: TranslationStrings = {
'nav.trip': 'Gezi', 'nav.trip': 'Seyahat',
'nav.share': 'Paylaş', 'nav.share': 'Paylaş',
'nav.settings': 'Ayarlar', 'nav.settings': 'Ayarlar',
'nav.admin': 'Yönetim', 'nav.admin': 'Yönetici',
'nav.logout': 'Çıkış yap', 'nav.logout': 'Çıkış yap',
'nav.lightMode': 'Açık tema', 'nav.lightMode': 'Açık Tema',
'nav.darkMode': 'Koyu tema', 'nav.darkMode': 'Koyu Tema',
'nav.autoMode': 'Otomatik tema', 'nav.autoMode': 'Otomatik Tema',
'nav.administrator': 'Yönetici', 'nav.administrator': 'Yönetici',
'nav.myTrips': 'Gezilerim', 'nav.myTrips': 'Seyahatlerim',
'nav.profile': 'Profil', 'nav.profile': 'Profil',
'nav.bottomSettings': 'Ayarlar', 'nav.bottomSettings': 'Ayarlar',
'nav.bottomAdmin': 'Yönetim ayarları', 'nav.bottomAdmin': 'Yönetici Ayarları',
'nav.bottomLogout': 'Çıkış', 'nav.bottomLogout': 'Çıkış',
'nav.bottomAdminBadge': 'Yönetici', 'nav.bottomAdminBadge': 'Yönetici',
}; };
+39 -35
View File
@@ -1,41 +1,45 @@
import type { TranslationStrings } from '../types'; import type { TranslationStrings } from '../types';
const notif: TranslationStrings = { const notif: TranslationStrings = {
'notif.test.title': '[Test] Notification', 'notif.test.title': '[Test] Bildirim',
'notif.test.simple.text': 'This is a simple test notification.', 'notif.test.simple.text': 'Bu basit bir test bildirimidir.',
'notif.test.boolean.text': 'Do you accept this test notification?', 'notif.test.boolean.text': 'Bu test bildirimini kabul ediyor musunuz?',
'notif.test.navigate.text': 'Click below to navigate to the dashboard.', 'notif.test.navigate.text': 'Gösterge paneline gitmek için aşağıya tıklayın.',
'notif.trip_invite.title': 'Trip Invitation', 'notif.trip_invite.title': 'Seyahat Daveti',
'notif.trip_invite.text': '{actor} invited you to {trip}', 'notif.trip_invite.text': '{actor} sizi {trip} seyahatine davet etti',
'notif.booking_change.title': 'Booking Updated', 'notif.booking_change.title': 'Rezervasyon Güncellendi',
'notif.booking_change.text': '{actor} updated a booking in {trip}', 'notif.booking_change.text':
'notif.trip_reminder.title': 'Trip Reminder', '{actor}, {trip} içindeki bir rezervasyonu güncelledi',
'notif.trip_reminder.text': 'Your trip {trip} is coming up soon!', 'notif.trip_reminder.title': 'Seyahat Hatırlatıcısı',
'notif.todo_due.title': 'To-do due', 'notif.trip_reminder.text': '{trip} Seyahatiniz yaklaşıyor!',
'notif.todo_due.text': '{todo} in {trip} is due on {due}', 'notif.todo_due.title': 'Yapılacak vadesi',
'notif.vacay_invite.title': 'Vacay Fusion Invite', 'notif.todo_due.text': '{trip} içindeki {todo} — son tarih: {due}',
'notif.vacay_invite.text': '{actor} invited you to fuse vacation plans', 'notif.vacay_invite.title': 'Vacay Birleştirme Daveti',
'notif.photos_shared.title': 'Photos Shared', 'notif.vacay_invite.text':
'notif.photos_shared.text': '{actor} shared {count} photo(s) in {trip}', '{actor} tatil planlarını birleştirmeniz için sizi davet etti',
'notif.collab_message.title': 'New Message', 'notif.photos_shared.title': 'Fotoğraflar Paylaşıldı',
'notif.collab_message.text': '{actor} sent a message in {trip}', 'notif.photos_shared.text':
'notif.packing_tagged.title': 'Packing Assignment', '{actor}, {trip} içinde {count} fotoğraf paylaştı',
'notif.packing_tagged.text': '{actor} assigned you to {category} in {trip}', 'notif.collab_message.title': 'Yeni Mesaj',
'notif.version_available.title': 'New Version Available', 'notif.collab_message.text': '{actor}, {trip} içinde mesaj gönderdi',
'notif.version_available.text': 'TREK {version} is now available', 'notif.packing_tagged.title': 'Paket listesi ataması',
'notif.action.view_trip': 'View Trip', 'notif.packing_tagged.text':
'notif.action.view_collab': 'View Messages', '{actor} sizi {trip} içinde {category} kategorisine atadı',
'notif.action.view_packing': 'View Packing', 'notif.version_available.title': 'Yeni Sürüm Mevcut',
'notif.action.view_photos': 'View Photos', 'notif.version_available.text': 'TREK {version} artık kullanılabilir',
'notif.action.view_vacay': 'View Vacay', 'notif.action.view_trip': 'Seyahati Görüntüle',
'notif.action.view_admin': 'Go to Admin', 'notif.action.view_collab': 'Mesajları Görüntüle',
'notif.action.view': 'View', 'notif.action.view_packing': 'Paket listesini görüntüle',
'notif.action.accept': 'Accept', 'notif.action.view_photos': 'Fotoğrafları Görüntüle',
'notif.action.decline': 'Decline', 'notif.action.view_vacay': "Vacay'ı Görüntüle",
'notif.generic.title': 'Notification', 'notif.action.view_admin': 'Yöneticiye git',
'notif.generic.text': 'You have a new notification', 'notif.action.view': 'Görüntüle',
'notif.dev.unknown_event.title': '[DEV] Unknown Event', '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': '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; export default notif;
+30 -29
View File
@@ -1,38 +1,39 @@
import type { TranslationStrings } from '../types'; import type { TranslationStrings } from '../types';
const notifications: TranslationStrings = { const notifications: TranslationStrings = {
'notifications.title': 'Notifications', 'notifications.title': 'Bildirimler',
'notifications.markAllRead': 'Mark all read', 'notifications.markAllRead': 'Tümünü okundu işaretle',
'notifications.deleteAll': 'Delete all', 'notifications.deleteAll': 'Tümünü sil',
'notifications.showAll': 'Show all notifications', 'notifications.showAll': 'Tüm bildirimleri göster',
'notifications.empty': 'No notifications', 'notifications.empty': 'Bildirim yok',
'notifications.emptyDescription': "You're all caught up!", 'notifications.emptyDescription': "You're all caught up!",
'notifications.all': 'All', 'notifications.all': 'Tümü',
'notifications.unreadOnly': 'Unread', 'notifications.unreadOnly': 'Okunmamış',
'notifications.markRead': 'Mark as read', 'notifications.markRead': 'Okundu işaretle',
'notifications.markUnread': 'Mark as unread', 'notifications.markUnread': 'Okunmadı işaretle',
'notifications.delete': 'Delete', 'notifications.delete': 'Sil',
'notifications.system': 'System', 'notifications.system': 'Sistem',
'notifications.synologySessionCleared.title': 'Synology Photos disconnected', 'notifications.synologySessionCleared.title':
'Synology Photos bağlantısı kesildi',
'notifications.synologySessionCleared.text': 'notifications.synologySessionCleared.text':
'Your server or account changed — go to Settings to test your connection again.', "Sunucunuz veya hesabınız değişti — bağlantıyı test etmek için Ayarlar'a gidin.",
'notifications.versionAvailable.title': 'Update Available', 'notifications.versionAvailable.title': 'Güncelleme Mevcut',
'notifications.versionAvailable.text': 'TREK {version} is now available.', 'notifications.versionAvailable.text': 'TREK {version} artık kullanılabilir.',
'notifications.versionAvailable.button': 'View Details', 'notifications.versionAvailable.button': 'Ayrıntıları Görüntüle',
'notifications.test.title': 'Test notification from {actor}', 'notifications.test.title': '{actor} Kaynaklı test bildirimi',
'notifications.test.text': 'This is a simple test notification.', 'notifications.test.text': 'Bu basit bir test bildirimidir.',
'notifications.test.booleanTitle': '{actor} asks for your approval', 'notifications.test.booleanTitle': '{actor} onayınızı istiyor',
'notifications.test.booleanText': 'notifications.test.booleanText':
'This is a test boolean notification. Choose an action below.', 'Bu bir test boolean bildirimidir. Aşağıdan bir eylem seçin.',
'notifications.test.accept': 'Approve', 'notifications.test.accept': 'Onayla',
'notifications.test.decline': 'Decline', 'notifications.test.decline': 'Reddet',
'notifications.test.navigateTitle': 'Check something out', 'notifications.test.navigateTitle': 'Bir şeye göz atın',
'notifications.test.navigateText': 'This is a test navigate notification.', 'notifications.test.navigateText': 'Bu bir test navigasyon bildirimidir.',
'notifications.test.goThere': 'Go there', 'notifications.test.goThere': 'Git',
'notifications.test.adminTitle': 'Admin broadcast', 'notifications.test.adminTitle': 'Yönetici yayını',
'notifications.test.adminText': 'notifications.test.adminText':
'{actor} sent a test notification to all admins.', '{actor} tüm yöneticilere test bildirimi gönderdi.',
'notifications.test.tripTitle': '{actor} posted in your trip', 'notifications.test.tripTitle': '{actor} seyahatinizde bir şey paylaştı',
'notifications.test.tripText': 'Test notification for trip "{trip}".', 'notifications.test.tripText': '"{trip}" seyahati için test bildirimi.',
}; };
export default notifications; export default notifications;
+66 -66
View File
@@ -1,99 +1,99 @@
import type { TranslationStrings } from '../types'; import type { TranslationStrings } from '../types';
const oauth: TranslationStrings = { const oauth: TranslationStrings = {
'oauth.scope.group.trips': 'Trips', 'oauth.scope.group.trips': 'Geziler',
'oauth.scope.group.places': 'Places', 'oauth.scope.group.places': 'Yer',
'oauth.scope.group.atlas': 'Atlas', 'oauth.scope.group.atlas': 'Atlas',
'oauth.scope.group.packing': 'Packing', 'oauth.scope.group.packing': 'Ambalaj',
'oauth.scope.group.todos': 'To-dos', 'oauth.scope.group.todos': 'Yapılacaklar',
'oauth.scope.group.budget': 'Budget', 'oauth.scope.group.budget': 'Bütçe',
'oauth.scope.group.reservations': 'Reservations', 'oauth.scope.group.reservations': 'Rezervasyonlar',
'oauth.scope.group.collab': 'Collaboration', 'oauth.scope.group.collab': 'İşbirliği',
'oauth.scope.group.notifications': 'Notifications', 'oauth.scope.group.notifications': 'Bildirimler',
'oauth.scope.group.vacay': 'Vacation', 'oauth.scope.group.vacay': 'Tatil',
'oauth.scope.group.geo': 'Geo', 'oauth.scope.group.geo': 'Coğrafi',
'oauth.scope.group.weather': 'Weather', 'oauth.scope.group.weather': 'Hava durumu',
'oauth.scope.group.journey': 'Journey', 'oauth.scope.group.journey': 'Seyahat',
'oauth.scope.trips:read.label': 'View trips & itineraries', 'oauth.scope.trips:read.label': 'Seyahatleri ve programları görüntüle',
'oauth.scope.trips:read.description': 'oauth.scope.trips:read.description':
'Read trips, days, day notes, and members', 'Seyahatleri, günleri, gün notlarını ve üyeleri oku',
'oauth.scope.trips:write.label': 'Edit trips & itineraries', 'oauth.scope.trips:write.label': 'Seyahatleri ve programları düzenle',
'oauth.scope.trips:write.description': 'oauth.scope.trips:write.description':
'Create and update trips, days, notes, and manage members', 'Seyahatleri, günleri, notları oluştur ve güncelle; üyeleri yönet',
'oauth.scope.trips:delete.label': 'Delete trips', 'oauth.scope.trips:delete.label': 'Seyahatleri sil',
'oauth.scope.trips:delete.description': 'oauth.scope.trips:delete.description':
'Permanently delete entire trips — this action is irreversible', 'Tüm seyahatleri kalıcı olarak sil — bu işlem geri alınamaz',
'oauth.scope.trips:share.label': 'Manage share links', 'oauth.scope.trips:share.label': 'Paylaşım bağlantılarını yönet',
'oauth.scope.trips:share.description': 'oauth.scope.trips:share.description':
'Create, update, and revoke public share links for trips', 'Seyahatler için herkese açık paylaşım bağlantıları oluştur, güncelle ve iptal et',
'oauth.scope.places:read.label': 'View places & map data', 'oauth.scope.places:read.label': 'Yerleri ve harita verilerini görüntüle',
'oauth.scope.places:read.description': 'oauth.scope.places:read.description':
'Read places, day assignments, tags, and categories', 'Yerleri, gün atamalarını, etiketleri ve kategorileri oku',
'oauth.scope.places:write.label': 'Manage places', 'oauth.scope.places:write.label': 'Yerleri yönet',
'oauth.scope.places:write.description': 'oauth.scope.places:write.description':
'Create, update, and delete places, assignments, and tags', 'Yerleri, atamaları ve etiketleri oluştur, güncelle ve sil',
'oauth.scope.atlas:read.label': 'View Atlas', 'oauth.scope.atlas:read.label': "Atlas'ı Görüntüle",
'oauth.scope.atlas:read.description': 'oauth.scope.atlas:read.description':
'Read visited countries, regions, and bucket list', 'Ziyaret edilen ülkeleri, bölgeleri ve yapılacaklar listesini oku',
'oauth.scope.atlas:write.label': 'Manage Atlas', 'oauth.scope.atlas:write.label': "Atlas'ı Yönet",
'oauth.scope.atlas:write.description': 'oauth.scope.atlas:write.description':
'Mark countries and regions visited, manage bucket list', 'Ülke ve bölgeleri ziyaret edildi olarak işaretle, yapılacaklar listesini yönet',
'oauth.scope.packing:read.label': 'View packing lists', 'oauth.scope.packing:read.label': 'Paket listelerini görüntüle',
'oauth.scope.packing:read.description': 'oauth.scope.packing:read.description':
'Read packing items, bags, and category assignees', 'Paket öğelerini, çantaları ve kategori atamalarını oku',
'oauth.scope.packing:write.label': 'Manage packing lists', 'oauth.scope.packing:write.label': 'Paket listelerini yönet',
'oauth.scope.packing:write.description': 'oauth.scope.packing:write.description':
'Add, update, delete, toggle, and reorder packing items and bags', 'Paket öğelerini ve çantaları ekle, güncelle, sil, işaretle ve yeniden sırala',
'oauth.scope.todos:read.label': 'View to-do lists', 'oauth.scope.todos:read.label': 'Yapılacak listelerini görüntüle',
'oauth.scope.todos:read.description': 'oauth.scope.todos:read.description':
'Read trip to-do items and category assignees', 'Seyahat yapılacak öğelerini ve kategori atamalarını oku',
'oauth.scope.todos:write.label': 'Manage to-do lists', 'oauth.scope.todos:write.label': 'Yapılacak listelerini yönet',
'oauth.scope.todos:write.description': 'oauth.scope.todos:write.description':
'Create, update, toggle, delete, and reorder to-do items', 'Yapılacak öğeleri oluştur, güncelle, işaretle, sil ve yeniden sırala',
'oauth.scope.budget:read.label': 'View budget', 'oauth.scope.budget:read.label': 'Bütçeyi görüntüle',
'oauth.scope.budget:read.description': 'oauth.scope.budget:read.description':
'Read budget items and expense breakdown', 'Bütçe kalemlerini ve harcama dökümünü oku',
'oauth.scope.budget:write.label': 'Manage budget', 'oauth.scope.budget:write.label': 'Bütçeyi yönet',
'oauth.scope.budget:write.description': 'oauth.scope.budget:write.description':
'Create, update, and delete budget items', 'Bütçe kalemlerini oluştur, güncelle ve sil',
'oauth.scope.reservations:read.label': 'View reservations', 'oauth.scope.reservations:read.label': 'Rezervasyonları görüntüle',
'oauth.scope.reservations:read.description': 'oauth.scope.reservations:read.description':
'Read reservations and accommodation details', 'Rezervasyonları ve konaklama ayrıntılarını oku',
'oauth.scope.reservations:write.label': 'Manage reservations', 'oauth.scope.reservations:write.label': 'Rezervasyonları yönet',
'oauth.scope.reservations:write.description': 'oauth.scope.reservations:write.description':
'Create, update, delete, and reorder reservations', 'Rezervasyonları oluştur, güncelle, sil ve yeniden sırala',
'oauth.scope.collab:read.label': 'View collaboration', 'oauth.scope.collab:read.label': 'İşbirliğini görüntüle',
'oauth.scope.collab:read.description': 'oauth.scope.collab:read.description':
'Read collab notes, polls, and messages', 'İşbirliği notlarını, anketleri ve mesajları oku',
'oauth.scope.collab:write.label': 'Manage collaboration', 'oauth.scope.collab:write.label': 'İşbirliğini yönet',
'oauth.scope.collab:write.description': 'oauth.scope.collab:write.description':
'Create, update, and delete collab notes, polls, and messages', 'İşbirliği notlarını, anketleri ve mesajları oluştur, güncelle ve sil',
'oauth.scope.notifications:read.label': 'View notifications', 'oauth.scope.notifications:read.label': 'Bildirimleri görüntüle',
'oauth.scope.notifications:read.description': 'oauth.scope.notifications:read.description':
'Read in-app notifications and unread counts', 'Uygulama içi bildirimleri ve okunmamış sayıları oku',
'oauth.scope.notifications:write.label': 'Manage notifications', 'oauth.scope.notifications:write.label': 'Bildirimleri yönet',
'oauth.scope.notifications:write.description': 'oauth.scope.notifications:write.description':
'Mark notifications as read and respond to them', 'Bildirimleri okundu işaretle ve yanıtla',
'oauth.scope.vacay:read.label': 'View vacation plans', 'oauth.scope.vacay:read.label': 'Tatil planlarını görüntüle',
'oauth.scope.vacay:read.description': 'oauth.scope.vacay:read.description':
'Read vacation planning data, entries, and stats', 'Tatil planlama verilerini, kayıtları ve istatistikleri oku',
'oauth.scope.vacay:write.label': 'Manage vacation plans', 'oauth.scope.vacay:write.label': 'Tatil planlarını yönet',
'oauth.scope.vacay:write.description': 'oauth.scope.vacay:write.description':
'Create and manage vacation entries, holidays, and team plans', 'Tatil kayıtlarını, resmi tatilleri ve ekip planlarını oluştur ve yönet',
'oauth.scope.geo:read.label': 'Maps & geocoding', 'oauth.scope.geo:read.label': 'Haritalar ve coğrafi kodlama',
'oauth.scope.geo:read.description': 'oauth.scope.geo:read.description':
'Search locations, resolve map URLs, and reverse geocode coordinates', "Konum ara, harita URL'lerini çöz ve koordinatları ters coğrafi kodla",
'oauth.scope.weather:read.label': 'Weather forecasts', 'oauth.scope.weather:read.label': 'Hava durumu tahminleri',
'oauth.scope.weather:read.description': 'oauth.scope.weather:read.description':
'Fetch weather forecasts for trip locations and dates', 'Seyahat konumları ve tarihleri için hava durumu tahminlerini getir',
'oauth.scope.journey:read.label': 'View journeys', 'oauth.scope.journey:read.label': "Journey'leri görüntüle",
'oauth.scope.journey:read.description': 'oauth.scope.journey:read.description':
'Read journeys, entries, and contributor list', "Journey'leri, kayıtları ve katkıda bulunan listesini oku",
'oauth.scope.journey:write.label': 'Manage journeys', 'oauth.scope.journey:write.label': "Journey'leri yönet",
'oauth.scope.journey:write.description': 'oauth.scope.journey:write.description':
'Create, update, and delete journeys and their entries', "Journey'leri ve kayıtlarını oluştur, güncelle ve sil",
'oauth.scope.journey:share.label': 'Manage journey links', 'oauth.scope.journey:share.label': 'Journey bağlantılarını yönet',
'oauth.scope.journey:share.description': '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; export default oauth;
+85 -175
View File
@@ -1,186 +1,96 @@
import type { TranslationStrings } from '../types'; import type { TranslationStrings } from '../types';
const packing: TranslationStrings = { const packing: TranslationStrings = {
'packing.title': 'Packing List', 'packing.title': 'Paket Listesi',
'packing.empty': 'Packing list is empty', 'packing.empty': 'Paket listesi boş',
'packing.import': 'Import', 'packing.import': 'İçe aktar',
'packing.importTitle': 'Import Packing List', 'packing.importTitle': 'Paket listesini içe aktar',
'packing.importHint': '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': 'packing.importPlaceholder':
'Hygiene, Toothbrush\nClothing, T-Shirts, 200\nDocuments, Passport, , Carry-on\nElectronics, Charger, 50, Suitcase, checked', 'Hijyen, Diş fırçası\\nGiyim, Tişört, 200\\nBelgeler, Pasaport, , El bagajı\\nElektronik, Şarj cihazı, 50, Bavul, işaretli',
'packing.importCsv': 'Load CSV/TXT', 'packing.importCsv': 'CSV/TXT Yükle',
'packing.importAction': 'Import {count}', 'packing.importAction': '{count} Öğeyi içe aktar',
'packing.importSuccess': '{count} items imported', 'packing.importSuccess': '{count} öğe içe aktarıldı',
'packing.importError': 'Import failed', 'packing.importError': 'İçe aktarma başarısız oldu',
'packing.importEmpty': 'No items to import', 'packing.importEmpty': 'İçe aktarılacak öğe yok',
'packing.progress': '{packed} of {total} packed ({percent}%)', 'packing.progress': '{total} öğeden {packed} paketlendi (%{percent})',
'packing.clearChecked': 'Remove {count} checked', 'packing.clearChecked': '{count} İşaretli öğeyi kaldır',
'packing.clearCheckedShort': 'Remove {count}', 'packing.clearCheckedShort': '{count} Kaldır',
'packing.suggestions': 'Suggestions', 'packing.suggestions': 'Öneriler',
'packing.suggestionsTitle': 'Add Suggestions', 'packing.suggestionsTitle': 'Öneri Ekle',
'packing.allSuggested': 'All suggestions added', 'packing.allSuggested': 'Tüm öneriler eklendi',
'packing.allPacked': 'All packed!', 'packing.allPacked': 'Hepsi paketlendi!',
'packing.addPlaceholder': 'Add new item...', 'packing.addPlaceholder': 'Yeni öğe ekle...',
'packing.categoryPlaceholder': 'Category...', 'packing.categoryPlaceholder': 'Kategori...',
'packing.filterAll': 'All', 'packing.filterAll': 'Tüm',
'packing.filterOpen': 'Open', 'packing.filterOpen': 'Açık',
'packing.filterDone': 'Done', 'packing.filterDone': 'Tamamlamak',
'packing.emptyTitle': 'Packing list is empty', 'packing.emptyTitle': 'Paket listesi boş',
'packing.emptyHint': 'Add items or use the suggestions', 'packing.emptyHint': 'Öğe ekleyin veya önerileri kullanın',
'packing.emptyFiltered': 'No items match this filter', 'packing.emptyFiltered': 'Bu filtreye uyan öğe yok',
'packing.menuRename': 'Rename', 'packing.menuRename': 'Yeniden adlandır',
'packing.menuCheckAll': 'Check All', 'packing.menuCheckAll': 'Tümünü İşaretle',
'packing.menuUncheckAll': 'Uncheck All', 'packing.menuUncheckAll': 'Tüm işaretleri kaldır',
'packing.menuDeleteCat': 'Delete Category', 'packing.menuDeleteCat': 'Kategoriyi Sil',
'packing.noMembers': 'No trip members', 'packing.noMembers': 'Seyahat üyesi yok',
'packing.addItem': 'Add item', 'packing.addItem': 'Öğe ekle',
'packing.addItemPlaceholder': 'Item name...', 'packing.addItemPlaceholder': 'Öğe adı...',
'packing.addCategory': 'Add category', 'packing.addCategory': 'Kategori ekle',
'packing.newCategoryPlaceholder': 'Category name (e.g. Clothing)', 'packing.newCategoryPlaceholder': 'Kategori adı (ör. Giyim)',
'packing.applyTemplate': 'Apply template', 'packing.applyTemplate': 'Şablon uygula',
'packing.template': 'Template', 'packing.template': 'Şablon',
'packing.templateApplied': '{count} items added from template', 'packing.templateApplied': 'Şablondan {count} öğe eklendi',
'packing.templateError': 'Failed to apply template', 'packing.templateError': 'Şablon uygulanamadı',
'packing.saveAsTemplate': 'Save as template', 'packing.saveAsTemplate': 'Şablon olarak kaydet',
'packing.templateName': 'Template name', 'packing.templateName': 'Şablon adı',
'packing.templateSaved': 'Packing list saved as template', 'packing.templateSaved': 'Paket listesi şablon olarak kaydedildi',
'packing.bags': 'Bags', 'packing.bags': 'Çantalar',
'packing.noBag': 'Unassigned', 'packing.noBag': 'Atanmamış',
'packing.totalWeight': 'Total weight', 'packing.totalWeight': 'Toplam ağırlık',
'packing.bagName': 'Bag name...', 'packing.bagName': 'Çanta adı...',
'packing.addBag': 'Add bag', 'packing.addBag': 'Çanta ekle',
'packing.changeCategory': 'Change Category', 'packing.changeCategory': 'Kategoriyi Değiştir',
'packing.confirm.clearChecked': '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': 'packing.confirm.deleteCat':
'Are you sure you want to delete the category "{name}" with {count} items?', '"{name}" kategorisini {count} öğeyle birlikte silmek istediğinizden emin misiniz?',
'packing.defaultCategory': 'Other', 'packing.defaultCategory': 'Diğer',
'packing.toast.saveError': 'Failed to save', 'packing.toast.saveError': 'Kaydedilemedi',
'packing.toast.deleteError': 'Failed to delete', 'packing.toast.deleteError': 'Silinemedi',
'packing.toast.renameError': 'Failed to rename', 'packing.toast.renameError': 'Yeniden adlandırılamadı',
'packing.toast.addError': 'Failed to add', 'packing.toast.addError': 'Eklenemedi',
'packing.suggestions.items': [ 'packing.suggestions.items': [
{ { name: 'Pasaport', category: 'Belgeler' },
name: 'Passport', { name: 'Kimlik kartı', category: 'Belgeler' },
category: 'Documents', { name: 'Seyahat sigortası', category: 'Belgeler' },
}, { name: 'Uçak biletleri', category: 'Belgeler' },
{ { name: 'Kredi kartı', category: 'Finans' },
name: 'ID Card', { name: 'Nakit', category: 'Finans' },
category: 'Documents', { name: 'Vize', category: 'Belgeler' },
}, { name: 'Tişört', category: 'Giyim' },
{ { name: 'Pantolon', category: 'Giyim' },
name: 'Travel Insurance', { name: 'İç çamaşırı', category: 'Giyim' },
category: 'Documents', { name: 'Çorap', category: 'Giyim' },
}, { name: 'Ceket', category: 'Giyim' },
{ { name: 'Pijama', category: 'Giyim' },
name: 'Flight Tickets', { name: 'Mayo', category: 'Giyim' },
category: 'Documents', { name: 'Yağmurluk', category: 'Giyim' },
}, { name: 'Rahat ayakkabı', category: 'Giyim' },
{ { name: 'Diş fırçası', category: 'Hijyen' },
name: 'Credit Card', { name: 'Diş macunu', category: 'Hijyen' },
category: 'Finances', { name: 'Şampuan', category: 'Hijyen' },
}, { name: 'Deodorant', category: 'Hijyen' },
{ { name: 'Güneş kremi', category: 'Hijyen' },
name: 'Cash', { name: 'Tıraş bıçağı', category: 'Hijyen' },
category: 'Finances', { name: 'Şarj cihazı', category: 'Elektronik' },
}, { name: 'Powerbank', category: 'Elektronik' },
{ { name: 'Kulaklık', category: 'Elektronik' },
name: 'Visa', { name: 'Seyahat adaptörü', category: 'Elektronik' },
category: 'Documents', { name: 'Kamera', category: 'Elektronik' },
}, { name: 'Ağrı kesici', category: 'Sağlık' },
{ { name: 'Yara bandı', category: 'Sağlık' },
name: 'T-Shirts', { name: 'Dezenfektan', category: 'Sağlık' },
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',
},
], ],
}; };
export default packing; export default packing;
+5 -5
View File
@@ -1,10 +1,10 @@
import type { TranslationStrings } from '../types'; import type { TranslationStrings } from '../types';
const pdf: TranslationStrings = { const pdf: TranslationStrings = {
'pdf.travelPlan': 'Travel Plan', 'pdf.travelPlan': 'Seyahat Planı',
'pdf.planned': 'Planned', 'pdf.planned': 'Planlandı',
'pdf.costLabel': 'Cost EUR', 'pdf.costLabel': 'Maliyet EUR',
'pdf.preview': 'PDF Preview', 'pdf.preview': 'PDF Önizleme',
'pdf.saveAsPdf': 'Save as PDF', 'pdf.saveAsPdf': 'PDF olarak Kaydet',
}; };
export default pdf; export default pdf;
+54 -46
View File
@@ -1,57 +1,65 @@
import type { TranslationStrings } from '../types'; import type { TranslationStrings } from '../types';
const perm: TranslationStrings = { const perm: TranslationStrings = {
'perm.title': 'Permission Settings', 'perm.title': 'İzin Ayarları',
'perm.subtitle': 'Control who can perform actions across the application', 'perm.subtitle':
'perm.saved': 'Permission settings saved', 'Uygulama genelinde kimlerin hangi işlemleri yapabileceğini belirleyin',
'perm.resetDefaults': 'Reset to defaults', 'perm.saved': 'İzin ayarları kaydedildi',
'perm.customized': 'customized', 'perm.resetDefaults': 'Varsayılanlara sıfırla',
'perm.level.admin': 'Admin only', 'perm.customized': 'özelleştirildi',
'perm.level.tripOwner': 'Trip owner', 'perm.level.admin': 'Yalnızca yönetici',
'perm.level.tripMember': 'Trip members', 'perm.level.tripOwner': 'Seyahat sahibi',
'perm.level.everybody': 'Everyone', 'perm.level.tripMember': 'Seyahat üyeleri',
'perm.cat.trip': 'Trip Management', 'perm.level.everybody': 'Herkes',
'perm.cat.members': 'Member Management', 'perm.cat.trip': 'Seyahat Yönetimi',
'perm.cat.files': 'Files', 'perm.cat.members': 'Üye Yönetimi',
'perm.cat.content': 'Content & Schedule', 'perm.cat.files': 'Dosyalar',
'perm.cat.extras': 'Budget, Packing & Collaboration', 'perm.cat.content': 'İçerik ve Program',
'perm.action.trip_create': 'Create trips', 'perm.cat.extras': 'Bütçe, Paketleme ve İşbirliği',
'perm.action.trip_edit': 'Edit trip details', 'perm.action.trip_create': 'Seyahat oluştur',
'perm.action.trip_delete': 'Delete trips', 'perm.action.trip_edit': 'Seyahat ayrıntılarını düzenle',
'perm.action.trip_archive': 'Archive / unarchive trips', 'perm.action.trip_delete': 'Seyahatleri sil',
'perm.action.trip_cover_upload': 'Upload cover image', 'perm.action.trip_archive': 'Seyahatleri arşivle / geri al',
'perm.action.member_manage': 'Add / remove members', 'perm.action.trip_cover_upload': 'Kapak görseli yükle',
'perm.action.file_upload': 'Upload files', 'perm.action.member_manage': 'Üye ekle / kaldır',
'perm.action.file_edit': 'Edit file metadata', 'perm.action.file_upload': 'Dosya yükle',
'perm.action.file_delete': 'Delete files', 'perm.action.file_edit': 'Dosya meta verisini düzenle',
'perm.action.place_edit': 'Add / edit / delete places', 'perm.action.file_delete': 'Dosyaları sil',
'perm.action.day_edit': 'Edit days, notes & assignments', 'perm.action.place_edit': 'Yer ekle / düzenle / sil',
'perm.action.reservation_edit': 'Manage reservations', 'perm.action.day_edit': 'Günleri, notları ve atamaları düzenle',
'perm.action.budget_edit': 'Manage budget', 'perm.action.reservation_edit': 'Rezervasyonları yönet',
'perm.action.packing_edit': 'Manage packing lists', 'perm.action.budget_edit': 'Bütçeyi yönet',
'perm.action.collab_edit': 'Collaboration (notes, polls, chat)', 'perm.action.packing_edit': 'Paket listelerini yönet',
'perm.action.share_manage': 'Manage share links', 'perm.action.collab_edit': 'İşbirliği (notlar, anketler, sohbet)',
'perm.actionHint.trip_create': 'Who can create new trips', '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': 'perm.actionHint.trip_edit':
'Who can change trip name, dates, description and currency', 'Kimler seyahat adını, tarihlerini, açıklamasını ve para birimini değiştirebilir',
'perm.actionHint.trip_delete': 'Who can permanently delete a trip', 'perm.actionHint.trip_delete': 'Kimler bir seyahati kalıcı olarak silebilir',
'perm.actionHint.trip_archive': 'Who can archive or unarchive a trip', 'perm.actionHint.trip_archive':
'Kimler seyahati arşivleyebilir veya geri alabilir',
'perm.actionHint.trip_cover_upload': 'perm.actionHint.trip_cover_upload':
'Who can upload or change the cover image', 'Kimler kapak görseli yükleyebilir veya değiştirebilir',
'perm.actionHint.member_manage': 'Who can invite or remove trip members', 'perm.actionHint.member_manage':
'perm.actionHint.file_upload': 'Who can upload files to a trip', 'Kimler seyahat üyesi davet edebilir veya kaldırabilir',
'perm.actionHint.file_edit': 'Who can edit file descriptions and links', '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': 'perm.actionHint.file_delete':
'Who can move files to trash or permanently delete them', 'Kimler dosyaları çöp kutusuna taşıyabilir veya kalıcı silebilir',
'perm.actionHint.place_edit': 'Who can add, edit or delete places', 'perm.actionHint.place_edit':
'Kimler yer ekleyebilir, düzenleyebilir veya silebilir',
'perm.actionHint.day_edit': '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': 'perm.actionHint.reservation_edit':
'Who can create, edit or delete reservations', 'Kimler rezervasyon oluşturabilir, düzenleyebilir veya silebilir',
'perm.actionHint.budget_edit': 'Who can create, edit or delete budget items', 'perm.actionHint.budget_edit':
'perm.actionHint.packing_edit': 'Who can manage packing items and bags', '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': 'perm.actionHint.collab_edit':
'Who can create notes, polls and send messages', 'Kimler not, anket oluşturabilir ve mesaj gönderebilir',
'perm.actionHint.share_manage': 'Who can create or delete public share links', 'perm.actionHint.share_manage':
'Kimler genel paylaşım bağlantısı oluşturabilir veya silebilir',
}; };
export default perm; export default perm;
+20 -20
View File
@@ -1,25 +1,25 @@
import type { TranslationStrings } from '../types'; import type { TranslationStrings } from '../types';
const photos: TranslationStrings = { const photos: TranslationStrings = {
'photos.title': 'Photos', 'photos.title': 'Fotoğraflar',
'photos.subtitle': '{count} photos for {trip}', 'photos.subtitle': '{trip} için {count} fotoğraf',
'photos.dropHere': 'Drop photos here...', 'photos.dropHere': 'Fotoğrafları buraya bırakın...',
'photos.dropHereActive': 'Drop photos here', 'photos.dropHereActive': 'Fotoğrafları buraya bırakın',
'photos.captionForAll': 'Caption (for all)', 'photos.captionForAll': 'Açıklama (hepsi için)',
'photos.captionPlaceholder': 'Optional caption...', 'photos.captionPlaceholder': 'İsteğe bağlı açıklama...',
'photos.addCaption': 'Add caption...', 'photos.addCaption': 'Açıklama ekle...',
'photos.allDays': 'All Days', 'photos.allDays': 'Tüm Günler',
'photos.noPhotos': 'No photos yet', 'photos.noPhotos': 'Henüz fotoğraf yok',
'photos.uploadHint': 'Upload your travel photos', 'photos.uploadHint': 'Seyahat fotoğraflarınızı yükleyin',
'photos.clickToSelect': 'or click to select', 'photos.clickToSelect': 'veya seçmek için tıklayın',
'photos.linkPlace': 'Link Place', 'photos.linkPlace': 'Yere Bağla',
'photos.noPlace': 'No Place', 'photos.noPlace': 'Yer Yok',
'photos.uploadN': '{n} photo(s) upload', 'photos.uploadN': '{n} fotoğraf yükle',
'photos.linkDay': 'Link Day', 'photos.linkDay': 'Güne Bağla',
'photos.noDay': 'No Day', 'photos.noDay': 'Gün Yok',
'photos.dayLabel': 'Day {number}', 'photos.dayLabel': '{number}. gün',
'photos.photoSelected': 'Photo selected', 'photos.photoSelected': 'Fotoğraf seçildi',
'photos.photosSelected': 'Photos selected', 'photos.photosSelected': 'Fotoğraflar seçildi',
'photos.fileTypeHint': 'JPG, PNG, WebP · max. 10 MB · up to 30 photos', 'photos.fileTypeHint': 'JPG, PNG, WebP · maks. 10 MB · en fazla 30 fotoğraf',
}; };
export default photos; export default photos;
+78 -78
View File
@@ -1,91 +1,91 @@
import type { TranslationStrings } from '../types'; import type { TranslationStrings } from '../types';
const places: TranslationStrings = { const places: TranslationStrings = {
'places.addPlace': 'Add Place/Activity', 'places.addPlace': 'Yer/etkinlik Ekle',
'places.importFile': 'Import file', 'places.importFile': 'Dosyayı içe aktar',
'places.sidebarDrop': 'Drop to import', 'places.sidebarDrop': 'İçe aktarmak için bırakın',
'places.importFileHint': 'places.importFileHint':
'Import .gpx, .kml or .kmz files from tools like Google My Maps, Google Earth, or a GPS tracker.', 'Google Haritalarım, Google Earth veya GPS izleyici gibi araçlardan .gpx, .kml veya .kmz dosyalarını içe aktarın.',
'places.importFileDropHere': 'Click to select a file or drag and drop here', 'places.importFileDropHere':
'places.importFileDropActive': 'Drop file to select', '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': 'places.importFileUnsupported':
'Unsupported file type. Use .gpx, .kml or .kmz.', 'Desteklenmeyen dosya türü. .gpx, .kml veya .kmz kullanın.',
'places.importFileTooLarge': 'places.importFileTooLarge':
'File is too large. Maximum upload size is {maxMb} MB.', "Dosya çok büyük. Maksimum yükleme boyutu {maxMb} MB'tır.",
'places.importFileError': 'Import failed', 'places.importFileError': 'İçe aktarma başarısız oldu',
'places.importAllSkipped': 'All places were already in the trip.', 'places.importAllSkipped': 'Tüm yerler zaten yolculuktaydı.',
'places.gpxImported': '{count} places imported from GPX', 'places.gpxImported': "{count} yer GPX'ten içe Aktarıldı",
'places.gpxImportTypes': 'What do you want to import?', 'places.gpxImportTypes': 'Neyi içe aktarmak istiyorsunuz?',
'places.gpxImportWaypoints': 'Waypoints', 'places.gpxImportWaypoints': 'Ara noktalar',
'places.gpxImportRoutes': 'Routes', 'places.gpxImportRoutes': 'Rotalar',
'places.gpxImportTracks': 'Tracks (with path geometry)', 'places.gpxImportTracks': 'İzler (yol geometrisi ile)',
'places.gpxImportNoneSelected': 'Select at least one type to import.', 'places.gpxImportNoneSelected': 'İçe aktarılacak en az bir tür seçin.',
'places.kmlImportTypes': 'What do you want to import?', 'places.kmlImportTypes': 'Neyi içe aktarmak istiyorsunuz?',
'places.kmlImportPoints': 'Points (Placemarks)', 'places.kmlImportPoints': 'Noktalar (Yer İşaretleri)',
'places.kmlImportPaths': 'Paths (LineStrings)', 'places.kmlImportPaths': "Yollar (LineString'ler)",
'places.kmlImportNoneSelected': 'Select at least one type to import.', 'places.kmlImportNoneSelected': 'İçe aktarılacak en az bir tür seçin.',
'places.selectionCount': '{count} selected', 'places.selectionCount': '{count} seçildi',
'places.deleteSelected': 'Delete selected', 'places.deleteSelected': 'Seçileni sil',
'places.kmlKmzImported': '{count} places imported from KMZ/KML', 'places.kmlKmzImported': "KMZ/KML'den {count} yer içe Aktarıldı",
'places.urlResolved': 'Place imported from URL', 'places.urlResolved': "URL'den içe aktarılan Yer",
'places.importList': 'List Import', 'places.importList': 'Liste İçe Aktarma',
'places.kmlKmzSummaryValues': 'places.kmlKmzSummaryValues':
'Placemarks: {total} • Imported: {created} • Skipped: {skipped}', 'Yer işaretleri: {total} • İçe aktarıldı: {created} • Atlandı: {skipped}',
'places.importGoogleList': 'Google List', 'places.importGoogleList': 'Google Listesi',
'places.importNaverList': 'Naver List', 'places.importNaverList': 'Naver Listesi',
'places.googleListHint': 'places.googleListHint':
'Paste a shared Google Maps list link to import all places.', 'Tüm yerleri içe aktarmak için paylaşılan bir Google Haritalar listesi bağlantısını yapıştırın.',
'places.googleListImported': '{count} places imported from "{list}"', 'places.googleListImported': '"{list}"ten {count} yer içe aktarıldı',
'places.googleListError': 'Failed to import Google Maps list', 'places.googleListError': 'Google Haritalar listesi içe aktarılamadı',
'places.naverListHint': 'places.naverListHint':
'Paste a shared Naver Maps list link to import all places.', 'Tüm yerleri içe aktarmak için paylaşılan bir Naver Haritalar listesi bağlantısını yapıştırın.',
'places.naverListImported': '{count} places imported from "{list}"', 'places.naverListImported': '"{list}"ten {count} yer içe aktarıldı',
'places.naverListError': 'Failed to import Naver Maps list', 'places.naverListError': 'Naver Haritalar listesi içe aktarılamadı',
'places.viewDetails': 'View Details', 'places.viewDetails': 'Ayrıntıları Görüntüle',
'places.assignToDay': 'Add to which day?', 'places.assignToDay': 'Hangi güne eklensin?',
'places.all': 'All', 'places.all': 'Tüm',
'places.unplanned': 'Unplanned', 'places.unplanned': 'Planlanmamış',
'places.filterTracks': 'Tracks', 'places.filterTracks': 'Parçalar',
'places.search': 'Search places...', 'places.search': 'Yer ara...',
'places.allCategories': 'All Categories', 'places.allCategories': 'Tüm Kategoriler',
'places.categoriesSelected': 'categories', 'places.categoriesSelected': 'kategoriler',
'places.clearFilter': 'Clear filter', 'places.clearFilter': 'Filtreyi temizle',
'places.count': '{count} places', 'places.count': '{count} yer',
'places.countSingular': '1 place', 'places.countSingular': '1 yer',
'places.allPlanned': 'All places are planned', 'places.allPlanned': 'Bütün yerler planlandı',
'places.noneFound': 'No places found', 'places.noneFound': 'Hiçbir yer bulunamadı',
'places.editPlace': 'Edit Place', 'places.editPlace': 'Yeri Düzenle',
'places.formName': 'Name', 'places.formName': 'İsim',
'places.formNamePlaceholder': 'e.g. Eiffel Tower', 'places.formNamePlaceholder': 'örneğin Eyfel Kulesi',
'places.formDescription': 'Description', 'places.formDescription': 'Tanım',
'places.formDescriptionPlaceholder': 'Short description...', 'places.formDescriptionPlaceholder': 'Kısa açıklama...',
'places.formAddress': 'Address', 'places.formAddress': 'Adres',
'places.formAddressPlaceholder': 'Street, City, Country', 'places.formAddressPlaceholder': 'Sokak, Şehir, Ülke',
'places.formLat': 'Latitude (e.g. 48.8566)', 'places.formLat': 'Enlem (ör. 48,8566)',
'places.formLng': 'Longitude (e.g. 2.3522)', 'places.formLng': 'Boylam (ör. 2,3522)',
'places.formCategory': 'Category', 'places.formCategory': 'Kategori',
'places.noCategory': 'No Category', 'places.noCategory': 'Kategori Yok',
'places.categoryNamePlaceholder': 'Category name', 'places.categoryNamePlaceholder': 'Kategori adı',
'places.formTime': 'Time', 'places.formTime': 'Zaman',
'places.startTime': 'Start', 'places.startTime': 'Başlangıç',
'places.endTime': 'End', 'places.endTime': 'Son',
'places.endTimeBeforeStart': 'End time is before start time', 'places.endTimeBeforeStart': 'Bitiş zamanı başlangıç zamanından önce',
'places.timeCollision': 'Time overlap with:', 'places.timeCollision': 'Zaman şununla çakışıyor:',
'places.formWebsite': 'Website', 'places.formWebsite': 'Web sitesi',
'places.formNotes': 'Notes', 'places.formNotes': 'Notlar',
'places.formNotesPlaceholder': 'Personal notes...', 'places.formNotesPlaceholder': 'Kişisel notlar...',
'places.formReservation': 'Reservation', 'places.formReservation': 'Rezervasyon',
'places.reservationNotesPlaceholder': 'places.reservationNotesPlaceholder': 'Rezervasyon notları, onay numarası...',
'Reservation notes, confirmation number...', 'places.mapsSearchPlaceholder': 'Yerleri ara...',
'places.mapsSearchPlaceholder': 'Search places...', 'places.mapsSearchError': 'Yer arama başarısız oldu.',
'places.mapsSearchError': 'Place search failed.', 'places.loadingDetails': 'Yer ayrıntıları yükleniyor…',
'places.loadingDetails': 'Loading place details…',
'places.osmHint': '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': 'places.osmActive':
'Search via OpenStreetMap (no photos, ratings or opening hours). Add a Google API key in Settings for enhanced data.', "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': 'Failed to create category', 'places.categoryCreateError': 'Kategori oluşturulamadı',
'places.nameRequired': 'Please enter a name', 'places.nameRequired': 'Lütfen bir ad girin',
'places.saveError': 'Failed to save', 'places.saveError': 'Kaydedilemedi',
}; };
export default places; export default places;
+61 -61
View File
@@ -1,68 +1,68 @@
import type { TranslationStrings } from '../types'; import type { TranslationStrings } from '../types';
const planner: TranslationStrings = { const planner: TranslationStrings = {
'planner.places': 'Places', 'planner.places': 'Yer',
'planner.bookings': 'Bookings', 'planner.bookings': 'Rezervasyonlar',
'planner.packingList': 'Packing List', 'planner.packingList': 'Paket Listesi',
'planner.documents': 'Documents', 'planner.documents': 'Belgeler',
'planner.dayPlan': 'Day Plan', 'planner.dayPlan': 'Gün Planı',
'planner.reservations': 'Reservations', 'planner.reservations': 'Rezervasyonlar',
'planner.minTwoPlaces': 'At least 2 places with coordinates needed', 'planner.minTwoPlaces': 'En az 2 koordinatlı yer gerekli',
'planner.noGeoPlaces': 'No places with coordinates available', 'planner.noGeoPlaces': 'Koordinatlı yer bulunamadı',
'planner.routeCalculated': 'Route calculated', 'planner.routeCalculated': 'Rota hesaplandı',
'planner.routeCalcFailed': 'Route could not be calculated', 'planner.routeCalcFailed': 'Rota hesaplanamadı',
'planner.routeError': 'Error calculating route', 'planner.routeError': 'Rota hesaplanırken hata',
'planner.icsExportFailed': 'ICS export failed', 'planner.icsExportFailed': 'ICS dışa aktarma başarısız',
'planner.routeOptimized': 'Route optimized', 'planner.routeOptimized': 'Rota optimize edildi',
'planner.reservationUpdated': 'Reservation updated', 'planner.reservationUpdated': 'Rezervasyon güncellendi',
'planner.reservationAdded': 'Reservation added', 'planner.reservationAdded': 'Rezervasyon eklendi',
'planner.confirmDeleteReservation': 'Delete reservation?', 'planner.confirmDeleteReservation': 'Rezervasyon silinsin mi?',
'planner.reservationDeleted': 'Reservation deleted', 'planner.reservationDeleted': 'Rezervasyon silindi',
'planner.days': 'Days', 'planner.days': 'Günler',
'planner.allPlaces': 'All Places', 'planner.allPlaces': 'Tüm Yerler',
'planner.totalPlaces': '{n} places total', 'planner.totalPlaces': 'toplam {n} yer',
'planner.noDaysPlanned': 'No days planned yet', 'planner.noDaysPlanned': 'Henüz gün planlanmadı',
'planner.editTrip': 'Edit trip →', 'planner.editTrip': 'Seyahati düzenle →',
'planner.placeOne': '1 place', 'planner.placeOne': '1 yer',
'planner.placeN': '{n} places', 'planner.placeN': '{n} yer',
'planner.addNote': 'Add note', 'planner.addNote': 'Not ekle',
'planner.noEntries': 'No entries for this day', 'planner.noEntries': 'Bu gün için kayıt yok',
'planner.addPlace': 'Add place/activity', 'planner.addPlace': 'Yer/etkinlik ekle',
'planner.addPlaceShort': '+ Add place/activity', 'planner.addPlaceShort': '+ Yer/etkinlik ekle',
'planner.resPending': 'Reservation pending · ', 'planner.resPending': 'Rezervasyon beklemede · ',
'planner.resConfirmed': 'Reservation confirmed · ', 'planner.resConfirmed': 'Rezervasyon onaylandı · ',
'planner.notePlaceholder': 'Note…', 'planner.notePlaceholder': 'Not…',
'planner.noteTimePlaceholder': 'Time (optional)', 'planner.noteTimePlaceholder': 'Saat (isteğe bağlı)',
'planner.noteExamplePlaceholder': 'planner.noteExamplePlaceholder':
'e.g. S3 at 14:30 from central station, ferry from pier 7, lunch break…', "örn. Merkez istasyondan 14:30'da S3, iskele 7'den feribot, öğle molası…",
'planner.totalCost': 'Total cost', 'planner.totalCost': 'Toplam maliyet',
'planner.searchPlaces': 'Search places…', 'planner.searchPlaces': 'Yer ara…',
'planner.allCategories': 'All Categories', 'planner.allCategories': 'Tüm Kategoriler',
'planner.noPlacesFound': 'No places found', 'planner.noPlacesFound': 'Hiçbir yer bulunamadı',
'planner.addFirstPlace': 'Add first place', 'planner.addFirstPlace': 'İlk yeri ekle',
'planner.noReservations': 'No reservations', 'planner.noReservations': 'Rezervasyon yok',
'planner.addFirstReservation': 'Add first reservation', 'planner.addFirstReservation': 'İlk rezervasyonu ekle',
'planner.new': 'New', 'planner.new': 'Yeni',
'planner.addToDay': '+ Day', 'planner.addToDay': '+ Gün',
'planner.calculating': 'Calculating…', 'planner.calculating': 'Hesaplanıyor…',
'planner.route': 'Route', 'planner.route': 'Rota',
'planner.optimize': 'Optimize', 'planner.optimize': 'Optimize et',
'planner.openGoogleMaps': 'Open in Google Maps', 'planner.openGoogleMaps': "Google Haritalar'da aç",
'planner.selectDayHint': 'planner.selectDayHint':
'Select a day from the left list to see the day plan', 'Gün planını görmek için soldaki listeden bir gün seçin',
'planner.noPlacesForDay': 'No places for this day yet', 'planner.noPlacesForDay': 'Bu gün için henüz yer yok',
'planner.addPlacesLink': 'Add places →', 'planner.addPlacesLink': 'Yer ekle →',
'planner.minTotal': 'min. total', 'planner.minTotal': 'dk. toplam',
'planner.noReservation': 'No reservation', 'planner.noReservation': 'Rezervasyon yok',
'planner.removeFromDay': 'Remove from day', 'planner.removeFromDay': 'Günden kaldır',
'planner.addToThisDay': 'Add to day', 'planner.addToThisDay': 'Güne ekle',
'planner.overview': 'Overview', 'planner.overview': 'Genel bakış',
'planner.noDays': 'No days yet', 'planner.noDays': 'Henüz gün yok',
'planner.editTripToAddDays': 'Edit trip to add days', 'planner.editTripToAddDays': 'Gün eklemek için seyahati düzenleyin',
'planner.dayCount': '{n} Days', 'planner.dayCount': '{n} Gün',
'planner.clickToUnlock': 'Click to unlock', 'planner.clickToUnlock': 'Kilidi açmak için tıklayın',
'planner.keepPosition': 'Keep position during route optimization', 'planner.keepPosition': 'Rota optimizasyonunda konumu koru',
'planner.dayDetails': 'Day details', 'planner.dayDetails': 'Gün ayrıntıları',
'planner.dayN': 'Day {n}', 'planner.dayN': '{n}. gün',
}; };
export default planner; export default planner;
+19 -19
View File
@@ -1,26 +1,26 @@
import type { TranslationStrings } from '../types'; import type { TranslationStrings } from '../types';
const register: TranslationStrings = { const register: TranslationStrings = {
'register.passwordMismatch': 'Passwords do not match', 'register.passwordMismatch': 'Şifreler eşleşmiyor',
'register.passwordTooShort': 'Password must be at least 8 characters', 'register.passwordTooShort': 'Şifre en az 8 karakter olmalıdır',
'register.failed': 'Registration failed', 'register.failed': 'Kayıt başarısız oldu',
'register.getStarted': 'Başlayın', 'register.getStarted': 'Başlayın',
'register.subtitle': 'register.subtitle':
'Hesap oluşturun ve hayalinizdeki gezileri planlamaya başlayın.', 'Bir hesap oluşturun ve hayalinizdeki gezileri planlamaya başlayın.',
'register.feature1': 'Unlimited trip plans', 'register.feature1': 'Sınırsız gezi planları',
'register.feature2': 'Interactive map view', 'register.feature2': 'İnteraktif harita görünümü',
'register.feature3': 'Manage places and categories', 'register.feature3': 'Yerleri ve kategorileri yönetin',
'register.feature4': 'Track reservations', 'register.feature4': 'Rezervasyonları takip edin',
'register.feature5': 'Create packing lists', 'register.feature5': 'Paketleme listeleri oluşturun',
'register.feature6': 'Store photos and files', 'register.feature6': 'Fotoğrafları ve dosyaları saklayın',
'register.createAccount': 'Hesap oluştur', 'register.createAccount': 'Hesap Oluşturmak',
'register.startPlanning': 'Start your trip planning', 'register.startPlanning': 'Seyahat planlamanıza başlayın',
'register.minChars': 'Min. 6 characters', 'register.minChars': 'Min. 6 karakter',
'register.confirmPassword': 'Confirm Password', 'register.confirmPassword': 'Şifreyi Onayla',
'register.repeatPassword': 'Repeat password', 'register.repeatPassword': 'Şifreyi tekrar girin',
'register.registering': 'Registering...', 'register.registering': 'Kaydediliyor...',
'register.register': 'Kayıt ol', 'register.register': 'Kayıt olmak',
'register.hasAccount': 'Zaten hesabınız var mı?', 'register.hasAccount': 'Zaten bir hesabınız var mı?',
'register.signIn': 'Giriş yap', 'register.signIn': 'Oturum Aç',
}; };
export default register; export default register;
+109 -108
View File
@@ -1,118 +1,119 @@
import type { TranslationStrings } from '../types'; import type { TranslationStrings } from '../types';
const reservations: TranslationStrings = { const reservations: TranslationStrings = {
'reservations.title': 'Bookings', 'reservations.title': 'Rezervasyonlar',
'reservations.empty': 'No reservations yet', 'reservations.empty': 'Henüz rezervasyon yok',
'reservations.emptyHint': 'Add reservations for flights, hotels and more', 'reservations.emptyHint':
'reservations.add': 'Add Reservation', 'Uçuşlar, oteller ve daha fazlası için rezervasyon ekleyin',
'reservations.addManual': 'Manual Booking', 'reservations.add': 'Rezervasyon Ekle',
'reservations.addManual': 'Manuel Rezervasyon',
'reservations.placeHint': 'reservations.placeHint':
'Tip: Reservations are best created directly from a place to link them with your day plan.', 'İpucu: Rezervasyonları doğrudan günlük planınıza bağlayacak bir yerden oluşturmak en iyisidir.',
'reservations.confirmed': 'Confirmed', 'reservations.confirmed': 'Onaylandı',
'reservations.pending': 'Pending', 'reservations.pending': 'Askıda olması',
'reservations.summary': '{confirmed} confirmed, {pending} pending', 'reservations.summary': '{confirmed} onaylandı, {pending} beklemede',
'reservations.fromPlan': 'From Plan', 'reservations.fromPlan': 'Plandan',
'reservations.showFiles': 'Show Files', 'reservations.showFiles': 'Dosyaları Göster',
'reservations.editTitle': 'Edit Reservation', 'reservations.editTitle': 'Rezervasyonu Düzenle',
'reservations.status': 'Status', 'reservations.status': 'Durum',
'reservations.datetime': 'Date & Time', 'reservations.datetime': 'Tarih ve Saat',
'reservations.startTime': 'Start time', 'reservations.startTime': 'Başlangıç zamanı',
'reservations.endTime': 'End time', 'reservations.endTime': 'Bitiş zamanı',
'reservations.date': 'Date', 'reservations.date': 'Tarih',
'reservations.time': 'Time', 'reservations.time': 'Zaman',
'reservations.timeAlt': 'Time (alternative, e.g. 19:30)', 'reservations.timeAlt': 'Saat (alternatif, örneğin 19:30)',
'reservations.notes': 'Notes', 'reservations.notes': 'Notlar',
'reservations.notesPlaceholder': 'Additional notes...', 'reservations.notesPlaceholder': 'Ek notlar...',
'reservations.meta.airline': 'Airline', 'reservations.meta.airline': 'Havayolu',
'reservations.meta.flightNumber': 'Flight No.', 'reservations.meta.flightNumber': 'Uçuş No.',
'reservations.meta.from': 'From', 'reservations.meta.from': 'İtibaren',
'reservations.meta.to': 'To', 'reservations.meta.to': 'İle',
'reservations.needsReview': 'Review', 'reservations.needsReview': 'Gözden geçirmek',
'reservations.needsReviewHint': 'reservations.needsReviewHint':
'Airport could not be matched automatically — please confirm the location.', 'Havaalanı otomatik olarak eşleştirilemedi; lütfen konumu onaylayın.',
'reservations.searchLocation': 'Search station, port, address…', 'reservations.searchLocation': 'İstasyonu, limanı, adresi arayın…',
'reservations.meta.trainNumber': 'Train No.', 'reservations.meta.trainNumber': 'Tren No.',
'reservations.meta.platform': 'Platform', 'reservations.meta.platform': 'Platformu',
'reservations.meta.seat': 'Seat', 'reservations.meta.seat': 'Koltuk',
'reservations.meta.checkIn': 'Check-in', 'reservations.meta.checkIn': 'Giriş',
'reservations.meta.checkInUntil': 'Check-in until', 'reservations.meta.checkInUntil': 'Giriş tarihi şu tarihe kadar:',
'reservations.meta.checkOut': 'Check-out', 'reservations.meta.checkOut': 'Çıkış yapmak',
'reservations.meta.linkAccommodation': 'Accommodation', 'reservations.meta.linkAccommodation': 'Konaklama',
'reservations.meta.pickAccommodation': 'Link to accommodation', 'reservations.meta.pickAccommodation': 'Konaklama bağlantısı',
'reservations.meta.noAccommodation': 'None', 'reservations.meta.noAccommodation': 'Hiçbiri',
'reservations.meta.hotelPlace': 'Accommodation', 'reservations.meta.hotelPlace': 'Konaklama',
'reservations.meta.pickHotel': 'Select accommodation', 'reservations.meta.pickHotel': 'Konaklama seçin',
'reservations.meta.fromDay': 'From', 'reservations.meta.fromDay': 'İtibaren',
'reservations.meta.toDay': 'To', 'reservations.meta.toDay': 'İle',
'reservations.meta.selectDay': 'Select day', 'reservations.meta.selectDay': 'Günü seçin',
'reservations.type.flight': 'Flight', 'reservations.type.flight': 'Uçuş',
'reservations.type.hotel': 'Accommodation', 'reservations.type.hotel': 'Konaklama',
'reservations.type.restaurant': 'Restaurant', 'reservations.type.restaurant': 'Restoran',
'reservations.type.train': 'Train', 'reservations.type.train': 'Tren',
'reservations.type.car': 'Car', 'reservations.type.car': 'Araba',
'reservations.type.cruise': 'Cruise', 'reservations.type.cruise': 'Dolaşmak',
'reservations.type.event': 'Event', 'reservations.type.event': 'Etkinlik',
'reservations.type.tour': 'Tour', 'reservations.type.tour': 'Tur',
'reservations.type.other': 'Other', 'reservations.type.other': 'Diğer',
'reservations.confirm.delete': 'reservations.confirm.delete':
'Are you sure you want to delete the reservation "{name}"?', '"{name}" rezervasyonunu silmek istediğinizden emin misiniz?',
'reservations.confirm.deleteTitle': 'Delete booking?', 'reservations.confirm.deleteTitle': 'Rezervasyon silinsin mi?',
'reservations.confirm.deleteBody': '"{name}" will be permanently deleted.', 'reservations.confirm.deleteBody': '"{name}" kalıcı olarak silinecek.',
'reservations.toast.updated': 'Reservation updated', 'reservations.toast.updated': 'Rezervasyon güncellendi',
'reservations.toast.removed': 'Reservation deleted', 'reservations.toast.removed': 'Rezervasyon silindi',
'reservations.toast.fileUploaded': 'File uploaded', 'reservations.toast.fileUploaded': 'Dosya yüklendi',
'reservations.toast.uploadError': 'Failed to upload', 'reservations.toast.uploadError': 'Yükleme başarısız oldu',
'reservations.newTitle': 'New Reservation', 'reservations.newTitle': 'Yeni Rezervasyon',
'reservations.bookingType': 'Booking Type', 'reservations.bookingType': 'Rezervasyon Türü',
'reservations.titleLabel': 'Title', 'reservations.titleLabel': 'Başlık',
'reservations.titlePlaceholder': 'e.g. Lufthansa LH123, Hotel Adlon, ...', 'reservations.titlePlaceholder': 'örneğin Lufthansa LH123, Otel Adlon, ...',
'reservations.locationAddress': 'Location / Address', 'reservations.locationAddress': 'Konum / Adres',
'reservations.locationPlaceholder': 'Address, Airport, Hotel...', 'reservations.locationPlaceholder': 'Adres, Havaalanı, Otel...',
'reservations.confirmationCode': 'Booking Code', 'reservations.confirmationCode': 'Rezervasyon Kodu',
'reservations.confirmationPlaceholder': 'e.g. ABC12345', 'reservations.confirmationPlaceholder': 'örn. ABC12345',
'reservations.day': 'Day', 'reservations.day': 'Gün',
'reservations.noDay': 'No Day', 'reservations.noDay': 'Gün Yok',
'reservations.place': 'Place', 'reservations.place': 'Yer',
'reservations.noPlace': 'No Place', 'reservations.noPlace': 'Yer Yok',
'reservations.pendingSave': 'will be saved…', 'reservations.pendingSave': 'kaydedilecek…',
'reservations.uploading': 'Uploading...', 'reservations.uploading': 'Yükleniyor...',
'reservations.attachFile': 'Attach file', 'reservations.attachFile': 'Dosya ekle',
'reservations.linkExisting': 'Link existing file', 'reservations.linkExisting': 'Mevcut dosyayı bağla',
'reservations.toast.saveError': 'Failed to save', 'reservations.toast.saveError': 'Kaydedilemedi',
'reservations.toast.updateError': 'Failed to update', 'reservations.toast.updateError': 'Güncelleme başarısız oldu',
'reservations.toast.deleteError': 'Failed to delete', 'reservations.toast.deleteError': 'Silinemedi',
'reservations.confirm.remove': 'Remove reservation for "{name}"?', 'reservations.confirm.remove': '"{name}" için rezervasyon kaldırılsın mı?',
'reservations.linkAssignment': 'Link to day assignment', 'reservations.linkAssignment': 'Gün atamasına bağla',
'reservations.pickAssignment': 'Select an assignment from your plan...', 'reservations.pickAssignment': 'Planınızdan bir atama seçin...',
'reservations.noAssignment': 'No link (standalone)', 'reservations.noAssignment': 'Bağlantı yok (bağımsız)',
'reservations.price': 'Price', 'reservations.price': 'Fiyat',
'reservations.budgetCategory': 'Budget category', 'reservations.budgetCategory': 'Bütçe kategorisi',
'reservations.budgetCategoryPlaceholder': 'e.g. Transport, Accommodation', 'reservations.budgetCategoryPlaceholder': 'örn. Ulaşım, Konaklama',
'reservations.budgetCategoryAuto': 'Auto (from booking type)', 'reservations.budgetCategoryAuto': 'Otomatik (rezervasyon türünden)',
'reservations.budgetHint': 'reservations.budgetHint':
'A budget entry will be created automatically when saving.', 'Kaydederken otomatik olarak bir bütçe kaydı oluşturulur.',
'reservations.departureDate': 'Departure', 'reservations.departureDate': 'Kalkış',
'reservations.arrivalDate': 'Arrival', 'reservations.arrivalDate': 'Varış',
'reservations.departureTime': 'Dep. time', 'reservations.departureTime': 'Kalkış saati',
'reservations.arrivalTime': 'Arr. time', 'reservations.arrivalTime': 'Varış saati',
'reservations.pickupDate': 'Pickup', 'reservations.pickupDate': 'Alış',
'reservations.returnDate': 'Return', 'reservations.returnDate': 'İade',
'reservations.pickupTime': 'Pickup time', 'reservations.pickupTime': 'Alış saati',
'reservations.returnTime': 'Return time', 'reservations.returnTime': 'İade saati',
'reservations.endDate': 'End date', 'reservations.endDate': 'Bitiş tarihi',
'reservations.meta.departureTimezone': 'Dep. TZ', 'reservations.meta.departureTimezone': 'Kalkış SD',
'reservations.meta.arrivalTimezone': 'Arr. TZ', 'reservations.meta.arrivalTimezone': 'Varış SD',
'reservations.span.departure': 'Departure', 'reservations.span.departure': 'Kalkış',
'reservations.span.arrival': 'Arrival', 'reservations.span.arrival': 'Varış',
'reservations.span.inTransit': 'In transit', 'reservations.span.inTransit': 'Yolda',
'reservations.span.pickup': 'Pickup', 'reservations.span.pickup': 'Alış',
'reservations.span.return': 'Return', 'reservations.span.return': 'İade',
'reservations.span.active': 'Active', 'reservations.span.active': 'Aktif',
'reservations.span.start': 'Start', 'reservations.span.start': 'Başlangıç',
'reservations.span.end': 'End', 'reservations.span.end': 'Son',
'reservations.span.ongoing': 'Ongoing', 'reservations.span.ongoing': 'Devam ediyor',
'reservations.validation.endBeforeStart': 'reservations.validation.endBeforeStart':
'End date/time must be after start date/time', 'Bitiş tarihi/saati başlangıçtan sonra olmalı',
'reservations.addBooking': 'Add booking', 'reservations.addBooking': 'Rezervasyon ekle',
}; };
export default reservations; export default reservations;
+222 -216
View File
@@ -10,284 +10,290 @@ const settings: TranslationStrings = {
'settings.tabs.account': 'Hesap', 'settings.tabs.account': 'Hesap',
'settings.tabs.offline': 'Çevrimdışı', 'settings.tabs.offline': 'Çevrimdışı',
'settings.tabs.about': 'Hakkında', 'settings.tabs.about': 'Hakkında',
'settings.map': 'Map', 'settings.map': 'Harita',
'settings.mapTemplate': 'Map Template', 'settings.mapTemplate': 'Harita Şablonu',
'settings.mapTemplatePlaceholder.select': 'Select template...', 'settings.mapTemplatePlaceholder.select': 'Şablon seçin...',
'settings.mapDefaultHint': 'Leave empty for OpenStreetMap (default)', 'settings.mapDefaultHint': 'OpenStreetMap için boş bırakın (varsayılan)',
'settings.mapTemplatePlaceholder': 'settings.mapTemplatePlaceholder':
'https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', 'https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png',
'settings.mapHint': 'URL template for map tiles', 'settings.mapHint': 'Harita kutucukları için URL şablonu',
'settings.mapProvider': 'Map Provider', 'settings.mapProvider': 'Harita Sağlayıcısı',
'settings.mapProviderHint': 'settings.mapProviderHint':
'Affects Trip Planner and Journey maps. Atlas always uses Leaflet.', 'Seyahat planlayıcı ve Journey haritalarını etkiler. Atlas her zaman Leaflet kullanır.',
'settings.mapLeafletSubtitle': 'Classic 2D, any raster tiles', 'settings.mapLeafletSubtitle': 'Klasik 2D, herhangi bir raster kutucuk',
'settings.mapMapboxSubtitle': 'Vector tiles, 3D buildings & terrain', 'settings.mapMapboxSubtitle': 'Vektör kutucuklar, 3D binalar ve arazi',
'settings.mapExperimental': 'Experimental', 'settings.mapExperimental': 'Deneysel',
'settings.mapMapboxToken': 'Mapbox Access Token', 'settings.mapMapboxToken': 'Mapbox Erişim Anahtarı',
'settings.mapMapboxTokenHint': 'Public token (pk.*) from', 'settings.mapMapboxTokenHint': 'Genel anahtar (pk.*) kaynağı:',
'settings.mapMapboxTokenLink': 'mapbox.com → Access tokens', 'settings.mapMapboxTokenLink': 'Mapbox.com → Jetonlara erişim',
'settings.mapStyle': 'Map Style', 'settings.mapStyle': 'Harita Stili',
'settings.mapStylePlaceholder': 'Select a Mapbox style', 'settings.mapStylePlaceholder': 'Bir Mapbox stili seçin',
'settings.mapStyleHint': 'Preset or your own mapbox://styles/USER/ID URL', 'settings.mapStyleHint':
'settings.map3dBuildings': '3D Buildings & Terrain', 'Ön ayar veya kendi mapbox://styles/KULLANICI/ID adresiniz',
'settings.map3dBuildings': '3D Binalar ve Arazi',
'settings.map3dHint': 'settings.map3dHint':
'Pitch + real 3D building extrusions — works on every style, including satellite.', 'Eğim + gerçek 3D bina çıkıntıları — uydu dahil her stilde çalışır.',
'settings.mapHighQuality': 'High Quality Mode', 'settings.mapHighQuality': 'Yüksek Kalite Modu',
'settings.mapHighQualityHint': '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': 'settings.mapHighQualityWarning':
'May impact performance on lower-end devices.', 'Düşük donanımlı cihazlarda performansı etkileyebilir.',
'settings.mapTipLabel': 'Tip:', 'settings.mapTipLabel': 'İpucu:',
'settings.mapTip': 'settings.mapTip':
'right-click and drag to rotate/pitch the map. Middle-click to add a place (right-click is reserved for rotation).', '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': 'Latitude', 'settings.latitude': 'Enlem',
'settings.longitude': 'Longitude', 'settings.longitude': 'Boylam',
'settings.saveMap': 'Save Map', 'settings.saveMap': 'Haritayı Kaydet',
'settings.apiKeys': 'API Keys', 'settings.apiKeys': 'API Anahtarları',
'settings.mapsKey': 'Google Maps API Key', 'settings.mapsKey': 'Google Maps API Anahtarı',
'settings.mapsKeyHint': 'settings.mapsKeyHint':
'For place search. Requires Places API (New). Get at console.cloud.google.com', 'Yer araması için. Places API (New) gerekir. console.cloud.google.com',
'settings.weatherKey': 'OpenWeatherMap API Key', 'settings.weatherKey': 'OpenWeatherMap API Anahtarı',
'settings.weatherKeyHint': 'For weather data. Free at openweathermap.org/api', 'settings.weatherKeyHint':
'settings.keyPlaceholder': 'Enter key...', 'Hava verisi için. Ücretsiz: openweathermap.org/api',
'settings.configured': 'Configured', 'settings.keyPlaceholder': 'Anahtarı girin...',
'settings.saveKeys': 'Save Keys', 'settings.configured': 'Yapılandırıldı',
'settings.saveKeys': 'Anahtarları Kaydet',
'settings.display': 'Görünüm', 'settings.display': 'Görünüm',
'settings.colorMode': 'Tema modu', 'settings.colorMode': 'Renk Modu',
'settings.light': 'Açık', 'settings.light': 'Açık',
'settings.dark': 'Koyu', 'settings.dark': 'Koyu',
'settings.auto': 'Otomatik', 'settings.auto': 'Otomatik',
'settings.language': 'Dil', 'settings.language': 'Dil',
'settings.temperature': 'Sıcaklık birimi', 'settings.temperature': 'Sıcaklık Birimi',
'settings.timeFormat': 'Saat biçimi', 'settings.timeFormat': 'Saat Biçimi',
'settings.bookingLabels': 'Booking route labels', 'settings.bookingLabels': 'Rezervasyon rota etiketleri',
'settings.bookingLabelsHint': 'settings.bookingLabelsHint':
'Show station / airport names on the map. When off, only the icon is shown.', 'Haritada istasyon / havalimanı adlarını göster. Kapalıyken yalnızca simge görünür.',
'settings.blurBookingCodes': 'Blur Booking Codes', 'settings.blurBookingCodes': 'Rezervasyon Kodlarını Bulanıklaştır',
'settings.notifications': 'Bildirimler', 'settings.notifications': 'Bildirimler',
'settings.notifyTripInvite': 'Trip invitations', 'settings.notifyTripInvite': 'Seyahat davetleri',
'settings.notifyBookingChange': 'Booking changes', 'settings.notifyBookingChange': 'Rezervasyon değişiklikleri',
'settings.notifyTripReminder': 'Trip reminders', 'settings.notifyTripReminder': 'Seyahat hatırlatıcıları',
'settings.notifyTodoDue': 'Todo due soon', 'settings.notifyTodoDue': 'Yapılacak vadesi yakında',
'settings.notifyVacayInvite': 'Vacay fusion invitations', 'settings.notifyVacayInvite': 'Vacay birleştirme davetleri',
'settings.notifyPhotosShared': 'Shared photos (Immich)', 'settings.notifyPhotosShared': 'Paylaşılan fotoğraflar (Immich)',
'settings.notifyCollabMessage': 'Chat messages (Collab)', 'settings.notifyCollabMessage': 'Sohbet mesajları (Collab)',
'settings.notifyPackingTagged': 'Packing list: assignments', 'settings.notifyPackingTagged': 'Paket listesi: atamalar',
'settings.notifyWebhook': 'Webhook notifications', 'settings.notifyWebhook': 'Webhook bildirimleri',
'settings.notifyVersionAvailable': 'New version available', 'settings.notifyVersionAvailable': 'Yeni sürüm mevcut',
'settings.notificationPreferences.email': 'Email', 'settings.notificationPreferences.email': 'E-posta',
'settings.notificationPreferences.webhook': 'Webhook', 'settings.notificationPreferences.webhook': 'Web kancası',
'settings.notificationPreferences.inapp': 'In-App', 'settings.notificationPreferences.inapp': 'Uygulama içi',
'settings.notificationPreferences.ntfy': 'Ntfy', 'settings.notificationPreferences.ntfy': 'Ntfy',
'settings.notificationPreferences.noChannels': 'settings.notificationPreferences.noChannels':
'No notification channels are configured. Ask an admin to set up email or webhook notifications.', 'Bildirim kanalı yapılandırılmadı. Yöneticiden e-posta veya webhook kurmasını isteyin.',
'settings.webhookUrl.label': 'Webhook URL', 'settings.webhookUrl.label': "Web kancası URL'si",
'settings.webhookUrl.placeholder': 'https://discord.com/api/webhooks/...', 'settings.webhookUrl.placeholder': 'https://discord.com/api/webhooks/...',
'settings.webhookUrl.hint': 'settings.webhookUrl.hint':
'Enter your Discord, Slack, or custom webhook URL to receive notifications.', "Bildirim almak için Discord, Slack veya özel webhook URL'nizi girin.",
'settings.webhookUrl.saved': 'Webhook URL saved', 'settings.webhookUrl.saved': 'Webhook URL kaydedildi',
'settings.webhookUrl.test': 'Test', 'settings.webhookUrl.test': 'Dene',
'settings.webhookUrl.testSuccess': 'Test webhook sent successfully', 'settings.webhookUrl.testSuccess': 'Test webhook başarıyla gönderildi',
'settings.webhookUrl.testFailed': 'Test webhook failed', 'settings.webhookUrl.testFailed': 'Test webhook başarısız',
'settings.ntfyUrl.topicLabel': 'Ntfy Topic', 'settings.ntfyUrl.topicLabel': 'Ntfy Konusu',
'settings.ntfyUrl.topicPlaceholder': 'my-trek-alerts', 'settings.ntfyUrl.topicPlaceholder': 'benim-trek-uyarilari',
'settings.ntfyUrl.serverLabel': 'Ntfy Server URL (optional)', 'settings.ntfyUrl.serverLabel': "Ntfy sunucu URL'si (isteğe bağlı)",
'settings.ntfyUrl.serverPlaceholder': 'https://ntfy.sh', 'settings.ntfyUrl.serverPlaceholder': 'https://ntfy.sh',
'settings.ntfyUrl.hint': 'settings.ntfyUrl.hint':
'Enter your ntfy topic to receive push notifications. Leave server blank to use the default configured by your admin.', 'Anlık bildirim için ntfy konusunu girin. Sunucuyu boş bırakırsanız yöneticinin varsayılanı kullanılır.',
'settings.ntfyUrl.tokenLabel': 'Access Token (optional)', 'settings.ntfyUrl.tokenLabel': 'Erişim anahtarı (isteğe bağlı)',
'settings.ntfyUrl.tokenHint': 'Required for password-protected topics.', 'settings.ntfyUrl.tokenHint': 'Parola korumalı konular için gerekli.',
'settings.ntfyUrl.saved': 'Ntfy settings saved', 'settings.ntfyUrl.saved': 'Ntfy ayarları kaydedildi',
'settings.ntfyUrl.test': 'Test', 'settings.ntfyUrl.test': 'Dene',
'settings.ntfyUrl.testSuccess': 'Test ntfy notification sent successfully', 'settings.ntfyUrl.testSuccess': 'Test ntfy bildirimi gönderildi',
'settings.ntfyUrl.testFailed': 'Test ntfy notification failed', 'settings.ntfyUrl.testFailed': 'Test ntfy bildirimi başarısız',
'settings.ntfyUrl.tokenCleared': 'Access token cleared', 'settings.ntfyUrl.tokenCleared': 'Erişim anahtarı temizlendi',
'settings.notificationsDisabled': 'settings.notificationsDisabled':
'Notifications are not configured. Ask an admin to enable email or webhook notifications.', 'Bildirimler yapılandırılmadı. Yöneticiden e-posta veya webhook açmasını isteyin.',
'settings.notificationsActive': 'Active channel', 'settings.notificationsActive': 'Etkin kanal',
'settings.notificationsManagedByAdmin': 'settings.notificationsManagedByAdmin':
'Notification events are configured by your administrator.', 'Bildirim olayları yöneticiniz tarafından yapılandırılır.',
'settings.on': 'On', 'settings.on': 'Açık',
'settings.off': 'Off', 'settings.off': 'Kapalı',
'settings.mcp.title': 'MCP Configuration', 'settings.mcp.title': 'MCP Yapılandırması',
'settings.mcp.endpoint': 'MCP Endpoint', 'settings.mcp.endpoint': 'MCP Uç Noktası',
'settings.mcp.clientConfig': 'Client Configuration', 'settings.mcp.clientConfig': 'İstemci Yapılandırması',
'settings.mcp.clientConfigHint': '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': '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).', "<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': 'Copy', 'settings.mcp.copy': 'Kopyala',
'settings.mcp.copied': 'Copied!', 'settings.mcp.copied': 'Kopyalandı!',
'settings.mcp.apiTokens': 'API Tokens', 'settings.mcp.apiTokens': 'API Belirteçleri',
'settings.mcp.createToken': 'Create New Token', 'settings.mcp.createToken': 'Yeni Jeton Oluştur',
'settings.mcp.noTokens': 'No tokens yet. Create one to connect MCP clients.', 'settings.mcp.noTokens':
'settings.mcp.tokenCreatedAt': 'Created', 'Henüz jeton yok. MCP istemcilerini bağlamak için bir tane oluşturun.',
'settings.mcp.tokenUsedAt': 'Used', 'settings.mcp.tokenCreatedAt': 'Oluşturuldu',
'settings.mcp.deleteTokenTitle': 'Delete Token', 'settings.mcp.tokenUsedAt': 'Kullanılmış',
'settings.mcp.deleteTokenTitle': 'Jetonu Sil',
'settings.mcp.deleteTokenMessage': 'settings.mcp.deleteTokenMessage':
'This token will stop working immediately. Any MCP client using it will lose access.', 'Bu jeton hemen çalışmayı durduracak. Bunu kullanan herhangi bir MCP istemcisi erişimi kaybedecektir.',
'settings.mcp.modal.createTitle': 'Create API Token', 'settings.mcp.modal.createTitle': 'API Jetonu Oluştur',
'settings.mcp.modal.tokenName': 'Token Name', 'settings.mcp.modal.tokenName': 'Jeton Adı',
'settings.mcp.modal.tokenNamePlaceholder': 'e.g. Claude Desktop, Work laptop', 'settings.mcp.modal.tokenNamePlaceholder':
'settings.mcp.modal.creating': 'Creating…', 'örneğin Claude Masaüstü, İş dizüstü bilgisayarı',
'settings.mcp.modal.create': 'Create Token', 'settings.mcp.modal.creating': 'Oluşturuluyor…',
'settings.mcp.modal.createdTitle': 'Token Created', 'settings.mcp.modal.create': 'Jeton Oluştur',
'settings.mcp.modal.createdTitle': 'Jeton Oluşturuldu',
'settings.mcp.modal.createdWarning': 'settings.mcp.modal.createdWarning':
'This token will only be shown once. Copy and store it now — it cannot be recovered.', 'Bu jeton yalnızca bir kez gösterilecektir. Şimdi kopyalayıp saklayın; kurtarılamaz.',
'settings.mcp.modal.done': 'Done', 'settings.mcp.modal.done': 'Tamamlamak',
'settings.mcp.toast.created': 'Token created', 'settings.mcp.toast.created': 'Jeton oluşturuldu',
'settings.mcp.toast.createError': 'Failed to create token', 'settings.mcp.toast.createError': 'Jeton oluşturulamadı',
'settings.mcp.toast.deleted': 'Token deleted', 'settings.mcp.toast.deleted': 'Jeton silindi',
'settings.mcp.toast.deleteError': 'Failed to delete token', 'settings.mcp.toast.deleteError': 'Jeton silinemedi',
'settings.mcp.apiTokensDeprecated': 'settings.mcp.apiTokensDeprecated':
'API Tokens are deprecated and will be removed in a future release. Please use OAuth 2.1 Clients instead.', '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 Clients', 'settings.oauth.clients': 'OAuth 2.1 İstemcileri',
'settings.oauth.clientsHint': 'settings.oauth.clientsHint':
'Register OAuth 2.1 clients to let third-party MCP applications (Claude Web, Cursor, etc.) connect without static tokens.', 'Üçü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': 'New Client', 'settings.oauth.createClient': 'Yeni Müşteri',
'settings.oauth.noClients': 'No OAuth clients registered.', 'settings.oauth.noClients': 'Kayıtlı OAuth istemcisi yok.',
'settings.oauth.clientId': 'Client ID', 'settings.oauth.clientId': 'Müşteri Kimliği',
'settings.oauth.clientSecret': 'Client Secret', 'settings.oauth.clientSecret': 'Müşteri Sırrı',
'settings.oauth.deleteClient': 'Delete Client', 'settings.oauth.deleteClient': 'İstemciyi Sil',
'settings.oauth.deleteClientMessage': 'settings.oauth.deleteClientMessage':
'This client and all active sessions will be permanently removed. Any application using it will lose access immediately.', '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': 'Rotate Secret', 'settings.oauth.rotateSecret': 'Gizli Anahtarı Döndür',
'settings.oauth.rotateSecretMessage': '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.', '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': 'Rotate', 'settings.oauth.rotateSecretConfirm': 'Döndür',
'settings.oauth.rotateSecretConfirming': 'Rotating…', 'settings.oauth.rotateSecretConfirming': 'Dönüyor…',
'settings.oauth.rotateSecretDoneTitle': 'New Secret Generated', 'settings.oauth.rotateSecretDoneTitle': 'Yeni Gizli Oluşturuldu',
'settings.oauth.rotateSecretDoneWarning': 'settings.oauth.rotateSecretDoneWarning':
'This secret is shown only once. Copy it now and update your application — all previous sessions have been invalidated.', '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': 'Active OAuth Sessions', 'settings.oauth.activeSessions': 'Aktif OAuth Oturumları',
'settings.oauth.sessionScopes': 'Scopes', 'settings.oauth.sessionScopes': 'Kapsamlar',
'settings.oauth.sessionExpires': 'Expires', 'settings.oauth.sessionExpires': 'Süresi doluyor',
'settings.oauth.revoke': 'Revoke', 'settings.oauth.revoke': 'Geri çekmek',
'settings.oauth.revokeSession': 'Revoke Session', 'settings.oauth.revokeSession': 'Oturumu İptal Et',
'settings.oauth.revokeSessionMessage': 'settings.oauth.revokeSessionMessage':
'This will immediately revoke access for this OAuth session.', 'Bu, bu OAuth oturumuna erişimi anında iptal edecektir.',
'settings.oauth.modal.createTitle': 'Register OAuth Client', 'settings.oauth.modal.createTitle': 'OAuth İstemcisini Kaydedin',
'settings.oauth.modal.presets': 'Quick presets', 'settings.oauth.modal.presets': 'Hızlı ön ayarlar',
'settings.oauth.modal.clientName': 'Application Name', 'settings.oauth.modal.clientName': 'Uygulama Adı',
'settings.oauth.modal.clientNamePlaceholder': 'e.g. Claude Web, My MCP App', 'settings.oauth.modal.clientNamePlaceholder':
'settings.oauth.modal.redirectUris': 'Redirect URIs', 'örneğin Claude Web, MCP Uygulamam',
'settings.oauth.modal.redirectUris': "URI'leri Yönlendir",
'settings.oauth.modal.redirectUrisPlaceholder': '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': 'settings.oauth.modal.redirectUrisHint':
'One URI per line. HTTPS required (localhost exempt). Exact match enforced.', 'Satır başına bir URI. HTTPS gerekli (yerel ana bilgisayar hariç). Tam eşleşme uygulandı.',
'settings.oauth.modal.scopes': 'Allowed Scopes', 'settings.oauth.modal.scopes': 'İzin Verilen Kapsamlar',
'settings.oauth.modal.scopesHint': '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.', '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': 'Select all', 'settings.oauth.modal.selectAll': 'Tümünü seç',
'settings.oauth.modal.deselectAll': 'Deselect all', 'settings.oauth.modal.deselectAll': 'Tümünün seçimini kaldır',
'settings.oauth.modal.creating': 'Registering…', 'settings.oauth.modal.creating': 'Kaydediliyor…',
'settings.oauth.modal.create': 'Register Client', 'settings.oauth.modal.create': 'Müşteriyi Kaydet',
'settings.oauth.modal.createdTitle': 'Client Registered', 'settings.oauth.modal.createdTitle': 'Müşteri Kayıtlı',
'settings.oauth.modal.createdWarning': 'settings.oauth.modal.createdWarning':
'The client secret is shown only once. Copy it now — it cannot be recovered.', 'İstemci sırrı yalnızca bir kez gösterilir. Şimdi kopyalayın; kurtarılamaz.',
'settings.oauth.toast.createError': 'Failed to register OAuth client', 'settings.oauth.toast.createError': 'OAuth istemcisi kaydedilemedi',
'settings.oauth.toast.deleted': 'OAuth client deleted', 'settings.oauth.toast.deleted': 'OAuth istemcisi silindi',
'settings.oauth.toast.deleteError': 'Failed to delete OAuth client', 'settings.oauth.toast.deleteError': 'OAuth istemcisi silinemedi',
'settings.oauth.toast.revoked': 'Session revoked', 'settings.oauth.toast.revoked': 'Oturum iptal edildi',
'settings.oauth.toast.revokeError': 'Failed to revoke session', 'settings.oauth.toast.revokeError': 'Oturum iptal edilemedi',
'settings.oauth.toast.rotateError': 'Failed to rotate client secret', 'settings.oauth.toast.rotateError': 'İstemci sırrı döndürülemedi',
'settings.account': 'Hesap', 'settings.account': 'Hesap',
'settings.about': 'Hakkında', 'settings.about': 'Hakkında',
'settings.about.reportBug': 'Report a Bug', 'settings.about.reportBug': 'Hata Bildir',
'settings.about.reportBugHint': 'Found an issue? Let us know', 'settings.about.reportBugHint': 'Bir sorun mu buldunuz? Bize bildirin',
'settings.about.featureRequest': 'Feature Request', 'settings.about.featureRequest': 'Özellik İsteği',
'settings.about.featureRequestHint': 'Suggest a new feature', 'settings.about.featureRequestHint': 'Yeni bir özellik önerin',
'settings.about.wikiHint': 'Documentation & guides', 'settings.about.wikiHint': 'Belgeler ve kılavuzlar',
'settings.about.supporters.badge': 'Monthly Supporters', 'settings.about.supporters.badge': 'Aylık Destekçiler',
'settings.about.supporters.title': 'Travel companions for TREK', 'settings.about.supporters.title': 'TREK için seyahat Arkadaşları',
'settings.about.supporters.subtitle': '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.", "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.since': '{date} tarihinden beri destekçimiz',
'settings.about.supporters.tierEmpty': 'Be the first', 'settings.about.supporters.tierEmpty': 'İlk olun',
'settings.about.supporter.tier.noReturnTicket': 'No Return Ticket', 'settings.about.supporter.tier.noReturnTicket': 'Dönüş Bileti Yok',
'settings.about.supporter.tier.lostLuggageVip': 'Lost Luggage VIP', 'settings.about.supporter.tier.lostLuggageVip': 'Kayıp Bagaj VIP',
'settings.about.supporter.tier.businessClassDreamer': 'settings.about.supporter.tier.businessClassDreamer':
'Business Class Dreamer', 'Business Class Hayalperest',
'settings.about.supporter.tier.budgetTraveller': 'Budget Traveller', 'settings.about.supporter.tier.budgetTraveller': 'Bütçe Gezgini',
'settings.about.supporter.tier.hostelBunkmate': 'Hostel Bunkmate', 'settings.about.supporter.tier.hostelBunkmate': 'Hostel Yatakhane Arkadaşı',
'settings.about.description': '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.', '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': 'Made with', 'settings.about.madeWith': 'İle yapıldı',
'settings.about.madeBy': 'by Maurice and a growing open-source community.', 'settings.about.madeBy':
'Maurice ve büyüyen bir açık kaynak topluluğu tarafından.',
'settings.username': 'Kullanıcı adı', 'settings.username': 'Kullanıcı adı',
'settings.email': 'Email', 'settings.email': 'E-posta',
'settings.role': 'Rol', 'settings.role': 'Rol',
'settings.roleAdmin': 'Yönetici', 'settings.roleAdmin': 'Yönetici',
'settings.oidcLinked': 'Linked with', 'settings.oidcLinked': 'ile bağlantılı',
'settings.changePassword': 'Parolayı değiştir', 'settings.changePassword': 'Şifre Değiştir',
'settings.currentPassword': 'Mevcut parola', 'settings.currentPassword': 'Mevcut Şifre',
'settings.currentPasswordRequired': 'Current password is required', 'settings.currentPasswordRequired': 'Mevcut şifre gerekli',
'settings.newPassword': 'Yeni parola', 'settings.newPassword': 'Yeni Şifre',
'settings.confirmPassword': 'Yeni parolayı doğrula', 'settings.confirmPassword': 'Yeni şifreyi onayla',
'settings.updatePassword': 'Parolayı güncelle', 'settings.updatePassword': 'Şifreyi güncelle',
'settings.passwordRequired': 'Please enter current and new password', 'settings.passwordRequired': 'Lütfen mevcut ve yeni şifrenizi giriniz',
'settings.passwordTooShort': 'Password must be at least 8 characters', 'settings.passwordTooShort': 'Şifre en az 8 karakter olmalıdır',
'settings.passwordMismatch': 'Passwords do not match', 'settings.passwordMismatch': 'Şifreler eşleşmiyor',
'settings.passwordWeak': 'settings.passwordWeak':
'Password must contain uppercase, lowercase, a number, and a special character', 'Şifre büyük harf, küçük harf, sayı ve özel karakter içermelidir',
'settings.passwordChanged': 'Password changed successfully', 'settings.passwordChanged': 'Şifre başarıyla değiştirildi',
'settings.mustChangePassword': '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.deleteAccount': 'Hesabı sil',
'settings.deleteAccountTitle': 'Delete your account?', 'settings.deleteAccountTitle': 'Hesabınız silinsin mi?',
'settings.deleteAccountWarning': 'settings.deleteAccountWarning':
'Your account and all your trips, places, and files will be permanently deleted. This action cannot be undone.', 'Hesabınız ve tüm gezileriniz, yerleriniz ve dosyalarınız kalıcı olarak silinecek. Bu eylem geri alınamaz.',
'settings.deleteAccountConfirm': 'Delete permanently', 'settings.deleteAccountConfirm': 'Kalıcı olarak sil',
'settings.deleteBlockedTitle': 'Deletion not possible', 'settings.deleteBlockedTitle': 'Silme mümkün değil',
'settings.deleteBlockedMessage': '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.roleUser': 'Kullanıcı',
'settings.saveProfile': 'Profili kaydet', 'settings.saveProfile': 'Profili Kaydet',
'settings.toast.mapSaved': 'Map settings saved', 'settings.toast.mapSaved': 'Harita ayarları kaydedildi',
'settings.toast.keysSaved': 'API keys saved', 'settings.toast.keysSaved': 'API anahtarları kaydedildi',
'settings.toast.displaySaved': 'Display settings saved', 'settings.toast.displaySaved': 'Ekran ayarları kaydedildi',
'settings.toast.profileSaved': 'Profile saved', 'settings.toast.profileSaved': 'Profil kaydedildi',
'settings.uploadAvatar': 'Upload Profile Picture', 'settings.uploadAvatar': 'Profil Resmini Yükle',
'settings.removeAvatar': 'Remove Profile Picture', 'settings.removeAvatar': 'Profil Resmini Kaldır',
'settings.avatarUploaded': 'Profile picture updated', 'settings.avatarUploaded': 'Profil resmi güncellendi',
'settings.avatarRemoved': 'Profile picture removed', 'settings.avatarRemoved': 'Profil resmi kaldırıldı',
'settings.avatarError': 'Upload failed', 'settings.avatarError': 'Yükleme başarısız oldu',
'settings.mfa.title': 'Two-factor authentication (2FA)', 'settings.mfa.title': 'İki faktörlü kimlik doğrulama (2FA)',
'settings.mfa.description': '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': 'settings.mfa.requiredByPolicy':
'Your administrator requires two-factor authentication. Set up an authenticator app below before continuing.', 'Yöneticiniz iki faktörlü kimlik doğrulama gerektiriyor. Devam etmeden önce aşağıdan bir kimlik doğrulama uygulaması kurun.',
'settings.mfa.backupTitle': 'Backup codes', 'settings.mfa.backupTitle': 'Yedekleme kodları',
'settings.mfa.backupDescription': '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': 'settings.mfa.backupWarning':
'Save these codes now. Each code can only be used once.', 'Şimdi bu kodları kaydedin. Her kod yalnızca bir kez kullanılabilir.',
'settings.mfa.backupCopy': 'Copy codes', 'settings.mfa.backupCopy': 'Kodları kopyala',
'settings.mfa.backupDownload': 'Download TXT', 'settings.mfa.backupDownload': "TXT'yi İndirin",
'settings.mfa.backupPrint': 'Print / PDF', 'settings.mfa.backupPrint': 'Yazdır / PDF',
'settings.mfa.backupCopied': 'Backup codes copied', 'settings.mfa.backupCopied': 'Yedek kodlar kopyalandı',
'settings.mfa.enabled': '2FA is enabled on your account.', 'settings.mfa.enabled': 'Hesabınızda 2FA etkin.',
'settings.mfa.disabled': '2FA is not enabled.', 'settings.mfa.disabled': '2FA etkin değil.',
'settings.mfa.setup': 'Set up authenticator', 'settings.mfa.setup': 'Kimlik doğrulayıcıyı ayarla',
'settings.mfa.scanQr': 'settings.mfa.scanQr':
'Scan this QR code with your app, or enter the secret manually.', 'Bu QR kodunu uygulamanızla tarayın veya sırrı manuel olarak girin.',
'settings.mfa.secretLabel': 'Secret key (manual entry)', 'settings.mfa.secretLabel': 'Gizli anahtar (manuel giriş)',
'settings.mfa.codePlaceholder': '6-digit code', 'settings.mfa.codePlaceholder': '6 haneli kod',
'settings.mfa.enable': 'Enable 2FA', 'settings.mfa.enable': "2FA'yı Etkinleştir",
'settings.mfa.cancelSetup': 'Cancel', 'settings.mfa.cancelSetup': 'İptal etmek',
'settings.mfa.disableTitle': 'Disable 2FA', 'settings.mfa.disableTitle': "2FA'yı devre dışı bırak",
'settings.mfa.disableHint': 'settings.mfa.disableHint':
'Enter your account password and a current code from your authenticator.', 'Hesap şifrenizi ve kimlik doğrulayıcınızdan aldığınız geçerli kodu girin.',
'settings.mfa.disable': 'Disable 2FA', 'settings.mfa.disable': "2FA'yı devre dışı bırak",
'settings.mfa.toastEnabled': 'Two-factor authentication enabled', 'settings.mfa.toastEnabled': 'İki faktörlü kimlik doğrulama etkin',
'settings.mfa.toastDisabled': 'Two-factor authentication disabled', 'settings.mfa.toastDisabled': 'İki faktörlü kimlik doğrulama devre dışı',
'settings.mfa.demoBlocked': 'Not available in demo mode', 'settings.mfa.demoBlocked': 'Demo modunda kullanılamaz',
'settings.oauth.modal.machineClient': 'settings.oauth.modal.machineClient':
'Makine istemcisi (tarayıcı girişi yok)', 'Makine istemcisi (tarayıcıda oturum açma yok)',
'settings.oauth.modal.machineClientHint': '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.", "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': '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', 'settings.oauth.badge.machine': 'makine',
}; };
export default settings; export default settings;
+10 -10
View File
@@ -1,16 +1,16 @@
import type { TranslationStrings } from '../types'; import type { TranslationStrings } from '../types';
const share: TranslationStrings = { const share: TranslationStrings = {
'share.linkTitle': 'Public Link', 'share.linkTitle': 'Genel Bağlantı',
'share.linkHint': 'share.linkHint':
'Create a link anyone can use to view this trip without logging in. Read-only — no editing possible.', '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': 'Create link', 'share.createLink': 'Bağlantı oluştur',
'share.deleteLink': 'Delete link', 'share.deleteLink': 'Bağlantıyı sil',
'share.createError': 'Could not create link', 'share.createError': 'Bağlantı oluşturulamadı',
'share.permMap': 'Map & Plan', 'share.permMap': 'Harita ve Plan',
'share.permBookings': 'Bookings', 'share.permBookings': 'Rezervasyonlar',
'share.permPacking': 'Packing', 'share.permPacking': 'Ambalaj',
'share.permBudget': 'Budget', 'share.permBudget': 'Bütçe',
'share.permCollab': 'Chat', 'share.permCollab': 'Sohbet',
}; };
export default share; export default share;
+16 -16
View File
@@ -1,21 +1,21 @@
import type { TranslationStrings } from '../types'; import type { TranslationStrings } from '../types';
const shared: TranslationStrings = { const shared: TranslationStrings = {
'shared.expired': 'Link expired or invalid', 'shared.expired': 'Bağlantının süresi dolmuş veya geçersiz',
'shared.expiredHint': 'This shared trip link is no longer active.', 'shared.expiredHint': 'Bu paylaşılan gezi bağlantısı artık etkin değil.',
'shared.readOnly': 'Read-only shared view', 'shared.readOnly': 'Salt okunur paylaşılan görünüm',
'shared.tabPlan': 'Plan', 'shared.tabPlan': 'Planı',
'shared.tabBookings': 'Bookings', 'shared.tabBookings': 'Rezervasyonlar',
'shared.tabPacking': 'Packing', 'shared.tabPacking': 'Ambalaj',
'shared.tabBudget': 'Budget', 'shared.tabBudget': 'Bütçe',
'shared.tabChat': 'Chat', 'shared.tabChat': 'Sohbet',
'shared.days': 'days', 'shared.days': 'günler',
'shared.places': 'places', 'shared.places': 'yer',
'shared.other': 'Other', 'shared.other': 'Diğer',
'shared.totalBudget': 'Total Budget', 'shared.totalBudget': 'Toplam Bütçe',
'shared.messages': 'messages', 'shared.messages': 'mesajlar',
'shared.sharedVia': 'Shared via', 'shared.sharedVia': 'Şununla paylaşıldı:',
'shared.confirmed': 'Confirmed', 'shared.confirmed': 'Onaylandı',
'shared.pending': 'Pending', 'shared.pending': 'Askıda olması',
}; };
export default shared; export default shared;
+8 -8
View File
@@ -1,13 +1,13 @@
import type { TranslationStrings } from '../types'; import type { TranslationStrings } from '../types';
const stats: TranslationStrings = { const stats: TranslationStrings = {
'stats.countries': 'Countries', 'stats.countries': 'Ülkeler',
'stats.cities': 'Cities', 'stats.cities': 'Şehirler',
'stats.trips': 'Trips', 'stats.trips': 'Seyahatler',
'stats.places': 'Places', 'stats.places': 'Yerler',
'stats.worldProgress': 'World Progress', 'stats.worldProgress': 'Dünya İlerlemesi',
'stats.visited': 'visited', 'stats.visited': 'ziyaret edildi',
'stats.remaining': 'remaining', 'stats.remaining': 'kalan',
'stats.visitedCountries': 'Visited Countries', 'stats.visitedCountries': 'Ziyaret Edilen Ülkeler',
}; };
export default stats; export default stats;
+43 -38
View File
@@ -1,60 +1,65 @@
import type { TranslationStrings } from '../types'; import type { TranslationStrings } from '../types';
const system_notice: TranslationStrings = { 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': '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.', "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': 'Meet Journey — travel journal', 'system_notice.v3_journey.title': 'Journey ile tanışın — seyahat günlüğü',
'system_notice.v3_journey.body': 'system_notice.v3_journey.body':
'Document your trips as rich travel stories with timelines, photo galleries, and interactive maps.', 'Seyahatlerinizi zaman çizelgeleri, fotoğraf galerileri ve etkileşimli haritalarla zengin hikâyelere dönüştürün.',
'system_notice.v3_journey.cta_label': 'Open Journey', 'system_notice.v3_journey.cta_label': "Journey'i Aç",
'system_notice.v3_journey.highlight_timeline': 'system_notice.v3_journey.highlight_timeline':
'Day-by-day timeline & gallery', 'Gün gün zaman çizelgesi ve galeri',
'system_notice.v3_journey.highlight_photos': 'Import from Immich or Synology', 'system_notice.v3_journey.highlight_photos':
"Immich veya Synology'den içe Aktar",
'system_notice.v3_journey.highlight_share': 'system_notice.v3_journey.highlight_share':
'Share publicly — no login needed', 'Herkese açık paylaş — giriş gerekmez',
'system_notice.v3_journey.highlight_export': 'Export as a PDF photo book', 'system_notice.v3_journey.highlight_export':
'system_notice.v3_features.title': 'More highlights in 3.0', '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': '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': 'system_notice.v3_features.highlight_dashboard':
'Mobile-first dashboard redesign', 'Mobil öncelikli gösterge paneli yenilemesi',
'system_notice.v3_features.highlight_offline': 'Full offline mode as a PWA', 'system_notice.v3_features.highlight_offline':
'PWA olarak tam çevrimdışı mod',
'system_notice.v3_features.highlight_search': 'system_notice.v3_features.highlight_search':
'Real-time place search autocomplete', 'Gerçek zamanlı yer arama otomatik tamamlama',
'system_notice.v3_features.highlight_import': 'system_notice.v3_features.highlight_import':
'Import places from KMZ/KML files', 'KMZ/KML dosyalarından yer İçe aktarma',
'system_notice.v3_mcp.title': 'MCP: OAuth 2.1 upgrade', 'system_notice.v3_mcp.title': 'MCP: OAuth 2.1 yükseltmesi',
'system_notice.v3_mcp.body': '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.', '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 recommended (mcp-remote)', 'system_notice.v3_mcp.highlight_oauth': 'OAuth 2.1 önerilir (mcp-remote)',
'system_notice.v3_mcp.highlight_scopes': '24 fine-grained permission scopes', 'system_notice.v3_mcp.highlight_scopes': '24 ayrıntılı izin kapsamı',
'system_notice.v3_mcp.highlight_deprecated': 'Static trek_ tokens deprecated', 'system_notice.v3_mcp.highlight_deprecated':
'system_notice.v3_mcp.highlight_tools': 'Expanded toolset & prompts', 'Statik trek_ jetonları kullanımdan kaldırıldı',
'system_notice.v3_thankyou.title': 'A personal note from me', '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': '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.", "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': 'system_notice.v3014_whitespace_collision.title':
'Action required: user account conflict', 'İşlem gerekli: kullanıcı hesabı çakışması',
'system_notice.v3014_whitespace_collision.body': '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.', '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': 'Welcome to TREK', 'system_notice.welcome_v1.title': "TREK'e hoş Geldiniz",
'system_notice.welcome_v1.body': 'system_notice.welcome_v1.body':
'Your all-in-one travel planner. Build itineraries, share trips with friends, and stay organized — online or offline.', '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': 'Plan a trip', 'system_notice.welcome_v1.cta_label': 'Seyahat planla',
'system_notice.welcome_v1.hero_alt': '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': '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': 'system_notice.welcome_v1.highlight_share':
'Collaborate with travel partners', 'Seyahat partnerleriyle işbirliği',
'system_notice.welcome_v1.highlight_offline': 'Works offline on mobile', 'system_notice.welcome_v1.highlight_offline': 'Mobilde çevrimdışı çalışır',
'system_notice.dev_test_modal.title': '[Dev] Test notice', 'system_notice.dev_test_modal.title': '[Dev] Test bildirimi',
'system_notice.dev_test_modal.body': 'This is a dev-only test notice.', 'system_notice.dev_test_modal.body':
'system_notice.pager.prev': 'Previous notice', 'Bu yalnızca geliştirme ortamına özel bir test bildirimidir.',
'system_notice.pager.next': 'Next notice', 'system_notice.pager.prev': 'Önceki bildirim',
'system_notice.pager.counter': '{current} / {total}', 'system_notice.pager.next': 'Sonraki bildirim',
'system_notice.pager.goto': 'Go to notice {n}', 'system_notice.pager.counter': '{güncel} / {toplam}',
'system_notice.pager.position': 'Notice {current} of {total}', 'system_notice.pager.goto': '{n}. bildirime git',
'system_notice.pager.position': '{total} Bildirimden {current}.',
}; };
export default system_notice; export default system_notice;
+35 -35
View File
@@ -1,40 +1,40 @@
import type { TranslationStrings } from '../types'; import type { TranslationStrings } from '../types';
const todo: TranslationStrings = { const todo: TranslationStrings = {
'todo.subtab.packing': 'Packing List', 'todo.subtab.packing': 'Paket Listesi',
'todo.subtab.todo': 'To-Do', 'todo.subtab.todo': 'Yapılacaklar',
'todo.completed': 'completed', 'todo.completed': 'tamamlandı',
'todo.filter.all': 'All', 'todo.filter.all': 'Tümü',
'todo.filter.open': 'Open', 'todo.filter.open': 'Açık',
'todo.filter.done': 'Done', 'todo.filter.done': 'Tamamlandı',
'todo.uncategorized': 'Uncategorized', 'todo.uncategorized': 'Kategorisiz',
'todo.namePlaceholder': 'Task name', 'todo.namePlaceholder': 'Görev adı',
'todo.descriptionPlaceholder': 'Description (optional)', 'todo.descriptionPlaceholder': 'Açıklama (isteğe bağlı)',
'todo.unassigned': 'Unassigned', 'todo.unassigned': 'Atanmamış',
'todo.noCategory': 'No category', 'todo.noCategory': 'Kategori yok',
'todo.hasDescription': 'Has description', 'todo.hasDescription': 'Açıklama var',
'todo.addItem': 'Add new task', 'todo.addItem': 'Yeni görev ekle',
'todo.sidebar.sortBy': 'Sort by', 'todo.sidebar.sortBy': 'Sırala',
'todo.priority': 'Priority', 'todo.priority': 'Öncelik',
'todo.newCategoryLabel': 'new', 'todo.newCategoryLabel': 'yeni',
'todo.newCategory': 'Category name', 'todo.newCategory': 'Kategori adı',
'todo.addCategory': 'Add category', 'todo.addCategory': 'Kategori ekle',
'todo.newItem': 'New task', 'todo.newItem': 'Yeni görev',
'todo.empty': 'No tasks yet. Add a task to get started!', 'todo.empty': 'Henüz görev yok. Başlamak için bir görev ekleyin!',
'todo.filter.my': 'My Tasks', 'todo.filter.my': 'Görevlerim',
'todo.filter.overdue': 'Overdue', 'todo.filter.overdue': 'Gecikmiş',
'todo.sidebar.tasks': 'Tasks', 'todo.sidebar.tasks': 'Görevler',
'todo.sidebar.categories': 'Categories', 'todo.sidebar.categories': 'Kategoriler',
'todo.detail.title': 'Task', 'todo.detail.title': 'Görev',
'todo.detail.description': 'Description', 'todo.detail.description': 'Açıklama',
'todo.detail.category': 'Category', 'todo.detail.category': 'Kategori',
'todo.detail.dueDate': 'Due date', 'todo.detail.dueDate': 'Son tarih',
'todo.detail.assignedTo': 'Assigned to', 'todo.detail.assignedTo': 'Atanan',
'todo.detail.delete': 'Delete', 'todo.detail.delete': 'Sil',
'todo.detail.save': 'Save changes', 'todo.detail.save': 'Değişiklikleri kaydet',
'todo.sortByPrio': 'Priority', 'todo.sortByPrio': 'Öncelik',
'todo.detail.priority': 'Priority', 'todo.detail.priority': 'Öncelik',
'todo.detail.noPriority': 'None', 'todo.detail.noPriority': 'Yok',
'todo.detail.create': 'Create task', 'todo.detail.create': 'Görev oluştur',
}; };
export default todo; export default todo;
+5 -5
View File
@@ -1,10 +1,10 @@
import type { TranslationStrings } from '../types'; import type { TranslationStrings } from '../types';
const transport: TranslationStrings = { const transport: TranslationStrings = {
'transport.addTransport': 'Add transport', 'transport.addTransport': 'Ulaşım ekle',
'transport.modalTitle.create': 'Add transport', 'transport.modalTitle.create': 'Ulaşım ekle',
'transport.modalTitle.edit': 'Edit transport', 'transport.modalTitle.edit': 'Ulaşımı düzenle',
'transport.title': 'Transports', 'transport.title': 'Ulaşım',
'transport.addManual': 'Manual Transport', 'transport.addManual': 'Manuel Ulaşım',
}; };
export default transport; export default transport;
+26 -26
View File
@@ -1,31 +1,31 @@
import type { TranslationStrings } from '../types'; import type { TranslationStrings } from '../types';
const trip: TranslationStrings = { const trip: TranslationStrings = {
'trip.tabs.plan': 'Plan', 'trip.tabs.plan': 'Planı',
'trip.tabs.transports': 'Transports', 'trip.tabs.transports': 'Ulaşım',
'trip.tabs.reservations': 'Bookings', 'trip.tabs.reservations': 'Rezervasyonlar',
'trip.tabs.reservationsShort': 'Book', 'trip.tabs.reservationsShort': 'Rezerv.',
'trip.tabs.packing': 'Packing List', 'trip.tabs.packing': 'Paket Listesi',
'trip.tabs.packingShort': 'Packing', 'trip.tabs.packingShort': 'Paket',
'trip.tabs.lists': 'Lists', 'trip.tabs.lists': 'Listeler',
'trip.tabs.listsShort': 'Lists', 'trip.tabs.listsShort': 'Liste',
'trip.tabs.budget': 'Budget', 'trip.tabs.budget': 'Bütçe',
'trip.tabs.files': 'Files', 'trip.tabs.files': 'Dosyalar',
'trip.loading': 'Loading trip...', 'trip.loading': 'Seyahat yükleniyor...',
'trip.loadingPhotos': 'Loading place photos...', 'trip.loadingPhotos': 'Yer fotoğrafları yükleniyor...',
'trip.mobilePlan': 'Plan', 'trip.mobilePlan': 'Planı',
'trip.mobilePlaces': 'Places', 'trip.mobilePlaces': 'Yerler',
'trip.toast.placeUpdated': 'Place updated', 'trip.toast.placeUpdated': 'Yer güncellendi',
'trip.toast.placeAdded': 'Place added', 'trip.toast.placeAdded': 'Yer eklendi',
'trip.toast.placeDeleted': 'Place deleted', 'trip.toast.placeDeleted': 'Yer silindi',
'trip.toast.selectDay': 'Please select a day first', 'trip.toast.selectDay': 'Lütfen önce bir gün seçin',
'trip.toast.assignedToDay': 'Place assigned to day', 'trip.toast.assignedToDay': 'Yer güne atandı',
'trip.toast.reorderError': 'Failed to reorder', 'trip.toast.reorderError': 'Sıralama yapılamadı',
'trip.toast.reservationUpdated': 'Reservation updated', 'trip.toast.reservationUpdated': 'Rezervasyon güncellendi',
'trip.toast.reservationAdded': 'Reservation added', 'trip.toast.reservationAdded': 'Rezervasyon eklendi',
'trip.toast.deleted': 'Deleted', 'trip.toast.deleted': 'Silindi',
'trip.confirm.deletePlace': 'Are you sure you want to delete this place?', 'trip.confirm.deletePlace': 'Bu yeri silmek istediğinizden emin misiniz?',
'trip.confirm.deletePlaces': 'Delete {count} places?', 'trip.confirm.deletePlaces': '{count} Yer silinsin mi?',
'trip.toast.placesDeleted': '{count} places deleted', 'trip.toast.placesDeleted': '{count} yer silindi',
}; };
export default trip; export default trip;
+3 -3
View File
@@ -5,13 +5,13 @@ const trips: TranslationStrings = {
'trips.memberRemoveError': 'Kaldırılamadı', 'trips.memberRemoveError': 'Kaldırılamadı',
'trips.memberAdded': '{username} eklendi', 'trips.memberAdded': '{username} eklendi',
'trips.memberAddError': 'Eklenemedi', 'trips.memberAddError': 'Eklenemedi',
'trips.reminder': 'Hatırlatma', 'trips.reminder': 'Hatırlatıcı',
'trips.reminderNone': 'Yok', 'trips.reminderNone': 'Yok',
'trips.reminderDay': 'gün', 'trips.reminderDay': 'gün',
'trips.reminderDays': 'gün', 'trips.reminderDays': 'gün',
'trips.reminderCustom': 'Özel', 'trips.reminderCustom': 'Özel',
'trips.reminderDaysBefore': 'kalkıştan önceki gün sayısı', 'trips.reminderDaysBefore': 'hareketten önce gün',
'trips.reminderDisabledHint': '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; export default trips;
+16 -16
View File
@@ -1,21 +1,21 @@
import type { TranslationStrings } from '../types'; import type { TranslationStrings } from '../types';
const undo: TranslationStrings = { const undo: TranslationStrings = {
'undo.button': 'Undo', 'undo.button': 'Geri al',
'undo.tooltip': 'Undo: {action}', 'undo.tooltip': 'Geri al: {action}',
'undo.assignPlace': 'Place assigned to day', 'undo.assignPlace': 'Yer güne atandı',
'undo.removeAssignment': 'Place removed from day', 'undo.removeAssignment': 'Yer günden kaldırıldı',
'undo.reorder': 'Places reordered', 'undo.reorder': 'Yerler yeniden sıralandı',
'undo.optimize': 'Route optimized', 'undo.optimize': 'Rota optimize edildi',
'undo.deletePlace': 'Place deleted', 'undo.deletePlace': 'Yer silindi',
'undo.deletePlaces': 'Places deleted', 'undo.deletePlaces': 'Yerler silindi',
'undo.moveDay': 'Place moved to another day', 'undo.moveDay': 'Yer başka güne taşındı',
'undo.lock': 'Place lock toggled', 'undo.lock': 'Yer kilidi değiştirildi',
'undo.importGpx': 'GPX import', 'undo.importGpx': 'GPX içe aktarma',
'undo.importKeyholeMarkup': 'KMZ/KML import', 'undo.importKeyholeMarkup': 'KMZ/KML içe aktarma',
'undo.importGoogleList': 'Google Maps import', 'undo.importGoogleList': 'Google Haritalar içe aktarma',
'undo.importNaverList': 'Naver Maps import', 'undo.importNaverList': 'Naver Haritalar içe aktarma',
'undo.addPlace': 'Place added', 'undo.addPlace': 'Yer eklendi',
'undo.done': 'Undone: {action}', 'undo.done': 'Geri alındı: {action}',
}; };
export default undo; export default undo;
+90 -88
View File
@@ -1,103 +1,105 @@
import type { TranslationStrings } from '../types'; import type { TranslationStrings } from '../types';
const vacay: TranslationStrings = { const vacay: TranslationStrings = {
'vacay.subtitle': 'Plan and manage vacation days', 'vacay.subtitle': 'Tatil günlerini planlayın ve yönetin',
'vacay.settings': 'Settings', 'vacay.settings': 'Ayarlar',
'vacay.year': 'Year', 'vacay.year': 'Yıl',
'vacay.addYear': 'Add next year', 'vacay.addYear': 'Gelecek yıl ekle',
'vacay.addPrevYear': 'Add previous year', 'vacay.addPrevYear': 'Önceki yılı ekle',
'vacay.removeYear': 'Remove year', 'vacay.removeYear': 'Yılı kaldır',
'vacay.removeYearConfirm': 'Remove {year}?', 'vacay.removeYearConfirm': '{year} Kaldırılsın mı?',
'vacay.removeYearHint': 'vacay.removeYearHint':
'All vacation entries and company holidays for this year will be permanently deleted.', 'Bu yılın tüm tatil girişleri ve şirket tatilleri kalıcı olarak silinecek.',
'vacay.remove': 'Remove', 'vacay.remove': 'Kaldırmak',
'vacay.persons': 'Persons', 'vacay.persons': 'Kişiler',
'vacay.noPersons': 'No persons added', 'vacay.noPersons': 'Hiç kişi eklenmedi',
'vacay.addPerson': 'Add Person', 'vacay.addPerson': 'Kişi Ekle',
'vacay.editPerson': 'Edit Person', 'vacay.editPerson': 'Kişiyi Düzenle',
'vacay.removePerson': 'Remove Person', 'vacay.removePerson': 'Kişiyi Kaldır',
'vacay.removePersonConfirm': 'Remove {name}?', 'vacay.removePersonConfirm': '{name} Kaldırılsın mı?',
'vacay.removePersonHint': 'vacay.removePersonHint':
'All vacation entries for this person will be permanently deleted.', 'Bu kişinin tüm tatil girişleri kalıcı olarak silinecek.',
'vacay.personName': 'Name', 'vacay.personName': 'İsim',
'vacay.personNamePlaceholder': 'Enter name', 'vacay.personNamePlaceholder': 'Ad girin',
'vacay.color': 'Color', 'vacay.color': 'Renk',
'vacay.add': 'Add', 'vacay.add': 'Eklemek',
'vacay.legend': 'Legend', 'vacay.legend': 'Efsane',
'vacay.publicHoliday': 'Public Holiday', 'vacay.publicHoliday': 'Resmi Tatil',
'vacay.companyHoliday': 'Company Holiday', 'vacay.companyHoliday': 'Şirket Tatili',
'vacay.weekend': 'Weekend', 'vacay.weekend': 'Hafta sonu',
'vacay.modeVacation': 'Vacation', 'vacay.modeVacation': 'Tatil',
'vacay.modeCompany': 'Company Holiday', 'vacay.modeCompany': 'Şirket Tatili',
'vacay.entitlement': 'Entitlement', 'vacay.entitlement': 'Yetki',
'vacay.entitlementDays': 'Days', 'vacay.entitlementDays': 'Günler',
'vacay.used': 'Used', 'vacay.used': 'Kullanılmış',
'vacay.remaining': 'Left', 'vacay.remaining': 'Sol',
'vacay.carriedOver': 'from {year}', 'vacay.carriedOver': '{yıl} tarihinden itibaren',
'vacay.blockWeekends': 'Block Weekends', 'vacay.blockWeekends': 'Hafta Sonlarını Engelle',
'vacay.blockWeekendsHint': 'Prevent vacation entries on weekend days', 'vacay.blockWeekendsHint': 'Hafta sonu günlerinde tatil girişlerini önleyin',
'vacay.weekendDays': 'Weekend days', 'vacay.weekendDays': 'Hafta sonu günleri',
'vacay.mon': 'Mon', 'vacay.mon': 'Pazartesi',
'vacay.tue': 'Tue', 'vacay.tue': 'Salı',
'vacay.wed': 'Wed', 'vacay.wed': 'Çar',
'vacay.thu': 'Thu', 'vacay.thu': 'Per',
'vacay.fri': 'Fri', 'vacay.fri': 'Cuma',
'vacay.sat': 'Sat', 'vacay.sat': 'Doygunluk',
'vacay.sun': 'Sun', 'vacay.sun': 'Güneş',
'vacay.publicHolidays': 'Public Holidays', 'vacay.publicHolidays': 'Resmi Tatiller',
'vacay.publicHolidaysHint': 'Mark public holidays in the calendar', 'vacay.publicHolidaysHint': 'Resmi tatil günlerini takvimde işaretleyin',
'vacay.selectCountry': 'Select country', 'vacay.selectCountry': 'Ülke seçin',
'vacay.selectRegion': 'Select region (optional)', 'vacay.selectRegion': 'Bölge seçin (isteğe bağlı)',
'vacay.addCalendar': 'Add calendar', 'vacay.addCalendar': 'Takvim ekle',
'vacay.calendarLabel': 'Label (optional)', 'vacay.calendarLabel': 'Etiket (isteğe bağlı)',
'vacay.calendarColor': 'Color', 'vacay.calendarColor': 'Renk',
'vacay.noCalendars': 'No holiday calendars added yet', 'vacay.noCalendars': 'Henüz tatil takvimi eklenmedi',
'vacay.companyHolidays': 'Company Holidays', 'vacay.companyHolidays': 'Şirket Tatilleri',
'vacay.companyHolidaysHint': 'Allow marking company-wide holiday days', 'vacay.companyHolidaysHint':
'Şirket çapında tatil günlerinin işaretlenmesine izin ver',
'vacay.companyHolidaysNoDeduct': 'vacay.companyHolidaysNoDeduct':
'Company holidays do not count towards vacation days.', 'Şirket tatilleri tatil günlerinden sayılmaz.',
'vacay.weekStart': 'Week starts on', 'vacay.weekStart': 'Hafta başlıyor',
'vacay.weekStartHint': 'vacay.weekStartHint':
'Choose whether the calendar week starts on Monday or Sunday', 'Takvim haftasının Pazartesi mi yoksa Pazar günü mü başlayacağını seçin',
'vacay.carryOver': 'Carry Over', 'vacay.carryOver': 'Devret',
'vacay.carryOverHint': 'vacay.carryOverHint':
'Automatically carry remaining vacation days into the next year', 'Kalan tatil günlerini otomatik olarak bir sonraki yıla taşıyın',
'vacay.sharing': 'Sharing', 'vacay.sharing': 'Paylaşma',
'vacay.sharingHint': 'Share your vacation plan with other TREK users', 'vacay.sharingHint': 'Tatil planınızı diğer TREK kullanıcılarıyla paylaşın',
'vacay.owner': 'Owner', 'vacay.owner': 'Mal sahibi',
'vacay.shareEmailPlaceholder': 'Email of TREK user', 'vacay.shareEmailPlaceholder': 'TREK kullanıcısının e-postası',
'vacay.shareSuccess': 'Plan shared successfully', 'vacay.shareSuccess': 'Plan başarıyla paylaşıldı',
'vacay.shareError': 'Could not share plan', 'vacay.shareError': 'Plan paylaşılamadı',
'vacay.dissolve': 'Dissolve Fusion', 'vacay.dissolve': 'Füzyonu Çözün',
'vacay.dissolveHint': 'Separate calendars again. Your entries will be kept.', 'vacay.dissolveHint': 'Takvimleri tekrar ayırın. Girişleriniz saklanacaktır.',
'vacay.dissolveAction': 'Dissolve', 'vacay.dissolveAction': 'Çözün',
'vacay.dissolved': 'Calendar separated', 'vacay.dissolved': 'Takvim ayrıldı',
'vacay.fusedWith': 'Fused with', 'vacay.fusedWith': 'İle kaynaşmış',
'vacay.you': 'you', 'vacay.you': 'Sen',
'vacay.noData': 'No data', 'vacay.noData': 'Veri yok',
'vacay.changeColor': 'Change color', 'vacay.changeColor': 'Rengi değiştir',
'vacay.inviteUser': 'Invite User', 'vacay.inviteUser': 'Kullanıcıyı Davet Et',
'vacay.inviteHint': 'vacay.inviteHint':
'Invite another TREK user to share a combined vacation calendar.', 'Başka bir TREK kullanıcısını birleşik bir tatil takvimini paylaşmaya davet edin.',
'vacay.selectUser': 'Select user', 'vacay.selectUser': 'Kullanıcı seç',
'vacay.sendInvite': 'Send Invite', 'vacay.sendInvite': 'Davet Gönder',
'vacay.inviteSent': 'Invite sent', 'vacay.inviteSent': 'Davet gönderildi',
'vacay.inviteError': 'Could not send invite', 'vacay.inviteError': 'Davet gönderilemedi',
'vacay.pending': 'pending', 'vacay.pending': 'askıda olması',
'vacay.noUsersAvailable': 'No users available', 'vacay.noUsersAvailable': 'Kullanılabilir kullanıcı yok',
'vacay.accept': 'Accept', 'vacay.accept': 'Kabul etmek',
'vacay.decline': 'Decline', 'vacay.decline': 'Reddetmek',
'vacay.acceptFusion': 'Accept & Fuse', 'vacay.acceptFusion': 'Kabul Et ve Sigortala',
'vacay.inviteTitle': 'Fusion Request', 'vacay.inviteTitle': 'Füzyon Talebi',
'vacay.inviteWantsToFuse': 'wants to share a vacation calendar with you.', 'vacay.inviteWantsToFuse': 'sizinle bir tatil takvimi paylaşmak istiyor.',
'vacay.fuseInfo1': 'vacay.fuseInfo1':
'Both of you will see all vacation entries in one shared calendar.', 'İkiniz de tüm tatil kayıtlarını tek bir paylaşılan takvimde göreceksiniz.',
'vacay.fuseInfo2': 'Both parties can create and edit entries for each other.', 'vacay.fuseInfo2':
'Her iki taraf da birbirleri için girişler oluşturabilir ve düzenleyebilir.',
'vacay.fuseInfo3': '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': 'vacay.fuseInfo4':
'Settings like public holidays and company holidays are shared.', 'Resmi tatiller ve şirket tatilleri gibi ayarlar paylaşılır.',
'vacay.fuseInfo5': '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; export default vacay;