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.
This commit is contained in:
Ahmet Yılmaz
2026-05-27 18:31:37 +03:00
committed by GitHub
parent 831a4fd478
commit 8bda980028
41 changed files with 2144 additions and 2472 deletions
+280 -338
View File
@@ -1,70 +1,56 @@
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': 'Bir bildirim kanalı seçin. Aynı anda yalnızca biri etkin olabilir.',
'Choose one notification channel. Only one can be active at a time.', 'admin.notifications.none': 'Kapalı',
'admin.notifications.none': 'Disabled', 'admin.notifications.email': 'E-posta (SMTP)',
'admin.notifications.email': 'Email (SMTP)', 'admin.notifications.webhook': 'Web kancası',
'admin.notifications.webhook': 'Webhook',
'admin.notifications.ntfy': 'Ntfy', 'admin.notifications.ntfy': 'Ntfy',
'admin.ntfy.hint': 'admin.ntfy.hint': '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.',
'Allow users to configure their own ntfy topics for push notifications. Set the default server below to pre-fill user settings.', 'admin.notifications.save': 'Bildirim ayarlarını kaydet',
'admin.notifications.save': 'Save notification settings', 'admin.notifications.saved': 'Bildirim ayarları kaydedildi',
'admin.notifications.saved': 'Notification settings saved', 'admin.notifications.testWebhook': 'Test webhook gönder',
'admin.notifications.testWebhook': 'Send test webhook', 'admin.notifications.testWebhookSuccess': 'Test webhook gönderildi',
'admin.notifications.testWebhookSuccess': 'Test webhook sent successfully', 'admin.notifications.testWebhookFailed': 'Test webhook başarısız',
'admin.notifications.testWebhookFailed': 'Test webhook failed', 'admin.notifications.testNtfy': 'Test ntfy gönder',
'admin.notifications.testNtfy': 'Send test ntfy', 'admin.notifications.testNtfySuccess': 'Test ntfy gönderildi',
'admin.notifications.testNtfySuccess': 'Test ntfy sent successfully', 'admin.notifications.testNtfyFailed': 'Test ntfy başarısız',
'admin.notifications.testNtfyFailed': 'Test ntfy failed', 'admin.notifications.emailPanel.title': 'E-posta (SMTP)',
'admin.notifications.emailPanel.title': 'Email (SMTP)', 'admin.notifications.webhookPanel.title': 'Web kancası',
'admin.notifications.webhookPanel.title': 'Webhook', 'admin.notifications.inappPanel.title': 'Uygulama içi',
'admin.notifications.inappPanel.title': 'In-App', 'admin.notifications.inappPanel.hint': 'Uygulama içi bildirimler her zaman açıktır ve genel olarak kapatılamaz.',
'admin.notifications.inappPanel.hint': 'admin.notifications.adminWebhookPanel.title': 'Yönetici Webhook',
'In-app notifications are always active and cannot be disabled globally.', 'admin.notifications.adminWebhookPanel.hint': '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.title': 'Admin Webhook', 'admin.notifications.adminWebhookPanel.saved': 'Yönetici webhook URL kaydedildi',
'admin.notifications.adminWebhookPanel.hint': 'admin.notifications.adminWebhookPanel.testSuccess': 'Test webhook gönderildi',
'This webhook is used exclusively for admin notifications (e.g. version alerts). It is separate from per-user webhooks and always fires when set.', 'admin.notifications.adminWebhookPanel.testFailed': 'Test webhook başarısız',
'admin.notifications.adminWebhookPanel.saved': 'Admin webhook URL saved', 'admin.notifications.adminWebhookPanel.alwaysOnHint': 'URL yapılandırıldığında yönetici webhook her zaman tetiklenir',
'admin.notifications.adminWebhookPanel.testSuccess': 'admin.notifications.adminNtfyPanel.title': 'Yönetici Ntfy',
'Test webhook sent successfully', 'admin.notifications.adminNtfyPanel.hint': '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.adminWebhookPanel.testFailed': 'Test webhook failed', 'admin.notifications.adminNtfyPanel.serverLabel': 'Ntfy Sunucu URL\'si',
'admin.notifications.adminWebhookPanel.alwaysOnHint': 'admin.notifications.adminNtfyPanel.serverHint': '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 webhook always fires when a URL is configured',
'admin.notifications.adminNtfyPanel.title': 'Admin Ntfy',
'admin.notifications.adminNtfyPanel.hint':
'This ntfy topic is used exclusively for admin notifications (e.g. version alerts). It is separate from per-user topics and always fires when configured.',
'admin.notifications.adminNtfyPanel.serverLabel': 'Ntfy Server URL',
'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.',
'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': 'yürüyüş-yönetici-uyarıları',
'admin.notifications.adminNtfyPanel.tokenLabel': 'Access Token (optional)', 'admin.notifications.adminNtfyPanel.tokenLabel': 'Erişim anahtarı (isteğe bağlı)',
'admin.notifications.adminNtfyPanel.tokenCleared': 'admin.notifications.adminNtfyPanel.tokenCleared': 'Yönetici erişim anahtarı temizlendi',
'Admin access token cleared', 'admin.notifications.adminNtfyPanel.saved': 'Yönetici ntfy ayarları kaydedildi',
'admin.notifications.adminNtfyPanel.saved': 'Admin ntfy settings saved', 'admin.notifications.adminNtfyPanel.test': 'Test ntfy gönder',
'admin.notifications.adminNtfyPanel.test': 'Send test ntfy', 'admin.notifications.adminNtfyPanel.testSuccess': 'Test ntfy gönderildi',
'admin.notifications.adminNtfyPanel.testSuccess': 'admin.notifications.adminNtfyPanel.testFailed': 'Test ntfy başarısız',
'Test ntfy sent successfully', 'admin.notifications.adminNtfyPanel.alwaysOnHint': 'Konu yapılandırıldığında yönetici ntfy her zaman tetiklenir',
'admin.notifications.adminNtfyPanel.testFailed': 'Test ntfy failed', 'admin.notifications.adminNotificationsHint': 'Yalnızca yönetici bildirimlerinin hangi kanallardan iletileceğini yapılandırın.',
'admin.notifications.adminNtfyPanel.alwaysOnHint': 'admin.notifications.tripReminders.title': 'Seyahat Hatırlatıcıları',
'Admin ntfy always fires when a topic is configured', 'admin.notifications.tripReminders.hint': 'Seyahat başlamadan önce hatırlatma gönderir (seyahatte hatırlatma günü ayarlı olmalıdır).',
'admin.notifications.adminNotificationsHint': 'admin.notifications.tripReminders.enabled': 'Seyahat hatırlatıcıları açık',
'Configure which channels deliver admin-only notifications (e.g. version alerts).', 'admin.notifications.tripReminders.disabled': 'Seyahat hatırlatıcıları kapalı',
'admin.notifications.tripReminders.title': 'Trip Reminders', 'admin.smtp.title': 'E-posta ve Bildirimler',
'admin.notifications.tripReminders.hint': 'admin.smtp.hint': 'E-posta bildirimleri için SMTP yapılandırması.',
'Send a reminder notification before a trip starts (requires reminder days to be set on the trip).', 'admin.smtp.testButton': 'Test e-postası gönder',
'admin.notifications.tripReminders.enabled': 'Trip reminders enabled', 'admin.webhook.hint': 'Kullanıcıların bildirimler için kendi webhook URL\'lerini (Discord, Slack vb.) yapılandırmasına izin verin.',
'admin.notifications.tripReminders.disabled': 'Trip reminders disabled', 'admin.smtp.testSuccess': 'Test e-postası gönderildi',
'admin.smtp.title': 'Email & Notifications', 'admin.smtp.testFailed': 'Test e-postası başarısız',
'admin.smtp.hint': 'SMTP configuration for sending email notifications.',
'admin.smtp.testButton': 'Send test email',
'admin.webhook.hint':
'Allow users to configure their own webhook URLs for notifications (Discord, Slack, etc.).',
'admin.smtp.testSuccess': 'Test email sent successfully',
'admin.smtp.testFailed': 'Test email failed',
'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 +58,243 @@ 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': '"{name}" kullanıcısı silinsin mi? Tüm geziler kalıcı olarak silinecek.',
'Delete user "{name}"? All trips will be permanently deleted.', 'admin.deleteUserTitle': 'Kullanıcıyı sil',
'admin.deleteUserTitle': 'Delete user', 'admin.newPasswordPlaceholder': 'Yeni şifreyi girin…',
'admin.newPasswordPlaceholder': 'Enter new password…', 'admin.toast.loadError': 'Yönetici verileri yüklenemedi',
'admin.toast.loadError': 'Failed to load admin data', 'admin.toast.userUpdated': 'Kullanıcı güncellendi',
'admin.toast.userUpdated': 'User updated', 'admin.toast.updateError': 'Güncelleme başarısız oldu',
'admin.toast.updateError': 'Failed to update', 'admin.toast.userDeleted': 'Kullanıcı silindi',
'admin.toast.userDeleted': 'User deleted', 'admin.toast.deleteError': 'Silinemedi',
'admin.toast.deleteError': 'Failed to delete', 'admin.toast.cannotDeleteSelf': 'Kendi hesabınızı silemiyorum',
'admin.toast.cannotDeleteSelf': 'Cannot delete your own account', 'admin.toast.userCreated': 'Kullanıcı oluşturuldu',
'admin.toast.userCreated': 'User created', 'admin.toast.createError': 'Kullanıcı oluşturulamadı',
'admin.toast.createError': 'Failed to create user', 'admin.toast.fieldsRequired': 'Kullanıcı adı, e-posta ve şifre gerekli',
'admin.toast.fieldsRequired': 'Username, email and password are required', 'admin.createUser': 'Kullanıcı Oluştur',
'admin.createUser': 'Create User', 'admin.invite.title': 'Bağlantıları Davet Et',
'admin.invite.title': 'Invite Links', 'admin.invite.subtitle': 'Tek seferlik kayıt bağlantıları oluşturun',
'admin.invite.subtitle': 'Create one-time registration links', 'admin.invite.create': 'Bağlantı Oluştur',
'admin.invite.create': 'Create Link', 'admin.invite.createAndCopy': 'Oluştur ve Kopyala',
'admin.invite.createAndCopy': 'Create & Copy', 'admin.invite.empty': 'Henüz davet bağlantısı oluşturulmadı',
'admin.invite.empty': 'No invite links created yet', 'admin.invite.maxUses': 'Maks. Kullanım Alanları',
'admin.invite.maxUses': 'Max. Uses', 'admin.invite.expiry': 'Şu tarihten sonra sona erer:',
'admin.invite.expiry': 'Expires after', 'admin.invite.uses': 'kullanılmış',
'admin.invite.uses': 'used', 'admin.invite.expiresAt': 'süresi doluyor',
'admin.invite.expiresAt': 'expires', 'admin.invite.createdBy': 'ile',
'admin.invite.createdBy': 'by', 'admin.invite.active': 'Aktif',
'admin.invite.active': 'Active', 'admin.invite.expired': 'Günü geçmiş',
'admin.invite.expired': 'Expired', 'admin.invite.usedUp': 'Kullanılmış',
'admin.invite.usedUp': 'Used up', 'admin.invite.copied': 'Davet bağlantısı panoya kopyalandı',
'admin.invite.copied': 'Invite link copied to clipboard', 'admin.invite.copyLink': 'Bağlantıyı kopyala',
'admin.invite.copyLink': 'Copy link', 'admin.invite.deleted': 'Davet bağlantısı silindi',
'admin.invite.deleted': 'Invite link deleted', 'admin.invite.createError': 'Davet bağlantısı oluşturulamadı',
'admin.invite.createError': 'Failed to create invite link', 'admin.invite.deleteError': 'Davet bağlantısı silinemedi',
'admin.invite.deleteError': 'Failed to delete invite link',
'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': 'Yeni kullanıcılar kendileri kayıt olabilirler',
'admin.authMethods': 'Authentication Methods', 'admin.authMethods': 'Kimlik Doğrulama Yöntemleri',
'admin.passwordLogin': 'Password Login', 'admin.passwordLogin': 'Şifre Girişi',
'admin.passwordLoginHint': 'Allow users to sign in with email and password', 'admin.passwordLoginHint': 'Kullanıcıların e-posta ve şifreyle oturum açmasına izin ver',
'admin.passwordRegistration': 'Password Registration', 'admin.passwordRegistration': 'Şifre Kaydı',
'admin.passwordRegistrationHint': 'admin.passwordRegistrationHint': 'Yeni kullanıcıların e-posta ve şifreyle kaydolmasına izin ver',
'Allow new users to register with email and password', 'admin.oidcLogin': 'TOA Girişi',
'admin.oidcLogin': 'SSO Login', 'admin.oidcLoginHint': 'Kullanıcıların SSO ile oturum açmasına izin Ver',
'admin.oidcLoginHint': 'Allow users to sign in with SSO', 'admin.oidcRegistration': 'SSO Otomatik Temel Hazırlığı',
'admin.oidcRegistration': 'SSO Auto-Provisioning', 'admin.oidcRegistrationHint': 'Yeni SSO kullanıcıları için otomatik olarak hesap oluşturun',
'admin.oidcRegistrationHint': 'admin.envOverrideHint': 'Şifre oturum açma ayarları OIDC_ONLY ortam değişkeni tarafından kontrol edilir ve burada değiştirilemez.',
'Automatically create accounts for new SSO users', 'admin.lockoutWarning': 'En az bir oturum açma yöntemi etkin kalmalıdır',
'admin.envOverrideHint': 'admin.requireMfa': 'İki faktörlü kimlik doğrulama (2FA) gerektir',
'Password login settings are controlled by the OIDC_ONLY environment variable and cannot be changed here.', 'admin.requireMfaHint': '2FA\'sı olmayan kullanıcıların uygulamayı kullanmadan önce Ayarlar\'da kurulumu tamamlaması gerekir.',
'admin.lockoutWarning': 'At least one login method must remain enabled', 'admin.apiKeys': 'API Anahtarları',
'admin.requireMfa': 'Require two-factor authentication (2FA)', 'admin.apiKeysHint': 'İsteğe bağlı. Fotoğraflar ve hava durumu gibi genişletilmiş yer verilerini etkinleştirir.',
'admin.requireMfaHint': 'admin.mapsKey': 'Google Haritalar API Anahtarı',
'Users without 2FA must complete setup in Settings before using the app.', 'admin.mapsKeyHint': 'Yer arama için gereklidir. console.cloud.google.com adresinden erişin',
'admin.apiKeys': 'API Keys', 'admin.mapsKeyHintLong': '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.apiKeysHint': 'admin.recommended': 'Tavsiye edilen',
'Optional. Enables extended place data like photos and weather.', 'admin.weatherKey': 'OpenWeatherMap API Anahtarı',
'admin.mapsKey': 'Google Maps API Key', 'admin.weatherKeyHint': 'Hava durumu verileri için. openweathermap.org\'da ücretsiz',
'admin.mapsKeyHint': 'admin.validateKey': 'Test et',
'Required for place search. Get at console.cloud.google.com', 'admin.keyValid': 'Bağlı',
'admin.mapsKeyHintLong': 'admin.keyInvalid': 'Geçersiz',
'Without an API key, OpenStreetMap is used for place search. With a Google API key, photos, ratings, and opening hours can be loaded as well. Get one at console.cloud.google.com.', 'admin.keySaved': 'API anahtarları kaydedildi',
'admin.recommended': 'Recommended', 'admin.oidcTitle': 'Tek Oturum Açma (OIDC)',
'admin.weatherKey': 'OpenWeatherMap API Key', 'admin.oidcSubtitle': 'Google, Apple, Authentik veya Keycloak gibi harici sağlayıcılar aracılığıyla oturum açmaya izin verin.',
'admin.weatherKeyHint': 'For weather data. Free at openweathermap.org', 'admin.oidcDisplayName': 'Ekran Adı',
'admin.validateKey': 'Test', 'admin.oidcIssuer': 'Veren URL\'si',
'admin.keyValid': 'Connected', 'admin.oidcIssuerHint': 'Sağlayıcının OpenID Connect Veren URL\'si. örneğin https://accounts.google.com',
'admin.keyInvalid': 'Invalid', 'admin.oidcSaved': 'OIDC yapılandırması kaydedildi',
'admin.keySaved': 'API keys saved', 'admin.oidcOnlyMode': 'Parola kimlik doğrulamasını devre dışı bırak',
'admin.oidcTitle': 'Single Sign-On (OIDC)', 'admin.oidcOnlyModeHint': 'Etkinleştirildiğinde yalnızca SSO girişine izin verilir. Şifre tabanlı oturum açma ve kayıt engellenir.',
'admin.oidcSubtitle': 'admin.fileTypes': 'İzin Verilen Dosya Türleri',
'Allow login via external providers like Google, Apple, Authentik or Keycloak.', 'admin.fileTypesHint': 'Kullanıcıların hangi dosya türlerini yükleyebileceğini yapılandırın.',
'admin.oidcDisplayName': 'Display Name', 'admin.fileTypesFormat': 'Virgülle ayrılmış uzantılar (ör. jpg,png,pdf,doc). Tüm türlere izin vermek için * kullanın.',
'admin.oidcIssuer': 'Issuer URL', 'admin.fileTypesSaved': 'Dosya türü ayarları kaydedildi',
'admin.oidcIssuerHint': 'admin.placesPhotos.title': 'Fotoğrafları Yerleştir',
'The OpenID Connect Issuer URL of the provider. e.g. https://accounts.google.com', 'admin.placesPhotos.subtitle': 'Fotoğrafları Google Rehber API\'sinden alın. API kotasını kaydetmeyi devre dışı bırakın. Wikimedia fotoğrafları etkilenmez.',
'admin.oidcSaved': 'OIDC configuration saved', 'admin.placesAutocomplete.title': 'Otomatik Tamamlamayı Yerleştir',
'admin.oidcOnlyMode': 'Disable password authentication', 'admin.placesAutocomplete.subtitle': 'Arama önerileri için Google Rehber API\'sini kullanın. API kotasını kaydetmeyi devre dışı bırakın.',
'admin.oidcOnlyModeHint': 'admin.placesDetails.title': 'Yer Detayları',
'When enabled, only SSO login is permitted. Password-based login and registration are blocked.', 'admin.placesDetails.subtitle': '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.fileTypes': 'Allowed File Types', 'admin.bagTracking.title': 'Çanta Takibi',
'admin.fileTypesHint': 'Configure which file types users can upload.', 'admin.bagTracking.subtitle': 'Paketleme öğeleri için ağırlık ve torba atamasını etkinleştirin',
'admin.fileTypesFormat': 'admin.collab.chat.title': 'Sohbet',
'Comma-separated extensions (e.g. jpg,png,pdf,doc). Use * to allow all types.', 'admin.collab.chat.subtitle': 'Seyahat işbirliği için gerçek zamanlı mesajlaşma',
'admin.fileTypesSaved': 'File type settings saved', 'admin.collab.notes.title': 'Notlar',
'admin.placesPhotos.title': 'Place Photos', 'admin.collab.notes.subtitle': 'Paylaşılan notlar ve belgeler',
'admin.placesPhotos.subtitle': 'admin.collab.polls.title': 'Anketler',
'Fetch photos from the Google Places API. Disable to save API quota. Wikimedia photos are unaffected.', 'admin.collab.polls.subtitle': 'Grup anketleri ve oylama',
'admin.placesAutocomplete.title': 'Place Autocomplete',
'admin.placesAutocomplete.subtitle':
'Use the Google Places API for search suggestions. Disable to save API quota.',
'admin.placesDetails.title': 'Place Details',
'admin.placesDetails.subtitle':
'Fetch detailed place information (hours, rating, website) from the Google Places API. Disable to save API quota.',
'admin.bagTracking.title': 'Bag Tracking',
'admin.bagTracking.subtitle':
'Enable weight and bag assignment for packing items',
'admin.collab.chat.title': 'Chat',
'admin.collab.chat.subtitle': 'Real-time messaging for trip collaboration',
'admin.collab.notes.title': 'Notes',
'admin.collab.notes.subtitle': 'Shared notes and documents',
'admin.collab.polls.title': 'Polls',
'admin.collab.polls.subtitle': 'Group polls and voting',
'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': 'Ö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.',
'Set instance-wide defaults. Users who have not changed a setting will see these values. Their own changes always take priority.', 'admin.defaultSettings.saved': 'Varsayılan kaydedildi',
'admin.defaultSettings.saved': 'Default saved', 'admin.defaultSettings.reset': 'Yerleşik varsayılana sıfırla',
'admin.defaultSettings.reset': 'Reset to built-in default', 'admin.defaultSettings.resetToBuiltIn': 'sıfırlama',
'admin.defaultSettings.resetToBuiltIn': 'reset', 'admin.tabs.templates': 'Paketleme Şablonları',
'admin.tabs.templates': 'Packing Templates', 'admin.packingTemplates.title': 'Paketleme Şablonları',
'admin.packingTemplates.title': 'Packing Templates', 'admin.packingTemplates.subtitle': 'Seyahatleriniz için yeniden kullanılabilir paketleme listeleri oluşturun',
'admin.packingTemplates.subtitle': 'admin.packingTemplates.create': 'Yeni Şablon',
'Create reusable packing lists for your trips', 'admin.packingTemplates.namePlaceholder': 'Şablon adı (ör. Plaj Tatili)',
'admin.packingTemplates.create': 'New Template', 'admin.packingTemplates.empty': 'Henüz şablon oluşturulmadı',
'admin.packingTemplates.namePlaceholder': 'admin.packingTemplates.items': 'öğeler',
'Template name (e.g. Beach Holiday)', 'admin.packingTemplates.categories': 'kategoriler',
'admin.packingTemplates.empty': 'No templates created yet', 'admin.packingTemplates.itemName': 'Öğe adı',
'admin.packingTemplates.items': 'items', 'admin.packingTemplates.itemCategory': 'Kategori',
'admin.packingTemplates.categories': 'categories', 'admin.packingTemplates.categoryName': 'Kategori adı (ör. Giyim)',
'admin.packingTemplates.itemName': 'Item name', 'admin.packingTemplates.addCategory': 'Kategori ekle',
'admin.packingTemplates.itemCategory': 'Category', 'admin.packingTemplates.created': 'Şablon oluşturuldu',
'admin.packingTemplates.categoryName': 'Category name (e.g. Clothing)', 'admin.packingTemplates.deleted': 'Şablon silindi',
'admin.packingTemplates.addCategory': 'Add category', 'admin.packingTemplates.loadError': 'Şablonlar yüklenemedi',
'admin.packingTemplates.created': 'Template created', 'admin.packingTemplates.createError': 'Şablon oluşturulamadı',
'admin.packingTemplates.deleted': 'Template deleted', 'admin.packingTemplates.deleteError': 'Şablon silinemedi',
'admin.packingTemplates.loadError': 'Failed to load templates', 'admin.packingTemplates.saveError': 'Kaydedilemedi',
'admin.packingTemplates.createError': 'Failed to create template', 'admin.tabs.addons': 'Eklentiler',
'admin.packingTemplates.deleteError': 'Failed to delete template', 'admin.addons.title': 'Eklentiler',
'admin.packingTemplates.saveError': 'Failed to save', 'admin.addons.subtitle': 'TREK deneyiminizi özelleştirmek için özellikleri etkinleştirin veya devre dışı bırakın.',
'admin.tabs.addons': 'Addons', 'admin.addons.catalog.packing.name': 'Listeler',
'admin.addons.title': 'Addons', 'admin.addons.catalog.packing.description': 'Seyahatleriniz için paket listeleri ve yapılacak işler',
'admin.addons.subtitle': 'admin.addons.catalog.budget.name': 'Bütçe',
'Enable or disable features to customize your TREK experience.', 'admin.addons.catalog.budget.description': 'Harcamaları takip edin ve seyahat bütçenizi planlayın',
'admin.addons.catalog.packing.name': 'Lists', 'admin.addons.catalog.documents.name': 'Belgeler',
'admin.addons.catalog.packing.description': 'admin.addons.catalog.documents.description': 'Seyahat belgelerini saklayın ve yönetin',
'Packing lists and to-do tasks for your trips', 'admin.addons.catalog.vacay.name': 'Tatil',
'admin.addons.catalog.budget.name': 'Budget', 'admin.addons.catalog.vacay.description': 'Takvim görünümüne sahip kişisel tatil planlayıcısı',
'admin.addons.catalog.budget.description':
'Track expenses and plan your trip budget',
'admin.addons.catalog.documents.name': 'Documents',
'admin.addons.catalog.documents.description':
'Store and manage travel documents',
'admin.addons.catalog.vacay.name': 'Vacay',
'admin.addons.catalog.vacay.description':
'Personal vacation planner with calendar view',
'admin.addons.catalog.atlas.name': 'Atlas', 'admin.addons.catalog.atlas.name': 'Atlas',
'admin.addons.catalog.atlas.description': 'admin.addons.catalog.atlas.description': 'Ziyaret edilen ülkeleri ve seyahat istatistiklerini içeren dünya haritası',
'World map with visited countries and travel stats', 'admin.addons.catalog.collab.name': 'İş birliği',
'admin.addons.catalog.collab.name': 'Collab', 'admin.addons.catalog.collab.description': 'Seyahat planlaması için gerçek zamanlı notlar, anketler ve sohbet',
'admin.addons.catalog.collab.description': 'admin.addons.catalog.memories.name': 'Fotoğraflar (Immich)',
'Real-time notes, polls, and chat for trip planning', 'admin.addons.catalog.memories.description': 'Immich örneğiniz aracılığıyla gezi fotoğraflarını paylaşın',
'admin.addons.catalog.memories.name': 'Photos (Immich)',
'admin.addons.catalog.memories.description':
'Share trip photos via your Immich instance',
'admin.addons.catalog.mcp.name': 'MCP', 'admin.addons.catalog.mcp.name': 'MCP',
'admin.addons.catalog.mcp.description': 'admin.addons.catalog.mcp.description': 'Yapay zeka asistanı entegrasyonu için Model Bağlam Protokolü',
'Model Context Protocol for AI assistant integration', 'admin.addons.subtitleBefore': 'Kişiselleştirmenizi özelleştirmek için özellikleri etkinleştirin veya devre dışı bırakın.',
'admin.addons.subtitleBefore': 'admin.addons.subtitleAfter': 'deneyim.',
'Enable or disable features to customize your ', 'admin.addons.enabled': 'Etkinleştirilmiş',
'admin.addons.subtitleAfter': ' experience.', 'admin.addons.disabled': 'Engelli',
'admin.addons.enabled': 'Enabled', 'admin.addons.type.trip': 'Seyahat',
'admin.addons.disabled': 'Disabled', 'admin.addons.type.global': 'Küresel',
'admin.addons.type.trip': 'Trip', 'admin.addons.type.integration': 'Entegrasyon',
'admin.addons.type.global': 'Global', 'admin.addons.tripHint': 'Her yolculukta bir sekme olarak mevcuttur',
'admin.addons.type.integration': 'Integration', 'admin.addons.globalHint': 'Ana navigasyonda bağımsız bir bölüm olarak mevcuttur',
'admin.addons.tripHint': 'Available as a tab within each trip', 'admin.addons.integrationHint': 'Özel bir sayfa olmadan arka uç hizmetleri ve API entegrasyonları',
'admin.addons.globalHint': 'admin.addons.toast.updated': 'Eklenti güncellendi',
'Available as a standalone section in the main navigation', 'admin.addons.toast.error': 'Eklenti güncellenemedi',
'admin.addons.integrationHint': 'admin.addons.noAddons': 'Kullanılabilir eklenti yok',
'Backend services and API integrations with no dedicated page', 'admin.weather.title': 'Hava Durumu Verileri',
'admin.addons.toast.updated': 'Addon updated', 'admin.weather.badge': '24 Mart 2026\'dan beri',
'admin.addons.toast.error': 'Failed to update addon', 'admin.weather.description': '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.addons.noAddons': 'No addons available', 'admin.weather.forecast': '16 günlük tahmin',
'admin.weather.title': 'Weather Data', 'admin.weather.forecastDesc': 'Daha önce 5 gün (OpenWeatherMap)',
'admin.weather.badge': 'Since March 24, 2026', 'admin.weather.climate': 'Geçmiş iklim verileri',
'admin.weather.description': 'admin.weather.climateDesc': '16 günlük tahminin ötesindeki günler için son 85 yılın ortalamaları',
'TREK uses Open-Meteo as its weather data source. Open-Meteo is a free, open-source weather service — no API key required.', 'admin.weather.requests': '10.000 istek / gün',
'admin.weather.forecast': '16-day forecast', 'admin.weather.requestsDesc': 'Ücretsiz, API anahtarı gerekmez',
'admin.weather.forecastDesc': 'Previously 5 days (OpenWeatherMap)', 'admin.weather.locationHint': '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.weather.climate': 'Historical climate data', 'admin.tabs.mcpTokens': 'MCP Erişimi',
'admin.weather.climateDesc': 'admin.mcpTokens.title': 'MCP Erişimi',
'Averages from the last 85 years for days beyond the 16-day forecast', 'admin.mcpTokens.subtitle': 'Tüm Kullanıcılar genelinde OAuth Oturumlarını ve API belirteçlerini yönetin',
'admin.weather.requests': '10,000 requests / day', 'admin.mcpTokens.sectionTitle': 'API Belirteçleri',
'admin.weather.requestsDesc': 'Free, no API key required', 'admin.mcpTokens.owner': 'Mal sahibi',
'admin.weather.locationHint': 'admin.mcpTokens.tokenName': 'Jeton Adı',
'Weather is based on the first place with coordinates in each day. If no place is assigned to a day, any place from the place list is used as a reference.', 'admin.mcpTokens.created': 'Oluşturuldu',
'admin.tabs.mcpTokens': 'MCP Access', 'admin.mcpTokens.lastUsed': 'Son Kullanılan',
'admin.mcpTokens.title': 'MCP Access', 'admin.mcpTokens.never': 'Asla',
'admin.mcpTokens.subtitle': 'admin.mcpTokens.empty': 'Henüz MCP tokenı oluşturulmadı',
'Manage OAuth sessions and API tokens across all users', 'admin.mcpTokens.deleteTitle': 'Jetonu Sil',
'admin.mcpTokens.sectionTitle': 'API Tokens', 'admin.mcpTokens.deleteMessage': 'Bu, jetonu anında iptal edecektir. Kullanıcı bu belirteç aracılığıyla MCP erişimini kaybedecektir.',
'admin.mcpTokens.owner': 'Owner', 'admin.mcpTokens.deleteSuccess': 'Jeton silindi',
'admin.mcpTokens.tokenName': 'Token Name', 'admin.mcpTokens.deleteError': 'Jeton silinemedi',
'admin.mcpTokens.created': 'Created', 'admin.mcpTokens.loadError': 'Jetonlar yüklenemedi',
'admin.mcpTokens.lastUsed': 'Last Used', 'admin.oauthSessions.sectionTitle': 'OAuth Oturumları',
'admin.mcpTokens.never': 'Never', 'admin.oauthSessions.clientName': 'Müşteri',
'admin.mcpTokens.empty': 'No MCP tokens have been created yet', 'admin.oauthSessions.owner': 'Mal sahibi',
'admin.mcpTokens.deleteTitle': 'Delete Token', 'admin.oauthSessions.scopes': 'Kapsamlar',
'admin.mcpTokens.deleteMessage': 'admin.oauthSessions.created': 'Oluşturuldu',
'This will revoke the token immediately. The user will lose MCP access through this token.', 'admin.oauthSessions.empty': 'Aktif OAuth Oturumu yok',
'admin.mcpTokens.deleteSuccess': 'Token deleted', 'admin.oauthSessions.revokeTitle': 'Oturumu İptal Et',
'admin.mcpTokens.deleteError': 'Failed to delete token', 'admin.oauthSessions.revokeMessage': 'Bu, OAuth oturumunu hemen iptal edecektir. İstemci MCP erişimini kaybedecek.',
'admin.mcpTokens.loadError': 'Failed to load tokens', 'admin.oauthSessions.revokeSuccess': 'Oturum iptal edildi',
'admin.oauthSessions.sectionTitle': 'OAuth Sessions', 'admin.oauthSessions.revokeError': 'Oturum iptal edilemedi',
'admin.oauthSessions.clientName': 'Client', 'admin.oauthSessions.loadError': 'OAuth oturumları yüklenemedi',
'admin.oauthSessions.owner': 'Owner',
'admin.oauthSessions.scopes': 'Scopes',
'admin.oauthSessions.created': 'Created',
'admin.oauthSessions.empty': 'No active OAuth sessions',
'admin.oauthSessions.revokeTitle': 'Revoke Session',
'admin.oauthSessions.revokeMessage':
'This will revoke the OAuth session immediately. The client will lose MCP access.',
'admin.oauthSessions.revokeSuccess': 'Session revoked',
'admin.oauthSessions.revokeError': 'Failed to revoke session',
'admin.oauthSessions.loadError': 'Failed to load OAuth sessions',
'admin.tabs.github': 'GitHub', 'admin.tabs.github': 'GitHub',
'admin.audit.subtitle': 'admin.audit.subtitle': 'Güvenlik açısından hassas olaylar ve yönetim olayları (yedeklemeler, kullanıcılar, MFA, ayarlar).',
'Security-sensitive and administration events (backups, users, MFA, settings).', 'admin.audit.empty': 'Henüz denetim girişi yok.',
'admin.audit.empty': 'No audit entries yet.', 'admin.audit.refresh': 'Yenile',
'admin.audit.refresh': 'Refresh', 'admin.audit.loadMore': 'Daha fazlasını yükle',
'admin.audit.loadMore': 'Load more', 'admin.audit.showing': '{count} yüklendi · {total} toplam',
'admin.audit.showing': '{count} loaded · {total} total', 'admin.audit.col.time': 'Zaman',
'admin.audit.col.time': 'Time', 'admin.audit.col.user': 'Kullanıcı',
'admin.audit.col.user': 'User', 'admin.audit.col.action': 'Aksiyon',
'admin.audit.col.action': 'Action', 'admin.audit.col.resource': 'Kaynak',
'admin.audit.col.resource': 'Resource',
'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': '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.confirmText': 'admin.update.dataInfo': 'Tüm verileriniz (seyahatler, kullanıcılar, API anahtarları, yüklemeler, Vacay, Atlas, bütçeler) korunacaktır.',
'TREK will be updated from {current} to {version}. The server will restart automatically afterwards.', 'admin.update.warning': 'Yeniden başlatma sırasında uygulama kısa süreliğine kullanılamayacaktır.',
'admin.update.dataInfo': 'admin.update.confirm': 'Şimdi Güncelle',
'All your data (trips, users, API keys, uploads, Vacay, Atlas, budgets) will be preserved.', 'admin.update.installing': 'Güncelleniyor…',
'admin.update.warning': 'admin.update.success': 'Güncelleme yüklendi! Sunucu yeniden başlatılıyor…',
'The app will be briefly unavailable during the restart.', 'admin.update.failed': 'Güncelleme başarısız oldu',
'admin.update.confirm': 'Update Now', 'admin.update.backupHint': 'Güncellemeden önce bir yedek oluşturmanızı öneririz.',
'admin.update.installing': 'Updating…', 'admin.update.backupLink': 'Yedeklemeye Git',
'admin.update.success': 'Update installed! Server is restarting…', 'admin.update.howTo': 'Nasıl Güncellenir?',
'admin.update.failed': 'Update failed', 'admin.update.dockerText': '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.backupHint': 'We recommend creating a backup before updating.', 'admin.update.reloadHint': 'Lütfen birkaç saniye içinde sayfayı yeniden yükleyin.',
'admin.update.backupLink': 'Go to Backup', 'admin.tabs.permissions': 'İzinler',
'admin.update.howTo': 'How to Update', 'admin.addons.catalog.journey.name': 'Seyahat',
'admin.update.dockerText': 'admin.addons.catalog.journey.description': 'Check-in, fotoğraf ve günlük hikâyelerle seyahat takibi ve seyahat günlüğü',
'Your TREK instance runs in Docker. To update to {version}, run the following commands on your server:',
'admin.update.reloadHint': 'Please reload the page in a few seconds.',
'admin.tabs.permissions': 'Permissions',
'admin.addons.catalog.journey.name': 'Journey',
'admin.addons.catalog.journey.description':
'Trip tracking & travel journal with check-ins, photos, and daily stories',
}; };
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;
+53 -53
View File
@@ -1,58 +1,58 @@
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': 'Bu bölge ziyaret ettiğiniz listeden kaldırılsın mı?',
'atlas.markVisited': 'Mark as visited', 'atlas.markVisited': 'Ziyaret edildi olarak işaretle',
'atlas.markVisitedHint': 'Add this country to your visited list', 'atlas.markVisitedHint': 'Bu ülkeyi ziyaret ettiğiniz listeye ekleyin',
'atlas.markRegionVisitedHint': 'Add this region to your visited list', 'atlas.markRegionVisitedHint': 'Bu bölgeyi ziyaret ettiğiniz listeye ekleyin',
'atlas.addToBucket': 'Add to bucket list', 'atlas.addToBucket': 'Yapılacaklar listesine ekle',
'atlas.addPoi': 'Add place', 'atlas.addPoi': 'Yer ekle',
'atlas.searchCountry': 'Search a country...', 'atlas.searchCountry': 'Bir ülkeyi arayın...',
'atlas.bucketNamePlaceholder': 'Name (country, city, place...)', 'atlas.bucketNamePlaceholder': 'İsim (ülke, şehir, yer...)',
'atlas.month': 'Month', 'atlas.month': 'Ay',
'atlas.year': 'Year', 'atlas.year': 'Yıl',
'atlas.addToBucketHint': 'Save as a place you want to visit', 'atlas.addToBucketHint': 'Ziyaret etmek istediğiniz yer olarak kaydedin',
'atlas.bucketWhen': 'When do you plan to visit?', 'atlas.bucketWhen': 'Ne zaman ziyaret etmeyi planlıyorsunuz?',
'atlas.statsTab': 'Stats', 'atlas.statsTab': 'İstatistikler',
'atlas.bucketTab': 'Bucket List', 'atlas.bucketTab': 'Yapılacaklar Listesi',
'atlas.addBucket': 'Add to bucket list', 'atlas.addBucket': 'Yapılacaklar listesine ekle',
'atlas.bucketNotesPlaceholder': 'Notes (optional)', 'atlas.bucketNotesPlaceholder': 'Notlar (isteğe bağlı)',
'atlas.bucketEmpty': 'Your bucket list is empty', 'atlas.bucketEmpty': 'Yapılacaklar listeniz boş',
'atlas.bucketEmptyHint': 'Add places you dream of visiting', 'atlas.bucketEmptyHint': 'Ziyaret etmeyi hayal ettiğiniz yerleri ekleyin',
'atlas.days': 'Days', 'atlas.days': 'Günler',
'atlas.visitedCountries': 'Visited Countries', 'atlas.visitedCountries': 'Ziyaret Edilen Ülkeler',
'atlas.cities': 'Cities', 'atlas.cities': 'Şehirler',
'atlas.noData': 'No travel data yet', 'atlas.noData': 'Henüz seyahat verisi yok',
'atlas.noDataHint': 'Create a trip and add places to see your world map', 'atlas.noDataHint': 'Bir gezi oluşturun ve dünya haritanızı göreceğiniz yerleri ekleyin',
'atlas.lastTrip': 'Last trip', 'atlas.lastTrip': 'Son yolculuk',
'atlas.nextTrip': 'Next trip', 'atlas.nextTrip': 'Sonraki gezi',
'atlas.daysLeft': 'days left', 'atlas.daysLeft': 'kalan günler',
'atlas.streak': 'Streak', 'atlas.streak': 'Rüzgâr gibi geçmek',
'atlas.years': 'years', 'atlas.years': 'yıllar',
'atlas.yearInRow': 'year in a row', 'atlas.yearInRow': 'yıl üst üste',
'atlas.yearsInRow': 'years in a row', 'atlas.yearsInRow': 'yıllar üst üste',
'atlas.tripIn': 'trip in', 'atlas.tripIn': 'yolculuk',
'atlas.tripsIn': 'trips in', 'atlas.tripsIn': 'geziler',
'atlas.since': 'since', 'atlas.since': 'o zamandan beri',
'atlas.europe': 'Europe', 'atlas.europe': 'Avrupa',
'atlas.asia': 'Asia', 'atlas.asia': 'Asya',
'atlas.northAmerica': 'N. America', 'atlas.northAmerica': 'Kuzey Amerika',
'atlas.southAmerica': 'S. America', 'atlas.southAmerica': 'G. Amerika',
'atlas.africa': 'Africa', 'atlas.africa': 'Afrika',
'atlas.oceania': 'Oceania', 'atlas.oceania': 'Okyanusya',
'atlas.other': 'Other', 'atlas.other': 'Diğer',
'atlas.firstVisit': 'First trip', 'atlas.firstVisit': 'İlk yolculuk',
'atlas.lastVisitLabel': 'Last trip', 'atlas.lastVisitLabel': 'Son yolculuk',
'atlas.tripSingular': 'Trip', 'atlas.tripSingular': 'Seyahat',
'atlas.tripPlural': 'Trips', 'atlas.tripPlural': 'Geziler',
'atlas.placeVisited': 'Place visited', 'atlas.placeVisited': 'Ziyaret edilen yer',
'atlas.placesVisited': 'Places visited', 'atlas.placesVisited': 'Ziyaret edilen yerler',
}; };
export default atlas; export default atlas;
+65 -72
View File
@@ -1,77 +1,70 @@
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': '"{name}" yedeği geri yüklensin mi?\\\\n\\\\nTüm mevcut veriler yedekle değiştirilecek.',
'Restore backup "{name}"?\n\nAll current data will be replaced with the backup.', 'backup.confirm.uploadRestore': '"{name}" yedek dosyası yüklenip geri yüklensin mi?\\\\n\\\\nTüm mevcut verilerin üzerine yazılacak.',
'backup.confirm.uploadRestore': 'backup.confirm.delete': '"{name}" yedeği silinsin mi?',
'Upload and restore backup file "{name}"?\n\nAll current data will be overwritten.', 'backup.toast.loadError': 'Yedekler yüklenemedi',
'backup.confirm.delete': 'Delete backup "{name}"?', 'backup.toast.created': 'Yedek başarıyla oluşturuldu',
'backup.toast.loadError': 'Failed to load backups', 'backup.toast.createError': 'Yedek oluşturulamadı',
'backup.toast.created': 'Backup created successfully', 'backup.toast.restored': 'Yedek geri Yüklendi. Sayfa yenilenecek…',
'backup.toast.createError': 'Failed to create backup', 'backup.toast.restoreError': 'Geri yükleme başarısız',
'backup.toast.restored': 'Backup restored. Page will reload…', 'backup.toast.uploadError': 'Yükleme başarısız oldu',
'backup.toast.restoreError': 'Failed to restore', 'backup.toast.deleted': 'Yedek silindi',
'backup.toast.uploadError': 'Failed to upload', 'backup.toast.deleteError': 'Silinemedi',
'backup.toast.deleted': 'Backup deleted', 'backup.toast.downloadError': 'İndirme başarısız',
'backup.toast.deleteError': 'Failed to delete', 'backup.toast.settingsSaved': 'Otomatik yedekleme ayarları kaydedildi',
'backup.toast.downloadError': 'Download failed', 'backup.toast.settingsError': 'Ayarlar kaydedilemedi',
'backup.toast.settingsSaved': 'Auto-backup settings saved', 'backup.auto.title': 'Otomatik yedekleme',
'backup.toast.settingsError': 'Failed to save settings', 'backup.auto.subtitle': 'Zamanlanmış otomatik yedekleme',
'backup.auto.title': 'Auto-Backup', 'backup.auto.enable': 'Otomatik yedeklemeyi etkinleştir',
'backup.auto.subtitle': 'Automatic backup on a schedule', 'backup.auto.enableHint': 'Yedekler seçilen programa göre otomatik oluşturulur',
'backup.auto.enable': 'Enable auto-backup', 'backup.auto.interval': 'Aralık',
'backup.auto.enableHint': 'backup.auto.hour': 'Çalışma saati',
'Backups will be created automatically on the chosen schedule', 'backup.auto.hourHint': 'Sunucu yerel saati ({format} biçimi)',
'backup.auto.interval': 'Interval', 'backup.auto.dayOfWeek': 'Haftanın günü',
'backup.auto.hour': 'Run at hour', 'backup.auto.dayOfMonth': 'Ayın günü',
'backup.auto.hourHint': 'Server local time ({format} format)', 'backup.auto.dayOfMonthHint': 'Tüm aylarla uyumluluk için 128 ile sınırlı',
'backup.auto.dayOfWeek': 'Day of week', 'backup.auto.scheduleSummary': 'Program',
'backup.auto.dayOfMonth': 'Day of month', 'backup.auto.summaryDaily': 'Her gün saat {hour}:00',
'backup.auto.dayOfMonthHint': 'backup.auto.summaryWeekly': 'Her {day} saat {hour}:00',
'Limited to 128 for compatibility with all months', 'backup.auto.summaryMonthly': 'Her ayın {day}. günü saat {hour}:00',
'backup.auto.scheduleSummary': 'Schedule', 'backup.auto.envLocked': 'Liman işçisi',
'backup.auto.summaryDaily': 'Every day at {hour}:00', 'backup.auto.envLockedHint': '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.summaryWeekly': 'Every {day} at {hour}:00', 'backup.auto.copyEnv': 'Docker Ortam değişkenlerini kopyala',
'backup.auto.summaryMonthly': 'Day {day} of every month at {hour}:00', 'backup.auto.envCopied': 'Docker ortam değişkenleri panoya kopyalandı',
'backup.auto.envLocked': 'Docker', 'backup.auto.keepLabel': 'Eski yedekleri şu süreden sonra sil',
'backup.auto.envLockedHint': 'backup.dow.sunday': 'Güneş',
'Auto-backup is configured via Docker environment variables. To change these settings, update your docker-compose.yml and restart the container.', 'backup.dow.monday': 'Pazartesi',
'backup.auto.copyEnv': 'Copy Docker env vars', 'backup.dow.tuesday': 'Salı',
'backup.auto.envCopied': 'Docker env vars copied to clipboard', 'backup.dow.wednesday': 'Çar',
'backup.auto.keepLabel': 'Delete old backups after', 'backup.dow.thursday': 'Per',
'backup.dow.sunday': 'Sun', 'backup.dow.friday': 'Cuma',
'backup.dow.monday': 'Mon', 'backup.dow.saturday': 'Doygunluk',
'backup.dow.tuesday': 'Tue', 'backup.interval.hourly': 'Saatlik',
'backup.dow.wednesday': 'Wed', 'backup.interval.daily': 'Günlük',
'backup.dow.thursday': 'Thu', 'backup.interval.weekly': 'Haftalık',
'backup.dow.friday': 'Fri', 'backup.interval.monthly': 'Aylık',
'backup.dow.saturday': 'Sat', 'backup.keep.1day': '1 gün',
'backup.interval.hourly': 'Hourly', 'backup.keep.3days': '3 gün',
'backup.interval.daily': 'Daily', 'backup.keep.7days': '7 gün',
'backup.interval.weekly': 'Weekly', 'backup.keep.14days': '14 gün',
'backup.interval.monthly': 'Monthly', 'backup.keep.30days': '30 gün',
'backup.keep.1day': '1 day', 'backup.keep.forever': 'Sonsuza kadar sakla',
'backup.keep.3days': '3 days', 'backup.restoreConfirmTitle': 'Yedek geri yüklensin mi?',
'backup.keep.7days': '7 days', 'backup.restoreWarning': '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.keep.14days': '14 days', 'backup.restoreTip': 'İpucu: Geri yüklemeden önce mevcut durumun yedeğini oluşturun.',
'backup.keep.30days': '30 days', 'backup.restoreConfirm': 'Evet, geri yükle',
'backup.keep.forever': 'Keep forever',
'backup.restoreConfirmTitle': 'Restore Backup?',
'backup.restoreWarning':
'All current data (trips, places, users, uploads) will be permanently replaced by the backup. This action cannot be undone.',
'backup.restoreTip':
'Tip: Create a backup of the current state before restoring.',
'backup.restoreConfirm': 'Yes, restore',
}; };
export default backup; export default backup;
+35 -38
View File
@@ -1,43 +1,40 @@
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': 'Seyahat bütçenizi planlamak için kategoriler ve kayıtlar oluşturun',
'Create categories and entries to plan your travel budget', 'budget.emptyPlaceholder': 'Kategori adı girin...',
'budget.emptyPlaceholder': 'Enter category name...', 'budget.createCategory': 'Kategori Oluştur',
'budget.createCategory': 'Create Category', 'budget.category': 'Kategori',
'budget.category': 'Category', 'budget.categoryName': 'Kategori Adı',
'budget.categoryName': 'Category Name', 'budget.table.name': 'İsim',
'budget.table.name': 'Name', 'budget.table.total': 'Toplam',
'budget.table.total': 'Total', 'budget.table.persons': 'Kişiler',
'budget.table.persons': 'Persons', 'budget.table.days': 'Günler',
'budget.table.days': 'Days', 'budget.table.perPerson': 'Kişi Başı',
'budget.table.perPerson': 'Per Person', 'budget.table.perDay': 'Gün Başı',
'budget.table.perDay': 'Per Day', 'budget.table.perPersonDay': 'Kişi/gün',
'budget.table.perPersonDay': 'P. p / Day', 'budget.table.note': 'Not',
'budget.table.note': 'Note', 'budget.table.date': 'Tarih',
'budget.table.date': 'Date', 'budget.newEntry': 'Yeni Kayıt',
'budget.newEntry': 'New Entry', 'budget.defaultEntry': 'Yeni Kayıt',
'budget.defaultEntry': 'New Entry', 'budget.defaultCategory': 'Yeni Kategori',
'budget.defaultCategory': 'New Category', 'budget.total': 'Toplam',
'budget.total': 'Total', 'budget.totalBudget': 'Toplam Bütçe',
'budget.totalBudget': 'Total Budget', 'budget.byCategory': 'Kategoriye Göre',
'budget.byCategory': 'By Category', 'budget.editTooltip': 'Düzenlemek için tıklayın',
'budget.editTooltip': 'Click to edit', 'budget.linkedToReservation': 'Bir rezervasyona bağlı — adı orada düzenleyin',
'budget.linkedToReservation': 'Linked to a reservation — edit the name there', 'budget.confirm.deleteCategory': '"{name}" kategorisini {count} kayıtla birlikte silmek istediğinizden emin misiniz?',
'budget.confirm.deleteCategory': 'budget.deleteCategory': 'Kategoriyi Sil',
'Are you sure you want to delete the category "{name}" with {count} entries?', 'budget.perPerson': 'Kişi Başı',
'budget.deleteCategory': 'Delete Category', 'budget.paid': 'Ödendi',
'budget.perPerson': 'Per Person', 'budget.open': 'Açık',
'budget.paid': 'Paid', 'budget.noMembers': 'Atanmış üye yok',
'budget.open': 'Open', 'budget.settlement': 'Hesaplaşma',
'budget.noMembers': 'No members assigned', 'budget.settlementInfo': '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.settlement': 'Settlement', 'budget.netBalances': 'Net Bakiyeler',
'budget.settlementInfo': 'budget.categoriesLabel': 'kategoriler',
'Click a member avatar on a budget item to mark them green — this means they paid. The settlement then shows who owes whom and how much.',
'budget.netBalances': 'Net Balances',
'budget.categoriesLabel': 'categories',
}; };
export default budget; export default budget;
+20 -21
View File
@@ -1,26 +1,25 @@
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': 'Kategori silinsin mi? Bu kategorideki yerler silinmez.',
'Delete category? Places in this category will not be deleted.', 'categories.toast.loadError': 'Kategoriler yüklenemedi',
'categories.toast.loadError': 'Failed to load categories', 'categories.toast.nameRequired': 'Lütfen bir ad girin',
'categories.toast.nameRequired': 'Please enter a name', 'categories.toast.updated': 'Kategori güncellendi',
'categories.toast.updated': 'Category updated', 'categories.toast.created': 'Kategori oluşturuldu',
'categories.toast.created': 'Category created', 'categories.toast.saveError': 'Kaydedilemedi',
'categories.toast.saveError': 'Failed to save', 'categories.toast.deleted': 'Kategori silindi',
'categories.toast.deleted': 'Category deleted', 'categories.toast.deleteError': 'Silinemedi',
'categories.toast.deleteError': 'Failed to delete',
}; };
export default categories; export default categories;
+66 -67
View File
@@ -1,74 +1,73 @@
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': 'Seyahat grubunuzla fikir, plan ve güncellemeleri paylaşın',
'Share ideas, plans, and updates with your travel group', 'collab.chat.today': 'Bugün',
'collab.chat.today': 'Today', 'collab.chat.yesterday': 'Dün',
'collab.chat.yesterday': 'Yesterday', 'collab.chat.deletedMessage': 'bir mesajı sildi',
'collab.chat.deletedMessage': 'deleted a message', 'collab.chat.reply': 'Yanıtla',
'collab.chat.reply': 'Reply', 'collab.chat.loadMore': 'Eski mesajları yükle',
'collab.chat.loadMore': 'Load older messages', 'collab.chat.justNow': 'az önce',
'collab.chat.justNow': 'just now', 'collab.chat.minutesAgo': '{n} dk önce',
'collab.chat.minutesAgo': '{n}m ago', 'collab.chat.hoursAgo': '{n} sa önce',
'collab.chat.hoursAgo': '{n}h ago', 'collab.notes.title': 'Notlar',
'collab.notes.title': 'Notes', 'collab.notes.new': 'Yeni Not',
'collab.notes.new': 'New Note', 'collab.notes.empty': 'Henüz not yok',
'collab.notes.empty': 'No notes yet', 'collab.notes.emptyHint': 'Fikir ve planları kaydetmeye başlayın',
'collab.notes.emptyHint': 'Start capturing ideas and plans', 'collab.notes.all': 'Tüm',
'collab.notes.all': 'All', 'collab.notes.titlePlaceholder': 'Not başlığı',
'collab.notes.titlePlaceholder': 'Note title', 'collab.notes.contentPlaceholder': 'Bir şeyler yazın...',
'collab.notes.contentPlaceholder': 'Write something...', 'collab.notes.categoryPlaceholder': 'Kategori',
'collab.notes.categoryPlaceholder': 'Category', 'collab.notes.newCategory': 'Yeni kategori...',
'collab.notes.newCategory': 'New category...', 'collab.notes.category': 'Kategori',
'collab.notes.category': 'Category', 'collab.notes.noCategory': 'Kategori yok',
'collab.notes.noCategory': 'No category', 'collab.notes.color': 'Renk',
'collab.notes.color': 'Color', 'collab.notes.save': 'Kaydet',
'collab.notes.save': 'Save', 'collab.notes.cancel': 'İptal etmek',
'collab.notes.cancel': 'Cancel', 'collab.notes.edit': 'Düzenle',
'collab.notes.edit': 'Edit', 'collab.notes.delete': 'Sil',
'collab.notes.delete': 'Delete', 'collab.notes.pin': 'Sabitle',
'collab.notes.pin': 'Pin', 'collab.notes.unpin': 'Sabitlemeyi kaldır',
'collab.notes.unpin': 'Unpin', 'collab.notes.daysAgo': '{n} gün önce',
'collab.notes.daysAgo': '{n}d ago', 'collab.notes.categorySettings': 'Kategorileri Yönet',
'collab.notes.categorySettings': 'Manage Categories', 'collab.notes.create': 'Oluştur',
'collab.notes.create': 'Create', 'collab.notes.website': 'Web sitesi',
'collab.notes.website': 'Website',
'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 -93
View File
@@ -1,121 +1,117 @@
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.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ü',
'dashboard.currency': 'Para birimi', 'dashboard.currency': 'Para birimi',
'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/Berlin gibi bir biçim kullanın',
'Geçersiz saat dilimi. Europe/Istanbul gibi bir format kullanın', 'dashboard.timezoneCustomErrorDuplicate': 'Zaten ekli',
'dashboard.timezoneCustomErrorDuplicate': 'Zaten eklendi', 'dashboard.emptyTitle': 'Henüz seyahat yok',
'dashboard.emptyTitle': 'Henüz gezi yok', 'dashboard.emptyText': 'İlk seyahatinizi oluşturup planlamaya başlayın!',
'dashboard.emptyText': 'İlk gezinizi oluşturun ve planlamaya başlayın!', 'dashboard.emptyButton': 'İlk Seyahati Oluştur',
'dashboard.emptyButton': 'İlk geziyi oluştur', 'dashboard.nextTrip': 'Sonraki Seyahat',
'dashboard.nextTrip': 'Sıradaki gezi',
'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': '"{title}" seyahatini sil? Tüm yerler ve planlar kalıcı olarak silinir.',
'Delete trip "{title}"? All places and plans will be permanently deleted.', 'dashboard.confirm.copy.title': 'Bu seyahat kopyalansın mı?',
'dashboard.confirm.copy.title': 'Copy this trip?', 'dashboard.confirm.copy.willCopy': 'Kopyalanacak',
'dashboard.confirm.copy.willCopy': 'Will be copied', 'dashboard.confirm.copy.will1': 'Günler, yerler ve gün atamaları',
'dashboard.confirm.copy.will1': 'Days, places & day assignments', 'dashboard.confirm.copy.will2': 'Konaklama ve rezervasyonlar',
'dashboard.confirm.copy.will2': 'Accommodations & reservations', 'dashboard.confirm.copy.will3': 'Bütçe kalemleri ve kategori sırası',
'dashboard.confirm.copy.will3': 'Budget items & category order', 'dashboard.confirm.copy.will4': 'Paket listeleri (işaretlenmemiş)',
'dashboard.confirm.copy.will4': 'Packing lists (unchecked)', 'dashboard.confirm.copy.will5': 'Yapılacaklar (atanmamış ve işaretlenmemiş)',
'dashboard.confirm.copy.will5': 'TODOs (unassigned & unchecked)', 'dashboard.confirm.copy.will6': 'Gün notları',
'dashboard.confirm.copy.will6': 'Day notes',
'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': 'Tarih yok — varsayılan 7 gün oluşturulur. İstediğiniz zaman değiştirebilirsiniz.',
'dashboard.noDateHint': 'dashboard.coverImage': 'Kapak Görseli',
'No date set — 7 default days will be created. You can change this anytime.', 'dashboard.addCoverImage': 'Kapak ekle (sürükleyip bırakabilirsiniz)',
'dashboard.coverImage': 'Kapak resmi',
'dashboard.addCoverImage': 'Add cover image (or drag & drop)',
'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ü',
}; };
export default dashboard; export default dashboard;
+20 -21
View File
@@ -1,26 +1,25 @@
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': 'Tarihsel ortalamalar — gerçek tahmin bu tarihten 16 gün öncesine kadar kullanılabilir.',
'Historical averages — real forecast available within 16 days of this date.', 'day.noWeather': 'Hava durumu verisi yok. Koordinatlı bir yer ekleyin.',
'day.noWeather': 'No weather data available. Add a place with coordinates.', 'day.overview': 'Günlük Özet',
'day.overview': 'Daily Overview', 'day.accommodation': 'Konaklama',
'day.accommodation': 'Accommodation', 'day.addAccommodation': 'Konaklama ekle',
'day.addAccommodation': 'Add accommodation', 'day.hotelDayRange': 'Günlere uygula',
'day.hotelDayRange': 'Apply to days', 'day.noPlacesForHotel': 'Önce seyahatinize yer ekleyin',
'day.noPlacesForHotel': 'Add places to your trip first', 'day.allDays': 'Tüm',
'day.allDays': 'All', 'day.checkIn': 'Giriş',
'day.checkIn': 'Check-in', 'day.checkInUntil': 'Kadar',
'day.checkInUntil': 'Until', 'day.checkOut': 'Çıkış yapmak',
'day.checkOut': 'Check-out', 'day.confirmation': 'Onay kodu',
'day.confirmation': 'Confirmation', 'day.editAccommodation': 'Konaklamayı düzenle',
'day.editAccommodation': 'Edit accommodation', 'day.reservations': 'Rezervasyonlar',
'day.reservations': 'Reservations',
}; };
export default day; export default day;
+37 -43
View File
@@ -1,48 +1,42 @@
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': 'Sabit zamanlı rezervasyonlar yeniden sıralanamaz',
'Bookings with a fixed time cannot be reordered', 'dayplan.confirmRemoveTimeTitle': 'Saat kaldırılsın mı?',
'dayplan.confirmRemoveTimeTitle': 'Remove time?', 'dayplan.confirmRemoveTimeBody': 'Bu yerin sabit bir saati var ({time}). Taşımak saati kaldırır ve serbest sıralamaya izin verir.',
'dayplan.confirmRemoveTimeBody': 'dayplan.confirmRemoveTimeAction': 'Saati kaldır ve taşı',
'This place has a fixed time ({time}). Moving it will remove the time and allow free sorting.', 'dayplan.cannotDropOnTimed': 'Öğeler saate bağlı girişler arasına yerleştirilemez',
'dayplan.confirmRemoveTimeAction': 'Remove time & move', 'dayplan.cannotBreakChronology': 'Bu, zamanlı öğelerin kronolojik sırasını bozar',
'dayplan.cannotDropOnTimed': 'dayplan.addNote': 'Not Ekle',
'Items cannot be placed between time-bound entries', 'dayplan.expandAll': 'Tüm günleri genişlet',
'dayplan.cannotBreakChronology': 'dayplan.collapseAll': 'Tüm günleri daralt',
'This would break the chronological order of timed items and bookings', 'dayplan.editNote': 'Notu Düzenle',
'dayplan.addNote': 'Add Note', 'dayplan.noteAdd': 'Not Ekle',
'dayplan.expandAll': 'Expand all days', 'dayplan.noteEdit': 'Notu Düzenle',
'dayplan.collapseAll': 'Collapse all days', 'dayplan.noteTitle': 'Not',
'dayplan.editNote': 'Edit Note', 'dayplan.noteSubtitle': 'Günlük Not',
'dayplan.noteAdd': 'Add Note', 'dayplan.totalCost': 'Toplam Maliyet',
'dayplan.noteEdit': 'Edit Note', 'dayplan.days': 'Günler',
'dayplan.noteTitle': 'Note', 'dayplan.dayN': '{n}. gün',
'dayplan.noteSubtitle': 'Daily Note', 'dayplan.calculating': 'Hesaplanıyor...',
'dayplan.totalCost': 'Total Cost', 'dayplan.route': 'Rota',
'dayplan.days': 'Days', 'dayplan.optimize': 'Optimize et',
'dayplan.dayN': 'Day {n}', 'dayplan.optimized': 'Rota optimize edildi',
'dayplan.calculating': 'Calculating...', 'dayplan.routeError': 'Rota hesaplanamadı',
'dayplan.route': 'Route', 'dayplan.toast.needTwoPlaces': 'Rota optimizasyonu için en az iki yer gerekli',
'dayplan.optimize': 'Optimize', 'dayplan.toast.routeOptimized': 'Rota optimize edildi',
'dayplan.optimized': 'Route optimized', 'dayplan.toast.noGeoPlaces': 'Rota için koordinatlı yer bulunamadı',
'dayplan.routeError': 'Failed to calculate route', 'dayplan.confirmed': 'Onaylandı',
'dayplan.toast.needTwoPlaces': 'dayplan.pendingRes': 'Beklemede',
'At least two places needed for route optimization', 'dayplan.pdf': 'PDF\'ler',
'dayplan.toast.routeOptimized': 'Route optimized', 'dayplan.pdfTooltip': 'Gün planını PDF olarak dışa aktar',
'dayplan.toast.noGeoPlaces': 'dayplan.pdfError': 'PDF dışa aktarılamadı',
'No places with coordinates found for route calculation', 'dayplan.mobile.addPlace': 'Yer Ekle',
'dayplan.confirmed': 'Confirmed', 'dayplan.mobile.searchPlaces': 'Yer ara...',
'dayplan.pendingRes': 'Pending', 'dayplan.mobile.allAssigned': 'Tüm yerler atandı',
'dayplan.pdf': 'PDF', 'dayplan.mobile.noMatch': 'Eşleşme yok',
'dayplan.pdfTooltip': 'Export day plan as PDF', 'dayplan.mobile.createNew': 'Yeni yer oluştur',
'dayplan.pdfError': 'Failed to export PDF',
'dayplan.mobile.addPlace': 'Add Place',
'dayplan.mobile.searchPlaces': 'Search places...',
'dayplan.mobile.allAssigned': 'All places assigned',
'dayplan.mobile.noMatch': 'No match',
'dayplan.mobile.createNew': 'Create new place',
}; };
export default dayplan; export default dayplan;
+54 -57
View File
@@ -1,62 +1,59 @@
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': 'Görsel, PDF, DOC, DOCX, XLS, XLSX, TXT, CSV · Maks. 50 MB',
'Images, PDF, DOC, DOCX, XLS, XLSX, TXT, CSV · Max 50 MB', 'files.uploading': 'Yükleniyor...',
'files.uploading': 'Uploading...', 'files.filterAll': 'Tüm',
'files.filterAll': 'All', 'files.filterPdf': 'PDF\'ler',
'files.filterPdf': 'PDFs', 'files.filterImages': 'Görseller',
'files.filterImages': 'Images', 'files.filterDocs': 'Belgeler',
'files.filterDocs': 'Documents', 'files.filterCollab': 'İşbirliği Notları',
'files.filterCollab': 'Collab Notes', 'files.sourceCollab': 'İşbirliği notlarından',
'files.sourceCollab': 'From Collab Notes', 'files.empty': 'Henüz dosya yok',
'files.empty': 'No files yet', 'files.emptyHint': 'Seyahatinize eklemek için dosya yükleyin',
'files.emptyHint': 'Upload files to attach them to your trip', 'files.openTab': 'Yeni sekmede aç',
'files.openTab': 'Open in new tab', 'files.confirm.delete': 'Bu dosyayı silmek istediğinizden emin misiniz?',
'files.confirm.delete': 'Are you sure you want to delete this file?', 'files.toast.deleted': 'Dosya silindi',
'files.toast.deleted': 'File deleted', 'files.toast.deleteError': 'Dosya silinemedi',
'files.toast.deleteError': 'Failed to delete file', 'files.sourcePlan': 'Gün Planı',
'files.sourcePlan': 'Day Plan', 'files.sourceBooking': 'Rezervasyon',
'files.sourceBooking': 'Booking', 'files.sourceTransport': 'Ulaşım',
'files.sourceTransport': 'Transport', 'files.attach': 'Ekle',
'files.attach': 'Attach', 'files.pasteHint': 'Panodan görsel de yapıştırabilirsiniz (Ctrl+V)',
'files.pasteHint': 'You can also paste images from clipboard (Ctrl+V)', 'files.trash': 'Çöp kutusu',
'files.trash': 'Trash', 'files.trashEmpty': 'Çöp kutusu boş',
'files.trashEmpty': 'Trash is empty', 'files.emptyTrash': 'Çöp kutusunu boşalt',
'files.emptyTrash': 'Empty Trash', 'files.restore': 'Geri yükle',
'files.restore': 'Restore', 'files.star': 'Yıldızla',
'files.star': 'Star', 'files.unstar': 'Yıldızı kaldır',
'files.unstar': 'Unstar', 'files.assign': 'Ata',
'files.assign': 'Assign', 'files.assignTitle': 'Dosya Ata',
'files.assignTitle': 'Assign File', 'files.assignPlace': 'Yer',
'files.assignPlace': 'Place', 'files.assignBooking': 'Rezervasyon',
'files.assignBooking': 'Booking', 'files.assignTransport': 'Ulaşım',
'files.assignTransport': 'Transport', 'files.unassigned': 'Atanmamış',
'files.unassigned': 'Unassigned', 'files.unlink': 'Bağlantıyı kaldır',
'files.unlink': 'Remove link', 'files.toast.trashed': 'Çöp kutusuna taşındı',
'files.toast.trashed': 'Moved to trash', 'files.toast.restored': 'Dosya geri yüklendi',
'files.toast.restored': 'File restored', 'files.toast.trashEmptied': 'Çöp kutusu boşaltıldı',
'files.toast.trashEmptied': 'Trash emptied', 'files.toast.assigned': 'Dosya atandı',
'files.toast.assigned': 'File assigned', 'files.toast.assignError': 'Atama başarısız',
'files.toast.assignError': 'Assignment failed', 'files.toast.restoreError': 'Geri yükleme başarısız',
'files.toast.restoreError': 'Restore failed', 'files.confirm.permanentDelete': 'Bu dosya kalıcı olarak silinsin mi? Bu işlem geri alınamaz.',
'files.confirm.permanentDelete': 'files.confirm.emptyTrash': 'Çöp kutusundaki tüm dosyalar kalıcı olarak silinsin mi? Bu işlem geri alınamaz.',
'Permanently delete this file? This cannot be undone.', 'files.noteLabel': 'Not',
'files.confirm.emptyTrash': 'files.notePlaceholder': 'Not ekleyin...',
'Permanently delete all trashed files? This cannot be undone.',
'files.noteLabel': 'Note',
'files.notePlaceholder': 'Add a note...',
}; };
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;
+221 -233
View File
@@ -1,244 +1,232 @@
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': '"{title}" silinsin mi? Bu işlem geri alınamaz.',
'journey.deleteConfirmGeneric': 'Are you sure you want to delete this?', 'journey.deleteConfirmGeneric': 'Bunu silmek istediğinizden emin misiniz?',
'journey.notFound': 'Journey not found', 'journey.notFound': 'Journey bulunamadı',
'journey.photos': 'Photos', 'journey.photos': 'Fotoğraflar',
'journey.timelineEmpty': 'No stops yet', 'journey.timelineEmpty': 'Henüz durak yok',
'journey.timelineEmptyHint': 'journey.timelineEmptyHint': 'Başlamak için check-in ekleyin veya günlük kaydı yazın',
'Add a check-in or write a journal entry to get started', 'journey.status.draft': 'Taslak',
'journey.status.draft': 'Draft', 'journey.status.active': 'Aktif',
'journey.status.active': 'Active', 'journey.status.completed': 'Tamamlandı',
'journey.status.completed': 'Completed', 'journey.status.upcoming': 'Yaklaşan',
'journey.status.upcoming': 'Upcoming', 'journey.status.archived': 'Arşivlendi',
'journey.status.archived': 'Archived', 'journey.checkin.add': 'Giriş',
'journey.checkin.add': 'Check in', 'journey.checkin.namePlaceholder': 'Konum adı',
'journey.checkin.namePlaceholder': 'Location name', 'journey.checkin.notesPlaceholder': 'Notlar (isteğe bağlı)',
'journey.checkin.notesPlaceholder': 'Notes (optional)', 'journey.checkin.save': 'Kaydet',
'journey.checkin.save': 'Save', 'journey.checkin.error': 'Check-in kaydedilemedi',
'journey.checkin.error': 'Could not save check-in', 'journey.entry.add': 'Günlük',
'journey.entry.add': 'Journal', 'journey.entry.edit': 'Kaydı düzenle',
'journey.entry.edit': 'Edit entry', 'journey.entry.titlePlaceholder': 'Başlık (isteğe bağlı)',
'journey.entry.titlePlaceholder': 'Title (optional)', 'journey.entry.bodyPlaceholder': 'Bugün ne oldu?',
'journey.entry.bodyPlaceholder': 'What happened today?', 'journey.entry.save': 'Kaydet',
'journey.entry.save': 'Save', 'journey.entry.error': 'Kayıt kaydedilemedi',
'journey.entry.error': 'Could not save entry', 'journey.photo.add': 'Fotoğraf',
'journey.photo.add': 'Photo', 'journey.photo.uploadError': 'Yükleme başarısız oldu',
'journey.photo.uploadError': 'Upload failed', 'journey.share.share': 'Paylaş',
'journey.share.share': 'Share', 'journey.share.public': 'Herkese açık',
'journey.share.public': 'Public', 'journey.share.linkCopied': 'Herkese açık bağlantı kopyalandı',
'journey.share.linkCopied': 'Public link copied', 'journey.share.disabled': 'Herkese açık paylaşım kapalı',
'journey.share.disabled': 'Public sharing disabled', 'journey.editor.titlePlaceholder': 'Bu ana bir ad verin...',
'journey.editor.titlePlaceholder': 'Give this moment a name...', 'journey.editor.bodyPlaceholder': 'Bu günün hikâyesini anlatın...',
'journey.editor.bodyPlaceholder': 'Tell the story of this day...', 'journey.editor.placePlaceholder': 'Konum (isteğe bağlı)',
'journey.editor.placePlaceholder': 'Location (optional)', 'journey.editor.tagsPlaceholder': 'Etiketler: gizli cevher, en iyi yemek, tekrar ziyaret...',
'journey.editor.tagsPlaceholder': 'journey.visibility.private': 'Gizli',
'Tags: hidden gem, best meal, must revisit...', 'journey.visibility.shared': 'Paylaşılan',
'journey.visibility.private': 'Private', 'journey.visibility.public': 'Herkese açık',
'journey.visibility.shared': 'Shared', 'journey.emptyState.title': 'Hikâyeniz burada başlıyor',
'journey.visibility.public': 'Public', 'journey.emptyState.subtitle': 'Bir yerde check-in yapın veya ilk günlük kaydınızı yazın',
'journey.emptyState.title': 'Your story starts here',
'journey.emptyState.subtitle':
'Check in at a place or write your first journal entry',
'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': 'Seyahat seçin, hikâyeler yazın, maceralarınızı paylaşın',
'Pick trips, write stories, share your adventures', 'journey.frontpage.live': 'Canlı',
'journey.frontpage.live': 'Live', 'journey.frontpage.synced': 'Senkronize',
'journey.frontpage.synced': 'Synced', 'journey.frontpage.continueWriting': 'Yazmaya devam et',
'journey.frontpage.continueWriting': 'Continue writing', 'journey.frontpage.updated': '{time} Güncellendi',
'journey.frontpage.updated': 'Updated {time}', 'journey.frontpage.suggestionLabel': 'Seyahat yeni bitti',
'journey.frontpage.suggestionLabel': 'Trip just ended', 'journey.frontpage.suggestionText': '<strong>{title}</strong> seyahatini Journey\'e dönüştür',
'journey.frontpage.suggestionText': 'journey.frontpage.dismiss': 'Kapat',
'Turn <strong>{title}</strong> into a Journey', 'journey.frontpage.journeyName': 'Journey Adı',
'journey.frontpage.dismiss': 'Dismiss', 'journey.frontpage.namePlaceholder': 'örn. Güneydoğu Asya 2026',
'journey.frontpage.journeyName': 'Journey Name', 'journey.frontpage.selectTrips': 'Seyahat Seç',
'journey.frontpage.namePlaceholder': 'e.g. Southeast Asia 2026', 'journey.frontpage.tripsSelected': 'seyahat seçildi',
'journey.frontpage.selectTrips': 'Select Trips', 'journey.frontpage.trips': 'seyahat',
'journey.frontpage.tripsSelected': 'trips selected', 'journey.frontpage.placesImported': 'yer içe aktarılacak',
'journey.frontpage.trips': 'trips', 'journey.frontpage.places': 'yer',
'journey.frontpage.placesImported': 'places will be imported', 'journey.detail.backToJourney': 'Journey\'e dön',
'journey.frontpage.places': 'places', 'journey.detail.syncedWithTrips': 'Seyahatlerle senkronize',
'journey.detail.backToJourney': 'Back to Journey', 'journey.detail.addEntry': 'Kayıt Ekle',
'journey.detail.syncedWithTrips': 'Synced with Trips', 'journey.detail.newEntry': 'Yeni Kayıt',
'journey.detail.addEntry': 'Add Entry', 'journey.detail.editEntry': 'Kaydı Düzenle',
'journey.detail.newEntry': 'New Entry', 'journey.detail.noEntries': 'Henüz kayıt yok',
'journey.detail.editEntry': 'Edit Entry', 'journey.detail.noEntriesHint': 'İskelet kayıtlarla başlamak için bir seyahat ekleyin',
'journey.detail.noEntries': 'No entries yet', 'journey.detail.noPhotos': 'Henüz fotoğraf yok',
'journey.detail.noEntriesHint': 'journey.detail.noPhotosHint': 'Kayıtlara fotoğraf yükleyin veya Immich/Synology kütüphanenize göz atın',
'Add a trip to get started with skeleton entries', 'journey.detail.journeyTab': 'Seyahat',
'journey.detail.noPhotos': 'No photos yet', 'journey.detail.journeyStats': 'Journey İstatistikleri',
'journey.detail.noPhotosHint': 'journey.detail.syncedTrips': 'Senkronize Seyahatler',
'Upload photos to entries or browse your Immich/Synology library', 'journey.detail.noTripsLinked': 'Henüz bağlı seyahat yok',
'journey.detail.journeyTab': 'Journey', 'journey.detail.contributors': 'Katkıda bulunanlar',
'journey.detail.journeyStats': 'Journey Stats', 'journey.detail.readMore': 'Devamını oku',
'journey.detail.syncedTrips': 'Synced Trips', 'journey.detail.prosCons': 'Artılar ve Eksiler',
'journey.detail.noTripsLinked': 'No trips linked yet', 'journey.detail.photos': 'fotoğraf',
'journey.detail.contributors': 'Contributors', 'journey.detail.day': '{number}. gün',
'journey.detail.readMore': 'Read more', 'journey.detail.places': 'yer',
'journey.detail.prosCons': 'Pros & Cons', 'journey.stats.days': 'Günler',
'journey.detail.photos': 'photos', 'journey.stats.cities': 'Şehirler',
'journey.detail.day': 'Day {number}', 'journey.stats.entries': 'Kayıtlar',
'journey.detail.places': 'places', 'journey.stats.photos': 'Fotoğraflar',
'journey.stats.days': 'Days', 'journey.stats.places': 'Yer',
'journey.stats.cities': 'Cities', 'journey.skeletons.show': 'Önerileri göster',
'journey.stats.entries': 'Entries', 'journey.skeletons.hide': 'Önerileri gizle',
'journey.stats.photos': 'Photos', 'journey.verdict.lovedIt': 'Çok beğendim',
'journey.stats.places': 'Places', 'journey.verdict.couldBeBetter': 'Daha iyi olabilirdi',
'journey.skeletons.show': 'Show suggestions', 'journey.synced.places': 'yer',
'journey.skeletons.hide': 'Hide suggestions', 'journey.synced.synced': 'senkronize',
'journey.verdict.lovedIt': 'Loved it', 'journey.editor.discardChangesConfirm': 'Kaydedilmemiş değişiklikleriniz var. Vazgeçilsin mi?',
'journey.verdict.couldBeBetter': 'Could be better', 'journey.editor.uploadPhotos': 'Fotoğraf yükle',
'journey.synced.places': 'places', 'journey.editor.uploading': 'Yükleniyor...',
'journey.synced.synced': 'synced', 'journey.editor.fromGallery': 'Galeriden',
'journey.editor.discardChangesConfirm': 'journey.editor.allPhotosAdded': 'Tüm fotoğraflar zaten eklendi',
'You have unsaved changes. Discard them?', 'journey.editor.writeStory': 'Hikâyenizi yazın...',
'journey.editor.uploadPhotos': 'Upload photos', 'journey.editor.prosCons': 'Artılar ve Eksiler',
'journey.editor.uploading': 'Uploading...', 'journey.editor.pros': 'Artılar',
'journey.editor.fromGallery': 'From Gallery', 'journey.editor.cons': 'Eksiler',
'journey.editor.allPhotosAdded': 'All photos already added', 'journey.editor.proPlaceholder': 'Harika bir şey...',
'journey.editor.writeStory': 'Write your story...', 'journey.editor.conPlaceholder': 'Pek iyi değildi...',
'journey.editor.prosCons': 'Pros & Cons', 'journey.editor.addAnother': 'Bir tane daha ekle',
'journey.editor.pros': 'Pros', 'journey.editor.date': 'Tarih',
'journey.editor.cons': 'Cons', 'journey.editor.location': 'Konum',
'journey.editor.proPlaceholder': 'Something great...', 'journey.editor.searchLocation': 'Konum ara...',
'journey.editor.conPlaceholder': 'Not so great...', 'journey.editor.mood': 'Ruh hali',
'journey.editor.addAnother': 'Add another', 'journey.editor.weather': 'Hava durumu',
'journey.editor.date': 'Date', 'journey.editor.photoFirst': '1.',
'journey.editor.location': 'Location', 'journey.editor.makeFirst': '1. yap',
'journey.editor.searchLocation': 'Search location...', 'journey.editor.searching': 'Aranıyor...',
'journey.editor.mood': 'Mood', 'journey.mood.amazing': 'Muhteşem',
'journey.editor.weather': 'Weather', 'journey.mood.good': 'İyi',
'journey.editor.photoFirst': '1st', 'journey.mood.neutral': 'Nötr',
'journey.editor.makeFirst': 'Make 1st', 'journey.mood.rough': 'Zor',
'journey.editor.searching': 'Searching...', 'journey.weather.sunny': 'Güneşli',
'journey.mood.amazing': 'Amazing', 'journey.weather.partly': 'Parçalı bulutlu',
'journey.mood.good': 'Good', 'journey.weather.cloudy': 'Bulutlu',
'journey.mood.neutral': 'Neutral', 'journey.weather.rainy': 'Yağmurlu',
'journey.mood.rough': 'Rough', 'journey.weather.stormy': 'Fırtınalı',
'journey.weather.sunny': 'Sunny', 'journey.weather.cold': 'Karlı',
'journey.weather.partly': 'Partly cloudy', 'journey.trips.linkTrip': 'Seyahat Bağla',
'journey.weather.cloudy': 'Cloudy', 'journey.trips.searchTrip': 'Seyahat Ara',
'journey.weather.rainy': 'Rainy', 'journey.trips.searchPlaceholder': 'Seyahat adı veya destinasyon...',
'journey.weather.stormy': 'Stormy', 'journey.trips.noTripsAvailable': 'Kullanılabilir seyahat yok',
'journey.weather.cold': 'Snowy', 'journey.trips.link': 'Bağla',
'journey.trips.linkTrip': 'Link Trip', 'journey.trips.tripLinked': 'Seyahat bağlandı',
'journey.trips.searchTrip': 'Search Trip', 'journey.trips.linkFailed': 'Seyahat bağlanamadı',
'journey.trips.searchPlaceholder': 'Trip name or destination...', 'journey.trips.addTrip': 'Seyahat Ekle',
'journey.trips.noTripsAvailable': 'No trips available', 'journey.trips.unlinkTrip': 'Seyahat bağlantısını kaldır',
'journey.trips.link': 'Link', 'journey.trips.unlinkMessage': '"{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.tripLinked': 'Trip linked', 'journey.trips.unlink': 'Bağlantıyı kaldır',
'journey.trips.linkFailed': 'Failed to link trip', 'journey.trips.tripUnlinked': 'Seyahat bağlantısı kaldırıldı',
'journey.trips.addTrip': 'Add Trip', 'journey.trips.unlinkFailed': 'Seyahat bağlantısı kaldırılamadı',
'journey.trips.unlinkTrip': 'Unlink Trip', 'journey.trips.noTripsLinkedSettings': 'Bağlı seyahat yok',
'journey.trips.unlinkMessage': 'journey.contributors.invite': 'Katkıda bulunan davet et',
'Unlink "{title}"? All synced entries and photos from this trip will be permanently deleted. This cannot be undone.', 'journey.contributors.searchUser': 'Kullanıcı Ara',
'journey.trips.unlink': 'Unlink', 'journey.contributors.searchPlaceholder': 'Kullanıcı adı veya e-posta...',
'journey.trips.tripUnlinked': 'Trip unlinked', 'journey.contributors.noUsers': 'Kullanıcı bulunamadı',
'journey.trips.unlinkFailed': 'Failed to unlink trip', 'journey.contributors.role': 'Rol',
'journey.trips.noTripsLinkedSettings': 'No trips linked', 'journey.contributors.added': 'Katkıda bulunan eklendi',
'journey.contributors.invite': 'Invite Contributor', 'journey.contributors.addFailed': 'Katkıda bulunan eklenemedi',
'journey.contributors.searchUser': 'Search User', 'journey.contributors.remove': 'Katkıda bulunanı kaldır',
'journey.contributors.searchPlaceholder': 'Username or email...', 'journey.contributors.removeConfirm': '{username} bu journey\'den kaldırılsın mı?',
'journey.contributors.noUsers': 'No users found', 'journey.contributors.removed': 'Katkıda bulunan kaldırıldı',
'journey.contributors.role': 'Role', 'journey.contributors.removeFailed': 'Katkıda bulunan kaldırılamadı',
'journey.contributors.added': 'Contributor added', 'journey.share.publicShare': 'Herkese açık paylaşım',
'journey.contributors.addFailed': 'Failed to add contributor', 'journey.share.createLink': 'Paylaşım bağlantısı oluştur',
'journey.contributors.remove': 'Remove contributor', 'journey.share.linkCreated': 'Paylaşım bağlantısı oluşturuldu',
'journey.contributors.removeConfirm': 'Remove {username} from this journey?', 'journey.share.createFailed': 'Bağlantı oluşturulamadı',
'journey.contributors.removed': 'Contributor removed', 'journey.share.copy': 'Kopyala',
'journey.contributors.removeFailed': 'Failed to remove contributor', 'journey.share.copied': 'Kopyalandı!',
'journey.share.publicShare': 'Public Share', 'journey.share.timeline': 'Zaman çizelgesi',
'journey.share.createLink': 'Create share link', 'journey.share.gallery': 'Galeri',
'journey.share.linkCreated': 'Share link created', 'journey.share.map': 'Harita',
'journey.share.createFailed': 'Failed to create link', 'journey.share.removeLink': 'Paylaşım bağlantısını kaldır',
'journey.share.copy': 'Copy', 'journey.share.linkDeleted': 'Paylaşım bağlantısı silindi',
'journey.share.copied': 'Copied!', 'journey.share.deleteFailed': 'Silinemedi',
'journey.share.timeline': 'Timeline', 'journey.share.updateFailed': 'Güncelleme başarısız oldu',
'journey.share.gallery': 'Gallery', 'journey.invite.role': 'Rol',
'journey.share.map': 'Map', 'journey.invite.viewer': 'Görüntüleyici',
'journey.share.removeLink': 'Remove share link', 'journey.invite.editor': 'Düzenleyici',
'journey.share.linkDeleted': 'Share link deleted', 'journey.invite.invite': 'Davet et',
'journey.share.deleteFailed': 'Failed to delete', 'journey.invite.inviting': 'Davet ediliyor...',
'journey.share.updateFailed': 'Failed to update', 'journey.settings.title': 'Journey Ayarları',
'journey.invite.role': 'Role', 'journey.settings.coverImage': 'Kapak Görseli',
'journey.invite.viewer': 'Viewer', 'journey.settings.changeCover': 'Kapağı değiştir',
'journey.invite.editor': 'Editor', 'journey.settings.addCover': 'Kapak görseli ekle',
'journey.invite.invite': 'Invite', 'journey.settings.name': 'İsim',
'journey.invite.inviting': 'Inviting...', 'journey.settings.subtitle': 'Alt başlık',
'journey.settings.title': 'Journey Settings', 'journey.settings.subtitlePlaceholder': 'örn. Tayland, Vietnam ve Kamboçya',
'journey.settings.coverImage': 'Cover Image', 'journey.settings.endJourney': 'Journey\'i Arşivle',
'journey.settings.changeCover': 'Change cover', 'journey.settings.reopenJourney': 'Journey\'i geri aç',
'journey.settings.addCover': 'Add cover image', 'journey.settings.archived': 'Journey arşivlendi',
'journey.settings.name': 'Name', 'journey.settings.reopened': 'Journey yeniden açıldı',
'journey.settings.subtitle': 'Subtitle', 'journey.settings.endDescription': 'Canlı rozetini gizler. İstediğiniz zaman yeniden açabilirsiniz.',
'journey.settings.subtitlePlaceholder': 'e.g. Thailand, Vietnam & Cambodia', 'journey.settings.delete': 'Sil',
'journey.settings.endJourney': 'Archive Journey', 'journey.settings.deleteJourney': 'Journey\'i Sil',
'journey.settings.reopenJourney': 'Restore Journey', 'journey.settings.deleteMessage': '"{title}" silinsin mi? Tüm kayıtlar ve fotoğraflar kaybolacak.',
'journey.settings.archived': 'Journey archived', 'journey.settings.saved': 'Ayarlar kaydedildi',
'journey.settings.reopened': 'Journey reopened', 'journey.settings.saveFailed': 'Kaydedilemedi',
'journey.settings.endDescription': 'journey.settings.coverUpdated': 'Kapak güncellendi',
'Hides the Live badge. You can reopen anytime.', 'journey.settings.coverFailed': 'Yükleme başarısız oldu',
'journey.settings.delete': 'Delete', 'journey.settings.failedToDelete': 'Silinemedi',
'journey.settings.deleteJourney': 'Delete Journey', 'journey.entries.deleteTitle': 'Kaydı Sil',
'journey.settings.deleteMessage': 'journey.photosUploaded': '{count} fotoğraf yüklendi',
'Delete "{title}"? All entries and photos will be lost.', 'journey.photosAdded': '{count} fotoğraf eklendi',
'journey.settings.saved': 'Settings saved', 'journey.public.notFound': 'Bulunamadı',
'journey.settings.saveFailed': 'Failed to save',
'journey.settings.coverUpdated': 'Cover updated',
'journey.settings.coverFailed': 'Upload failed',
'journey.settings.failedToDelete': 'Failed to delete',
'journey.entries.deleteTitle': 'Delete Entry',
'journey.photosUploaded': '{count} photos uploaded',
'journey.photosAdded': '{count} photos added',
'journey.public.notFound': 'Not Found',
'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 başarısız — tekrar denemek için kaydedin',
'{total} fotoğraftan {failed} tanesi yüklenemedi — yeniden denemek için tekrar kaydedin',
'journey.photosUploadFailed': 'Bazı fotoğraflar yüklenemedi', 'journey.photosUploadFailed': 'Bazı fotoğraflar yüklenemedi',
}; };
export default journey; export default journey;
+73 -83
View File
@@ -1,95 +1,85 @@
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': 'Giriş başarısız oldu. Lütfen kimlik bilgilerinizi kontrol edin.',
'login.tagline': 'Your Trips.\nYour Plan.', 'login.tagline': 'Gezileriniz.\\nPlanınız.',
'login.description': 'login.description': 'Etkileşimli haritalar, bütçeler ve gerçek zamanlı senkronizasyonla gezileri işbirliği içinde planlayın.',
'Plan trips collaboratively with interactive maps, budgets, and real-time sync.', 'login.features.maps': 'İnteraktif Haritalar',
'login.features.maps': 'Interactive Maps', 'login.features.mapsDesc': 'Google Rehber, rotalar ve kümeleme',
'login.features.mapsDesc': 'Google Places, routes & clustering', 'login.features.realtime': 'Gerçek Zamanlı Senkronizasyon',
'login.features.realtime': 'Real-Time Sync', 'login.features.realtimeDesc': 'WebSocket aracılığıyla birlikte plan yapın',
'login.features.realtimeDesc': 'Plan together via WebSocket', 'login.features.budget': 'Bütçe Takibi',
'login.features.budget': 'Budget Tracking', 'login.features.budgetDesc': 'Kategoriler, grafikler ve kişi başı maliyetler',
'login.features.budgetDesc': 'Categories, charts & per-person costs', 'login.features.collab': 'İşbirliği',
'login.features.collab': 'Collaboration', 'login.features.collabDesc': 'Paylaşılan gezilerle çok kullanıcılı',
'login.features.collabDesc': 'Multi-user with shared trips', 'login.features.packing': 'Paketleme Listeleri',
'login.features.packing': 'Packing Lists', 'login.features.packingDesc': 'Kategoriler, ilerleme ve öneriler',
'login.features.packingDesc': 'Categories, progress & suggestions', 'login.features.bookings': 'Rezervasyonlar',
'login.features.bookings': 'Reservations', 'login.features.bookingsDesc': 'Uçuşlar, oteller, restoranlar ve daha fazlası',
'login.features.bookingsDesc': 'Flights, hotels, restaurants & more', 'login.features.files': 'Belgeler',
'login.features.files': 'Documents', 'login.features.filesDesc': 'Belgeleri yükleyin ve yönetin',
'login.features.filesDesc': 'Upload & manage documents', 'login.features.routes': 'Akıllı Rotalar',
'login.features.routes': 'Smart Routes', 'login.features.routesDesc': 'Otomatik optimize etme ve Google Haritalar\'ı dışa aktarma',
'login.features.routesDesc': 'Auto-optimize & Google Maps export', 'login.selfHosted': 'Kendi kendine barındırılan \\u00B7 Açık Kaynak \\u00B7 Verileriniz size ait kalır',
'login.selfHosted': 'Self-hosted · Open Source · Your data stays yours', 'login.title': 'Oturum Aç',
'login.title': 'Giriş yap',
'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': 'Kayıt devre dışı bırakıldı. Yöneticinizle iletişime geçin.',
'Registration is disabled. Contact your administrator.', 'login.oidc.noEmail': 'Sağlayıcıdan e-posta alınmadı.',
'login.oidc.noEmail': 'No email received from provider.', 'login.oidc.tokenFailed': 'Kimlik doğrulama başarısız oldu.',
'login.oidc.tokenFailed': 'Authentication failed.', 'login.oidc.invalidState': 'Geçersiz oturum. Lütfen tekrar deneyin.',
'login.oidc.invalidState': 'Invalid session. Please try again.', 'login.demoFailed': 'Demo girişi başarısız oldu',
'login.demoFailed': 'Demo login failed', 'login.oidcSignIn': '{name} ile oturum açın',
'login.oidcSignIn': 'Sign in with {name}', 'login.oidcOnly': 'Parola kimlik doğrulaması devre dışı. Lütfen SSO sağlayıcınızı kullanarak oturum açın.',
'login.oidcOnly': 'login.oidcLoggedOut': 'Çıkış yaptınız. SSO sağlayıcınızı kullanarak tekrar oturum açın.',
'Password authentication is disabled. Please sign in using your SSO provider.', 'login.demoHint': 'Demoyu deneyin; kayıt olmanıza gerek yok',
'login.oidcLoggedOut': 'login.mfaTitle': 'İki faktörlü kimlik doğrulama',
'You have been logged out. Sign in again using your SSO provider.', 'login.mfaSubtitle': 'Kimlik doğrulayıcı uygulamanızdan 6 haneli kodu girin.',
'login.demoHint': 'Try the demo — no registration needed', 'login.mfaCodeLabel': 'Doğrulama kodu',
'login.mfaTitle': 'Two-factor authentication', 'login.mfaCodeRequired': 'Kimlik doğrulayıcı uygulamanızdan kodu girin.',
'login.mfaSubtitle': 'Enter the 6-digit code from your authenticator app.', 'login.mfaHint': 'Google Authenticator\'ı, Authy\'yi veya başka bir TOTP uygulamasını açın.',
'login.mfaCodeLabel': 'Verification code', 'login.mfaBack': '← Oturum açmaya geri dön',
'login.mfaCodeRequired': 'Enter the code from your authenticator app.', 'login.mfaVerify': 'Doğrula',
'login.mfaHint': 'Open Google Authenticator, Authy, or another TOTP app.', 'login.invalidInviteLink': 'Geçersiz veya süresi dolmuş davet bağlantısı',
'login.mfaBack': '← Back to sign in', 'login.oidcFailed': 'OIDC girişi başarısız oldu',
'login.mfaVerify': 'Verify', 'login.usernameRequired': 'Kullanıcı adı gerekli',
'login.invalidInviteLink': 'Invalid or expired invite link', 'login.passwordMinLength': 'Şifre en az 8 karakter olmalıdır',
'login.oidcFailed': 'OIDC login failed', 'login.forgotPassword': 'Parolanızı mı unuttunuz?',
'login.usernameRequired': 'Username is required', 'login.forgotPasswordTitle': 'Şifrenizi sıfırlayın',
'login.passwordMinLength': 'Password must be at least 8 characters',
'login.forgotPassword': 'Parolamı unuttum?',
'login.forgotPasswordTitle': 'Reset your password',
'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': '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.',
'If an account exists for that email, a reset link is on its way. It expires in 60 minutes.',
'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': 'Daha önce burada kullanmadığınız güçlü bir şifre seçin. Minimum 8 karakter.',
'Pick a strong password you havent used here before. Minimum 8 characters.', 'login.resetPasswordMfaBody': 'Sıfırlamayı tamamlamak için 2FA kodunuzu veya yedek kodu girin.',
'login.resetPasswordMfaBody': 'login.resetPasswordSubmit': 'Şifreyi sıfırla',
'Enter your 2FA code or a backup code to complete the reset.', 'login.resetPasswordVerify': 'Doğrula ve sıfırla',
'login.resetPasswordSubmit': 'Reset password', 'login.resetPasswordSuccessTitle': 'Şifre güncellendi',
'login.resetPasswordVerify': 'Verify & reset', 'login.resetPasswordSuccessBody': 'Artık yeni şifrenizle giriş yapabilirsiniz.',
'login.resetPasswordSuccessTitle': 'Password updated', 'login.resetPasswordInvalidLink': 'Geçersiz sıfırlama bağlantısı',
'login.resetPasswordSuccessBody': 'login.resetPasswordInvalidLinkBody': 'Bu bağlantı eksik veya bozuk. Devam etmek için yeni bir tane isteyin.',
'You can now sign in with your new password.', 'login.resetPasswordFailed': 'Sıfırlama başarısız oldu. Bağlantının süresi dolmuş olabilir.',
'login.resetPasswordInvalidLink': 'Invalid reset link',
'login.resetPasswordInvalidLinkBody':
'This link is missing or broken. Request a new one to continue.',
'login.resetPasswordFailed': 'Reset failed. The link may have expired.',
}; };
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;
+19 -19
View File
@@ -1,24 +1,24 @@
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': 'Seyahatten ayrılmak İstiyor musunuz? Erişiminizi kaybedersiniz.',
'members.confirmRemove': 'Remove access for this user?', 'members.confirmRemove': 'Bu kullanıcının erişimi kaldırılsın mı?',
'members.loadError': 'Failed to load members', 'members.loadError': 'Üyeler yüklenemedi',
'members.added': 'added', 'members.added': 'eklendi',
'members.addError': 'Failed to add', 'members.addError': 'Eklenemedi',
'members.removed': 'Member removed', 'members.removed': 'Üye kaldırıldı',
'members.removeError': 'Failed to remove', 'members.removeError': 'Kaldırılamadı',
}; };
export default members; export default members;
+66 -73
View File
@@ -1,80 +1,73 @@
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': 'Bu seyahate fotoğraf eklemek için Ayarlar\'dan {provider_name} örneğinizi bağlayın.',
'Connect your {provider_name} instance in Settings to be able add photos to this trip.', 'memories.notConnectedMultipleHint': 'Bu seyahate fotoğraf eklemek için Ayarlar\'dan şu fotoğraf sağlayıcılarından birini bağlayın: {provider_names}',
'memories.notConnectedMultipleHint': 'memories.noDates': 'Fotoğrafları yüklemek için seyahatinize tarih ekleyin.',
'Connect any of these photo providers: {provider_names} in Settings to be able add photos to this trip.', 'memories.noPhotos': 'Fotoğraf bulunamadı',
'memories.noDates': 'Add dates to your trip to load photos.',
'memories.noPhotos': 'No photos found',
'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': 'URL\'ye Photos uygulama yolunu ekleyin, örn. https://nas:5001/photo',
'Include the Photos app path in the URL, e.g. https://nas:5001/photo', 'memories.testConnection': 'Bağlantıyı test et',
'memories.testConnection': 'Test connection', 'memories.testShort': 'Dene',
'memories.testShort': 'Test', 'memories.testFirst': 'Önce bağlantıyı test edin',
'memories.testFirst': 'Test connection first', 'memories.connected': 'Bağlı',
'memories.connected': 'Connected', 'memories.disconnected': 'Bağlı değil',
'memories.disconnected': 'Not connected', 'memories.connectionSuccess': '{provider_name} ile bağlandı',
'memories.connectionSuccess': 'Connected to {provider_name}', 'memories.connectionError': '{provider_name} ile bağlanılamadı',
'memories.connectionError': 'Could not connect to {provider_name}', 'memories.saved': '{provider_name} ayarları kaydedildi',
'memories.saved': '{provider_name} settings saved', 'memories.providerDisconnectedBanner': '{provider_name} Bağlantınız kesildi. Fotoğrafları görmek için Ayarlar\'dan yeniden bağlanın.',
'memories.providerDisconnectedBanner': 'memories.saveError': '{provider_name} Ayarları kaydedilemedi',
'Your {provider_name} connection is lost. Reconnect in Settings to view photos.', 'memories.addPhotos': 'Fotoğraf ekle',
'memories.saveError': 'Could not save {provider_name} settings', 'memories.linkAlbum': 'Albüm Bağla',
'memories.addPhotos': 'Add photos', 'memories.selectAlbum': '{provider_name} Albümü Seç',
'memories.linkAlbum': 'Link Album', 'memories.selectAlbumMultiple': 'Albüm Seç',
'memories.selectAlbum': 'Select {provider_name} Album', 'memories.noAlbums': 'Albüm bulunamadı',
'memories.selectAlbumMultiple': 'Select Album', 'memories.syncAlbum': 'Albümü senkronize et',
'memories.noAlbums': 'No albums found', 'memories.unlinkAlbum': 'Albüm bağlantısını kaldır',
'memories.syncAlbum': 'Sync album', 'memories.photos': 'fotoğraf',
'memories.unlinkAlbum': 'Unlink album', 'memories.selectPhotos': '{provider_name} Fotoğraflarını seç',
'memories.photos': 'photos', 'memories.selectPhotosMultiple': 'Fotoğraf Seç',
'memories.selectPhotos': 'Select photos from {provider_name}', 'memories.selectHint': 'Seçmek için fotoğraflara dokunun.',
'memories.selectPhotosMultiple': 'Select Photos', 'memories.selected': 'seçildi',
'memories.selectHint': 'Tap photos to select them.', 'memories.addSelected': '{count} Fotoğraf ekle',
'memories.selected': 'selected', 'memories.alreadyAdded': 'Eklendi',
'memories.addSelected': 'Add {count} photos', 'memories.private': 'Gizli',
'memories.alreadyAdded': 'Added', 'memories.stopSharing': 'Paylaşımı durdur',
'memories.private': 'Private', 'memories.oldest': 'En eski önce',
'memories.stopSharing': 'Stop sharing', 'memories.newest': 'En yeni önce',
'memories.oldest': 'Oldest first', 'memories.allLocations': 'Tüm konumlar',
'memories.newest': 'Newest first', 'memories.tripDates': 'Seyahat tarihleri',
'memories.allLocations': 'All locations', 'memories.allPhotos': 'Tüm fotoğraflar',
'memories.tripDates': 'Trip dates', 'memories.confirmShareTitle': 'Seyahat üyeleriyle paylaşılsın mı?',
'memories.allPhotos': 'All photos', 'memories.confirmShareHint': '{count} fotoğraf bu seyahatin tüm üyelerine görünür olacak. Daha sonra tek tek gizli yapabilirsiniz.',
'memories.confirmShareTitle': 'Share with trip members?', 'memories.confirmShareButton': 'Fotoğrafları paylaş',
'memories.confirmShareHint': 'memories.error.loadAlbums': 'Albümler yüklenemedi',
'{count} photos will be visible to all members of this trip. You can make individual photos private later.', 'memories.error.linkAlbum': 'Albüm bağlanamadı',
'memories.confirmShareButton': 'Share photos', 'memories.error.unlinkAlbum': 'Albüm bağlantısı kaldırılamadı',
'memories.error.loadAlbums': 'Failed to load albums', 'memories.error.syncAlbum': 'Albüm senkronize edilemedi',
'memories.error.linkAlbum': 'Failed to link album', 'memories.error.loadPhotos': 'Fotoğraflar yüklenemedi',
'memories.error.unlinkAlbum': 'Failed to unlink album', 'memories.error.addPhotos': 'Fotoğraflar eklenemedi',
'memories.error.syncAlbum': 'Failed to sync album', 'memories.error.removePhoto': 'Fotoğraf kaldırılamadı',
'memories.error.loadPhotos': 'Failed to load photos', 'memories.error.toggleSharing': 'Paylaşım güncellenemedi',
'memories.error.addPhotos': 'Failed to add photos', 'memories.saveRouteNotConfigured': 'Bu sağlayıcı için kaydetme yolu yapılandırılmamış',
'memories.error.removePhoto': 'Failed to remove photo', 'memories.testRouteNotConfigured': 'Bu sağlayıcı için test yolu yapılandırılmamış',
'memories.error.toggleSharing': 'Failed to update sharing', 'memories.fillRequiredFields': 'Lütfen tüm zorunlu alanları doldurun',
'memories.saveRouteNotConfigured':
'Save route is not configured for this provider',
'memories.testRouteNotConfigured':
'Test route is not configured for this provider',
'memories.fillRequiredFields': 'Please fill all required fields',
}; };
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',
}; };
+35 -36
View File
@@ -1,41 +1,40 @@
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': '{actor}, {trip} içindeki bir rezervasyonu güncelledi',
'notif.trip_reminder.title': 'Trip Reminder', 'notif.trip_reminder.title': 'Seyahat Hatırlatıcısı',
'notif.trip_reminder.text': 'Your trip {trip} is coming up soon!', 'notif.trip_reminder.text': '{trip} Seyahatiniz yaklaşıyor!',
'notif.todo_due.title': 'To-do due', 'notif.todo_due.title': 'Yapılacak vadesi',
'notif.todo_due.text': '{todo} in {trip} is due on {due}', 'notif.todo_due.text': '{trip} içindeki {todo} — son tarih: {due}',
'notif.vacay_invite.title': 'Vacay Fusion Invite', 'notif.vacay_invite.title': 'Vacay Birleştirme Daveti',
'notif.vacay_invite.text': '{actor} invited you to fuse vacation plans', 'notif.vacay_invite.text': '{actor} tatil planlarını birleştirmeniz için sizi davet etti',
'notif.photos_shared.title': 'Photos Shared', 'notif.photos_shared.title': 'Fotoğraflar Paylaşıldı',
'notif.photos_shared.text': '{actor} shared {count} photo(s) in {trip}', 'notif.photos_shared.text': '{actor}, {trip} içinde {count} fotoğraf paylaştı',
'notif.collab_message.title': 'New Message', 'notif.collab_message.title': 'Yeni Mesaj',
'notif.collab_message.text': '{actor} sent a message in {trip}', 'notif.collab_message.text': '{actor}, {trip} içinde mesaj gönderdi',
'notif.packing_tagged.title': 'Packing Assignment', 'notif.packing_tagged.title': 'Paket listesi ataması',
'notif.packing_tagged.text': '{actor} assigned you to {category} in {trip}', 'notif.packing_tagged.text': '{actor} sizi {trip} içinde {category} kategorisine atadı',
'notif.version_available.title': 'New Version Available', 'notif.version_available.title': 'Yeni Sürüm Mevcut',
'notif.version_available.text': 'TREK {version} is now available', 'notif.version_available.text': 'TREK {version} artık kullanılabilir',
'notif.action.view_trip': 'View Trip', 'notif.action.view_trip': 'Seyahati Görüntüle',
'notif.action.view_collab': 'View Messages', 'notif.action.view_collab': 'Mesajları Görüntüle',
'notif.action.view_packing': 'View Packing', 'notif.action.view_packing': 'Paket listesini görüntüle',
'notif.action.view_photos': 'View Photos', 'notif.action.view_photos': 'Fotoğrafları Görüntüle',
'notif.action.view_vacay': 'View Vacay', 'notif.action.view_vacay': 'Vacay\'ı Görüntüle',
'notif.action.view_admin': 'Go to Admin', 'notif.action.view_admin': 'Yöneticiye git',
'notif.action.view': 'View', 'notif.action.view': 'Görüntüle',
'notif.action.accept': 'Accept', 'notif.action.accept': 'Kabul et',
'notif.action.decline': 'Decline', 'notif.action.decline': 'Reddet',
'notif.generic.title': 'Notification', 'notif.generic.title': 'Bildirim',
'notif.generic.text': 'You have a new notification', 'notif.generic.text': 'Yeni bir bildiriminiz var',
'notif.dev.unknown_event.title': '[DEV] Unknown Event', 'notif.dev.unknown_event.title': '[GEL] Bilinmeyen Olay',
'notif.dev.unknown_event.text': 'notif.dev.unknown_event.text': '"{event}" olay türü EVENT_NOTIFICATION_CONFIG içinde kayıtlı değil',
'Event type "{event}" is not registered in EVENT_NOTIFICATION_CONFIG',
}; };
export default notif; export default notif;
+29 -32
View File
@@ -1,38 +1,35 @@
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': 'Sunucunuz veya hesabınız değişti — bağlantıyı test etmek için Ayarlar\'a gidin.',
'Your server or account changed — go to Settings to test your connection again.', 'notifications.versionAvailable.title': 'Güncelleme Mevcut',
'notifications.versionAvailable.title': 'Update Available', 'notifications.versionAvailable.text': 'TREK {version} artık kullanılabilir.',
'notifications.versionAvailable.text': 'TREK {version} is now available.', 'notifications.versionAvailable.button': 'Ayrıntıları Görüntüle',
'notifications.versionAvailable.button': 'View Details', 'notifications.test.title': '{actor} Kaynaklı test bildirimi',
'notifications.test.title': 'Test notification from {actor}', 'notifications.test.text': 'Bu basit bir test bildirimidir.',
'notifications.test.text': 'This is a simple test notification.', 'notifications.test.booleanTitle': '{actor} onayınızı istiyor',
'notifications.test.booleanTitle': '{actor} asks for your approval', 'notifications.test.booleanText': 'Bu bir test boolean bildirimidir. Aşağıdan bir eylem seçin.',
'notifications.test.booleanText': 'notifications.test.accept': 'Onayla',
'This is a test boolean notification. Choose an action below.', 'notifications.test.decline': 'Reddet',
'notifications.test.accept': 'Approve', 'notifications.test.navigateTitle': 'Bir şeye göz atın',
'notifications.test.decline': 'Decline', 'notifications.test.navigateText': 'Bu bir test navigasyon bildirimidir.',
'notifications.test.navigateTitle': 'Check something out', 'notifications.test.goThere': 'Git',
'notifications.test.navigateText': 'This is a test navigate notification.', 'notifications.test.adminTitle': 'Yönetici yayını',
'notifications.test.goThere': 'Go there', 'notifications.test.adminText': '{actor} tüm yöneticilere test bildirimi gönderdi.',
'notifications.test.adminTitle': 'Admin broadcast', 'notifications.test.tripTitle': '{actor} seyahatinizde bir şey paylaştı',
'notifications.test.adminText': 'notifications.test.tripText': '"{trip}" seyahati için test bildirimi.',
'{actor} sent a test notification to all admins.',
'notifications.test.tripTitle': '{actor} posted in your trip',
'notifications.test.tripText': 'Test notification for trip "{trip}".',
}; };
export default notifications; export default notifications;
+66 -93
View File
@@ -1,99 +1,72 @@
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': 'Seyahatleri, günleri, gün notlarını ve üyeleri oku',
'Read trips, days, day notes, and members', 'oauth.scope.trips:write.label': 'Seyahatleri ve programları düzenle',
'oauth.scope.trips:write.label': 'Edit trips & itineraries', 'oauth.scope.trips:write.description': 'Seyahatleri, günleri, notları oluştur ve güncelle; üyeleri yönet',
'oauth.scope.trips:write.description': 'oauth.scope.trips:delete.label': 'Seyahatleri sil',
'Create and update trips, days, notes, and manage members', 'oauth.scope.trips:delete.description': 'Tüm seyahatleri kalıcı olarak sil — bu işlem geri alınamaz',
'oauth.scope.trips:delete.label': 'Delete trips', 'oauth.scope.trips:share.label': 'Paylaşım bağlantılarını yönet',
'oauth.scope.trips:delete.description': 'oauth.scope.trips:share.description': 'Seyahatler için herkese açık paylaşım bağlantıları oluştur, güncelle ve iptal et',
'Permanently delete entire trips — this action is irreversible', 'oauth.scope.places:read.label': 'Yerleri ve harita verilerini görüntüle',
'oauth.scope.trips:share.label': 'Manage share links', 'oauth.scope.places:read.description': 'Yerleri, gün atamalarını, etiketleri ve kategorileri oku',
'oauth.scope.trips:share.description': 'oauth.scope.places:write.label': 'Yerleri yönet',
'Create, update, and revoke public share links for trips', 'oauth.scope.places:write.description': 'Yerleri, atamaları ve etiketleri oluştur, güncelle ve sil',
'oauth.scope.places:read.label': 'View places & map data', 'oauth.scope.atlas:read.label': 'Atlas\'ı Görüntüle',
'oauth.scope.places:read.description': 'oauth.scope.atlas:read.description': 'Ziyaret edilen ülkeleri, bölgeleri ve yapılacaklar listesini oku',
'Read places, day assignments, tags, and categories', 'oauth.scope.atlas:write.label': 'Atlas\'ı Yönet',
'oauth.scope.places:write.label': 'Manage places', 'oauth.scope.atlas:write.description': 'Ülke ve bölgeleri ziyaret edildi olarak işaretle, yapılacaklar listesini yönet',
'oauth.scope.places:write.description': 'oauth.scope.packing:read.label': 'Paket listelerini görüntüle',
'Create, update, and delete places, assignments, and tags', 'oauth.scope.packing:read.description': 'Paket öğelerini, çantaları ve kategori atamalarını oku',
'oauth.scope.atlas:read.label': 'View Atlas', 'oauth.scope.packing:write.label': 'Paket listelerini yönet',
'oauth.scope.atlas:read.description': 'oauth.scope.packing:write.description': 'Paket öğelerini ve çantaları ekle, güncelle, sil, işaretle ve yeniden sırala',
'Read visited countries, regions, and bucket list', 'oauth.scope.todos:read.label': 'Yapılacak listelerini görüntüle',
'oauth.scope.atlas:write.label': 'Manage Atlas', 'oauth.scope.todos:read.description': 'Seyahat yapılacak öğelerini ve kategori atamalarını oku',
'oauth.scope.atlas:write.description': 'oauth.scope.todos:write.label': 'Yapılacak listelerini yönet',
'Mark countries and regions visited, manage bucket list', 'oauth.scope.todos:write.description': 'Yapılacak öğeleri oluştur, güncelle, işaretle, sil ve yeniden sırala',
'oauth.scope.packing:read.label': 'View packing lists', 'oauth.scope.budget:read.label': 'Bütçeyi görüntüle',
'oauth.scope.packing:read.description': 'oauth.scope.budget:read.description': 'Bütçe kalemlerini ve harcama dökümünü oku',
'Read packing items, bags, and category assignees', 'oauth.scope.budget:write.label': 'Bütçeyi yönet',
'oauth.scope.packing:write.label': 'Manage packing lists', 'oauth.scope.budget:write.description': 'Bütçe kalemlerini oluştur, güncelle ve sil',
'oauth.scope.packing:write.description': 'oauth.scope.reservations:read.label': 'Rezervasyonları görüntüle',
'Add, update, delete, toggle, and reorder packing items and bags', 'oauth.scope.reservations:read.description': 'Rezervasyonları ve konaklama ayrıntılarını oku',
'oauth.scope.todos:read.label': 'View to-do lists', 'oauth.scope.reservations:write.label': 'Rezervasyonları yönet',
'oauth.scope.todos:read.description': 'oauth.scope.reservations:write.description': 'Rezervasyonları oluştur, güncelle, sil ve yeniden sırala',
'Read trip to-do items and category assignees', 'oauth.scope.collab:read.label': 'İşbirliğini görüntüle',
'oauth.scope.todos:write.label': 'Manage to-do lists', 'oauth.scope.collab:read.description': 'İşbirliği notlarını, anketleri ve mesajları oku',
'oauth.scope.todos:write.description': 'oauth.scope.collab:write.label': 'İşbirliğini yönet',
'Create, update, toggle, delete, and reorder to-do items', 'oauth.scope.collab:write.description': 'İşbirliği notlarını, anketleri ve mesajları oluştur, güncelle ve sil',
'oauth.scope.budget:read.label': 'View budget', 'oauth.scope.notifications:read.label': 'Bildirimleri görüntüle',
'oauth.scope.budget:read.description': 'oauth.scope.notifications:read.description': 'Uygulama içi bildirimleri ve okunmamış sayıları oku',
'Read budget items and expense breakdown', 'oauth.scope.notifications:write.label': 'Bildirimleri yönet',
'oauth.scope.budget:write.label': 'Manage budget', 'oauth.scope.notifications:write.description': 'Bildirimleri okundu işaretle ve yanıtla',
'oauth.scope.budget:write.description': 'oauth.scope.vacay:read.label': 'Tatil planlarını görüntüle',
'Create, update, and delete budget items', 'oauth.scope.vacay:read.description': 'Tatil planlama verilerini, kayıtları ve istatistikleri oku',
'oauth.scope.reservations:read.label': 'View reservations', 'oauth.scope.vacay:write.label': 'Tatil planlarını yönet',
'oauth.scope.reservations:read.description': 'oauth.scope.vacay:write.description': 'Tatil kayıtlarını, resmi tatilleri ve ekip planlarını oluştur ve yönet',
'Read reservations and accommodation details', 'oauth.scope.geo:read.label': 'Haritalar ve coğrafi kodlama',
'oauth.scope.reservations:write.label': 'Manage reservations', 'oauth.scope.geo:read.description': 'Konum ara, harita URL\'lerini çöz ve koordinatları ters coğrafi kodla',
'oauth.scope.reservations:write.description': 'oauth.scope.weather:read.label': 'Hava durumu tahminleri',
'Create, update, delete, and reorder reservations', 'oauth.scope.weather:read.description': 'Seyahat konumları ve tarihleri için hava durumu tahminlerini getir',
'oauth.scope.collab:read.label': 'View collaboration', 'oauth.scope.journey:read.label': 'Journey\'leri görüntüle',
'oauth.scope.collab:read.description': 'oauth.scope.journey:read.description': 'Journey\'leri, kayıtları ve katkıda bulunan listesini oku',
'Read collab notes, polls, and messages', 'oauth.scope.journey:write.label': 'Journey\'leri yönet',
'oauth.scope.collab:write.label': 'Manage collaboration', 'oauth.scope.journey:write.description': 'Journey\'leri ve kayıtlarını oluştur, güncelle ve sil',
'oauth.scope.collab:write.description': 'oauth.scope.journey:share.label': 'Journey bağlantılarını yönet',
'Create, update, and delete collab notes, polls, and messages', 'oauth.scope.journey:share.description': 'Journey\'ler için herkese açık paylaşım bağlantıları oluştur, güncelle ve iptal et',
'oauth.scope.notifications:read.label': 'View notifications',
'oauth.scope.notifications:read.description':
'Read in-app notifications and unread counts',
'oauth.scope.notifications:write.label': 'Manage notifications',
'oauth.scope.notifications:write.description':
'Mark notifications as read and respond to them',
'oauth.scope.vacay:read.label': 'View vacation plans',
'oauth.scope.vacay:read.description':
'Read vacation planning data, entries, and stats',
'oauth.scope.vacay:write.label': 'Manage vacation plans',
'oauth.scope.vacay:write.description':
'Create and manage vacation entries, holidays, and team plans',
'oauth.scope.geo:read.label': 'Maps & geocoding',
'oauth.scope.geo:read.description':
'Search locations, resolve map URLs, and reverse geocode coordinates',
'oauth.scope.weather:read.label': 'Weather forecasts',
'oauth.scope.weather:read.description':
'Fetch weather forecasts for trip locations and dates',
'oauth.scope.journey:read.label': 'View journeys',
'oauth.scope.journey:read.description':
'Read journeys, entries, and contributor list',
'oauth.scope.journey:write.label': 'Manage journeys',
'oauth.scope.journey:write.description':
'Create, update, and delete journeys and their entries',
'oauth.scope.journey:share.label': 'Manage journey links',
'oauth.scope.journey:share.description':
'Create, update, and revoke public share links for journeys',
}; };
export default oauth; export default oauth;
+85 -179
View File
@@ -1,186 +1,92 @@
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': '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ı)',
'One item per line. Format: Category, Name, Weight in g (optional), Bag (optional), checked/unchecked (optional)', 'packing.importPlaceholder': 'Hijyen, Diş fırçası\\nGiyim, Tişört, 200\\nBelgeler, Pasaport, , El bagajı\\nElektronik, Şarj cihazı, 50, Bavul, işaretli',
'packing.importPlaceholder': 'packing.importCsv': 'CSV/TXT Yükle',
'Hygiene, Toothbrush\nClothing, T-Shirts, 200\nDocuments, Passport, , Carry-on\nElectronics, Charger, 50, Suitcase, checked', 'packing.importAction': '{count} Öğeyi içe aktar',
'packing.importCsv': 'Load CSV/TXT', 'packing.importSuccess': '{count} öğe içe aktarıldı',
'packing.importAction': 'Import {count}', 'packing.importError': 'İçe aktarma başarısız oldu',
'packing.importSuccess': '{count} items imported', 'packing.importEmpty': 'İçe aktarılacak öğe yok',
'packing.importError': 'Import failed', 'packing.progress': '{total} öğeden {packed} paketlendi (%{percent})',
'packing.importEmpty': 'No items to import', 'packing.clearChecked': '{count} İşaretli öğeyi kaldır',
'packing.progress': '{packed} of {total} packed ({percent}%)', 'packing.clearCheckedShort': '{count} Kaldır',
'packing.clearChecked': 'Remove {count} checked', 'packing.suggestions': 'Öneriler',
'packing.clearCheckedShort': 'Remove {count}', 'packing.suggestionsTitle': 'Öneri Ekle',
'packing.suggestions': 'Suggestions', 'packing.allSuggested': 'Tüm öneriler eklendi',
'packing.suggestionsTitle': 'Add Suggestions', 'packing.allPacked': 'Hepsi paketlendi!',
'packing.allSuggested': 'All suggestions added', 'packing.addPlaceholder': 'Yeni öğe ekle...',
'packing.allPacked': 'All packed!', 'packing.categoryPlaceholder': 'Kategori...',
'packing.addPlaceholder': 'Add new item...', 'packing.filterAll': 'Tüm',
'packing.categoryPlaceholder': 'Category...', 'packing.filterOpen': 'Açık',
'packing.filterAll': 'All', 'packing.filterDone': 'Tamamlamak',
'packing.filterOpen': 'Open', 'packing.emptyTitle': 'Paket listesi boş',
'packing.filterDone': 'Done', 'packing.emptyHint': 'Öğe ekleyin veya önerileri kullanın',
'packing.emptyTitle': 'Packing list is empty', 'packing.emptyFiltered': 'Bu filtreye uyan öğe yok',
'packing.emptyHint': 'Add items or use the suggestions', 'packing.menuRename': 'Yeniden adlandır',
'packing.emptyFiltered': 'No items match this filter', 'packing.menuCheckAll': 'Tümünü İşaretle',
'packing.menuRename': 'Rename', 'packing.menuUncheckAll': 'Tüm işaretleri kaldır',
'packing.menuCheckAll': 'Check All', 'packing.menuDeleteCat': 'Kategoriyi Sil',
'packing.menuUncheckAll': 'Uncheck All', 'packing.noMembers': 'Seyahat üyesi yok',
'packing.menuDeleteCat': 'Delete Category', 'packing.addItem': 'Öğe ekle',
'packing.noMembers': 'No trip members', 'packing.addItemPlaceholder': 'Öğe adı...',
'packing.addItem': 'Add item', 'packing.addCategory': 'Kategori ekle',
'packing.addItemPlaceholder': 'Item name...', 'packing.newCategoryPlaceholder': 'Kategori adı (ör. Giyim)',
'packing.addCategory': 'Add category', 'packing.applyTemplate': 'Şablon uygula',
'packing.newCategoryPlaceholder': 'Category name (e.g. Clothing)', 'packing.template': 'Şablon',
'packing.applyTemplate': 'Apply template', 'packing.templateApplied': 'Şablondan {count} öğe eklendi',
'packing.template': 'Template', 'packing.templateError': 'Şablon uygulanamadı',
'packing.templateApplied': '{count} items added from template', 'packing.saveAsTemplate': 'Şablon olarak kaydet',
'packing.templateError': 'Failed to apply template', 'packing.templateName': 'Şablon adı',
'packing.saveAsTemplate': 'Save as template', 'packing.templateSaved': 'Paket listesi şablon olarak kaydedildi',
'packing.templateName': 'Template name', 'packing.bags': 'Çantalar',
'packing.templateSaved': 'Packing list saved as template', 'packing.noBag': 'Atanmamış',
'packing.bags': 'Bags', 'packing.totalWeight': 'Toplam ağırlık',
'packing.noBag': 'Unassigned', 'packing.bagName': 'Çanta adı...',
'packing.totalWeight': 'Total weight', 'packing.addBag': 'Çanta ekle',
'packing.bagName': 'Bag name...', 'packing.changeCategory': 'Kategoriyi Değiştir',
'packing.addBag': 'Add bag', 'packing.confirm.clearChecked': '{count} İşaretli öğeyi kaldırmak istediğinizden emin misiniz?',
'packing.changeCategory': 'Change Category', 'packing.confirm.deleteCat': '"{name}" kategorisini {count} öğeyle birlikte silmek istediğinizden emin misiniz?',
'packing.confirm.clearChecked': 'packing.defaultCategory': 'Diğer',
'Are you sure you want to remove {count} checked items?', 'packing.toast.saveError': 'Kaydedilemedi',
'packing.confirm.deleteCat': 'packing.toast.deleteError': 'Silinemedi',
'Are you sure you want to delete the category "{name}" with {count} items?', 'packing.toast.renameError': 'Yeniden adlandırılamadı',
'packing.defaultCategory': 'Other', 'packing.toast.addError': 'Eklenemedi',
'packing.toast.saveError': 'Failed to save',
'packing.toast.deleteError': 'Failed to delete',
'packing.toast.renameError': 'Failed to rename',
'packing.toast.addError': 'Failed to add',
'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;
+46 -52
View File
@@ -1,57 +1,51 @@
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': 'Uygulama genelinde kimlerin hangi işlemleri yapabileceğini belirleyin',
'perm.saved': 'Permission settings saved', 'perm.saved': 'İzin ayarları kaydedildi',
'perm.resetDefaults': 'Reset to defaults', 'perm.resetDefaults': 'Varsayılanlara sıfırla',
'perm.customized': 'customized', 'perm.customized': 'özelleştirildi',
'perm.level.admin': 'Admin only', 'perm.level.admin': 'Yalnızca yönetici',
'perm.level.tripOwner': 'Trip owner', 'perm.level.tripOwner': 'Seyahat sahibi',
'perm.level.tripMember': 'Trip members', 'perm.level.tripMember': 'Seyahat üyeleri',
'perm.level.everybody': 'Everyone', 'perm.level.everybody': 'Herkes',
'perm.cat.trip': 'Trip Management', 'perm.cat.trip': 'Seyahat Yönetimi',
'perm.cat.members': 'Member Management', 'perm.cat.members': 'Üye Yönetimi',
'perm.cat.files': 'Files', 'perm.cat.files': 'Dosyalar',
'perm.cat.content': 'Content & Schedule', 'perm.cat.content': 'İçerik ve Program',
'perm.cat.extras': 'Budget, Packing & Collaboration', 'perm.cat.extras': 'Bütçe, Paketleme ve İşbirliği',
'perm.action.trip_create': 'Create trips', 'perm.action.trip_create': 'Seyahat oluştur',
'perm.action.trip_edit': 'Edit trip details', 'perm.action.trip_edit': 'Seyahat ayrıntılarını düzenle',
'perm.action.trip_delete': 'Delete trips', 'perm.action.trip_delete': 'Seyahatleri sil',
'perm.action.trip_archive': 'Archive / unarchive trips', 'perm.action.trip_archive': 'Seyahatleri arşivle / geri al',
'perm.action.trip_cover_upload': 'Upload cover image', 'perm.action.trip_cover_upload': 'Kapak görseli yükle',
'perm.action.member_manage': 'Add / remove members', 'perm.action.member_manage': 'Üye ekle / kaldır',
'perm.action.file_upload': 'Upload files', 'perm.action.file_upload': 'Dosya yükle',
'perm.action.file_edit': 'Edit file metadata', 'perm.action.file_edit': 'Dosya meta verisini düzenle',
'perm.action.file_delete': 'Delete files', 'perm.action.file_delete': 'Dosyaları sil',
'perm.action.place_edit': 'Add / edit / delete places', 'perm.action.place_edit': 'Yer ekle / düzenle / sil',
'perm.action.day_edit': 'Edit days, notes & assignments', 'perm.action.day_edit': 'Günleri, notları ve atamaları düzenle',
'perm.action.reservation_edit': 'Manage reservations', 'perm.action.reservation_edit': 'Rezervasyonları yönet',
'perm.action.budget_edit': 'Manage budget', 'perm.action.budget_edit': 'Bütçeyi yönet',
'perm.action.packing_edit': 'Manage packing lists', 'perm.action.packing_edit': 'Paket listelerini yönet',
'perm.action.collab_edit': 'Collaboration (notes, polls, chat)', 'perm.action.collab_edit': 'İşbirliği (notlar, anketler, sohbet)',
'perm.action.share_manage': 'Manage share links', 'perm.action.share_manage': 'Paylaşım bağlantılarını yönet',
'perm.actionHint.trip_create': 'Who can create new trips', 'perm.actionHint.trip_create': 'Kimler yeni seyahat oluşturabilir',
'perm.actionHint.trip_edit': 'perm.actionHint.trip_edit': 'Kimler seyahat adını, tarihlerini, açıklamasını ve para birimini değiştirebilir',
'Who can change trip name, dates, description and currency', 'perm.actionHint.trip_delete': 'Kimler bir seyahati kalıcı olarak silebilir',
'perm.actionHint.trip_delete': 'Who can permanently delete a trip', 'perm.actionHint.trip_archive': 'Kimler seyahati arşivleyebilir veya geri alabilir',
'perm.actionHint.trip_archive': 'Who can archive or unarchive a trip', 'perm.actionHint.trip_cover_upload': 'Kimler kapak görseli yükleyebilir veya değiştirebilir',
'perm.actionHint.trip_cover_upload': 'perm.actionHint.member_manage': 'Kimler seyahat üyesi davet edebilir veya kaldırabilir',
'Who can upload or change the cover image', 'perm.actionHint.file_upload': 'Kimler seyahate dosya yükleyebilir',
'perm.actionHint.member_manage': 'Who can invite or remove trip members', 'perm.actionHint.file_edit': 'Kimler dosya açıklamalarını ve bağlantılarını düzenleyebilir',
'perm.actionHint.file_upload': 'Who can upload files to a trip', 'perm.actionHint.file_delete': 'Kimler dosyaları çöp kutusuna taşıyabilir veya kalıcı silebilir',
'perm.actionHint.file_edit': 'Who can edit file descriptions and links', 'perm.actionHint.place_edit': 'Kimler yer ekleyebilir, düzenleyebilir veya silebilir',
'perm.actionHint.file_delete': 'perm.actionHint.day_edit': 'Kimler günleri, gün notlarını ve yer atamalarını düzenleyebilir',
'Who can move files to trash or permanently delete them', 'perm.actionHint.reservation_edit': 'Kimler rezervasyon oluşturabilir, düzenleyebilir veya silebilir',
'perm.actionHint.place_edit': 'Who can add, edit or delete places', 'perm.actionHint.budget_edit': 'Kimler bütçe kalemleri oluşturabilir, düzenleyebilir veya silebilir',
'perm.actionHint.day_edit': 'perm.actionHint.packing_edit': 'Kimler paket öğelerini ve çantaları yönetebilir',
'Who can edit days, day notes and place assignments', 'perm.actionHint.collab_edit': 'Kimler not, anket oluşturabilir ve mesaj gönderebilir',
'perm.actionHint.reservation_edit': 'perm.actionHint.share_manage': 'Kimler genel paylaşım bağlantısı oluşturabilir veya silebilir',
'Who can create, edit or delete reservations',
'perm.actionHint.budget_edit': 'Who can create, edit or delete budget items',
'perm.actionHint.packing_edit': 'Who can manage packing items and bags',
'perm.actionHint.collab_edit':
'Who can create notes, polls and send messages',
'perm.actionHint.share_manage': 'Who can create or delete public share links',
}; };
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;
+77 -86
View File
@@ -1,91 +1,82 @@
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': 'Google Haritalarım, Google Earth veya GPS izleyici gibi araçlardan .gpx, .kml veya .kmz dosyalarını içe aktarın.',
'Import .gpx, .kml or .kmz files from tools like Google My Maps, Google Earth, or a GPS tracker.', 'places.importFileDropHere': 'Bir dosya seçmek için tıklayın veya buraya sürükleyip bırakın',
'places.importFileDropHere': 'Click to select a file or drag and drop here', 'places.importFileDropActive': 'Seçmek için dosyayı bırakın',
'places.importFileDropActive': 'Drop file to select', 'places.importFileUnsupported': 'Desteklenmeyen dosya türü. .gpx, .kml veya .kmz kullanın.',
'places.importFileUnsupported': 'places.importFileTooLarge': 'Dosya çok büyük. Maksimum yükleme boyutu {maxMb} MB\'tır.',
'Unsupported file type. Use .gpx, .kml or .kmz.', 'places.importFileError': 'İçe aktarma başarısız oldu',
'places.importFileTooLarge': 'places.importAllSkipped': 'Tüm yerler zaten yolculuktaydı.',
'File is too large. Maximum upload size is {maxMb} MB.', 'places.gpxImported': '{count} yer GPX\'ten içe Aktarıldı',
'places.importFileError': 'Import failed', 'places.gpxImportTypes': 'Neyi içe aktarmak istiyorsunuz?',
'places.importAllSkipped': 'All places were already in the trip.', 'places.gpxImportWaypoints': 'Ara noktalar',
'places.gpxImported': '{count} places imported from GPX', 'places.gpxImportRoutes': 'Rotalar',
'places.gpxImportTypes': 'What do you want to import?', 'places.gpxImportTracks': 'İzler (yol geometrisi ile)',
'places.gpxImportWaypoints': 'Waypoints', 'places.gpxImportNoneSelected': 'İçe aktarılacak en az bir tür seçin.',
'places.gpxImportRoutes': 'Routes', 'places.kmlImportTypes': 'Neyi içe aktarmak istiyorsunuz?',
'places.gpxImportTracks': 'Tracks (with path geometry)', 'places.kmlImportPoints': 'Noktalar (Yer İşaretleri)',
'places.gpxImportNoneSelected': 'Select at least one type to import.', 'places.kmlImportPaths': 'Yollar (LineString\'ler)',
'places.kmlImportTypes': 'What do you want to import?', 'places.kmlImportNoneSelected': 'İçe aktarılacak en az bir tür seçin.',
'places.kmlImportPoints': 'Points (Placemarks)', 'places.selectionCount': '{count} seçildi',
'places.kmlImportPaths': 'Paths (LineStrings)', 'places.deleteSelected': 'Seçileni sil',
'places.kmlImportNoneSelected': 'Select at least one type to import.', 'places.kmlKmzImported': 'KMZ/KML\'den {count} yer içe Aktarıldı',
'places.selectionCount': '{count} selected', 'places.urlResolved': 'URL\'den içe aktarılan Yer',
'places.deleteSelected': 'Delete selected', 'places.importList': 'Liste İçe Aktarma',
'places.kmlKmzImported': '{count} places imported from KMZ/KML', 'places.kmlKmzSummaryValues': 'Yer işaretleri: {total} • İçe aktarıldı: {created} • Atlandı: {skipped}',
'places.urlResolved': 'Place imported from URL', 'places.importGoogleList': 'Google Listesi',
'places.importList': 'List Import', 'places.importNaverList': 'Naver Listesi',
'places.kmlKmzSummaryValues': 'places.googleListHint': 'Tüm yerleri içe aktarmak için paylaşılan bir Google Haritalar listesi bağlantısını yapıştırın.',
'Placemarks: {total} • Imported: {created} • Skipped: {skipped}', 'places.googleListImported': '"{list}"ten {count} yer içe aktarıldı',
'places.importGoogleList': 'Google List', 'places.googleListError': 'Google Haritalar listesi içe aktarılamadı',
'places.importNaverList': 'Naver List', 'places.naverListHint': 'Tüm yerleri içe aktarmak için paylaşılan bir Naver Haritalar listesi bağlantısını yapıştırın.',
'places.googleListHint': 'places.naverListImported': '"{list}"ten {count} yer içe aktarıldı',
'Paste a shared Google Maps list link to import all places.', 'places.naverListError': 'Naver Haritalar listesi içe aktarılamadı',
'places.googleListImported': '{count} places imported from "{list}"', 'places.viewDetails': 'Ayrıntıları Görüntüle',
'places.googleListError': 'Failed to import Google Maps list', 'places.assignToDay': 'Hangi güne eklensin?',
'places.naverListHint': 'places.all': 'Tüm',
'Paste a shared Naver Maps list link to import all places.', 'places.unplanned': 'Planlanmamış',
'places.naverListImported': '{count} places imported from "{list}"', 'places.filterTracks': 'Parçalar',
'places.naverListError': 'Failed to import Naver Maps list', 'places.search': 'Yer ara...',
'places.viewDetails': 'View Details', 'places.allCategories': 'Tüm Kategoriler',
'places.assignToDay': 'Add to which day?', 'places.categoriesSelected': 'kategoriler',
'places.all': 'All', 'places.clearFilter': 'Filtreyi temizle',
'places.unplanned': 'Unplanned', 'places.count': '{count} yer',
'places.filterTracks': 'Tracks', 'places.countSingular': '1 yer',
'places.search': 'Search places...', 'places.allPlanned': 'Bütün yerler planlandı',
'places.allCategories': 'All Categories', 'places.noneFound': 'Hiçbir yer bulunamadı',
'places.categoriesSelected': 'categories', 'places.editPlace': 'Yeri Düzenle',
'places.clearFilter': 'Clear filter', 'places.formName': 'İsim',
'places.count': '{count} places', 'places.formNamePlaceholder': 'örneğin Eyfel Kulesi',
'places.countSingular': '1 place', 'places.formDescription': 'Tanım',
'places.allPlanned': 'All places are planned', 'places.formDescriptionPlaceholder': 'Kısa açıklama...',
'places.noneFound': 'No places found', 'places.formAddress': 'Adres',
'places.editPlace': 'Edit Place', 'places.formAddressPlaceholder': 'Sokak, Şehir, Ülke',
'places.formName': 'Name', 'places.formLat': 'Enlem (ör. 48,8566)',
'places.formNamePlaceholder': 'e.g. Eiffel Tower', 'places.formLng': 'Boylam (ör. 2,3522)',
'places.formDescription': 'Description', 'places.formCategory': 'Kategori',
'places.formDescriptionPlaceholder': 'Short description...', 'places.noCategory': 'Kategori Yok',
'places.formAddress': 'Address', 'places.categoryNamePlaceholder': 'Kategori adı',
'places.formAddressPlaceholder': 'Street, City, Country', 'places.formTime': 'Zaman',
'places.formLat': 'Latitude (e.g. 48.8566)', 'places.startTime': 'Başlangıç',
'places.formLng': 'Longitude (e.g. 2.3522)', 'places.endTime': 'Son',
'places.formCategory': 'Category', 'places.endTimeBeforeStart': 'Bitiş zamanı başlangıç zamanından önce',
'places.noCategory': 'No Category', 'places.timeCollision': 'Zaman şununla çakışıyor:',
'places.categoryNamePlaceholder': 'Category name', 'places.formWebsite': 'Web sitesi',
'places.formTime': 'Time', 'places.formNotes': 'Notlar',
'places.startTime': 'Start', 'places.formNotesPlaceholder': 'Kişisel notlar...',
'places.endTime': 'End', 'places.formReservation': 'Rezervasyon',
'places.endTimeBeforeStart': 'End time is before start time', 'places.reservationNotesPlaceholder': 'Rezervasyon notları, onay numarası...',
'places.timeCollision': 'Time overlap with:', 'places.mapsSearchPlaceholder': 'Yerleri ara...',
'places.formWebsite': 'Website', 'places.mapsSearchError': 'Yer arama başarısız oldu.',
'places.formNotes': 'Notes', 'places.loadingDetails': 'Yer ayrıntıları yükleniyor…',
'places.formNotesPlaceholder': 'Personal notes...', 'places.osmHint': '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.formReservation': 'Reservation', 'places.osmActive': '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.reservationNotesPlaceholder': 'places.categoryCreateError': 'Kategori oluşturulamadı',
'Reservation notes, confirmation number...', 'places.nameRequired': 'Lütfen bir ad girin',
'places.mapsSearchPlaceholder': 'Search places...', 'places.saveError': 'Kaydedilemedi',
'places.mapsSearchError': 'Place search failed.',
'places.loadingDetails': 'Loading place details…',
'places.osmHint':
'Using OpenStreetMap search (no photos, opening hours, or ratings). Add a Google API key in settings for full details.',
'places.osmActive':
'Search via OpenStreetMap (no photos, ratings or opening hours). Add a Google API key in Settings for enhanced data.',
'places.categoryCreateError': 'Failed to create category',
'places.nameRequired': 'Please enter a name',
'places.saveError': 'Failed to save',
}; };
export default places; export default places;
+61 -63
View File
@@ -1,68 +1,66 @@
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': 'örn. Merkez istasyondan 14:30\'da S3, iskele 7\'den feribot, öğle molası…',
'e.g. S3 at 14:30 from central station, ferry from pier 7, lunch break…', 'planner.totalCost': 'Toplam maliyet',
'planner.totalCost': 'Total cost', 'planner.searchPlaces': 'Yer ara…',
'planner.searchPlaces': 'Search places…', 'planner.allCategories': 'Tüm Kategoriler',
'planner.allCategories': 'All Categories', 'planner.noPlacesFound': 'Hiçbir yer bulunamadı',
'planner.noPlacesFound': 'No places found', 'planner.addFirstPlace': 'İlk yeri ekle',
'planner.addFirstPlace': 'Add first place', 'planner.noReservations': 'Rezervasyon yok',
'planner.noReservations': 'No reservations', 'planner.addFirstReservation': 'İlk rezervasyonu ekle',
'planner.addFirstReservation': 'Add first reservation', 'planner.new': 'Yeni',
'planner.new': 'New', 'planner.addToDay': '+ Gün',
'planner.addToDay': '+ Day', 'planner.calculating': 'Hesaplanıyor…',
'planner.calculating': 'Calculating…', 'planner.route': 'Rota',
'planner.route': 'Route', 'planner.optimize': 'Optimize et',
'planner.optimize': 'Optimize', 'planner.openGoogleMaps': 'Google Haritalar\'da aç',
'planner.openGoogleMaps': 'Open in Google Maps', 'planner.selectDayHint': 'Gün planını görmek için soldaki listeden bir gün seçin',
'planner.selectDayHint': 'planner.noPlacesForDay': 'Bu gün için henüz yer yok',
'Select a day from the left list to see the day plan', 'planner.addPlacesLink': 'Yer ekle →',
'planner.noPlacesForDay': 'No places for this day yet', 'planner.minTotal': 'dk. toplam',
'planner.addPlacesLink': 'Add places →', 'planner.noReservation': 'Rezervasyon yok',
'planner.minTotal': 'min. total', 'planner.removeFromDay': 'Günden kaldır',
'planner.noReservation': 'No reservation', 'planner.addToThisDay': 'Güne ekle',
'planner.removeFromDay': 'Remove from day', 'planner.overview': 'Genel bakış',
'planner.addToThisDay': 'Add to day', 'planner.noDays': 'Henüz gün yok',
'planner.overview': 'Overview', 'planner.editTripToAddDays': 'Gün eklemek için seyahati düzenleyin',
'planner.noDays': 'No days yet', 'planner.dayCount': '{n} Gün',
'planner.editTripToAddDays': 'Edit trip to add days', 'planner.clickToUnlock': 'Kilidi açmak için tıklayın',
'planner.dayCount': '{n} Days', 'planner.keepPosition': 'Rota optimizasyonunda konumu koru',
'planner.clickToUnlock': 'Click to unlock', 'planner.dayDetails': 'Gün ayrıntıları',
'planner.keepPosition': 'Keep position during route optimization', 'planner.dayN': '{n}. gün',
'planner.dayDetails': 'Day details',
'planner.dayN': 'Day {n}',
}; };
export default planner; export default planner;
+19 -20
View File
@@ -1,26 +1,25 @@
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': 'Bir hesap oluşturun ve hayalinizdeki gezileri planlamaya başlayın.',
'Hesap oluşturun ve hayalinizdeki gezileri planlamaya başlayın.', 'register.feature1': 'Sınırsız gezi planları',
'register.feature1': 'Unlimited trip plans', 'register.feature2': 'İnteraktif harita görünümü',
'register.feature2': 'Interactive map view', 'register.feature3': 'Yerleri ve kategorileri yönetin',
'register.feature3': 'Manage places and categories', 'register.feature4': 'Rezervasyonları takip edin',
'register.feature4': 'Track reservations', 'register.feature5': 'Paketleme listeleri oluşturun',
'register.feature5': 'Create packing lists', 'register.feature6': 'Fotoğrafları ve dosyaları saklayın',
'register.feature6': 'Store photos and files', 'register.createAccount': 'Hesap Oluşturmak',
'register.createAccount': 'Hesap oluştur', 'register.startPlanning': 'Seyahat planlamanıza başlayın',
'register.startPlanning': 'Start your trip planning', 'register.minChars': 'Min. 6 karakter',
'register.minChars': 'Min. 6 characters', 'register.confirmPassword': 'Şifreyi Onayla',
'register.confirmPassword': 'Confirm Password', 'register.repeatPassword': 'Şifreyi tekrar girin',
'register.repeatPassword': 'Repeat password', 'register.registering': 'Kaydediliyor...',
'register.registering': 'Registering...', 'register.register': 'Kayıt olmak',
'register.register': 'Kayıt ol', 'register.hasAccount': 'Zaten bir hesabınız var mı?',
'register.hasAccount': 'Zaten hesabınız var mı?', 'register.signIn': 'Oturum Aç',
'register.signIn': 'Giriş yap',
}; };
export default register; export default register;
+108 -113
View File
@@ -1,118 +1,113 @@
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': 'Uçuşlar, oteller ve daha fazlası için rezervasyon ekleyin',
'reservations.add': 'Add Reservation', 'reservations.add': 'Rezervasyon Ekle',
'reservations.addManual': 'Manual Booking', 'reservations.addManual': 'Manuel Rezervasyon',
'reservations.placeHint': 'reservations.placeHint': 'İpucu: Rezervasyonları doğrudan günlük planınıza bağlayacak bir yerden oluşturmak en iyisidir.',
'Tip: Reservations are best created directly from a place to link them with your day plan.', 'reservations.confirmed': 'Onaylandı',
'reservations.confirmed': 'Confirmed', 'reservations.pending': 'Askıda olması',
'reservations.pending': 'Pending', 'reservations.summary': '{confirmed} onaylandı, {pending} beklemede',
'reservations.summary': '{confirmed} confirmed, {pending} pending', 'reservations.fromPlan': 'Plandan',
'reservations.fromPlan': 'From Plan', 'reservations.showFiles': 'Dosyaları Göster',
'reservations.showFiles': 'Show Files', 'reservations.editTitle': 'Rezervasyonu Düzenle',
'reservations.editTitle': 'Edit Reservation', 'reservations.status': 'Durum',
'reservations.status': 'Status', 'reservations.datetime': 'Tarih ve Saat',
'reservations.datetime': 'Date & Time', 'reservations.startTime': 'Başlangıç zamanı',
'reservations.startTime': 'Start time', 'reservations.endTime': 'Bitiş zamanı',
'reservations.endTime': 'End time', 'reservations.date': 'Tarih',
'reservations.date': 'Date', 'reservations.time': 'Zaman',
'reservations.time': 'Time', 'reservations.timeAlt': 'Saat (alternatif, örneğin 19:30)',
'reservations.timeAlt': 'Time (alternative, e.g. 19:30)', 'reservations.notes': 'Notlar',
'reservations.notes': 'Notes', 'reservations.notesPlaceholder': 'Ek notlar...',
'reservations.notesPlaceholder': 'Additional notes...', 'reservations.meta.airline': 'Havayolu',
'reservations.meta.airline': 'Airline', 'reservations.meta.flightNumber': 'Uçuş No.',
'reservations.meta.flightNumber': 'Flight No.', 'reservations.meta.from': 'İtibaren',
'reservations.meta.from': 'From', 'reservations.meta.to': 'İle',
'reservations.meta.to': 'To', 'reservations.needsReview': 'Gözden geçirmek',
'reservations.needsReview': 'Review', 'reservations.needsReviewHint': 'Havaalanı otomatik olarak eşleştirilemedi; lütfen konumu onaylayın.',
'reservations.needsReviewHint': 'reservations.searchLocation': 'İstasyonu, limanı, adresi arayın…',
'Airport could not be matched automatically — please confirm the location.', 'reservations.meta.trainNumber': 'Tren No.',
'reservations.searchLocation': 'Search station, port, address…', 'reservations.meta.platform': 'Platformu',
'reservations.meta.trainNumber': 'Train No.', 'reservations.meta.seat': 'Koltuk',
'reservations.meta.platform': 'Platform', 'reservations.meta.checkIn': 'Giriş',
'reservations.meta.seat': 'Seat', 'reservations.meta.checkInUntil': 'Giriş tarihi şu tarihe kadar:',
'reservations.meta.checkIn': 'Check-in', 'reservations.meta.checkOut': 'Çıkış yapmak',
'reservations.meta.checkInUntil': 'Check-in until', 'reservations.meta.linkAccommodation': 'Konaklama',
'reservations.meta.checkOut': 'Check-out', 'reservations.meta.pickAccommodation': 'Konaklama bağlantısı',
'reservations.meta.linkAccommodation': 'Accommodation', 'reservations.meta.noAccommodation': 'Hiçbiri',
'reservations.meta.pickAccommodation': 'Link to accommodation', 'reservations.meta.hotelPlace': 'Konaklama',
'reservations.meta.noAccommodation': 'None', 'reservations.meta.pickHotel': 'Konaklama seçin',
'reservations.meta.hotelPlace': 'Accommodation', 'reservations.meta.fromDay': 'İtibaren',
'reservations.meta.pickHotel': 'Select accommodation', 'reservations.meta.toDay': 'İle',
'reservations.meta.fromDay': 'From', 'reservations.meta.selectDay': 'Günü seçin',
'reservations.meta.toDay': 'To', 'reservations.type.flight': 'Uçuş',
'reservations.meta.selectDay': 'Select day', 'reservations.type.hotel': 'Konaklama',
'reservations.type.flight': 'Flight', 'reservations.type.restaurant': 'Restoran',
'reservations.type.hotel': 'Accommodation', 'reservations.type.train': 'Tren',
'reservations.type.restaurant': 'Restaurant', 'reservations.type.car': 'Araba',
'reservations.type.train': 'Train', 'reservations.type.cruise': 'Dolaşmak',
'reservations.type.car': 'Car', 'reservations.type.event': 'Etkinlik',
'reservations.type.cruise': 'Cruise', 'reservations.type.tour': 'Tur',
'reservations.type.event': 'Event', 'reservations.type.other': 'Diğer',
'reservations.type.tour': 'Tour', 'reservations.confirm.delete': '"{name}" rezervasyonunu silmek istediğinizden emin misiniz?',
'reservations.type.other': 'Other', 'reservations.confirm.deleteTitle': 'Rezervasyon silinsin mi?',
'reservations.confirm.delete': 'reservations.confirm.deleteBody': '"{name}" kalıcı olarak silinecek.',
'Are you sure you want to delete the reservation "{name}"?', 'reservations.toast.updated': 'Rezervasyon güncellendi',
'reservations.confirm.deleteTitle': 'Delete booking?', 'reservations.toast.removed': 'Rezervasyon silindi',
'reservations.confirm.deleteBody': '"{name}" will be permanently deleted.', 'reservations.toast.fileUploaded': 'Dosya yüklendi',
'reservations.toast.updated': 'Reservation updated', 'reservations.toast.uploadError': 'Yükleme başarısız oldu',
'reservations.toast.removed': 'Reservation deleted', 'reservations.newTitle': 'Yeni Rezervasyon',
'reservations.toast.fileUploaded': 'File uploaded', 'reservations.bookingType': 'Rezervasyon Türü',
'reservations.toast.uploadError': 'Failed to upload', 'reservations.titleLabel': 'Başlık',
'reservations.newTitle': 'New Reservation', 'reservations.titlePlaceholder': 'örneğin Lufthansa LH123, Otel Adlon, ...',
'reservations.bookingType': 'Booking Type', 'reservations.locationAddress': 'Konum / Adres',
'reservations.titleLabel': 'Title', 'reservations.locationPlaceholder': 'Adres, Havaalanı, Otel...',
'reservations.titlePlaceholder': 'e.g. Lufthansa LH123, Hotel Adlon, ...', 'reservations.confirmationCode': 'Rezervasyon Kodu',
'reservations.locationAddress': 'Location / Address', 'reservations.confirmationPlaceholder': 'örn. ABC12345',
'reservations.locationPlaceholder': 'Address, Airport, Hotel...', 'reservations.day': 'Gün',
'reservations.confirmationCode': 'Booking Code', 'reservations.noDay': 'Gün Yok',
'reservations.confirmationPlaceholder': 'e.g. ABC12345', 'reservations.place': 'Yer',
'reservations.day': 'Day', 'reservations.noPlace': 'Yer Yok',
'reservations.noDay': 'No Day', 'reservations.pendingSave': 'kaydedilecek…',
'reservations.place': 'Place', 'reservations.uploading': 'Yükleniyor...',
'reservations.noPlace': 'No Place', 'reservations.attachFile': 'Dosya ekle',
'reservations.pendingSave': 'will be saved…', 'reservations.linkExisting': 'Mevcut dosyayı bağla',
'reservations.uploading': 'Uploading...', 'reservations.toast.saveError': 'Kaydedilemedi',
'reservations.attachFile': 'Attach file', 'reservations.toast.updateError': 'Güncelleme başarısız oldu',
'reservations.linkExisting': 'Link existing file', 'reservations.toast.deleteError': 'Silinemedi',
'reservations.toast.saveError': 'Failed to save', 'reservations.confirm.remove': '"{name}" için rezervasyon kaldırılsın mı?',
'reservations.toast.updateError': 'Failed to update', 'reservations.linkAssignment': 'Gün atamasına bağla',
'reservations.toast.deleteError': 'Failed to delete', 'reservations.pickAssignment': 'Planınızdan bir atama seçin...',
'reservations.confirm.remove': 'Remove reservation for "{name}"?', 'reservations.noAssignment': 'Bağlantı yok (bağımsız)',
'reservations.linkAssignment': 'Link to day assignment', 'reservations.price': 'Fiyat',
'reservations.pickAssignment': 'Select an assignment from your plan...', 'reservations.budgetCategory': 'Bütçe kategorisi',
'reservations.noAssignment': 'No link (standalone)', 'reservations.budgetCategoryPlaceholder': 'örn. Ulaşım, Konaklama',
'reservations.price': 'Price', 'reservations.budgetCategoryAuto': 'Otomatik (rezervasyon türünden)',
'reservations.budgetCategory': 'Budget category', 'reservations.budgetHint': 'Kaydederken otomatik olarak bir bütçe kaydı oluşturulur.',
'reservations.budgetCategoryPlaceholder': 'e.g. Transport, Accommodation', 'reservations.departureDate': 'Kalkış',
'reservations.budgetCategoryAuto': 'Auto (from booking type)', 'reservations.arrivalDate': 'Varış',
'reservations.budgetHint': 'reservations.departureTime': 'Kalkış saati',
'A budget entry will be created automatically when saving.', 'reservations.arrivalTime': 'Varış saati',
'reservations.departureDate': 'Departure', 'reservations.pickupDate': 'Alış',
'reservations.arrivalDate': 'Arrival', 'reservations.returnDate': 'İade',
'reservations.departureTime': 'Dep. time', 'reservations.pickupTime': 'Alış saati',
'reservations.arrivalTime': 'Arr. time', 'reservations.returnTime': 'İade saati',
'reservations.pickupDate': 'Pickup', 'reservations.endDate': 'Bitiş tarihi',
'reservations.returnDate': 'Return', 'reservations.meta.departureTimezone': 'Kalkış SD',
'reservations.pickupTime': 'Pickup time', 'reservations.meta.arrivalTimezone': 'Varış SD',
'reservations.returnTime': 'Return time', 'reservations.span.departure': 'Kalkış',
'reservations.endDate': 'End date', 'reservations.span.arrival': 'Varış',
'reservations.meta.departureTimezone': 'Dep. TZ', 'reservations.span.inTransit': 'Yolda',
'reservations.meta.arrivalTimezone': 'Arr. TZ', 'reservations.span.pickup': 'Alış',
'reservations.span.departure': 'Departure', 'reservations.span.return': 'İade',
'reservations.span.arrival': 'Arrival', 'reservations.span.active': 'Aktif',
'reservations.span.inTransit': 'In transit', 'reservations.span.start': 'Başlangıç',
'reservations.span.pickup': 'Pickup', 'reservations.span.end': 'Son',
'reservations.span.return': 'Return', 'reservations.span.ongoing': 'Devam ediyor',
'reservations.span.active': 'Active', 'reservations.validation.endBeforeStart': 'Bitiş tarihi/saati başlangıçtan sonra olmalı',
'reservations.span.start': 'Start', 'reservations.addBooking': 'Rezervasyon ekle',
'reservations.span.end': 'End',
'reservations.span.ongoing': 'Ongoing',
'reservations.validation.endBeforeStart':
'End date/time must be after start date/time',
'reservations.addBooking': 'Add booking',
}; };
export default reservations; export default reservations;
+216 -256
View File
@@ -10,284 +10,244 @@ 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': 'Seyahat planlayıcı ve Journey haritalarını etkiler. Atlas her zaman Leaflet kullanır.',
'Affects Trip Planner and Journey maps. Atlas always uses Leaflet.', 'settings.mapLeafletSubtitle': 'Klasik 2D, herhangi bir raster kutucuk',
'settings.mapLeafletSubtitle': 'Classic 2D, any raster tiles', 'settings.mapMapboxSubtitle': 'Vektör kutucuklar, 3D binalar ve arazi',
'settings.mapMapboxSubtitle': 'Vector tiles, 3D buildings & terrain', 'settings.mapExperimental': 'Deneysel',
'settings.mapExperimental': 'Experimental', 'settings.mapMapboxToken': 'Mapbox Erişim Anahtarı',
'settings.mapMapboxToken': 'Mapbox Access Token', 'settings.mapMapboxTokenHint': 'Genel anahtar (pk.*) kaynağı:',
'settings.mapMapboxTokenHint': 'Public token (pk.*) from', 'settings.mapMapboxTokenLink': 'Mapbox.com → Jetonlara erişim',
'settings.mapMapboxTokenLink': 'mapbox.com → Access tokens', 'settings.mapStyle': 'Harita Stili',
'settings.mapStyle': 'Map Style', 'settings.mapStylePlaceholder': 'Bir Mapbox stili seçin',
'settings.mapStylePlaceholder': 'Select a Mapbox style', 'settings.mapStyleHint': 'Ön ayar veya kendi mapbox://styles/KULLANICI/ID adresiniz',
'settings.mapStyleHint': 'Preset or your own mapbox://styles/USER/ID URL', 'settings.map3dBuildings': '3D Binalar ve Arazi',
'settings.map3dBuildings': '3D Buildings & Terrain', 'settings.map3dHint': 'Eğim + gerçek 3D bina çıkıntıları — uydu dahil her stilde çalışır.',
'settings.map3dHint': 'settings.mapHighQuality': 'Yüksek Kalite Modu',
'Pitch + real 3D building extrusions — works on every style, including satellite.', 'settings.mapHighQualityHint': 'Keskin kenarlar ve gerçekçi dünya görünümü için antialiasing + küre projeksiyonu.',
'settings.mapHighQuality': 'High Quality Mode', 'settings.mapHighQualityWarning': 'Düşük donanımlı cihazlarda performansı etkileyebilir.',
'settings.mapHighQualityHint': 'settings.mapTipLabel': 'İpucu:',
'Antialiasing + globe projection for sharper edges and a realistic world view.', 'settings.mapTip': '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.mapHighQualityWarning': 'settings.latitude': 'Enlem',
'May impact performance on lower-end devices.', 'settings.longitude': 'Boylam',
'settings.mapTipLabel': 'Tip:', 'settings.saveMap': 'Haritayı Kaydet',
'settings.mapTip': 'settings.apiKeys': 'API Anahtarları',
'right-click and drag to rotate/pitch the map. Middle-click to add a place (right-click is reserved for rotation).', 'settings.mapsKey': 'Google Maps API Anahtarı',
'settings.latitude': 'Latitude', 'settings.mapsKeyHint': 'Yer araması için. Places API (New) gerekir. console.cloud.google.com',
'settings.longitude': 'Longitude', 'settings.weatherKey': 'OpenWeatherMap API Anahtarı',
'settings.saveMap': 'Save Map', 'settings.weatherKeyHint': 'Hava verisi için. Ücretsiz: openweathermap.org/api',
'settings.apiKeys': 'API Keys', 'settings.keyPlaceholder': 'Anahtarı girin...',
'settings.mapsKey': 'Google Maps API Key', 'settings.configured': 'Yapılandırıldı',
'settings.mapsKeyHint': 'settings.saveKeys': 'Anahtarları Kaydet',
'For place search. Requires Places API (New). Get at console.cloud.google.com',
'settings.weatherKey': 'OpenWeatherMap API Key',
'settings.weatherKeyHint': 'For weather data. Free at openweathermap.org/api',
'settings.keyPlaceholder': 'Enter key...',
'settings.configured': 'Configured',
'settings.saveKeys': 'Save Keys',
'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': 'Haritada istasyon / havalimanı adlarını göster. Kapalıyken yalnızca simge görünür.',
'Show station / airport names on the map. When off, only the icon is shown.', 'settings.blurBookingCodes': 'Rezervasyon Kodlarını Bulanıklaştır',
'settings.blurBookingCodes': 'Blur Booking Codes',
'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': 'Bildirim kanalı yapılandırılmadı. Yöneticiden e-posta veya webhook kurmasını isteyin.',
'No notification channels are configured. Ask an admin to set up email or webhook notifications.', 'settings.webhookUrl.label': 'Web kancası URL\'si',
'settings.webhookUrl.label': 'Webhook URL',
'settings.webhookUrl.placeholder': 'https://discord.com/api/webhooks/...', 'settings.webhookUrl.placeholder': 'https://discord.com/api/webhooks/...',
'settings.webhookUrl.hint': 'settings.webhookUrl.hint': 'Bildirim almak için Discord, Slack veya özel webhook URL\'nizi girin.',
'Enter your Discord, Slack, or custom webhook URL to receive notifications.', 'settings.webhookUrl.saved': 'Webhook URL kaydedildi',
'settings.webhookUrl.saved': 'Webhook URL saved', 'settings.webhookUrl.test': 'Dene',
'settings.webhookUrl.test': 'Test', 'settings.webhookUrl.testSuccess': 'Test webhook başarıyla gönderildi',
'settings.webhookUrl.testSuccess': 'Test webhook sent successfully', 'settings.webhookUrl.testFailed': 'Test webhook başarısız',
'settings.webhookUrl.testFailed': 'Test webhook failed', 'settings.ntfyUrl.topicLabel': 'Ntfy Konusu',
'settings.ntfyUrl.topicLabel': 'Ntfy Topic', 'settings.ntfyUrl.topicPlaceholder': 'benim-trek-uyarilari',
'settings.ntfyUrl.topicPlaceholder': 'my-trek-alerts', 'settings.ntfyUrl.serverLabel': 'Ntfy sunucu URL\'si (isteğe bağlı)',
'settings.ntfyUrl.serverLabel': 'Ntfy Server URL (optional)',
'settings.ntfyUrl.serverPlaceholder': 'https://ntfy.sh', 'settings.ntfyUrl.serverPlaceholder': 'https://ntfy.sh',
'settings.ntfyUrl.hint': 'settings.ntfyUrl.hint': 'Anlık bildirim için ntfy konusunu girin. Sunucuyu boş bırakırsanız yöneticinin varsayılanı kullanılır.',
'Enter your ntfy topic to receive push notifications. Leave server blank to use the default configured by your admin.', 'settings.ntfyUrl.tokenLabel': 'Erişim anahtarı (isteğe bağlı)',
'settings.ntfyUrl.tokenLabel': 'Access Token (optional)', 'settings.ntfyUrl.tokenHint': 'Parola korumalı konular için gerekli.',
'settings.ntfyUrl.tokenHint': 'Required for password-protected topics.', 'settings.ntfyUrl.saved': 'Ntfy ayarları kaydedildi',
'settings.ntfyUrl.saved': 'Ntfy settings saved', 'settings.ntfyUrl.test': 'Dene',
'settings.ntfyUrl.test': 'Test', 'settings.ntfyUrl.testSuccess': 'Test ntfy bildirimi gönderildi',
'settings.ntfyUrl.testSuccess': 'Test ntfy notification sent successfully', 'settings.ntfyUrl.testFailed': 'Test ntfy bildirimi başarısız',
'settings.ntfyUrl.testFailed': 'Test ntfy notification failed', 'settings.ntfyUrl.tokenCleared': 'Erişim anahtarı temizlendi',
'settings.ntfyUrl.tokenCleared': 'Access token cleared', 'settings.notificationsDisabled': 'Bildirimler yapılandırılmadı. Yöneticiden e-posta veya webhook açmasını isteyin.',
'settings.notificationsDisabled': 'settings.notificationsActive': 'Etkin kanal',
'Notifications are not configured. Ask an admin to enable email or webhook notifications.', 'settings.notificationsManagedByAdmin': 'Bildirim olayları yöneticiniz tarafından yapılandırılır.',
'settings.notificationsActive': 'Active channel', 'settings.on': 'Açık',
'settings.notificationsManagedByAdmin': 'settings.off': 'Kapalı',
'Notification events are configured by your administrator.', 'settings.mcp.title': 'MCP Yapılandırması',
'settings.on': 'On', 'settings.mcp.endpoint': 'MCP Uç Noktası',
'settings.off': 'Off', 'settings.mcp.clientConfig': 'İstemci Yapılandırması',
'settings.mcp.title': 'MCP Configuration', 'settings.mcp.clientConfigHint': '<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.endpoint': 'MCP Endpoint', 'settings.mcp.clientConfigHintOAuth': '<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.clientConfig': 'Client Configuration', 'settings.mcp.copy': 'Kopyala',
'settings.mcp.clientConfigHint': 'settings.mcp.copied': 'Kopyalandı!',
'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).', 'settings.mcp.apiTokens': 'API Belirteçleri',
'settings.mcp.clientConfigHintOAuth': 'settings.mcp.createToken': 'Yeni Jeton Oluştur',
'Replace <your_client_id> and <your_client_secret> with the credentials shown in the OAuth 2.1 client you created above. mcp-remote will open your browser to complete the authorization the first time you connect. The path to npx may need to be adjusted for your system (e.g. C:PROGRA~1\nodejs\npx.cmd on Windows).', 'settings.mcp.noTokens': 'Henüz jeton yok. MCP istemcilerini bağlamak için bir tane oluşturun.',
'settings.mcp.copy': 'Copy', 'settings.mcp.tokenCreatedAt': 'Oluşturuldu',
'settings.mcp.copied': 'Copied!', 'settings.mcp.tokenUsedAt': 'Kullanılmış',
'settings.mcp.apiTokens': 'API Tokens', 'settings.mcp.deleteTokenTitle': 'Jetonu Sil',
'settings.mcp.createToken': 'Create New Token', 'settings.mcp.deleteTokenMessage': 'Bu jeton hemen çalışmayı durduracak. Bunu kullanan herhangi bir MCP istemcisi erişimi kaybedecektir.',
'settings.mcp.noTokens': 'No tokens yet. Create one to connect MCP clients.', 'settings.mcp.modal.createTitle': 'API Jetonu Oluştur',
'settings.mcp.tokenCreatedAt': 'Created', 'settings.mcp.modal.tokenName': 'Jeton Adı',
'settings.mcp.tokenUsedAt': 'Used', 'settings.mcp.modal.tokenNamePlaceholder': 'örneğin Claude Masaüstü, İş dizüstü bilgisayarı',
'settings.mcp.deleteTokenTitle': 'Delete Token', 'settings.mcp.modal.creating': 'Oluşturuluyor…',
'settings.mcp.deleteTokenMessage': 'settings.mcp.modal.create': 'Jeton Oluştur',
'This token will stop working immediately. Any MCP client using it will lose access.', 'settings.mcp.modal.createdTitle': 'Jeton Oluşturuldu',
'settings.mcp.modal.createTitle': 'Create API Token', 'settings.mcp.modal.createdWarning': 'Bu jeton yalnızca bir kez gösterilecektir. Şimdi kopyalayıp saklayın; kurtarılamaz.',
'settings.mcp.modal.tokenName': 'Token Name', 'settings.mcp.modal.done': 'Tamamlamak',
'settings.mcp.modal.tokenNamePlaceholder': 'e.g. Claude Desktop, Work laptop', 'settings.mcp.toast.created': 'Jeton oluşturuldu',
'settings.mcp.modal.creating': 'Creating…', 'settings.mcp.toast.createError': 'Jeton oluşturulamadı',
'settings.mcp.modal.create': 'Create Token', 'settings.mcp.toast.deleted': 'Jeton silindi',
'settings.mcp.modal.createdTitle': 'Token Created', 'settings.mcp.toast.deleteError': 'Jeton silinemedi',
'settings.mcp.modal.createdWarning': 'settings.mcp.apiTokensDeprecated': '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.',
'This token will only be shown once. Copy and store it now — it cannot be recovered.', 'settings.oauth.clients': 'OAuth 2.1 İstemcileri',
'settings.mcp.modal.done': 'Done', 'settings.oauth.clientsHint': 'Üçü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.mcp.toast.created': 'Token created', 'settings.oauth.createClient': 'Yeni Müşteri',
'settings.mcp.toast.createError': 'Failed to create token', 'settings.oauth.noClients': 'Kayıtlı OAuth istemcisi yok.',
'settings.mcp.toast.deleted': 'Token deleted', 'settings.oauth.clientId': 'Müşteri Kimliği',
'settings.mcp.toast.deleteError': 'Failed to delete token', 'settings.oauth.clientSecret': 'Müşteri Sırrı',
'settings.mcp.apiTokensDeprecated': 'settings.oauth.deleteClient': 'İstemciyi Sil',
'API Tokens are deprecated and will be removed in a future release. Please use OAuth 2.1 Clients instead.', 'settings.oauth.deleteClientMessage': '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.clients': 'OAuth 2.1 Clients', 'settings.oauth.rotateSecret': 'Gizli Anahtarı Döndür',
'settings.oauth.clientsHint': 'settings.oauth.rotateSecretMessage': '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.',
'Register OAuth 2.1 clients to let third-party MCP applications (Claude Web, Cursor, etc.) connect without static tokens.', 'settings.oauth.rotateSecretConfirm': 'Döndür',
'settings.oauth.createClient': 'New Client', 'settings.oauth.rotateSecretConfirming': 'Dönüyor…',
'settings.oauth.noClients': 'No OAuth clients registered.', 'settings.oauth.rotateSecretDoneTitle': 'Yeni Gizli Oluşturuldu',
'settings.oauth.clientId': 'Client ID', 'settings.oauth.rotateSecretDoneWarning': '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.clientSecret': 'Client Secret', 'settings.oauth.activeSessions': 'Aktif OAuth Oturumları',
'settings.oauth.deleteClient': 'Delete Client', 'settings.oauth.sessionScopes': 'Kapsamlar',
'settings.oauth.deleteClientMessage': 'settings.oauth.sessionExpires': 'Süresi doluyor',
'This client and all active sessions will be permanently removed. Any application using it will lose access immediately.', 'settings.oauth.revoke': 'Geri çekmek',
'settings.oauth.rotateSecret': 'Rotate Secret', 'settings.oauth.revokeSession': 'Oturumu İptal Et',
'settings.oauth.rotateSecretMessage': 'settings.oauth.revokeSessionMessage': 'Bu, bu OAuth oturumuna erişimi anında iptal edecektir.',
'A new client secret will be generated and all existing sessions will be invalidated immediately. Update your application before closing this dialog.', 'settings.oauth.modal.createTitle': 'OAuth İstemcisini Kaydedin',
'settings.oauth.rotateSecretConfirm': 'Rotate', 'settings.oauth.modal.presets': 'Hızlı ön ayarlar',
'settings.oauth.rotateSecretConfirming': 'Rotating…', 'settings.oauth.modal.clientName': 'Uygulama Adı',
'settings.oauth.rotateSecretDoneTitle': 'New Secret Generated', 'settings.oauth.modal.clientNamePlaceholder': 'örneğin Claude Web, MCP Uygulamam',
'settings.oauth.rotateSecretDoneWarning': 'settings.oauth.modal.redirectUris': 'URI\'leri Yönlendir',
'This secret is shown only once. Copy it now and update your application — all previous sessions have been invalidated.', 'settings.oauth.modal.redirectUrisPlaceholder': 'https://uygulamaniz.com/callback\\nhttps://uygulamaniz.com/auth',
'settings.oauth.activeSessions': 'Active OAuth Sessions', 'settings.oauth.modal.redirectUrisHint': 'Satır başına bir URI. HTTPS gerekli (yerel ana bilgisayar hariç). Tam eşleşme uygulandı.',
'settings.oauth.sessionScopes': 'Scopes', 'settings.oauth.modal.scopes': 'İzin Verilen Kapsamlar',
'settings.oauth.sessionExpires': 'Expires', 'settings.oauth.modal.scopesHint': '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.revoke': 'Revoke', 'settings.oauth.modal.selectAll': 'Tümünü seç',
'settings.oauth.revokeSession': 'Revoke Session', 'settings.oauth.modal.deselectAll': 'Tümünün seçimini kaldır',
'settings.oauth.revokeSessionMessage': 'settings.oauth.modal.creating': 'Kaydediliyor…',
'This will immediately revoke access for this OAuth session.', 'settings.oauth.modal.create': 'Müşteriyi Kaydet',
'settings.oauth.modal.createTitle': 'Register OAuth Client', 'settings.oauth.modal.createdTitle': 'Müşteri Kayıtlı',
'settings.oauth.modal.presets': 'Quick presets', 'settings.oauth.modal.createdWarning': 'İstemci sırrı yalnızca bir kez gösterilir. Şimdi kopyalayın; kurtarılamaz.',
'settings.oauth.modal.clientName': 'Application Name', 'settings.oauth.toast.createError': 'OAuth istemcisi kaydedilemedi',
'settings.oauth.modal.clientNamePlaceholder': 'e.g. Claude Web, My MCP App', 'settings.oauth.toast.deleted': 'OAuth istemcisi silindi',
'settings.oauth.modal.redirectUris': 'Redirect URIs', 'settings.oauth.toast.deleteError': 'OAuth istemcisi silinemedi',
'settings.oauth.modal.redirectUrisPlaceholder': 'settings.oauth.toast.revoked': 'Oturum iptal edildi',
'https://your-app.com/callback\nhttps://your-app.com/auth', 'settings.oauth.toast.revokeError': 'Oturum iptal edilemedi',
'settings.oauth.modal.redirectUrisHint': 'settings.oauth.toast.rotateError': 'İstemci sırrı döndürülemedi',
'One URI per line. HTTPS required (localhost exempt). Exact match enforced.',
'settings.oauth.modal.scopes': 'Allowed Scopes',
'settings.oauth.modal.scopesHint':
'list_trips and get_trip_summary are always available — no scope required. They let the AI discover trip IDs needed to use any other tool.',
'settings.oauth.modal.selectAll': 'Select all',
'settings.oauth.modal.deselectAll': 'Deselect all',
'settings.oauth.modal.creating': 'Registering…',
'settings.oauth.modal.create': 'Register Client',
'settings.oauth.modal.createdTitle': 'Client Registered',
'settings.oauth.modal.createdWarning':
'The client secret is shown only once. Copy it now — it cannot be recovered.',
'settings.oauth.toast.createError': 'Failed to register OAuth client',
'settings.oauth.toast.deleted': 'OAuth client deleted',
'settings.oauth.toast.deleteError': 'Failed to delete OAuth client',
'settings.oauth.toast.revoked': 'Session revoked',
'settings.oauth.toast.revokeError': 'Failed to revoke session',
'settings.oauth.toast.rotateError': 'Failed to rotate client secret',
'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 Hayalperest',
'Business Class Dreamer', 'settings.about.supporter.tier.budgetTraveller': 'Bütçe Gezgini',
'settings.about.supporter.tier.budgetTraveller': 'Budget Traveller', 'settings.about.supporter.tier.hostelBunkmate': 'Hostel Yatakhane Arkadaşı',
'settings.about.supporter.tier.hostelBunkmate': 'Hostel Bunkmate', 'settings.about.description': '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.description': 'settings.about.madeWith': 'İle yapıldı',
'TREK is a self-hosted travel planner that helps you organize your trips from the first idea to the last memory. Day planning, budget, packing lists, photos and much more — all in one place, on your own server.', 'settings.about.madeBy': 'Maurice ve büyüyen bir açık kaynak topluluğu tarafından.',
'settings.about.madeWith': 'Made with',
'settings.about.madeBy': 'by Maurice and a growing open-source community.',
'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': 'Şifre büyük harf, küçük harf, sayı ve özel karakter içermelidir',
'Password must contain uppercase, lowercase, a number, and a special character', 'settings.passwordChanged': 'Şifre başarıyla değiştirildi',
'settings.passwordChanged': 'Password changed successfully', 'settings.mustChangePassword': 'Devam etmeden önce şifrenizi değiştirmelisiniz. Lütfen aşağıdan yeni bir şifre belirleyin.',
'settings.mustChangePassword':
'You must change your password before you can continue. Please set a new password below.',
'settings.deleteAccount': 'Hesabı sil', 'settings.deleteAccount': 'Hesabı sil',
'settings.deleteAccountTitle': 'Delete your account?', 'settings.deleteAccountTitle': 'Hesabınız silinsin mi?',
'settings.deleteAccountWarning': 'settings.deleteAccountWarning': 'Hesabınız ve tüm gezileriniz, yerleriniz ve dosyalarınız kalıcı olarak silinecek. Bu eylem geri alınamaz.',
'Your account and all your trips, places, and files will be permanently deleted. This action cannot be undone.', 'settings.deleteAccountConfirm': 'Kalıcı olarak sil',
'settings.deleteAccountConfirm': 'Delete permanently', 'settings.deleteBlockedTitle': 'Silme mümkün değil',
'settings.deleteBlockedTitle': 'Deletion not possible', 'settings.deleteBlockedMessage': 'Tek yönetici sizsiniz. Hesabınızı silmeden önce başka bir kullanıcıyı yönetici olarak atayın.',
'settings.deleteBlockedMessage':
'You are the only administrator. Promote another user to admin before deleting your account.',
'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': '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.).',
'Adds a second step when you sign in with email and password. Use an authenticator app (Google Authenticator, Authy, etc.).', 'settings.mfa.requiredByPolicy': 'Yöneticiniz iki faktörlü kimlik doğrulama gerektiriyor. Devam etmeden önce aşağıdan bir kimlik doğrulama uygulaması kurun.',
'settings.mfa.requiredByPolicy': 'settings.mfa.backupTitle': 'Yedekleme kodları',
'Your administrator requires two-factor authentication. Set up an authenticator app below before continuing.', 'settings.mfa.backupDescription': 'Kimlik doğrulayıcı uygulamanıza erişimi kaybederseniz bu tek seferlik yedek kodları kullanın.',
'settings.mfa.backupTitle': 'Backup codes', 'settings.mfa.backupWarning': 'Şimdi bu kodları kaydedin. Her kod yalnızca bir kez kullanılabilir.',
'settings.mfa.backupDescription': 'settings.mfa.backupCopy': 'Kodları kopyala',
'Use these one-time backup codes if you lose access to your authenticator app.', 'settings.mfa.backupDownload': 'TXT\'yi İndirin',
'settings.mfa.backupWarning': 'settings.mfa.backupPrint': 'Yazdır / PDF',
'Save these codes now. Each code can only be used once.', 'settings.mfa.backupCopied': 'Yedek kodlar kopyalandı',
'settings.mfa.backupCopy': 'Copy codes', 'settings.mfa.enabled': 'Hesabınızda 2FA etkin.',
'settings.mfa.backupDownload': 'Download TXT', 'settings.mfa.disabled': '2FA etkin değil.',
'settings.mfa.backupPrint': 'Print / PDF', 'settings.mfa.setup': 'Kimlik doğrulayıcıyı ayarla',
'settings.mfa.backupCopied': 'Backup codes copied', 'settings.mfa.scanQr': 'Bu QR kodunu uygulamanızla tarayın veya sırrı manuel olarak girin.',
'settings.mfa.enabled': '2FA is enabled on your account.', 'settings.mfa.secretLabel': 'Gizli anahtar (manuel giriş)',
'settings.mfa.disabled': '2FA is not enabled.', 'settings.mfa.codePlaceholder': '6 haneli kod',
'settings.mfa.setup': 'Set up authenticator', 'settings.mfa.enable': '2FA\'yı Etkinleştir',
'settings.mfa.scanQr': 'settings.mfa.cancelSetup': 'İptal etmek',
'Scan this QR code with your app, or enter the secret manually.', 'settings.mfa.disableTitle': '2FA\'yı devre dışı bırak',
'settings.mfa.secretLabel': 'Secret key (manual entry)', 'settings.mfa.disableHint': 'Hesap şifrenizi ve kimlik doğrulayıcınızdan aldığınız geçerli kodu girin.',
'settings.mfa.codePlaceholder': '6-digit code', 'settings.mfa.disable': '2FA\'yı devre dışı bırak',
'settings.mfa.enable': 'Enable 2FA', 'settings.mfa.toastEnabled': 'İki faktörlü kimlik doğrulama etkin',
'settings.mfa.cancelSetup': 'Cancel', 'settings.mfa.toastDisabled': 'İki faktörlü kimlik doğrulama devre dışı',
'settings.mfa.disableTitle': 'Disable 2FA', 'settings.mfa.demoBlocked': 'Demo modunda kullanılamaz',
'settings.mfa.disableHint': 'settings.oauth.modal.machineClient': 'Makine istemcisi (tarayıcıda oturum açma yok)',
'Enter your account password and a current code from your authenticator.',
'settings.mfa.disable': 'Disable 2FA',
'settings.mfa.toastEnabled': 'Two-factor authentication enabled',
'settings.mfa.toastDisabled': 'Two-factor authentication disabled',
'settings.mfa.demoBlocked': 'Not available in demo mode',
'settings.oauth.modal.machineClient':
'Makine istemcisi (tarayıcı girişi 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': 'Bir jeton alın: grant_type=client_credentials, client_id ve client_secret ile POST /oauth/token. Tarayıcı yok, yenileme belirteci yok.',
'Belirteç alın: grant_type=client_credentials, client_id ve client_secret ile POST /oauth/token gönderin. Tarayıcı yok, yenileme belirteci yok.',
'settings.oauth.badge.machine': 'makine', 'settings.oauth.badge.machine': 'makine',
}; };
export default settings; export default settings;
+10 -11
View File
@@ -1,16 +1,15 @@
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': '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.',
'Create a link anyone can use to view this trip without logging in. Read-only — no editing possible.', 'share.createLink': 'Bağlantı oluştur',
'share.createLink': 'Create link', 'share.deleteLink': 'Bağlantıyı sil',
'share.deleteLink': 'Delete link', 'share.createError': 'Bağlantı oluşturulamadı',
'share.createError': 'Could not create link', 'share.permMap': 'Harita ve Plan',
'share.permMap': 'Map & Plan', 'share.permBookings': 'Rezervasyonlar',
'share.permBookings': 'Bookings', 'share.permPacking': 'Ambalaj',
'share.permPacking': 'Packing', 'share.permBudget': 'Bütçe',
'share.permBudget': 'Budget', 'share.permCollab': 'Sohbet',
'share.permCollab': 'Chat',
}; };
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;
+38 -53
View File
@@ -1,60 +1,45 @@
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': '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.',
'**Photos** in the Trip Planner have been removed. Your photos are safe — TREK never modified your Immich or Synology library.\n\nPhotos now live in the **Journey** addon. Journey is optional — if it is not yet available, ask your admin to enable it under Admin → Addons.', 'system_notice.v3_journey.title': 'Journey ile tanışın — seyahat günlüğü',
'system_notice.v3_journey.title': 'Meet Journey — travel journal', 'system_notice.v3_journey.body': 'Seyahatlerinizi zaman çizelgeleri, fotoğraf galerileri ve etkileşimli haritalarla zengin hikâyelere dönüştürün.',
'system_notice.v3_journey.body': 'system_notice.v3_journey.cta_label': 'Journey\'i Aç',
'Document your trips as rich travel stories with timelines, photo galleries, and interactive maps.', 'system_notice.v3_journey.highlight_timeline': 'Gün gün zaman çizelgesi ve galeri',
'system_notice.v3_journey.cta_label': 'Open Journey', 'system_notice.v3_journey.highlight_photos': 'Immich veya Synology\'den içe Aktar',
'system_notice.v3_journey.highlight_timeline': 'system_notice.v3_journey.highlight_share': 'Herkese açık paylaş — giriş gerekmez',
'Day-by-day timeline & gallery', 'system_notice.v3_journey.highlight_export': 'PDF fotoğraf kitabı Olarak dışa aktar',
'system_notice.v3_journey.highlight_photos': 'Import from Immich or Synology', 'system_notice.v3_features.title': '3.0\'Daki diğer öne çıkanlar',
'system_notice.v3_journey.highlight_share': 'system_notice.v3_features.body': 'Bu sürüm hakkında bilmeniz gereken birkaç şey daha.',
'Share publicly — no login needed', 'system_notice.v3_features.highlight_dashboard': 'Mobil öncelikli gösterge paneli yenilemesi',
'system_notice.v3_journey.highlight_export': 'Export as a PDF photo book', 'system_notice.v3_features.highlight_offline': 'PWA olarak tam çevrimdışı mod',
'system_notice.v3_features.title': 'More highlights in 3.0', 'system_notice.v3_features.highlight_search': 'Gerçek zamanlı yer arama otomatik tamamlama',
'system_notice.v3_features.body': 'system_notice.v3_features.highlight_import': 'KMZ/KML dosyalarından yer İçe aktarma',
'A few more things worth knowing about this release.', 'system_notice.v3_mcp.title': 'MCP: OAuth 2.1 yükseltmesi',
'system_notice.v3_features.highlight_dashboard': 'system_notice.v3_mcp.body': '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.',
'Mobile-first dashboard redesign', 'system_notice.v3_mcp.highlight_oauth': 'OAuth 2.1 önerilir (mcp-remote)',
'system_notice.v3_features.highlight_offline': 'Full offline mode as a PWA', 'system_notice.v3_mcp.highlight_scopes': '24 ayrıntılı izin kapsamı',
'system_notice.v3_features.highlight_search': 'system_notice.v3_mcp.highlight_deprecated': 'Statik trek_ jetonları kullanımdan kaldırıldı',
'Real-time place search autocomplete', 'system_notice.v3_mcp.highlight_tools': 'Genişletilmiş araç seti ve istemler',
'system_notice.v3_features.highlight_import': 'system_notice.v3_thankyou.title': 'Benden kişisel bir not',
'Import places from KMZ/KML files',
'system_notice.v3_mcp.title': 'MCP: OAuth 2.1 upgrade',
'system_notice.v3_mcp.body':
'The MCP integration has been fully overhauled. OAuth 2.1 is now the recommended auth method. Legacy static tokens (trek_…) are deprecated and will be removed in a future release.',
'system_notice.v3_mcp.highlight_oauth': 'OAuth 2.1 recommended (mcp-remote)',
'system_notice.v3_mcp.highlight_scopes': '24 fine-grained permission scopes',
'system_notice.v3_mcp.highlight_deprecated': 'Static trek_ tokens deprecated',
'system_notice.v3_mcp.highlight_tools': 'Expanded toolset & prompts',
'system_notice.v3_thankyou.title': 'A personal note from me',
'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': 'İşlem gerekli: kullanıcı hesabı çakışması',
'Action required: user account conflict', 'system_notice.v3014_whitespace_collision.body': '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.v3014_whitespace_collision.body': 'system_notice.welcome_v1.title': 'TREK\'e hoş Geldiniz',
'The 3.0.14 upgrade detected one or more username or email collisions caused by leading/trailing whitespace in stored accounts. Affected accounts were renamed automatically. Check the server logs for lines starting with **[migration] WHITESPACE COLLISION** to identify which accounts need review.', 'system_notice.welcome_v1.body': '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.title': 'Welcome to TREK', 'system_notice.welcome_v1.cta_label': 'Seyahat planla',
'system_notice.welcome_v1.body': 'system_notice.welcome_v1.hero_alt': 'TREK planlama arayüzü kaplamalı manzaralı bir seyahat destinasyonu',
'Your all-in-one travel planner. Build itineraries, share trips with friends, and stay organized — online or offline.', 'system_notice.welcome_v1.highlight_plan': 'Her seyahat için gün gün programlar',
'system_notice.welcome_v1.cta_label': 'Plan a trip', 'system_notice.welcome_v1.highlight_share': 'Seyahat partnerleriyle işbirliği',
'system_notice.welcome_v1.hero_alt': 'system_notice.welcome_v1.highlight_offline': 'Mobilde çevrimdışı çalışır',
'A scenic travel destination with TREK planning UI overlay', 'system_notice.dev_test_modal.title': '[Dev] Test bildirimi',
'system_notice.welcome_v1.highlight_plan': 'system_notice.dev_test_modal.body': 'Bu yalnızca geliştirme ortamına özel bir test bildirimidir.',
'Day-by-day itineraries for any trip', 'system_notice.pager.prev': 'Önceki bildirim',
'system_notice.welcome_v1.highlight_share': 'system_notice.pager.next': 'Sonraki bildirim',
'Collaborate with travel partners', 'system_notice.pager.counter': '{güncel} / {toplam}',
'system_notice.welcome_v1.highlight_offline': 'Works offline on mobile', 'system_notice.pager.goto': '{n}. bildirime git',
'system_notice.dev_test_modal.title': '[Dev] Test notice', 'system_notice.pager.position': '{total} Bildirimden {current}.',
'system_notice.dev_test_modal.body': 'This is a dev-only test notice.',
'system_notice.pager.prev': 'Previous notice',
'system_notice.pager.next': 'Next notice',
'system_notice.pager.counter': '{current} / {total}',
'system_notice.pager.goto': 'Go to notice {n}',
'system_notice.pager.position': 'Notice {current} of {total}',
}; };
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 -4
View File
@@ -5,13 +5,12 @@ 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': 'Seyahat hatırlatıcıları kapalı. Yönetici > Ayarlar > Bildirimler bölümünden açın.',
'Gezi hatırlatmaları devre dışı. Yönetim > Ayarlar > Bildirimler bölümünden etkinleştirin.',
}; };
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;
+88 -98
View File
@@ -1,103 +1,93 @@
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': 'Bu yılın tüm tatil girişleri ve şirket tatilleri kalıcı olarak silinecek.',
'All vacation entries and company holidays for this year will be permanently deleted.', 'vacay.remove': 'Kaldırmak',
'vacay.remove': 'Remove', 'vacay.persons': 'Kişiler',
'vacay.persons': 'Persons', 'vacay.noPersons': 'Hiç kişi eklenmedi',
'vacay.noPersons': 'No persons added', 'vacay.addPerson': 'Kişi Ekle',
'vacay.addPerson': 'Add Person', 'vacay.editPerson': 'Kişiyi Düzenle',
'vacay.editPerson': 'Edit Person', 'vacay.removePerson': 'Kişiyi Kaldır',
'vacay.removePerson': 'Remove Person', 'vacay.removePersonConfirm': '{name} Kaldırılsın mı?',
'vacay.removePersonConfirm': 'Remove {name}?', 'vacay.removePersonHint': 'Bu kişinin tüm tatil girişleri kalıcı olarak silinecek.',
'vacay.removePersonHint': 'vacay.personName': 'İsim',
'All vacation entries for this person will be permanently deleted.', 'vacay.personNamePlaceholder': 'Ad girin',
'vacay.personName': 'Name', 'vacay.color': 'Renk',
'vacay.personNamePlaceholder': 'Enter name', 'vacay.add': 'Eklemek',
'vacay.color': 'Color', 'vacay.legend': 'Efsane',
'vacay.add': 'Add', 'vacay.publicHoliday': 'Resmi Tatil',
'vacay.legend': 'Legend', 'vacay.companyHoliday': 'Şirket Tatili',
'vacay.publicHoliday': 'Public Holiday', 'vacay.weekend': 'Hafta sonu',
'vacay.companyHoliday': 'Company Holiday', 'vacay.modeVacation': 'Tatil',
'vacay.weekend': 'Weekend', 'vacay.modeCompany': 'Şirket Tatili',
'vacay.modeVacation': 'Vacation', 'vacay.entitlement': 'Yetki',
'vacay.modeCompany': 'Company Holiday', 'vacay.entitlementDays': 'Günler',
'vacay.entitlement': 'Entitlement', 'vacay.used': 'Kullanılmış',
'vacay.entitlementDays': 'Days', 'vacay.remaining': 'Sol',
'vacay.used': 'Used', 'vacay.carriedOver': '{yıl} tarihinden itibaren',
'vacay.remaining': 'Left', 'vacay.blockWeekends': 'Hafta Sonlarını Engelle',
'vacay.carriedOver': 'from {year}', 'vacay.blockWeekendsHint': 'Hafta sonu günlerinde tatil girişlerini önleyin',
'vacay.blockWeekends': 'Block Weekends', 'vacay.weekendDays': 'Hafta sonu günleri',
'vacay.blockWeekendsHint': 'Prevent vacation entries on weekend days', 'vacay.mon': 'Pazartesi',
'vacay.weekendDays': 'Weekend days', 'vacay.tue': 'Salı',
'vacay.mon': 'Mon', 'vacay.wed': 'Çar',
'vacay.tue': 'Tue', 'vacay.thu': 'Per',
'vacay.wed': 'Wed', 'vacay.fri': 'Cuma',
'vacay.thu': 'Thu', 'vacay.sat': 'Doygunluk',
'vacay.fri': 'Fri', 'vacay.sun': 'Güneş',
'vacay.sat': 'Sat', 'vacay.publicHolidays': 'Resmi Tatiller',
'vacay.sun': 'Sun', 'vacay.publicHolidaysHint': 'Resmi tatil günlerini takvimde işaretleyin',
'vacay.publicHolidays': 'Public Holidays', 'vacay.selectCountry': 'Ülke seçin',
'vacay.publicHolidaysHint': 'Mark public holidays in the calendar', 'vacay.selectRegion': 'Bölge seçin (isteğe bağlı)',
'vacay.selectCountry': 'Select country', 'vacay.addCalendar': 'Takvim ekle',
'vacay.selectRegion': 'Select region (optional)', 'vacay.calendarLabel': 'Etiket (isteğe bağlı)',
'vacay.addCalendar': 'Add calendar', 'vacay.calendarColor': 'Renk',
'vacay.calendarLabel': 'Label (optional)', 'vacay.noCalendars': 'Henüz tatil takvimi eklenmedi',
'vacay.calendarColor': 'Color', 'vacay.companyHolidays': 'Şirket Tatilleri',
'vacay.noCalendars': 'No holiday calendars added yet', 'vacay.companyHolidaysHint': 'Şirket çapında tatil günlerinin işaretlenmesine izin ver',
'vacay.companyHolidays': 'Company Holidays', 'vacay.companyHolidaysNoDeduct': 'Şirket tatilleri tatil günlerinden sayılmaz.',
'vacay.companyHolidaysHint': 'Allow marking company-wide holiday days', 'vacay.weekStart': 'Hafta başlıyor',
'vacay.companyHolidaysNoDeduct': 'vacay.weekStartHint': 'Takvim haftasının Pazartesi mi yoksa Pazar günü mü başlayacağını seçin',
'Company holidays do not count towards vacation days.', 'vacay.carryOver': 'Devret',
'vacay.weekStart': 'Week starts on', 'vacay.carryOverHint': 'Kalan tatil günlerini otomatik olarak bir sonraki yıla taşıyın',
'vacay.weekStartHint': 'vacay.sharing': 'Paylaşma',
'Choose whether the calendar week starts on Monday or Sunday', 'vacay.sharingHint': 'Tatil planınızı diğer TREK kullanıcılarıyla paylaşın',
'vacay.carryOver': 'Carry Over', 'vacay.owner': 'Mal sahibi',
'vacay.carryOverHint': 'vacay.shareEmailPlaceholder': 'TREK kullanıcısının e-postası',
'Automatically carry remaining vacation days into the next year', 'vacay.shareSuccess': 'Plan başarıyla paylaşıldı',
'vacay.sharing': 'Sharing', 'vacay.shareError': 'Plan paylaşılamadı',
'vacay.sharingHint': 'Share your vacation plan with other TREK users', 'vacay.dissolve': 'Füzyonu Çözün',
'vacay.owner': 'Owner', 'vacay.dissolveHint': 'Takvimleri tekrar ayırın. Girişleriniz saklanacaktır.',
'vacay.shareEmailPlaceholder': 'Email of TREK user', 'vacay.dissolveAction': 'Çözün',
'vacay.shareSuccess': 'Plan shared successfully', 'vacay.dissolved': 'Takvim ayrıldı',
'vacay.shareError': 'Could not share plan', 'vacay.fusedWith': 'İle kaynaşmış',
'vacay.dissolve': 'Dissolve Fusion', 'vacay.you': 'Sen',
'vacay.dissolveHint': 'Separate calendars again. Your entries will be kept.', 'vacay.noData': 'Veri yok',
'vacay.dissolveAction': 'Dissolve', 'vacay.changeColor': 'Rengi değiştir',
'vacay.dissolved': 'Calendar separated', 'vacay.inviteUser': 'Kullanıcıyı Davet Et',
'vacay.fusedWith': 'Fused with', 'vacay.inviteHint': 'Başka bir TREK kullanıcısını birleşik bir tatil takvimini paylaşmaya davet edin.',
'vacay.you': 'you', 'vacay.selectUser': 'Kullanıcı seç',
'vacay.noData': 'No data', 'vacay.sendInvite': 'Davet Gönder',
'vacay.changeColor': 'Change color', 'vacay.inviteSent': 'Davet gönderildi',
'vacay.inviteUser': 'Invite User', 'vacay.inviteError': 'Davet gönderilemedi',
'vacay.inviteHint': 'vacay.pending': 'askıda olması',
'Invite another TREK user to share a combined vacation calendar.', 'vacay.noUsersAvailable': 'Kullanılabilir kullanıcı yok',
'vacay.selectUser': 'Select user', 'vacay.accept': 'Kabul etmek',
'vacay.sendInvite': 'Send Invite', 'vacay.decline': 'Reddetmek',
'vacay.inviteSent': 'Invite sent', 'vacay.acceptFusion': 'Kabul Et ve Sigortala',
'vacay.inviteError': 'Could not send invite', 'vacay.inviteTitle': 'Füzyon Talebi',
'vacay.pending': 'pending', 'vacay.inviteWantsToFuse': 'sizinle bir tatil takvimi paylaşmak istiyor.',
'vacay.noUsersAvailable': 'No users available', 'vacay.fuseInfo1': 'İkiniz de tüm tatil kayıtlarını tek bir paylaşılan takvimde göreceksiniz.',
'vacay.accept': 'Accept', 'vacay.fuseInfo2': 'Her iki taraf da birbirleri için girişler oluşturabilir ve düzenleyebilir.',
'vacay.decline': 'Decline', 'vacay.fuseInfo3': 'Her iki taraf da girişleri silebilir ve tatil haklarını değiştirebilir.',
'vacay.acceptFusion': 'Accept & Fuse', 'vacay.fuseInfo4': 'Resmi tatiller ve şirket tatilleri gibi ayarlar paylaşılır.',
'vacay.inviteTitle': 'Fusion Request', 'vacay.fuseInfo5': 'Birleşme her iki tarafça da herhangi bir zamanda feshedilebilir. Girişleriniz korunacaktır.',
'vacay.inviteWantsToFuse': 'wants to share a vacation calendar with you.',
'vacay.fuseInfo1':
'Both of you will see all vacation entries in one shared calendar.',
'vacay.fuseInfo2': 'Both parties can create and edit entries for each other.',
'vacay.fuseInfo3':
'Both parties can delete entries and change vacation entitlements.',
'vacay.fuseInfo4':
'Settings like public holidays and company holidays are shared.',
'vacay.fuseInfo5':
'The fusion can be dissolved at any time by either party. Your entries will be preserved.',
}; };
export default vacay; export default vacay;