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