diff --git a/client/src/i18n/TranslationContext.tsx b/client/src/i18n/TranslationContext.tsx index efacfb112..e29a4599d 100644 --- a/client/src/i18n/TranslationContext.tsx +++ b/client/src/i18n/TranslationContext.tsx @@ -30,6 +30,7 @@ const localeLoaders: Record Promise<{ default: Tran nl: () => import('@trek/shared/i18n/nl'), id: () => import('@trek/shared/i18n/id'), ar: () => import('@trek/shared/i18n/ar'), + az: () => import('@trek/shared/i18n/az'), br: () => import('@trek/shared/i18n/br'), cs: () => import('@trek/shared/i18n/cs'), pl: () => import('@trek/shared/i18n/pl'), diff --git a/shared/src/i18n/az/admin.ts b/shared/src/i18n/az/admin.ts new file mode 100644 index 000000000..93ba644eb --- /dev/null +++ b/shared/src/i18n/az/admin.ts @@ -0,0 +1,873 @@ +import type { TranslationStrings } from '../types'; + +const admin: TranslationStrings = { + 'admin.notifications.title': 'Bildirişlər', + 'admin.notifications.hint': 'Bir bildiriş kanalı seçin. Eyni anda yalnız biri aktiv ola bilər.', + 'admin.notifications.none': 'Deaktivdir', + 'admin.notifications.email': 'E-poçt (SMTP)', + 'admin.notifications.webhook': 'Webhook', + 'admin.notifications.ntfy': 'Ntfy', + 'admin.ntfy.hint': + 'İstifadəçilərə push bildirişləri üçün öz ntfy mövzularını konfiqurasiya etməyə icazə verin. İstifadəçi tənzimləmələrinin əvvəlcədən doldurulması üçün aşağıda standart serveri təyin edin.', + 'admin.notifications.save': 'Bildiriş tənzimləmələrini yadda saxla', + 'admin.notifications.saved': 'Bildiriş tənzimləmələri yadda saxlanıldı', + 'admin.notifications.testWebhook': 'Sınaq webhook-u göndər', + 'admin.notifications.testWebhookSuccess': 'Sınaq webhook-u uğurla göndərildi', + 'admin.notifications.testWebhookFailed': 'Sınaq webhook-u uğursuz oldu', + 'admin.notifications.testNtfy': 'Sınaq ntfy bildirişi göndər', + 'admin.notifications.testNtfySuccess': 'Sınaq ntfy bildirişi uğurla göndərildi', + 'admin.notifications.testNtfyFailed': 'Sınaq ntfy bildirişi uğursuz oldu', + 'admin.notifications.emailPanel.title': 'E-poçt (SMTP)', + 'admin.notifications.webhookPanel.title': 'Webhook', + 'admin.notifications.inappPanel.title': 'Tətbiqdaxili', + 'admin.notifications.inappPanel.hint': + 'Tətbiqdaxili bildirişlər həmişə aktivdir və ümumi şəkildə deaktiv edilə bilməz.', + 'admin.notifications.adminWebhookPanel.title': 'Administrator webhook-u', + 'admin.notifications.adminWebhookPanel.hint': + 'Bu webhook yalnız administrator bildirişləri üçün istifadə edilir (məsələn, versiya xəbərdarlıqları). O, istifadəçi webhook-larından ayrıdır və təyin edildikdə həmişə işə düşür.', + 'admin.notifications.adminWebhookPanel.saved': 'Administrator webhook URL-si yadda saxlanıldı', + 'admin.notifications.adminWebhookPanel.testSuccess': 'Sınaq webhook-u uğurla göndərildi', + 'admin.notifications.adminWebhookPanel.testFailed': 'Sınaq webhook-u uğursuz oldu', + 'admin.notifications.adminWebhookPanel.alwaysOnHint': + 'URL konfiqurasiya edildikdə administrator webhook-u həmişə işə düşür', + 'admin.notifications.adminNtfyPanel.title': 'Administrator Ntfy', + 'admin.notifications.adminNtfyPanel.hint': + 'Bu ntfy mövzusu yalnız administrator bildirişləri üçün istifadə edilir (məsələn, versiya xəbərdarlıqları). O, istifadəçi mövzularından ayrıdır və konfiqurasiya edildikdə həmişə işə düşür.', + 'admin.notifications.adminNtfyPanel.serverLabel': 'Ntfy server URL-si', + 'admin.notifications.adminNtfyPanel.serverHint': + 'İstifadəçi ntfy bildirişləri üçün standart server kimi də istifadə edilir. Standart olaraq ntfy.sh istifadə etmək üçün boş saxlayın. İstifadəçilər bunu öz tənzimləmələrində dəyişə bilərlər.', + 'admin.notifications.adminNtfyPanel.serverPlaceholder': 'https://ntfy.sh', + 'admin.notifications.adminNtfyPanel.topicLabel': 'Administrator mövzusu', + 'admin.notifications.adminNtfyPanel.topicPlaceholder': 'trek-admin-alerts', + 'admin.notifications.adminNtfyPanel.tokenLabel': 'Giriş tokeni (istəyə bağlı)', + 'admin.notifications.adminNtfyPanel.tokenCleared': 'Administrator giriş tokeni təmizləndi', + 'admin.notifications.adminNtfyPanel.saved': 'Administrator ntfy tənzimləmələri yadda saxlanıldı', + 'admin.notifications.adminNtfyPanel.test': 'Sınaq ntfy bildirişi göndər', + 'admin.notifications.adminNtfyPanel.testSuccess': 'Sınaq ntfy bildirişi uğurla göndərildi', + 'admin.notifications.adminNtfyPanel.testFailed': 'Sınaq ntfy bildirişi uğursuz oldu', + 'admin.notifications.adminNtfyPanel.alwaysOnHint': + 'Mövzu konfiqurasiya edildikdə administrator ntfy bildirişi həmişə işə düşür', + 'admin.notifications.adminNotificationsHint': + 'Yalnız administratorlara aid bildirişləri hansı kanalların çatdıracağını konfiqurasiya edin (məsələn, versiya xəbərdarlıqları).', + 'admin.notifications.tripReminders.title': 'Səyahət xatırlatmaları', + 'admin.notifications.tripReminders.hint': + 'Səyahət başlamazdan əvvəl xatırlatma bildirişi göndərin (səyahətdə xatırlatma günlərinin təyin edilməsi tələb olunur).', + 'admin.notifications.tripReminders.enabled': 'Səyahət xatırlatmaları aktivdir', + 'admin.notifications.tripReminders.disabled': 'Səyahət xatırlatmaları deaktivdir', + 'admin.smtp.title': 'E-poçt və bildirişlər', + 'admin.smtp.hint': 'E-poçt bildirişlərinin göndərilməsi üçün SMTP konfiqurasiyası.', + 'admin.smtp.testButton': 'Sınaq e-poçtu göndər', + 'admin.webhook.hint': + 'İstifadəçilərə bildirişlər üçün öz webhook URL-lərini konfiqurasiya etməyə icazə verin (Discord, Slack və s.).', + 'admin.smtp.testSuccess': 'Sınaq e-poçtu uğurla göndərildi', + 'admin.smtp.testFailed': 'Sınaq e-poçtu uğursuz oldu', + 'admin.title': 'İdarəetmə', + 'admin.subtitle': 'İstifadəçi idarəetməsi və sistem tənzimləmələri', + 'admin.tabs.users': 'İstifadəçilər', + 'admin.tabs.categories': 'Kateqoriyalar', + 'admin.tabs.backup': 'Ehtiyat nüsxə', + 'admin.tabs.notifications': 'Bildirişlər', + 'admin.tabs.audit': 'Audit', + 'admin.stats.users': 'İstifadəçilər', + 'admin.stats.trips': 'Səyahətlər', + 'admin.stats.places': 'Məkanlar', + 'admin.stats.photos': 'Fotolar', + 'admin.stats.files': 'Fayllar', + 'admin.table.user': 'İstifadəçi', + 'admin.table.email': 'E-poçt', + 'admin.table.role': 'Rol', + 'admin.table.created': 'Yaradılıb', + 'admin.table.lastLogin': 'Son giriş', + 'admin.table.actions': 'Əməliyyatlar', + 'admin.you': '(Siz)', + 'admin.editUser': 'İstifadəçini redaktə et', + 'admin.newPassword': 'Yeni parol', + 'admin.newPasswordHint': 'Cari parolu saxlamaq üçün boş saxlayın', + 'admin.deleteUser': + '"{name}" istifadəçisi silinsin? Bütün səyahətləri həmişəlik silinəcək.', + 'admin.deleteUserTitle': 'İstifadəçini sil', + 'admin.newPasswordPlaceholder': 'Yeni parolu daxil edin…', + 'admin.toast.loadError': 'Administrator məlumatlarını yükləmək mümkün olmadı', + 'admin.toast.userUpdated': 'İstifadəçi yeniləndi', + 'admin.toast.updateError': 'Yeniləmək mümkün olmadı', + 'admin.toast.userDeleted': 'İstifadəçi silindi', + 'admin.toast.deleteError': 'Silmək mümkün olmadı', + 'admin.toast.cannotDeleteSelf': 'Öz hesabınızı silə bilməzsiniz', + 'admin.toast.userCreated': 'İstifadəçi yaradıldı', + 'admin.toast.createError': 'İstifadəçi yaratmaq mümkün olmadı', + 'admin.toast.fieldsRequired': 'İstifadəçi adı, e-poçt və parol tələb olunur', + 'admin.createUser': 'İstifadəçi yarat', + 'admin.invite.title': 'Dəvət keçidləri', + 'admin.invite.subtitle': 'Birdəfəlik qeydiyyat keçidləri yaradın', + 'admin.invite.create': 'Keçid yarat', + 'admin.invite.createAndCopy': 'Yarat və kopyala', + 'admin.invite.empty': 'Hələ heç bir dəvət keçidi yaradılmayıb', + 'admin.invite.maxUses': 'Maksimum istifadə', + 'admin.invite.expiry': 'Bu müddətdən sonra bitir', + 'admin.invite.uses': 'istifadə edilib', + 'admin.invite.expiresAt': 'bitmə vaxtı', + 'admin.invite.createdBy': 'yaradan', + 'admin.invite.active': 'Aktiv', + 'admin.invite.expired': 'Müddəti bitib', + 'admin.invite.usedUp': 'İstifadə limiti bitib', + 'admin.invite.copied': 'Dəvət keçidi mübadilə buferinə kopyalandı', + 'admin.invite.copyLink': 'Keçidi kopyala', + 'admin.invite.deleted': 'Dəvət keçidi silindi', + 'admin.invite.createError': 'Dəvət keçidi yaratmaq mümkün olmadı', + 'admin.invite.deleteError': 'Dəvət keçidini silmək mümkün olmadı', + 'admin.tabs.settings': 'Tənzimləmələr', + 'admin.allowRegistration': 'Qeydiyyata icazə ver', + 'admin.allowRegistrationHint': 'Yeni istifadəçilər özləri qeydiyyatdan keçə bilərlər', + 'admin.authMethods': 'Doğrulama üsulları', + 'admin.passwordLogin': 'Parolla giriş', + 'admin.passwordLoginHint': 'İstifadəçilərə e-poçt və parolla daxil olmağa icazə verin', + 'admin.passwordRegistration': 'Parolla qeydiyyat', + 'admin.passwordRegistrationHint': + 'Yeni istifadəçilərə e-poçt və parolla qeydiyyatdan keçməyə icazə verin', + 'admin.oidcLogin': 'SSO ilə giriş', + 'admin.oidcLoginHint': 'İstifadəçilərə SSO ilə daxil olmağa icazə verin', + 'admin.oidcRegistration': 'SSO ilə avtomatik hesab yaratma', + 'admin.oidcRegistrationHint': 'Yeni SSO istifadəçiləri üçün avtomatik hesab yaradın', + 'admin.envOverrideHint': + 'Parolla giriş tənzimləmələri OIDC_ONLY mühit dəyişəni ilə idarə olunur və burada dəyişdirilə bilməz.', + 'admin.lockoutWarning': 'Ən azı bir giriş üsulu aktiv qalmalıdır', + 'admin.requireMfa': 'İki faktorlu doğrulamanı (2FA) tələb et', + 'admin.requireMfaHint': + '2FA-sı olmayan istifadəçilər tətbiqdən istifadə etməzdən əvvəl Tənzimləmələr bölməsində quraşdırmanı tamamlamalıdırlar.', + 'admin.apiKeys': 'API açarları', + 'admin.apiKeysHint': + 'Məkan məlumatlarının haradan əldə edildiyi. TREK indeksinə açar lazım deyil; aşağıdakı iki provayder istəyə bağlıdır.', + 'admin.trekApi.badgeDefault': 'Tövsiyə edilən standart', + 'admin.googleCaveat.badge': 'Tövsiyə edilmir', + 'admin.googleCaveat.body': + 'TREK açıq mənbəlidir və biz burada bitərəf deyilik. Adi müəssisələrin reytinqləri və fotoları bu miqyasda yalnız Google-da mövcuddur və inhisar məhz budur. Bu sahə onu tövsiyə etdiyimiz üçün deyil, alternativ olmadığı üçün buradadır. Bundan sonra hər sorğu Google-a göndərilir.', + 'admin.trekApi.tagline': + 'TREK-in öz məkan indeksi. Google açarı, kvota və sorğularınızı sayan heç kim olmadan axtarış edin.', + 'admin.trekApi.factPlaces': 'Dünya üzrə 73,6 milyon məkan', + 'admin.trekApi.factNoKey': 'Açar yoxdur, kvota yoxdur', + 'admin.trekApi.factOffline': 'Ölkə paketləri oflayn işləyir', + 'admin.trekApi.factPrivacy': 'Axtarışlar heç vaxt qeydə alınmır', + 'admin.trekApi.more': 'Nələr daxildir', + 'admin.trekApi.fieldPhone': 'Telefon', + 'admin.trekApi.fieldStableId': 'Sabit ID', + 'admin.trekApi.includedNote': + 'Təsvirlər məkanın öz veb-saytından, iş saatları isə işarələndiyi hallarda OpenStreetMap-dən əldə edilir.', + 'admin.trekApi.notRatings': 'Reytinqlər', + 'admin.trekApi.notPhotos': 'Adi müəssisələrin fotoları', + 'admin.trekApi.notIncludedNote': + 'Heç bir açıq məlumat dəstində bunların heç biri heç bir qiymətə mövcud deyil. Bu ikisini əldə etməyin yeganə yolu Google açarı olaraq qalır.', + 'admin.trekApi.sourcesLabel': 'Mənbələr', + 'admin.trekApi.sourcesNote': + 'Cavabdakı hər sahə məlumatın bu mənbələrdən hansından əldə edildiyini göstərir.', + 'admin.trekApi.included': 'Daxildir', + 'admin.trekApi.notIncluded': 'Daxil deyil', + 'admin.mapsKey': 'Google Maps API açarı', + 'admin.mapsKeyHint': 'Məkan axtarışı üçün tələb olunur. console.cloud.google.com saytından əldə edin', + 'admin.mapsKeyHintLong': + 'Google API açarı olmadan tövsiyə edilən TREK API istifadə olunur. Açar olduqda fotolar, reytinqlər və iş saatları əlavə olaraq yüklənə bilər. Açarı console.cloud.google.com saytında yaradın.', + 'admin.recommended': 'Tövsiyə edilir', + 'admin.weatherKey': 'OpenWeatherMap API açarı', + 'admin.weatherKeyHint': 'Hava məlumatları üçün. openweathermap.org saytında pulsuzdur', + 'admin.unsplashKey': 'Unsplash API açarı', + 'admin.unsplashKeyHint': 'Şəkil axtarışı üçün. unsplash.com/developers saytında pulsuzdur', + 'admin.amapKey': 'Amap (高德地图) API açarı', + 'admin.amapKeyHint': + 'Google-un əlçatmaz, OpenStreetMap əhatəsinin isə zəif olduğu materik Çinində məkan axtarışı üçün. JS API açarı deyil, "Web 服务" (veb xidməti) açarı tələb olunur. Onu console.amap.com saytından əldə edin.', + 'admin.placesProvider.title': 'Məkan axtarışı provayderi', + 'admin.placesProvider.subtitle': + 'TREK-in öz indeksi və OpenStreetMap hər axtarışa cavab verir. Onlar heç nə tapmadıqda başqa kimə sorğu göndəriləcəyini bu seçim müəyyən edir: Avtomatik rejim açar mövcud olduqda əvvəlcə Google-a, sonra Amap-a üstünlük verir.', + 'admin.placesProvider.auto': 'Avtomatik', + 'admin.placesProvider.google': 'Google Places', + 'admin.placesProvider.amap': 'Amap (高德地图)', + 'admin.placesProvider.openstreetmap': 'OpenStreetMap', + 'admin.placesProvider.missingKey': + 'Seçilmiş provayder üçün API açarı konfiqurasiya edilməyib, buna görə məkan axtarışına yalnız TREK indeksi və OpenStreetMap cavab verir.', + 'admin.placesProvider.saved': 'Məkan axtarışı provayderi yadda saxlanıldı', + 'admin.validateKey': 'Sına', + 'admin.keyValid': 'Qoşulub', + 'admin.keyInvalid': 'Etibarsızdır', + 'admin.keySaved': 'API açarları yadda saxlanıldı', + 'admin.oidcTitle': 'Tək giriş (OIDC)', + 'admin.oidcSubtitle': + 'Google, Apple, Authentik və ya Keycloak kimi xarici provayderlər vasitəsilə girişə icazə verin.', + 'admin.oidcDisplayName': 'Göstərilən ad', + 'admin.oidcIssuer': 'Təminatçı URL-si', + 'admin.oidcIssuerHint': + 'Provayderin OpenID Connect təminatçı URL-si. Məsələn, https://accounts.google.com', + 'admin.oidcSaved': 'OIDC konfiqurasiyası yadda saxlanıldı', + 'admin.oidcOnlyMode': 'Parolla doğrulamanı deaktiv et', + 'admin.oidcOnlyModeHint': + 'Aktiv edildikdə yalnız SSO ilə girişə icazə verilir. Parol əsaslı giriş və qeydiyyat bloklanır.', + 'admin.fileTypes': 'İcazə verilən fayl növləri', + 'admin.fileTypesHint': 'İstifadəçilərin hansı fayl növlərini yükləyə biləcəyini konfiqurasiya edin.', + 'admin.fileTypesFormat': + 'Vergüllə ayrılmış uzantılar (məsələn, jpg,png,pdf,doc). Bütün növlərə icazə vermək üçün * istifadə edin.', + 'admin.fileTypesSaved': 'Fayl növü tənzimləmələri yadda saxlanıldı', + 'admin.googleOptions': 'Açarın hansı məqsədlərlə istifadə edilə biləcəyi', + 'admin.googleOptionsSummary': '{total} seçimdən {on} aktivdir', + 'admin.placesPhotos.title': 'Məkan fotoları', + 'admin.placesPhotos.subtitle': + 'Google Places API-dən fotoları əldə edin. API kvotasına qənaət etmək üçün deaktiv edin. Wikimedia fotolarına təsir göstərmir.', + 'admin.placesAutocomplete.title': 'Məkanın avtomatik tamamlanması', + 'admin.placesAutocomplete.subtitle': + 'Axtarış təklifləri üçün Google Places API-dən istifadə edin. API kvotasına qənaət etmək üçün deaktiv edin.', + 'admin.placesDetails.title': 'Məkan məlumatları', + 'admin.placesDetails.subtitle': + 'Google Places API-dən məkan haqqında ətraflı məlumatları (iş saatları, reytinq və veb-sayt) əldə edin. API kvotasına qənaət etmək üçün deaktiv edin.', + 'admin.placesEnrich.title': 'Məkan məlumatlarının zənginləşdirilməsi', + 'admin.placesEnrich.subtitle': + 'Məkan əlavə edərkən şəkillər və təsvir göstərin. Wikipedia və OpenStreetMap həmişə istifadə olunur; Məkan fotoları və ya Məkan məlumatları aktiv olduqda Google da əlavə edilir.', + 'admin.placesGoogleOnly.title': 'Yalnız Google ilə axtar', + 'admin.placesGoogleOnly.subtitle': + 'Hər axtarış və hər təklif Google Places-a göndərilir. Deaktiv olduqda əvvəlcə TREK-in öz indeksi və OpenStreetMap cavab verir, Google-a isə yalnız onlar heç nə tapmadıqda sorğu göndərilir.', + 'admin.placesGoogleOnly.missingKey': + 'Google Maps API açarı tələb olunur. Açar olmadıqda bu keçidin vəziyyətindən asılı olmayaraq axtarış TREK-in öz indeksi və OpenStreetMap ilə aparılır.', + 'admin.placesGoogleOnly.otherProvider': + 'Məkan provayderi kimi Google tələb olunur. Amap və ya OpenStreetMap seçildikdə bu keçidin vəziyyətindən asılı olmayaraq axtarış heç vaxt Google-a göndərilmir.', + 'admin.transitProvider.title': 'İctimai nəqliyyat provayderi', + 'admin.transitProvider.subtitle': 'İctimai nəqliyyat axtarışına hansı xidmətin cavab verəcəyi.', + 'admin.transitProvider.transitous': 'Transitous (pulsuz)', + 'admin.transitProvider.google': 'Google', + 'admin.transitProvider.transitousHint': + 'İcma GTFS lentləri. Pulsuz və açarsızdır, ən yaxşı əhatə dairəsi Avropadadır.', + 'admin.transitProvider.googleHint': + 'Transitous-un məlumatı olmayan regionlar üçün yuxarıdakı Google API açarından istifadə edir. Hər axtarış üçün ödəniş tutulur — açar təyin edilmədikdə Transitous istifadə olunur.', + 'admin.transitProvider.noKeyWarning': + 'Google seçilib, lakin Google API açarı konfiqurasiya edilməyib — ictimai nəqliyyat axtarışı hələ də Transitous istifadə edir. Yuxarıdakı API açarları bölməsində açar əlavə edin.', + 'admin.transitProvider.personalKeyWarning': + 'Yalnız şəxsi Google açarınız təyin edilib, buna görə digər üzvlərin ictimai nəqliyyat axtarışları yenə Transitous-a yönləndirilir. Açarı bütün sistemə tətbiq etmək üçün yuxarıda administrator kimi yadda saxlayın.', + 'admin.placeShadow.title': 'Məkan axtarışı jurnalı', + 'admin.placeShadow.subtitle': + 'Hansı axtarış nəticəsinin seçildiyini qeydə alın ki, başqa məkan indeksini sonradan real axtarışlarla müqayisə etmək mümkün olsun. Heç bir məlumat bu sistemdən kənara çıxmır və administrator istənilən vaxt jurnalı ixrac edə və ya silə bilər.', + 'admin.bagTracking.title': 'Çantaların izlənməsi', + 'admin.bagTracking.subtitle': + 'Baqaj elementləri üçün çəki və çanta təyin edilməsini aktivləşdirin', + 'admin.collab.chat.title': 'Çat', + 'admin.collab.chat.subtitle': 'Səyahətin birgə planlaşdırılması üçün real vaxt mesajlaşması', + 'admin.collab.notes.title': 'Qeydlər', + 'admin.collab.notes.subtitle': 'Paylaşılan qeydlər və sənədlər', + 'admin.collab.polls.title': 'Sorğular', + 'admin.collab.polls.subtitle': 'Qrup sorğuları və səsvermə', + 'admin.collab.whatsnext.title': 'Növbədə nə var', + 'admin.collab.whatsnext.subtitle': 'Fəaliyyət təklifləri və növbəti addımlar', + 'admin.tabs.config': 'Fərdiləşdirmə', + 'admin.tabs.defaults': 'İstifadəçi standartları', + 'admin.defaultSettings.title': 'Standart istifadəçi tənzimləmələri', + 'admin.defaultSettings.description': + 'Bütün sistem üçün standart dəyərləri təyin edin. Tənzimləməni dəyişməmiş istifadəçilər bu dəyərləri görəcəklər. Onların öz dəyişiklikləri həmişə üstün tutulur.', + 'admin.defaultSettings.saved': 'Standart dəyər yadda saxlanıldı', + 'admin.defaultSettings.reset': 'Daxili standart dəyərə sıfırla', + 'admin.defaultSettings.resetToBuiltIn': 'sıfırla', + 'admin.defaultSettings.mapProvider': 'Xəritə mühərriki', + 'admin.defaultSettings.mapProviderHint': + 'Bu sistemdəki hər kəs üçün standart xəritə. Hər istifadəçi bunu öz tənzimləmələrində dəyişə bilər.', + 'admin.defaultSettings.providerLeaflet': 'Standart (pulsuz)', + 'admin.defaultSettings.providerMapbox': 'Mapbox (3D)', + 'admin.defaultSettings.providerMapLibre': 'MapLibre (OpenFreeMap)', + 'admin.defaultSettings.mapboxToken': 'Paylaşılan Mapbox tokeni', + 'admin.defaultSettings.mapboxTokenHint': + 'Öz tokenini daxil etməmiş hər istifadəçi üçün istifadə edilir — beləliklə açarı ayrı-ayrılıqda paylaşmadan bütün sistem Mapbox əldə edir. Şifrələnmiş şəkildə saxlanılır.', + 'admin.defaultSettings.mapboxStyle': 'Xəritə üslubu', + 'admin.defaultSettings.mapboxStylePlaceholder': 'Üslub seçin…', + 'admin.defaultSettings.mapbox3d': '3D binalar və relyef', + 'admin.defaultSettings.mapboxQuality': 'Yüksək keyfiyyət rejimi', + 'admin.defaultSettings.cartoKey': 'Paylaşılan CARTO açarı', + 'admin.defaultSettings.cartoKeyHint': + 'Öz açarını daxil etməmiş hər istifadəçi üçün istifadə edilir, beləliklə bütün sistem su nişanı olmadan CARTO xəritə parçalarını əldə edir. Şifrələnmiş şəkildə saxlanılır.', + 'admin.tabs.templates': 'Baqaj şablonları', + 'admin.packingTemplates.title': 'Baqaj şablonları', + 'admin.packingTemplates.subtitle': 'Səyahətləriniz üçün təkrar istifadə edilə bilən baqaj siyahıları yaradın', + 'admin.packingTemplates.create': 'Yeni şablon', + 'admin.packingTemplates.namePlaceholder': 'Şablonun adı (məsələn, Çimərlik tətili)', + 'admin.packingTemplates.empty': 'Hələ heç bir şablon yaradılmayıb', + 'admin.packingTemplates.items': 'element', + 'admin.packingTemplates.categories': 'kateqoriya', + 'admin.packingTemplates.itemName': 'Elementin adı', + 'admin.packingTemplates.itemCategory': 'Kateqoriya', + 'admin.packingTemplates.categoryName': 'Kateqoriyanın adı (məsələn, Geyim)', + 'admin.packingTemplates.addCategory': 'Kateqoriya əlavə et', + 'admin.packingTemplates.created': 'Şablon yaradıldı', + 'admin.packingTemplates.deleted': 'Şablon silindi', + 'admin.packingTemplates.loadError': 'Şablonları yükləmək mümkün olmadı', + 'admin.packingTemplates.createError': 'Şablon yaratmaq mümkün olmadı', + 'admin.packingTemplates.deleteError': 'Şablonu silmək mümkün olmadı', + 'admin.packingTemplates.deleteCategoryError': 'Kateqoriyanı silmək mümkün olmadı', + 'admin.packingTemplates.deleteItemError': 'Elementi silmək mümkün olmadı', + 'admin.packingTemplates.saveError': 'Yadda saxlamaq mümkün olmadı', + 'admin.tabs.addons': 'Əlavələr', + 'admin.tabs.plugins': 'Plaginlər', + 'admin.tabs.storage': 'Saxlama', + 'admin.plugins.rescan': 'Yenidən skan et', + 'admin.plugins.rescanned': 'Plaginlər qovluğu yenidən skan edildi', + 'admin.plugins.upload': 'Plagin yüklə', + 'admin.plugins.dropToUpload': 'Quraşdırmaq üçün plagin .zip faylını buraya atın', + 'admin.plugins.uploaded': '“{name}” plagini yükləndi — işlətmək üçün aktivləşdirin', + 'admin.plugins.sideloaded': 'Əl ilə yüklənib', + 'admin.plugins.devLinkBadge': 'Tərtibatçı keçidi', + 'admin.plugins.devLinkHint': + 'Yerli yığma qovluğundan yüklənib və real məlumatlarla işləyərkən avtomatik yenilənir — yalnız tərtibat üçün', + 'admin.plugins.devLinkTitle': 'Yerli plagini əlaqələndir', + 'admin.plugins.devLinkPathPlaceholder': '/plagininize/mutleq/yol', + 'admin.plugins.devLinkButton': 'Əlaqələndir', + 'admin.plugins.devLinkLinked': '{id} əlaqələndirildi — işlətmək üçün aktivləşdirin', + 'admin.plugins.sideloadedHint': + 'Əl ilə yüklənib — reyestrdən deyil, imzalanmayıb və yoxlanılmayıb', + 'admin.plugins.browse': 'Plaginlərə bax', + 'admin.plugins.installed': 'Quraşdırılıb', + 'admin.plugins.install': 'Quraşdır', + 'admin.plugins.registryEmpty': 'Reyestrdə hələ heç bir plagin yoxdur.', + 'admin.plugins.actionError': 'Əməliyyat uğursuz oldu', + 'admin.plugins.activate': 'Aktivləşdir', + 'admin.plugins.activated': 'Plagin aktivləşdirildi', + 'admin.plugins.deactivate': 'Deaktiv et', + 'admin.plugins.deactivated': 'Plagin deaktiv edildi', + 'admin.plugins.viewErrors': 'Xəta jurnalına bax', + 'admin.plugins.errorLog': 'Xəta jurnalı', + 'admin.plugins.allowedHosts': 'İcazə verilən hostlar', + 'admin.plugins.allowedHosts.hint': + 'Bu plagin yalnız sizin adını göstərə biləcəyiniz xidmətlə əlaqə saxlayır. Əlaqə yarada biləcəyi hostları əlavə edin — başqa heç bir hosta qoşula bilməz.', + 'admin.plugins.allowedHosts.none': 'Hələ heç bir host əlavə edilməyib.', + 'admin.plugins.allowedHosts.unsupported': + 'Bu plagin operator tərəfindən təqdim edilən hostlardan istifadə etmir. İcazə verilən hostlar onun manifestində sabit şəkildə müəyyən edilib.', + 'admin.plugins.allowedHosts.restartNote': + 'Yadda saxlamaq plagini yenidən başladır ki, yeni siyahını tətbiq etsin.', + 'admin.plugins.allowedHosts.add': 'İcazə verilən host əlavə et', + 'admin.plugins.allowedHosts.count': '{n} icazə verilən host', + 'admin.plugins.operatorEgressPill': '+ əlavə etdiyiniz hostlar', + 'admin.plugins.operatorEgressHint': + 'Bu plagin yalnız sizin adını göstərə biləcəyiniz xidmətlə əlaqə saxlayır. Quraşdırdıqdan sonra ⋯ → İcazə verilən hostlar bölməsindən qoşula biləcəyi hostları əlavə edin. Başqa heç bir hosta qoşula bilməz.', + 'admin.plugins.noErrors': 'Heç bir xəta qeydə alınmayıb.', + 'admin.plugins.uninstalled': 'Plagin sistemdən silindi', + 'admin.plugins.uninstallTitle': 'Plagin sistemdən silinsin?', + 'admin.plugins.uninstallBody': + 'Bu əməliyyat plagini dayandırır, kodunu silir və bütün məlumatlarını təmizləyir. Bu əməliyyatı geri qaytarmaq mümkün deyil.', + 'admin.plugins.status.starting': 'Başladılır…', + 'admin.plugins.type.widget': 'Vidcet', + 'admin.plugins.type.page': 'Səhifə', + 'admin.plugins.type.integration': 'İnteqrasiya', + 'admin.plugins.type.trip-page': 'Səyahət səhifəsi', + 'admin.plugins.reviewed': 'Yoxlanılıb', + 'admin.plugins.unreviewed': 'Yoxlanılmayıb', + 'admin.plugins.updated': 'Plagin yeniləndi', + 'admin.plugins.updateTo': 'Yenilə → v{version}', + 'admin.plugins.enabledToggle': 'Plagini aktivləşdir', + 'plugins.notFound': 'Plagin tapılmadı', + 'plugins.frameLoadFailed': 'Bu plagini yükləmək mümkün olmadı.', + 'admin.plugins.title': 'Plaginlər', + 'admin.plugins.subtitle': 'Sisteminizdə üçüncü tərəf plaginlərini quraşdırın və idarə edin.', + 'admin.plugins.disabledTitle': 'Plaginlər deaktivdir', + 'admin.plugins.disabledBody': + 'Plaginlərin icra mühiti deaktiv edilib (TREK_PLUGINS_ENABLED). Administrator onu server konfiqurasiyasında aktivləşdirməyənə qədər heç bir plagin işləyə bilməz.', + 'admin.plugins.empty': 'Hələ heç bir plagin quraşdırılmayıb.', + 'admin.plugins.loadError': 'Plaginləri yükləmək mümkün olmadı.', + 'admin.plugins.scaffoldNote': + 'Plaginlərin quraşdırılması və aktivləşdirilməsi sonrakı yeniləmədə əlavə ediləcək. Bu panel hazırda yalnız quraşdırılmış plaginləri göstərir.', + 'admin.plugins.status.active': 'Aktiv', + 'admin.plugins.status.inactive': 'Qeyri-aktiv', + 'admin.plugins.status.disabled': 'Deaktivdir', + 'admin.plugins.status.error': 'Xəta', + 'admin.plugins.status.incompatible': 'Uyğun deyil', + 'admin.plugins.details': 'Ətraflı məlumat', + 'admin.plugins.detailError': 'Plagin məlumatlarını yükləmək mümkün olmadı.', + 'admin.plugins.permissionsTitle': 'İcazələr', + 'admin.plugins.noPermissions': 'Bu plagin heç bir xüsusi icazə tələb etmir.', + 'admin.plugins.egressNote': 'Bunlara qoşula bilər: {hosts}', + 'admin.plugins.setupTitle': 'Quraşdırma', + 'admin.plugins.noSetup': 'Dərhal işləyir — konfiqurasiya ediləcək heç nə yoxdur.', + 'admin.plugins.scope.instance': 'Bütün sistem üzrə', + 'admin.plugins.scope.user': 'Hər istifadəçi üçün', + 'admin.plugins.fieldRequired': 'Tələb olunur', + 'admin.plugins.sourceRepo': 'Mənbə kodu reyestri', + 'admin.plugins.reportIssue': 'Problem bildir', + 'admin.plugins.homepage': 'Ana səhifə', + 'admin.plugins.requiresTrek': 'TREK {version}+ tələb edir', + 'admin.plugins.reviewedOn': '{date} tarixində yoxlanılıb', + 'admin.plugins.perm.db:own': 'Öz məlumatlarını təcrid edilmiş verilənlər bazasında saxlamaq', + 'admin.plugins.perm.db:read:trips': + 'Əməliyyatı həyata keçirən istifadəçinin giriş icazəsi olan səyahətləri oxumaq', + 'admin.plugins.perm.db:read:users': + 'Əsas profil məlumatlarını oxumaq (ad və avatar — giriş məlumatları heç vaxt daxil deyil)', + 'admin.plugins.perm.db:read:costs': + 'Əməliyyatı həyata keçirən istifadəçinin giriş icazəsi olan xərcləri (büdcə elementlərini) oxumaq', + 'admin.plugins.perm.db:read:packing': + 'Əməliyyatı həyata keçirən istifadəçinin giriş icazəsi olan səyahətlərin baqaj siyahılarını oxumaq', + 'admin.plugins.perm.db:write:packing': + 'Əməliyyatı həyata keçirən istifadəçinin redaktə edə bildiyi səyahətlərdə baqaj elementləri yaratmaq, redaktə etmək və silmək', + 'admin.plugins.perm.weather:read': + 'Hostun keşlənmiş hava proqnozunu oxumaq (koordinatlar üzrə)', + 'admin.plugins.perm.db:read:categories': 'Ümumi məkan kateqoriyaları siyahısını oxumaq', + 'admin.plugins.perm.db:read:tags': + 'Əməliyyatı həyata keçirən istifadəçinin öz etiketlərini oxumaq', + 'admin.plugins.perm.db:write:tags': + 'Əməliyyatı həyata keçirən istifadəçinin öz etiketlərini yaratmaq, redaktə etmək və silmək', + 'admin.plugins.perm.db:read:todos': + 'Əməliyyatı həyata keçirən istifadəçinin giriş icazəsi olan səyahətlərin tapşırıqlarını oxumaq', + 'admin.plugins.perm.db:write:todos': + 'Əməliyyatı həyata keçirən istifadəçinin redaktə edə bildiyi səyahətlərdə tapşırıqlar yaratmaq, redaktə etmək və silmək', + 'admin.plugins.perm.db:write:atlas': + 'Ölkələri və regionları ziyarət edilmiş kimi işarələmək və əməliyyatı həyata keçirən istifadəçinin arzular siyahısını idarə etmək (Atlas əlavəsi tələb olunur)', + 'admin.plugins.perm.db:write:vacay': + 'Əməliyyatı həyata keçirən istifadəçinin aktiv planında məzuniyyət günlərini və şirkət tətillərini dəyişmək (Vacay əlavəsi tələb olunur)', + 'admin.plugins.perm.db:write:journal': + 'Əməliyyatı həyata keçirən istifadəçinin redaktə edə bildiyi səyahət gündəliklərində qeydlər yaratmaq, redaktə etmək və silmək, həmçinin onlara fotolar əlavə etmək (Journey əlavəsi tələb olunur)', + 'admin.plugins.perm.db:write:collections': + 'Əməliyyatı həyata keçirən istifadəçinin kolleksiya roluna uyğun olaraq kolleksiyalar yaratmaq və redaktə etmək, həmçinin onlara məkanlar əlavə etmək (Collections əlavəsi tələb olunur)', + 'admin.plugins.perm.db:write:files': + 'Əməliyyatı həyata keçirən istifadəçinin redaktə edə bildiyi səyahətlərə fayllar əlavə etmək (10 MB limit, bloklanmış uzantılar qəbul edilmir) və onların keçidlərini idarə etmək', + 'admin.plugins.perm.db:write:collab': + 'Əməliyyatı həyata keçirən istifadəçinin redaktə edə bildiyi səyahətlərdə qeydlər, sorğular və çat mesajları paylaşmaq (Collab əlavəsi tələb olunur)', + 'admin.plugins.perm.db:write:members': + 'Səyahətlərə istifadəçilər əlavə etmək — səyahətə giriş icazəsi verir; əməliyyatı həyata keçirən istifadəçinin üzvləri idarəetmə hüququ ilə məhdudlaşdırılır', + 'admin.plugins.perm.notify:send': + 'Əməliyyatı həyata keçirən istifadəçiyə və ya üzvü olduğu səyahətə bildiriş (zəng gələnlər qutusu + e-poçt/ntfy) göndərmək — ixtiyari alıcıya heç vaxt göndərilmir', + 'admin.plugins.perm.ai:invoke': + 'Administrator tərəfindən konfiqurasiya edilmiş süni intellekt provayderini əməliyyatı həyata keçirən istifadəçinin adından işə salmaq (mətn tamamlama + sənəd məlumatlarının çıxarılması) — plagin açarı heç vaxt saxlamır', + 'admin.plugins.perm.oauth:client': + 'Host vasitəsilə idarə edilən OAuth ilə sizin adınızdan üçüncü tərəf xidmətinə qoşulmaq (tokenləri host saxlayır, plagin onları heç vaxt görmür)', + 'admin.plugins.perm.db:read:files': + 'Əməliyyatı həyata keçirən istifadəçinin giriş icazəsi olan səyahətlərin fayllarını oxumaq', + 'admin.plugins.perm.db:read:journal': + 'Əməliyyatı həyata keçirən istifadəçinin səyahət gündəliklərini oxumaq (Journey əlavəsi tələb olunur)', + 'admin.plugins.perm.db:read:atlas': + 'Əməliyyatı həyata keçirən istifadəçinin ziyarət etdiyi ölkələri və regionları oxumaq (Atlas əlavəsi tələb olunur)', + 'admin.plugins.perm.db:read:vacay': + 'Əməliyyatı həyata keçirən istifadəçinin məzuniyyət planını oxumaq (Vacay əlavəsi tələb olunur)', + 'admin.plugins.perm.db:read:daynotes': + 'Əməliyyatı həyata keçirən istifadəçinin giriş icazəsi olan səyahətlərin günlük qeydlərini oxumaq', + 'admin.plugins.perm.db:read:collections': + 'Əməliyyatı həyata keçirən istifadəçinin yadda saxlanılmış məkan kolleksiyalarını oxumaq (Collections əlavəsi tələb olunur)', + 'admin.plugins.perm.db:write:costs': + 'Əməliyyatı həyata keçirən istifadəçinin redaktə edə bildiyi səyahətlərdə xərclər (büdcə elementləri) yaratmaq', + 'admin.plugins.perm.db:write:places': + 'Əməliyyatı həyata keçirən istifadəçinin redaktə edə bildiyi səyahətlərə məkan əlavə etmək, onları redaktə etmək və silmək', + 'admin.plugins.perm.db:write:days': + 'Əməliyyatı həyata keçirən istifadəçinin redaktə edə bildiyi səyahətlərə gün əlavə etmək, onları redaktə etmək və silmək', + 'admin.plugins.perm.db:write:itinerary': + 'Əməliyyatı həyata keçirən istifadəçinin redaktə edə bildiyi səyahət günlərinə məkan təyin etmək və onları günlərdən çıxarmaq', + 'admin.plugins.perm.db:write:trips': + 'Əməliyyatı həyata keçirən istifadəçinin redaktə edə bildiyi səyahətlərin məlumatlarını (başlıq, tarixlər, valyuta…) redaktə etmək', + 'admin.plugins.perm.db:write:reservations': + 'Əməliyyatı həyata keçirən istifadəçinin redaktə edə bildiyi səyahətlərdə rezervasiyalar yaratmaq, redaktə etmək və silmək', + 'admin.plugins.perm.db:write:accommodations': + 'Əməliyyatı həyata keçirən istifadəçinin redaktə edə bildiyi səyahətlərdə qalma yerləri yaratmaq, redaktə etmək və silmək', + 'admin.plugins.perm.db:write:daynotes': + 'Əməliyyatı həyata keçirən istifadəçinin redaktə edə bildiyi səyahətlərdə günlük qeydlər yaratmaq, redaktə etmək və silmək', + 'admin.plugins.perm.db:meta': + 'Əməliyyatı həyata keçirən istifadəçinin giriş icazəsi olan səyahətlərə, məkanlara və günlərə öz məxfi məlumatlarını əlavə etmək', + 'admin.plugins.perm.ws:broadcast:trip': 'Səyahət üzvlərinə real vaxt yeniləmələri göndərmək', + 'admin.plugins.perm.ws:broadcast:user': + 'Ayrı-ayrı istifadəçilərə real vaxt yeniləmələri göndərmək', + 'admin.plugins.perm.hook:photo-provider': 'Xatirələr bölməsinə fotolar təqdim etmək', + 'admin.plugins.perm.hook:calendar-source': 'Təqvimə tədbirlər təqdim etmək', + 'admin.plugins.perm.hook:place-detail-provider': + 'Məkana əlavə məlumatlar (rəylər, reytinqlər və keçidlər) təqdim etmək', + 'admin.plugins.perm.hook:search-provider': + 'TREK-in öz nəticələri ilə yanaşı, öz indeksindən məkan axtarışlarına cavab vermək', + 'admin.plugins.perm.hook:trip-warning-provider': + 'Səyahətlə bağlı doğrulama xəbərdarlıqları yaratmaq (planlayıcıda göstərilir)', + 'admin.plugins.perm.hook:table-contributor': + 'Səyahət görünüşlərinə (rezervasiyalar, məkanlar və günlər) sütunlar və əməliyyatlar əlavə etmək', + 'admin.plugins.perm.hook:map-marker-provider': + 'Səyahət xəritəsinə markerlər əlavə etmək (məsələn, rezervasiyaları və ya maraqlı nöqtələri göstərmək)', + 'admin.plugins.perm.hook:map-layer-provider': + 'Səyahət xəritəsində marşrutlar, dəhlizlər və zonalar çəkmək', + 'admin.plugins.perm.hook:route-provider': + 'Planlayıcının günlər üçün istifadə edə biləcəyi marşrut profilləri təqdim etmək (məsələn, şarj dayanacaqları ilə elektrik avtomobili marşrutu)', + 'admin.plugins.perm.hook:day-schedule-provider': + 'Gün planına vaxt qeydləri əlavə etmək (şarj dayanacaqları və təhlükəsizlik vaxt ehtiyatları)', + 'admin.plugins.perm.hook:day-tint-provider': + 'Gün planındakı günləri rənglə kodlaşdırmaq (məsələn, günün səyahətin hansı mərhələsinə aid olduğunu göstərmək)', + 'admin.plugins.cap.mcpTools': 'Süni intellekt alətləri yayımlayır', + 'admin.plugins.mcpToolsTitle': 'Yayımladığı süni intellekt alətləri', + 'admin.plugins.mcpToolsHint': + 'Köməkçi bunları istifadəçinin adından işə sala bilər. Hər biri yuxarıda verilmiş giriş icazələri ilə işləyir.', + 'admin.plugins.perm.mcp:tools': + 'Süni intellekt köməkçisinin sizin adınızdan işə sala biləcəyi alətlər yayımlamaq (köməkçinin öz icazələri ilə deyil, burada plaginə verdiyiniz giriş icazələri ilə işləyir)', + 'admin.plugins.perm.geolocation:read': + 'Plaginin görünüşlərindən biri açıq olduqda canlı mövqeyinizi istəmək (TREK onu plaginin öz icazəsi ilə deyil, bu saytın məkan icazəsi ilə oxuyur)', + 'admin.plugins.perm.hook:pdf-section-provider': + 'Səyahətin PDF ixracına mətn bölmələri əlavə etmək', + 'admin.plugins.perm.hook:atlas-layer-provider': + 'Atlas dünya xəritəsində ölkələri vurğulamaq (məsələn, arzular siyahıları və ya səyahət xəbərdarlıqları)', + 'admin.plugins.perm.hook:journal-entry-provider': + 'Səyahət gündəliyi qeydlərinə əlavə sətirlər (keçidlər və statistika) təqdim etmək', + 'admin.plugins.perm.hook:trip-card-provider': + 'İdarə panelindəki səyahət kartlarına kiçik nişanlar (vəziyyət və saylar) əlavə etmək', + 'admin.plugins.perm.hook:notification-channel': + 'Bildirişlərinizi əlavə kanal vasitəsilə çatdırmaq', + 'admin.plugins.perm.hook:user-data': + 'İstifadəçi haqqında saxladığı məlumatları silmək və ya ixrac etmək (GDPR hesab silmə və məlumat sorğuları)', + 'admin.plugins.perm.events:subscribe': + 'Əsas fəaliyyət hadisələrinə reaksiya vermək (yalnız hadisənin adı və səyahət, məzmun heç vaxt daxil deyil)', + 'admin.plugins.perm.jobs:run': + 'Elan etdiyi fon tapşırıqlarını cədvəl üzrə işə salmaq (istifadəçi konteksti yoxdur — istifadəçi məlumatlarını oxuya bilməz)', + 'admin.plugins.perm.http:outbound': 'Elan etdiyi hostlara xarici sorğular göndərmək', + 'admin.plugins.perm.db:read:collab': + 'Əməliyyatı həyata keçirən istifadəçinin giriş icazəsi olan səyahətlərin qeydlərini, sorğularını və çat mesajlarını oxumaq (Collab əlavəsi tələb olunur)', + 'admin.plugins.perm.db:read:files:content': + 'Əməliyyatı həyata keçirən istifadəçinin giriş icazəsi olan səyahətlərdəki faylların bayt məzmununu oxumaq', + 'admin.plugins.perm.db:create:trips': + 'Əməliyyatı həyata keçirən istifadəçiyə məxsus yeni səyahətlər yaratmaq', + 'admin.plugins.perm.rates:read': 'Hostun keşlənmiş valyuta məzənnələrini oxumaq', + 'admin.plugins.updateConsentTitle': 'Bu yeniləmə yeni icazələr tələb edir', + 'admin.plugins.updateConsentBody': + '{name} v{version} hələ vermədiyiniz hüquqları tələb edir. Yeni versiya quraşdırılıb, lakin siz təsdiqləyənə qədər deaktiv qalacaq.', + 'admin.plugins.updateNewPermissions': 'Yeni tələb edilən icazələr', + 'admin.plugins.updateNewEgress': 'Yeni xarici bağlantılar', + 'admin.plugins.updateApprove': 'Təsdiqlə və aktivləşdir', + 'admin.plugins.updateLater': 'Hələlik deaktiv saxla', + 'admin.plugins.updateKeptOff': + 'Yeniləmə quraşdırıldı — yeni icazələri təsdiqləyənə qədər deaktiv saxlanıldı', + 'admin.plugins.reviewedMeaning': + '“Yoxlanılıb” o deməkdir ki, TREK tərtibatçısı plaginin hər versiyasını zərərli proqramlara qarşı nəzərdən keçirib — keyfiyyətinə və ya işləyib-işləmədiyinə görə yox. Bu, plaginin zərərsiz olduğuna zəmanət vermir.', + 'admin.plugins.security.title': 'Plaginlərin necə təcrid edildiyi və məhdudiyyətlər', + 'admin.plugins.security.isolationTitle': 'Hər plagin təcrid edilmiş mühitdə işləyir', + 'admin.plugins.security.isolationBody': + 'Plagin yalnız öz fayllarını oxuya bilən ayrıca, ciddi məhdudlaşdırılmış proses kimi işləyir. O, verilənlər bazanızı, giriş sirrinizi və ya şifrələmə açarınızı oxuya, başqa proqramları işə sala və heç bir yerə fayl yaza bilməz. Onun interfeysi sessiya kukinizi oxuya və ətrafındakı TREK səhifəsinə müdaxilə edə bilməyən qapalı brauzer çərçivəsində işləyir.', + 'admin.plugins.security.permsTitle': 'İcazələr nə deməkdir', + 'admin.plugins.security.permsBody': + 'Quraşdırmadan əvvəl göstərilən icazələr plagin işləyərkən TREK-in tətbiq etdiyi sərt məhdudiyyətdir — plagin siyahıda olmayan heç bir əməliyyatı yerinə yetirə bilməz. Lakin onlar plaginin əslində nə etdiyini deyil, nə edə biləcəyini göstərir. Səyahətlərinizi oxumaq və serverə qoşulmaq icazəsi verilmiş plagin səyahətlərinizi həmin serverə göndərə bilər. Buna görə yalnız təsviri deyil, icazələri və xarici hostları da oxuyun.', + 'admin.plugins.security.limitsTitle': 'Nəyə zəmanət verə bilmərik', + 'admin.plugins.security.limitsBody': + 'Təcridetmə güclü proqram sərhədidir, lakin mütləq deyil. Plagin tam olaraq təsdiqlədiyiniz hüquqlarla işləyir. Buna görə həmin hüquqlar daxilində təsvirində göstəriləndən fərqli davrana və qanuni şəkildə əldə etdiyi məlumatları elan etdiyi hostlara göndərə bilər. TREK plaginin kodunun əslində nə etdiyini oxumur və qiymətləndirmir.', + 'admin.plugins.security.worstTitle': 'Ən pis ehtimal', + 'admin.plugins.security.worstBody': + 'Aktivləşdirdiyiniz zərərli plagin ona verdiyiniz məlumatlardan və bağlantılardan sui-istifadə edə bilər — məsələn, oxumağa icazəsi olan səyahətləri sızdıra bilər. O, parolları oğurlaya, saxta administrator girişi yarada, serverinizdə əmrlər işlədə və ya icazə vermədiyiniz məlumatlara çata bilməz. Zərər təsdiqlədiyiniz icazələrlə məhdudlaşır və plagini deaktiv etmək onu dayandırır.', + 'admin.plugins.security.reviewedTitle': '“Yoxlanılıb” nə deməkdir', + 'admin.plugins.security.reviewedBody': + 'Yoxlanılmış plagin hər versiyada TREK tərtibatçısı tərəfindən zərərli proqramlara qarşı əl ilə nəzərdən keçirilib — yaxşı işləyib-işləmədiyinə görə deyil, zərərli koda görə yoxlanılıb. Bu, plaginin zərərsiz olduğuna zəmanət deyil.', + 'admin.plugins.security.signedTitle': '“İmzalanıb” nə deməkdir', + 'admin.plugins.security.signedBody': + 'TREK-in hər quraşdırmada yoxladığı nəzarət cəmi faylların reyestrin təsdiqlədiyi fayllarla tam eyni olduğunu sübut edir. İmza isə başqa şeyi sübut edir: faylların müəllifdən gəldiyini və yalnız onun sahib olduğu açarla imzalandığını. İmzalanmış plagində hər ikisi mövcuddur. İmzalanmamış plagin təhlükəli demək deyil — sadəcə bir zəmanəti daha azdır və hazırda reyestrdəki plaginlərin əksəriyyəti imzalanmayıb.', + 'admin.plugins.signed': 'İmzalanıb', + 'admin.plugins.signedHint': + 'Quraşdırılarkən müəllifin imzalama açarı ilə doğrulanıb', + 'admin.plugins.unsigned': 'İmzalanmayıb', + 'admin.plugins.unsignedHint': + 'Fayllar reyestrin təsdiqlədiyi fayllarla uyğun gəlir, lakin onları müəlliflə əlaqələndirən heç nə yoxdur. Bir zəmanəti daha azdır — bu, təhlükəli olduğu demək deyil.', + 'admin.plugins.updateBlocked': 'Yeniləmə bloklandı — {reason}', + 'admin.plugins.reviewBlock': 'Yoxla', + 'admin.plugins.retrusted': 'Yeni imzalama açarına etibar edildi — plagin yeniləndi', + 'admin.plugins.sig.title': '{name} plagininin imzasını doğrulamaq mümkün olmadı', + 'admin.plugins.sig.keyChangedBody': + 'Müəllifin imzalama açarı bu plaginin ilkin quraşdırılmasında istifadə edilən açar deyil. Müəlliflər açarları dəyişə bilərlər — lakin plagini ələ keçirmiş hücumçu da tam olaraq belə görünərdi.', + 'admin.plugins.sig.invalidBody': + 'Fayllar müəllifin imzası ilə uyğun gəlmir. Bunlar müəllifin imzaladığı fayllar deyil — ya zədələniblər, ya da dəyişdiriliblər. Bu məhdudiyyəti keçmək mümkün deyil.', + 'admin.plugins.sig.missingBody': + 'Bu plagin quraşdırdığınız zaman imzalanmışdı, lakin yeni versiyada imza yoxdur. TREK bu geriləməni səssizcə qəbul etməyəcək. Bu məhdudiyyəti keçmək mümkün deyil.', + 'admin.plugins.sig.incompleteBody': + 'Reyestr qeydi yarımçıq imzalanıb: müəllif açarı göstərilib, lakin versiyada imza yoxdur və ya əksinə. Bu, plagin tərəfindəki xətadır. Bu məhdudiyyəti keçmək mümkün deyil.', + 'admin.plugins.sig.pinnedKey': 'Quraşdırılarkən istifadə edilən açar', + 'admin.plugins.sig.newKey': 'İndi təqdim etdiyi açar', + 'admin.plugins.sig.confirmOutOfBand': + 'TREK qanuni açar dəyişikliyini plagin ələ keçirilməsindən fərqləndirə bilmir — hər ikisi buradan eyni görünür. Qəbul etməzdən əvvəl yeni açarı artıq etibar etdiyiniz kanal vasitəsilə müəlliflə təsdiqləyin. Təsdiqlədikdən sonra plagin yenilənəcək və yeni açar yadda saxlanılacaq.', + 'admin.plugins.sig.retrustConfirm': 'Yeni açara etibar et və yenilə', + 'admin.plugins.sig.cancel': 'Etibar etmə', + 'admin.plugins.sig.consentUnsigned': + 'Bu versiyanı müəllifi ilə əlaqələndirən heç nə yoxdur — fayllar reyestrdəki fayllarla uyğun gəlir, lakin müəllif imzası daşımır.', + 'admin.plugins.security.trustTitle': 'Əsas nəticə', + 'admin.plugins.security.trustBody': + 'Plagin quraşdırmaq istənilən üçüncü tərəf tətbiqini quraşdırmağa bənzəyir: yalnız etibar etdiyiniz müəlliflərin kodunu əlavə edin və şübhə etdikdə əvvəlcə onu özünüz yoxlayın. TREK üçüncü tərəf plaginlərinə görə məsuliyyət daşımır.', + 'admin.plugins.runtimeOn': 'İcra mühiti aktivdir', + 'admin.plugins.tabDiscover': 'Kəşf et', + 'admin.plugins.searchPlaceholder': 'Plaginləri axtar…', + 'admin.plugins.filterType': 'Növ', + 'admin.plugins.filterStatus': 'Vəziyyət', + 'admin.plugins.sortBy': 'Sırala', + 'admin.plugins.allTypes': 'Bütün növlər', + 'admin.plugins.allStatuses': 'Hamısı', + 'admin.plugins.stateOff': 'Deaktiv', + 'admin.plugins.filterUpdate': 'Yeniləmə mövcuddur', + 'admin.plugins.sortName': 'Ad', + 'admin.plugins.sortRecent': 'Son yenilənənlər', + 'admin.plugins.sortUpdates': 'Əvvəlcə yeniləmələr', + 'admin.plugins.sortDownloads': 'Ən çox endirilənlər', + 'admin.plugins.updatesAvailable': 'Plaginləriniz üçün {count} yeniləmə mövcuddur.', + 'admin.plugins.newerNeedsTrek': 'v{version} mövcuddur — TREK {range} tələb edir', + 'admin.plugins.updateAll': 'Hamısını yenilə', + 'admin.plugins.versionsTitle': 'Versiyalar', + 'admin.plugins.versionPickerTitle': 'Versiyanı dəyiş — {name}', + 'admin.plugins.versionSwitch': '{version} versiyasına keç', + 'admin.plugins.versionNeedsTrek': 'TREK {range} tələb edir', + 'admin.plugins.changeVersion': 'Versiyanı dəyiş…', + 'admin.plugins.noVersions': 'Reyestrdə yayımlanmış versiya tapılmadı.', + 'admin.plugins.downgradeTitle': 'Bu plagin əvvəlki versiyaya qaytarılsın?', + 'admin.plugins.downgradeBody': + 'v{from} versiyasından v{to} versiyasına keçid: yeni versiyanın yazdığı məlumatlar saxlanılacaq və köhnə versiya onları anlamaya bilər.', + 'admin.plugins.downgradeConfirm': 'Əvvəlki versiyaya qaytar', + 'admin.plugins.updatesHeld': 'Yeniləmələr v{version} versiyasında dayandırılıb', + 'admin.plugins.resumeUpdates': 'Yeniləmələri davam etdir', + 'admin.plugins.updatesResumed': 'Yeniləmələr davam etdirildi', + 'admin.plugins.noMatchInstalled': 'Axtarışınıza uyğun quraşdırılmış plagin yoxdur.', + 'admin.plugins.noMatchRegistry': 'Reyestrdə axtarışınıza uyğun plagin yoxdur.', + 'admin.plugins.restart': 'Yenidən başlat', + 'admin.plugins.restarted': 'Plagin yenidən başladıldı', + 'admin.plugins.instanceSettings': 'Sistem tənzimləmələri', + 'admin.plugins.settingsSaved': 'Tənzimləmələr yadda saxlanıldı', + 'admin.plugins.settingsSavedRestarted': + 'Tənzimləmələr yadda saxlanıldı — plagin yenidən başladıldı', + 'admin.plugins.actions': 'Əməliyyatlar', + 'admin.plugins.actions.confirm': 'Bu əməliyyat icra edilsin?', + 'admin.plugins.actions.inactive': 'Əməliyyatlarını icra etmək üçün plagini aktivləşdirin', + 'admin.plugins.requiredMissing': '“{field}” tələb olunur', + 'admin.plugins.cap.readsTrips': 'Səyahətlərinizi oxuyur', + 'admin.plugins.cap.readsUsers': 'Əsas profil məlumatlarını oxuyur', + 'admin.plugins.cap.readsCosts': 'Xərclərinizi oxuyur', + 'admin.plugins.cap.readsPacking': 'Baqaj siyahılarını oxuyur', + 'admin.plugins.cap.readsFiles': 'Səyahət fayllarını oxuyur', + 'admin.plugins.cap.writesCosts': 'Xərclər əlavə edir', + 'admin.plugins.cap.writesPlaces': 'Məkanları redaktə edir', + 'admin.plugins.cap.writesDays': 'Günləri redaktə edir', + 'admin.plugins.cap.writesItinerary': 'Marşrutu redaktə edir', + 'admin.plugins.cap.writesTrips': 'Səyahətləri redaktə edir', + 'admin.plugins.cap.metadata': 'Metaməlumat əlavə edir', + 'admin.plugins.cap.widget': 'İdarə paneli vidceti', + 'admin.plugins.cap.heroWidget': 'Minik talonu vidceti', + 'admin.plugins.cap.placeSlot': 'Məkan məlumatları', + 'admin.plugins.cap.daySlot': 'Gün məlumatları', + 'admin.plugins.cap.reservationSlot': 'Rezervasiya məlumatları', + 'admin.plugins.cap.replacesTabs': 'Planlayıcı tablarını əvəz edir', + 'admin.plugins.cap.realtime': 'Real vaxt yeniləmələri', + 'admin.plugins.cap.notificationChannel': 'Bildiriş kanalı', + 'admin.plugins.cap.photos': 'Fotolar təqdim edir', + 'admin.plugins.cap.calendar': 'Təqvim tədbirləri təqdim edir', + 'admin.plugins.cap.placeDetails': 'Məkan məlumatlarını zənginləşdirir', + 'admin.plugins.cap.search': 'Axtarışlara cavab verir', + 'admin.plugins.cap.warnings': 'Problemləri işarələyir', + 'admin.plugins.cap.mapLayers': 'Xəritədə təsvirlər çəkir', + 'admin.plugins.cap.routing': 'Marşrutlaşdırma təqdim edir', + 'admin.plugins.cap.daySchedule': 'Plan vaxtları əlavə edir', + 'admin.plugins.cap.dayTint': 'Günləri rəngləndirir', + 'admin.plugins.cap.geolocation': 'Mövqeyinizi oxuyur', + 'admin.plugins.cap.events': 'Fəaliyyətlərə reaksiya verir', + 'admin.plugins.cap.requiresAddon': '{addon} əlavəsini tələb edir', + 'admin.plugins.cap.dependsOn': '{id} {version} tələb edir', + 'admin.plugins.dep.addonDisabledToast': 'Əvvəlcə tələb olunan əlavələri aktivləşdirin: {addons}', + 'admin.plugins.dep.autoEnabled': 'Əvvəlcə tələb olunan plaginlər aktivləşdirildi: {plugins}', + 'admin.plugins.dep.downloaded': '{id} endirildi', + 'admin.plugins.dep.resolveTitle': 'Çatışmayan asılılıqlar', + 'admin.plugins.dep.resolveBody': + '“{name}” aktivləşdirilməzdən əvvəl bu plaginlərin quraşdırılması tələb olunur.', + 'admin.plugins.dep.requires': '{version} tələb edir', + 'admin.plugins.dep.mismatch': '{wanted} tələb edir — {installed} quraşdırılıb', + 'admin.plugins.dep.download': 'Endir', + 'admin.plugins.dep.update': 'Yenilə', + 'admin.plugins.dep.resolveHint': + 'Öz asılılıqları daxil olmaqla ən son uyğun versiyanı endirir.', + 'admin.plugins.dep.trekIncompatible': + 'TREK {range} tələb edir — bu serverdə {host} işləyir', + 'admin.plugins.dep.trekUnknown': 'Hansı TREK versiyalarını dəstəklədiyini göstərmir', + 'admin.plugins.installCompatible': '{version} versiyasını quraşdır', + 'admin.plugins.installAnyway': 'Yenə də quraşdır', + 'admin.plugins.rangeBypass.pill': 'Versiya yoxlamaları deaktivdir', + 'admin.plugins.rangeBypass.pillHint': + 'TREK_PLUGINS_IGNORE_TREK_RANGE təyin edilib — plaginlər müəlliflərinin göstərdiyi TREK versiyalarından kənarda quraşdırıla və işləyə bilər', + 'admin.plugins.rangeBypass.title': 'Dəstəklədiyi TREK versiyalarından kənardır', + 'admin.plugins.rangeBypass.noticeTitle': + 'Dəstəklədiyi TREK versiyalarından kənarda quraşdırılıb', + 'admin.plugins.rangeBypass.body': + '“{name}” TREK {range} versiyalarını dəstəklədiyini göstərir, bu serverdə isə {host} işləyir. TREK buna yalnız TREK_PLUGINS_IGNORE_TREK_RANGE təyin edildiyi üçün icazə verir. Müəllif bu TREK versiyası üçün plaginin versiya aralığını yeniləməyib, buna görə işləyəcəyinə zəmanət yoxdur — nadir hallarda uyğun olmayan plagin TREK məlumatlarını korlaya bilər. Yalnız bu riski qəbul edirsinizsə davam edin.', + 'admin.plugins.rangeBypass.bodyUnknown': + '“{name}” hansı TREK versiyalarını dəstəklədiyini göstərmir; bu serverdə {host} işləyir. TREK buna yalnız TREK_PLUGINS_IGNORE_TREK_RANGE təyin edildiyi üçün icazə verir. Müəllifin onu bu TREK versiyasında sınaqdan keçirdiyinə dair məlumat yoxdur, buna görə işləyəcəyinə zəmanət verilmir — nadir hallarda uyğun olmayan plagin TREK məlumatlarını korlaya bilər. Yalnız bu riski qəbul edirsinizsə davam edin.', + 'admin.plugins.dep.trekBypassed': + 'TREK versiya aralığından ({range}) kənardır — versiya yoxlamaları deaktivdir', + 'admin.plugins.dep.trekBypassedUnknown': + 'TREK versiya aralığı göstərilməyib — versiya yoxlamaları deaktivdir', + 'admin.plugins.incompatible': 'Uyğun deyil', + 'admin.plugins.accessTitle': 'Giriş əldə edə biləcəyi məlumatlar', + 'admin.plugins.connectsTitle': 'Qoşulduğu xidmətlər', + 'admin.plugins.detailsTitle': 'Ətraflı məlumat', + 'admin.plugins.noAccess': 'Xüsusi giriş icazəsi tələb etmir.', + 'admin.plugins.metaVersion': 'Versiya', + 'admin.plugins.metaSize': 'Ölçü', + 'admin.plugins.metaRequires': 'Tələb edir', + 'admin.plugins.metaReviewed': 'Yoxlanılma tarixi', + 'admin.plugins.downloads': 'Endirmələr', + 'admin.addons.title': 'Əlavələr', + 'admin.addons.subtitle': + 'TREK təcrübənizi fərdiləşdirmək üçün funksiyaları aktivləşdirin və ya deaktiv edin.', + 'admin.addons.catalog.packing.name': 'Siyahılar', + 'admin.addons.catalog.packing.description': + 'Səyahətləriniz üçün baqaj siyahıları və tapşırıqlar', + 'admin.addons.catalog.budget.name': 'Xərclər', + 'admin.addons.catalog.budget.description': + 'Səyahət xərclərini izləyin və onları səyahətçilər arasında bölüşdürün', + 'admin.addons.catalog.documents.name': 'Sənədlər', + 'admin.addons.catalog.documents.description': 'Səyahət sənədlərini saxlayın və idarə edin', + 'admin.addons.catalog.vacay.name': 'Vacay', + 'admin.addons.catalog.vacay.description': 'Təqvim görünüşlü şəxsi məzuniyyət planlayıcısı', + 'admin.addons.catalog.atlas.name': 'Atlas', + 'admin.addons.catalog.atlas.description': + 'Ziyarət edilmiş ölkələr və səyahət statistikası ilə dünya xəritəsi', + 'admin.addons.catalog.collab.name': 'Collab', + 'admin.addons.catalog.collab.description': + 'Birgə planlaşdırma üçün qeydlər, sorğular, çat və təkliflər', + 'admin.addons.catalog.roadtrip.name': 'Avtomobil səyahəti', + 'admin.addons.catalog.roadtrip.description': + 'Marşrut üzərindəki dayanacaqlar, sürmə müddətləri və avtomatik yenilənən çatma vaxtları ilə avtomobil səfərlərini planlaşdırın', + 'admin.addons.catalog.memories.name': 'Fotolar (Immich)', + 'admin.addons.catalog.memories.description': + 'Immich sisteminiz vasitəsilə səyahət fotolarını paylaşın', + 'admin.addons.catalog.mcp.name': 'MCP', + 'admin.addons.catalog.mcp.description': + 'Süni intellekt köməkçisi inteqrasiyası üçün Model Context Protocol', + 'admin.addons.subtitleBefore': 'Funksiyaları aktiv və ya deaktiv edərək ', + 'admin.addons.subtitleAfter': ' təcrübənizi fərdiləşdirin.', + 'admin.addons.catalog.naver_list_import.name': 'Naver siyahısının idxalı', + 'admin.addons.catalog.naver_list_import.description': + 'Paylaşılan Naver Maps siyahısından məkanları idxal edin', + 'admin.addons.catalog.airtrail.name': 'AirTrail', + 'admin.addons.catalog.airtrail.description': + 'AirTrail sisteminizdən uçuşları sinxronlaşdırın', + 'admin.addons.catalog.dawarich.name': 'Dawarich', + 'admin.addons.catalog.dawarich.description': + 'Hər istifadəçinin özünün qoşduğu Dawarich sistemindən ziyarətləri və qeydə alınmış marşrutları oxuyun', + 'admin.addons.catalog.llm_parsing.name': 'Süni intellektlə təhlil', + 'admin.addons.catalog.llm_parsing.description': + 'Daxili təhlilçinin oxuya bilmədiyi rezervasiyaları seçdiyiniz süni intellekt modeli ilə oxuyur', + 'admin.addons.enabled': 'Aktivdir', + 'admin.addons.disabled': 'Deaktivdir', + 'admin.addons.type.trip': 'Səyahət', + 'admin.addons.type.global': 'Ümumi', + 'admin.addons.type.integration': 'İnteqrasiya', + 'admin.addons.tripHint': 'Hər səyahətdə tab kimi mövcuddur', + 'admin.addons.globalHint': 'Əsas naviqasiyada müstəqil bölmə kimi mövcuddur', + 'admin.addons.integrationHint': + 'Ayrıca səhifəsi olmayan server xidmətləri və API inteqrasiyaları', + 'admin.addons.toast.updated': 'Əlavə yeniləndi', + 'admin.addons.toast.error': 'Əlavəni yeniləmək mümkün olmadı', + 'admin.addons.group.count': '{total} əlavədən {enabled} aktivdir', + 'admin.addons.noAddons': 'Heç bir əlavə mövcud deyil', + 'admin.weather.title': 'Hava məlumatları', + 'admin.weather.badge': '24 mart 2026-cı ildən', + 'admin.weather.description': + 'TREK hava məlumatlarının mənbəyi kimi Open-Meteo-dan istifadə edir. Open-Meteo pulsuz, açıq mənbəli hava xidmətidir — API açarı tələb olunmur.', + 'admin.weather.forecast': '16 günlük hava proqnozu', + 'admin.weather.forecastDesc': 'Əvvəllər 5 gün idi (OpenWeatherMap)', + 'admin.weather.climate': 'Tarixi iqlim məlumatları', + 'admin.weather.climateDesc': + '16 günlük hava proqnozundan sonrakı günlər üçün son 85 ilin orta göstəriciləri', + 'admin.weather.requests': 'Gündə 10 000 sorğu', + 'admin.weather.requestsDesc': 'Pulsuzdur, API açarı tələb olunmur', + 'admin.weather.locationHint': + 'Hava məlumatları hər gün üçün koordinatları olan ilk məkana əsaslanır. Günə heç bir məkan təyin edilməyibsə, məkan siyahısındakı istənilən məkan istinad kimi istifadə olunur.', + 'admin.tabs.mcpTokens': 'MCP girişi', + 'admin.mcpTokens.title': 'MCP girişi', + 'admin.mcpTokens.subtitle': + 'Bütün istifadəçilər üzrə OAuth sessiyalarını və API tokenlərini idarə edin', + 'admin.mcpTokens.sectionTitle': 'API tokenləri', + 'admin.mcpTokens.owner': 'Sahib', + 'admin.mcpTokens.tokenName': 'Tokenin adı', + 'admin.mcpTokens.created': 'Yaradılıb', + 'admin.mcpTokens.lastUsed': 'Son istifadə', + 'admin.mcpTokens.never': 'Heç vaxt', + 'admin.mcpTokens.empty': 'Hələ heç bir MCP tokeni yaradılmayıb', + 'admin.mcpTokens.deleteTitle': 'Tokeni sil', + 'admin.mcpTokens.deleteMessage': + 'Bu əməliyyat tokeni dərhal ləğv edəcək. İstifadəçi bu token vasitəsilə MCP girişini itirəcək.', + 'admin.mcpTokens.deleteSuccess': 'Token silindi', + 'admin.mcpTokens.deleteError': 'Tokeni silmək mümkün olmadı', + 'admin.mcpTokens.loadError': 'Tokenləri yükləmək mümkün olmadı', + 'admin.oauthSessions.sectionTitle': 'OAuth sessiyaları', + 'admin.oauthSessions.clientName': 'Müştəri', + 'admin.oauthSessions.owner': 'Sahib', + 'admin.oauthSessions.scopes': 'İcazə sahələri', + 'admin.oauthSessions.created': 'Yaradılıb', + 'admin.oauthSessions.empty': 'Aktiv OAuth sessiyası yoxdur', + 'admin.oauthSessions.revokeTitle': 'Sessiyanı ləğv et', + 'admin.oauthSessions.revokeMessage': + 'Bu əməliyyat OAuth sessiyasını dərhal ləğv edəcək. Müştəri MCP girişini itirəcək.', + 'admin.oauthSessions.revokeSuccess': 'Sessiya ləğv edildi', + 'admin.oauthSessions.revokeError': 'Sessiyanı ləğv etmək mümkün olmadı', + 'admin.oauthSessions.loadError': 'OAuth sessiyalarını yükləmək mümkün olmadı', + 'admin.tabs.github': 'GitHub', + 'admin.audit.subtitle': + 'Təhlükəsizlik baxımından həssas və idarəetmə hadisələri (ehtiyat nüsxələr, istifadəçilər, MFA və tənzimləmələr).', + 'admin.audit.empty': 'Hələ heç bir audit qeydi yoxdur.', + 'admin.audit.refresh': 'Yenilə', + 'admin.audit.loadMore': 'Daha çox yüklə', + 'admin.audit.showing': '{count} yüklənib · cəmi {total}', + 'admin.audit.col.time': 'Vaxt', + 'admin.audit.col.user': 'İstifadəçi', + 'admin.audit.col.action': 'Əməliyyat', + 'admin.audit.col.resource': 'Resurs', + 'admin.audit.col.ip': 'IP', + 'admin.audit.col.details': 'Ətraflı məlumat', + 'admin.github.title': 'Buraxılış tarixçəsi', + 'admin.github.subtitle': '{repo} reyestrindən ən son yeniləmələr', + 'admin.github.latest': 'Ən son', + 'admin.github.prerelease': 'İlkin buraxılış', + 'admin.github.showDetails': 'Ətraflı məlumatı göstər', + 'admin.github.hideDetails': 'Ətraflı məlumatı gizlət', + 'admin.github.loadMore': 'Daha çox yüklə', + 'admin.github.loading': 'Yüklənir...', + 'admin.github.error': 'Buraxılışları yükləmək mümkün olmadı', + 'admin.github.by': 'müəllif', + 'admin.github.support': 'TREK-i inkişaf etdirməyə davam etməyimə kömək edir', + 'admin.update.available': 'Yeniləmə mövcuddur', + 'admin.update.text': 'TREK {version} mövcuddur. Sizdə {current} işləyir.', + 'admin.update.button': 'GitHub-da bax', + 'admin.update.install': 'Yeniləməni quraşdır', + 'admin.update.confirmTitle': 'Yeniləmə quraşdırılsın?', + 'admin.update.confirmText': + 'TREK {current} versiyasından {version} versiyasına yenilənəcək. Bundan sonra server avtomatik yenidən başladılacaq.', + 'admin.update.dataInfo': + 'Bütün məlumatlarınız (səyahətlər, istifadəçilər, API açarları, yükləmələr, Vacay, Atlas və büdcələr) qorunacaq.', + 'admin.update.warning': 'Yenidən başlatma zamanı tətbiq qısa müddət ərzində əlçatmaz olacaq.', + 'admin.update.confirm': 'İndi yenilə', + 'admin.update.installing': 'Yenilənir…', + 'admin.update.success': 'Yeniləmə quraşdırıldı! Server yenidən başladılır…', + 'admin.update.failed': 'Yeniləmə uğursuz oldu', + 'admin.update.backupHint': 'Yeniləməzdən əvvəl ehtiyat nüsxə yaratmağı tövsiyə edirik.', + 'admin.update.backupLink': 'Ehtiyat nüsxəyə keç', + 'admin.update.howTo': 'Necə yeniləməli', + 'admin.update.dockerText': + 'TREK sisteminiz Docker-də işləyir. {version} versiyasına yeniləmək üçün serverinizdə aşağıdakı əmrləri icra edin:', + 'admin.update.nonDockerText': + 'Bu TREK sistemi Docker-də işləmir. {version} versiyasına yeniləmək üçün əvvəl istifadə etdiyiniz quraşdırma və ya yeniləmə üsulunu yenidən icra edin — məsələn, Proxmox Community Scripts istifadə edirsinizsə, yeniləməni LXC konsolundan başladın:', + 'admin.update.wikiLink': 'Yeniləmə təlimatını aç', + 'admin.update.reloadHint': 'Bir neçə saniyədən sonra səhifəni yenidən yükləyin.', + 'admin.tabs.permissions': 'İcazələr', + 'admin.addons.catalog.journey.name': 'Səyahət gündəliyi', + 'admin.addons.catalog.journey.description': + 'Qeydiyyatlar, fotolar və gündəlik hekayələrlə səyahət izləmə və səyahət gündəliyi', + 'admin.addons.catalog.collections.name': 'Kolleksiyalar', + 'admin.addons.catalog.collections.description': + 'İstənilən səyahətdən məkanları adlandırılmış siyahılarda toplayın və yenidən istifadə edin', + 'admin.passkey.title': 'Keçid açarı ilə giriş', + 'admin.passkey.cardHint': + 'İstifadəçilərə keçid açarları (WebAuthn) ilə daxil olmağa icazə verin. Standart olaraq deaktivdir.', + 'admin.passkey.login': 'Keçid açarı ilə girişi aktivləşdir', + 'admin.passkey.loginHint': + '“Keçid açarı ilə daxil ol” seçimini göstərin və istifadəçilərə tənzimləmələrində keçid açarlarını qeydiyyatdan keçirməyə icazə verin.', + 'admin.passkey.notConfigured': + 'Bu quraşdırma üçün hələ heç bir WebAuthn domeni müəyyən edilmir. APP_URL və ya aşağıdakı Relying Party ID-ni təyin edin — həmin vaxta qədər keçid açarları gizli qalacaq.', + 'admin.passkey.rpId': 'Relying Party ID (domen)', + 'admin.passkey.rpIdHint': + 'Keçid açarlarının bağlandığı sadə domen, məsələn, trek.example.org. APP_URL əsasında müəyyən edilməsi üçün boş saxlayın. Sonradan dəyişdirilməsi mövcud keçid açarlarını etibarsız edəcək.', + 'admin.passkey.origins': 'İcazə verilən mənbələr', + 'admin.passkey.originsHint': + 'Vergüllə ayrılmış tam mənbələr, məsələn, https://trek.example.org. APP_URL istifadə etmək üçün boş saxlayın.', + 'admin.passkey.reset': 'Keçid açarlarını sıfırla', + 'admin.passkey.resetHint': + 'Bu istifadəçinin bütün keçid açarlarını silin (məsələn, cihaz itirildikdə). O, yenə də parolu ilə daxil ola bilər.', + 'admin.passkey.resetConfirm': '{name} üçün bütün keçid açarları silinsin?', + 'admin.passkey.resetDone': '{count} keçid açarı silindi', + 'admin.group.users': 'İstifadəçilər', + 'admin.group.config': 'Konfiqurasiya', + 'admin.group.integration': 'İnteqrasiyalar', + 'admin.group.maintenance': 'Texniki xidmət', + 'admin.invite.tripLabel': 'Səyahətə əlavə et (istəyə bağlı)', + 'admin.invite.tripNone': 'Səyahət yoxdur', + 'admin.invite.tripHint': + 'Yeni istifadəçi keçid vasitəsilə qeydiyyatdan keçdikdə avtomatik olaraq bu səyahətə əlavə edilir.', + 'admin.invite.boundTo': '{trip} səyahətinə əlavə edir', + 'admin.placesUsageTitle': 'Açarın hansı məqsədlərlə istifadə edildiyi', + 'admin.mapsKeyHintShort': + 'Fotolar, reytinqlər və iş saatları əlavə edir. Bundan sonra hər sorğu Google-a göndərilir.', + 'admin.amapKeyHintShort': + 'Materik Çinində məkan axtarışı üçün. JS API açarı deyil, veb xidməti açarı tələb olunur.', + 'admin.collab.links.subtitle': 'Paylaşılan keçidlər və əlfəcinlər', +}; + +export default admin; \ No newline at end of file diff --git a/shared/src/i18n/az/airport.ts b/shared/src/i18n/az/airport.ts new file mode 100644 index 000000000..e7a5ff4fb --- /dev/null +++ b/shared/src/i18n/az/airport.ts @@ -0,0 +1,7 @@ +import type { TranslationStrings } from '../types'; + +const airport: TranslationStrings = { + 'airport.searchPlaceholder': + 'Hava limanı kodu və ya şəhər (məs. FRA)', +}; +export default airport; \ No newline at end of file diff --git a/shared/src/i18n/az/atlas.ts b/shared/src/i18n/az/atlas.ts new file mode 100644 index 000000000..dcf322c63 --- /dev/null +++ b/shared/src/i18n/az/atlas.ts @@ -0,0 +1,84 @@ +import type { TranslationStrings } from '../types'; + +const atlas: TranslationStrings = { + 'atlas.subtitle': 'Dünya üzrə səyahət iziniz', + 'atlas.countries': 'Ölkələr', + 'atlas.trips': 'Səyahətlər', + 'atlas.places': 'Məkanlar', + + 'atlas.unmark': 'Sil', + 'atlas.confirmMark': + 'Bu ölkə ziyarət edilmiş kimi işarələnsin?', + 'atlas.confirmUnmark': + 'Bu ölkə ziyarət etdiyiniz ölkələr siyahısından silinsin?', + 'atlas.confirmUnmarkRegion': + 'Bu region ziyarət etdiyiniz yerlər siyahısından silinsin?', + 'atlas.markVisited': 'Ziyarət edilib kimi işarələ', + 'atlas.markVisitedHint': + 'Bu ölkəni ziyarət etdiyiniz ölkələr siyahısına əlavə edin', + 'atlas.markRegionVisitedHint': + 'Bu regionu ziyarət etdiyiniz yerlər siyahısına əlavə edin', + + 'atlas.addToBucket': 'Arzular siyahısına əlavə et', + 'atlas.addPoi': 'Məkan əlavə et', + 'atlas.searchCountry': 'Ölkə axtarın...', + 'atlas.searchPlaces': 'Məkanlar', + 'atlas.bucketNamePlaceholder': + 'Ad (ölkə, şəhər, məkan...)', + 'atlas.month': 'Ay', + 'atlas.year': 'İl', + 'atlas.addToBucketHint': + 'Ziyarət etmək istədiyiniz məkan kimi yadda saxlayın', + 'atlas.removeFromBucket': 'Arzular siyahısından sil', + 'atlas.removeFromBucketHint': + 'Bu ölkəni arzular siyahınızdan çıxarın', + 'atlas.bucketWhen': 'Nə vaxt ziyarət etməyi planlaşdırırsınız?', + 'atlas.bucketDuplicate': 'Artıq arzular siyahınızdadır', + + 'atlas.statsTab': 'Statistika', + 'atlas.bucketTab': 'Arzular siyahısı', + 'atlas.addBucket': 'Arzular siyahısına əlavə et', + 'atlas.bucketNotesPlaceholder': 'Qeydlər (istəyə bağlı)', + 'atlas.bucketEmpty': 'Arzular siyahınız boşdur', + 'atlas.bucketEmptyHint': + 'Ziyarət etməyi arzuladığınız yerləri əlavə edin', + + 'atlas.days': 'Gün', + 'atlas.visitedCountries': 'Ziyarət edilmiş ölkələr', + 'atlas.cities': 'Şəhərlər', + 'atlas.noData': 'Hələ səyahət məlumatı yoxdur', + 'atlas.noDataHint': + 'Dünya xəritənizi görmək üçün səyahət yaradın və məkanlar əlavə edin', + + 'atlas.nextTrip': 'Növbəti səyahət', + 'atlas.daysLeft': 'gün qalıb', + 'atlas.streak': 'Ardıcıllıq', + 'atlas.years': 'il', + 'atlas.yearInRow': 'ardıcıl il', + 'atlas.yearsInRow': 'ardıcıl il', + 'atlas.tripIn': 'səyahət ·', + 'atlas.tripsIn': 'səyahət ·', + 'atlas.since': 'etibarən', + + 'atlas.europe': 'Avropa', + 'atlas.asia': 'Asiya', + 'atlas.northAmerica': 'Şimali Amerika', + 'atlas.southAmerica': 'Cənubi Amerika', + 'atlas.africa': 'Afrika', + 'atlas.oceania': 'Okeaniya', + 'atlas.other': 'Digər', + + 'atlas.firstVisit': 'İlk səyahət', + 'atlas.lastVisitLabel': 'Son səyahət', + 'atlas.tripSingular': 'Səyahət', + 'atlas.tripPlural': 'Səyahətlər', + 'atlas.placeVisited': 'Ziyarət edilmiş məkan', + 'atlas.placesVisited': 'Ziyarət edilmiş məkanlar', + + 'atlas.planned': 'Planlaşdırılıb', + 'atlas.showPlanned': 'Planlaşdırılan ölkələri göstər', + 'atlas.plannedFor': 'Planlaşdırılan tarix', + 'atlas.antarctica': 'Antarktida', +}; + +export default atlas; \ No newline at end of file diff --git a/shared/src/i18n/az/backup.ts b/shared/src/i18n/az/backup.ts new file mode 100644 index 000000000..d8ebe1902 --- /dev/null +++ b/shared/src/i18n/az/backup.ts @@ -0,0 +1,76 @@ +import type { TranslationStrings } from '../types'; + +const backup: TranslationStrings = { + 'backup.title': 'Məlumatların ehtiyat nüsxəsi', + 'backup.subtitle': 'Verilənlər bazası və bütün yüklənmiş fayllar', + 'backup.refresh': 'Yenilə', + 'backup.upload': 'Ehtiyat nüsxəni yüklə', + 'backup.uploading': 'Yüklənir…', + 'backup.create': 'Ehtiyat nüsxə yarat', + 'backup.creating': 'Yaradılır…', + 'backup.empty': 'Hələ ehtiyat nüsxə yoxdur', + 'backup.createFirst': 'İlk ehtiyat nüsxəni yarat', + 'backup.download': 'Endir', + 'backup.restore': 'Bərpa et', + 'backup.confirm.restore': + '"{name}" ehtiyat nüsxəsi bərpa edilsin?\n\nBütün cari məlumatlar ehtiyat nüsxədəki məlumatlarla əvəz ediləcək.', + 'backup.confirm.uploadRestore': + '"{name}" ehtiyat nüsxə faylı yüklənib bərpa edilsin?\n\nBütün cari məlumatların üzərinə yazılacaq.', + 'backup.confirm.delete': '"{name}" ehtiyat nüsxəsi silinsin?', + 'backup.toast.loadError': 'Ehtiyat nüsxələri yükləmək mümkün olmadı', + 'backup.toast.created': 'Ehtiyat nüsxə uğurla yaradıldı', + 'backup.toast.createError': 'Ehtiyat nüsxə yaratmaq mümkün olmadı', + 'backup.toast.restored': 'Ehtiyat nüsxə bərpa edildi. Səhifə yenidən yüklənəcək…', + 'backup.toast.restoreError': 'Bərpa etmək mümkün olmadı', + 'backup.toast.uploadError': 'Yükləmək mümkün olmadı', + 'backup.toast.deleted': 'Ehtiyat nüsxə silindi', + 'backup.toast.deleteError': 'Silmək mümkün olmadı', + 'backup.toast.downloadError': 'Endirmək mümkün olmadı', + 'backup.toast.settingsSaved': 'Avtomatik ehtiyat nüsxələmə tənzimləmələri yadda saxlanıldı', + 'backup.toast.settingsError': 'Tənzimləmələri yadda saxlamaq mümkün olmadı', + 'backup.auto.title': 'Avtomatik ehtiyat nüsxələmə', + 'backup.auto.subtitle': 'Cədvəl üzrə avtomatik ehtiyat nüsxələmə', + 'backup.auto.enable': 'Avtomatik ehtiyat nüsxələməni aktivləşdir', + 'backup.auto.enableHint': 'Ehtiyat nüsxələr seçilmiş cədvəl üzrə avtomatik yaradılacaq', + 'backup.auto.interval': 'İnterval', + 'backup.auto.hour': 'İcra saatı', + 'backup.auto.hourHint': 'Serverin yerli vaxtı ({format} formatı)', + 'backup.auto.dayOfWeek': 'Həftənin günü', + 'backup.auto.dayOfMonth': 'Ayın günü', + 'backup.auto.dayOfMonthHint': 'Bütün aylarla uyğunluq üçün 1–28 aralığı ilə məhdudlaşdırılıb', + 'backup.auto.scheduleSummary': 'Cədvəl', + 'backup.auto.summaryDaily': 'Hər gün saat {hour}:00-da', + 'backup.auto.summaryWeekly': 'Hər {day} saat {hour}:00-da', + 'backup.auto.summaryMonthly': 'Hər ayın {day}-ci günü saat {hour}:00-da', + 'backup.auto.envLocked': 'Docker', + 'backup.auto.envLockedHint': + 'Avtomatik ehtiyat nüsxələmə Docker mühit dəyişənləri vasitəsilə konfiqurasiya edilib. Bu tənzimləmələri dəyişmək üçün docker-compose.yml faylını yeniləyin və konteyneri yenidən başladın.', + 'backup.auto.copyEnv': 'Docker mühit dəyişənlərini kopyala', + 'backup.auto.envCopied': 'Docker mühit dəyişənləri mübadilə buferinə kopyalandı', + 'backup.auto.keepLabel': 'Köhnə ehtiyat nüsxələri bu müddətdən sonra sil', + 'backup.dow.sunday': 'Baz', + 'backup.dow.monday': 'B.e', + 'backup.dow.tuesday': 'Ç.a', + 'backup.dow.wednesday': 'Ç', + 'backup.dow.thursday': 'C.a', + 'backup.dow.friday': 'C', + 'backup.dow.saturday': 'Ş', + 'backup.interval.hourly': 'Hər saat', + 'backup.interval.daily': 'Hər gün', + 'backup.interval.weekly': 'Hər həftə', + 'backup.interval.monthly': 'Hər ay', + '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': 'Həmişə saxla', + 'backup.restoreConfirmTitle': 'Ehtiyat nüsxə bərpa edilsin?', + 'backup.restoreWarning': + 'Bütün cari məlumatlar (səyahətlər, məkanlar, istifadəçilər və yükləmələr) daimi olaraq ehtiyat nüsxədəki məlumatlarla əvəz ediləcək. Bu əməliyyatı geri qaytarmaq mümkün deyil.', + 'backup.restoreTip': + 'Məsləhət: Bərpa etməzdən əvvəl cari vəziyyətin ehtiyat nüsxəsini yaradın.', + 'backup.restoreConfirm': 'Bəli, bərpa et', +}; + +export default backup; \ No newline at end of file diff --git a/shared/src/i18n/az/budget.ts b/shared/src/i18n/az/budget.ts new file mode 100644 index 000000000..a2735133c --- /dev/null +++ b/shared/src/i18n/az/budget.ts @@ -0,0 +1,196 @@ +import type { TranslationStrings } from '../types'; + +const budget: TranslationStrings = { + 'costs.confirm.deleteTitle': 'Xərc silinsin?', + 'costs.confirm.deleteBody': '“{name}” həmişəlik silinəcək.', + + 'budget.title': 'Büdcə', + 'budget.exportCsv': 'CSV ixrac et', + 'budget.emptyTitle': 'Hələ büdcə yaradılmayıb', + 'budget.emptyText': + 'Səyahət büdcənizi planlaşdırmaq üçün kateqoriyalar və qeydlər yaradın', + 'budget.emptyPlaceholder': 'Kateqoriyanın adını daxil edin...', + 'budget.createCategory': 'Kateqoriya yarat', + 'budget.category': 'Kateqoriya', + 'budget.categoryName': 'Kateqoriyanın adı', + + 'budget.table.name': 'Ad', + 'budget.table.total': 'Ümumi', + 'budget.table.persons': 'Nəfər', + 'budget.table.days': 'Gün', + 'budget.table.perPerson': 'Nəfər başına', + 'budget.table.perDay': 'Gün başına', + 'budget.table.perPersonDay': 'Nəfər/gün', + 'budget.table.note': 'Qeyd', + 'budget.table.date': 'Tarix', + + 'budget.newEntry': 'Yeni qeyd', + 'budget.defaultEntry': 'Yeni qeyd', + 'budget.defaultCategory': 'Yeni kateqoriya', + 'budget.total': 'Ümumi', + 'budget.totalBudget': 'Ümumi büdcə', + 'budget.byCategory': 'Kateqoriya üzrə', + 'budget.editTooltip': 'Redaktə etmək üçün klikləyin', + 'budget.linkedToReservation': + 'Rezervasiya ilə əlaqələndirilib — adı orada redaktə edin', + 'budget.confirm.deleteCategory': + '“{name}” kateqoriyasını daxilindəki {count} qeydlə birlikdə silmək istədiyinizə əminsiniz?', + 'budget.deleteCategory': 'Kateqoriyanı sil', + 'budget.perPerson': 'Nəfər başına', + 'budget.paid': 'Ödənilib', + 'budget.open': 'Açıq', + 'budget.noMembers': 'Heç bir üzv təyin edilməyib', + + 'budget.settlement': 'Hesablaşma', + 'budget.settlementInfo': + 'Büdcə qeydində üzvün avatarına klikləyərək onu yaşıl rənglə işarələyin — bu, həmin şəxsin ödəniş etdiyini bildirir. Bundan sonra hesablaşma kimin kimə nə qədər borclu olduğunu göstərəcək.', + 'budget.netBalances': 'Xalis balanslar', + 'budget.categoriesLabel': 'kateqoriya', + + 'costs.you': 'Siz', + 'costs.youShort': 'S', + 'costs.youLower': 'siz', + 'costs.youOwe': 'Sizin borcunuz', + 'costs.youOweSub': 'Başqalarına ödəməli olduğunuz məbləğ', + 'costs.youreOwed': 'Sizə olan borc', + 'costs.youreOwedSub': 'Başqalarının sizə ödəməli olduğu məbləğ', + 'costs.totalSpend': 'Səyahətin ümumi xərci', + 'costs.totalSpendSub': 'Bütün səyahətçilər üzrə', + 'costs.to': 'Kimə', + 'costs.from': 'Kimdən', + 'costs.allSettled': 'Bütün hesablar bağlanıb', + 'costs.nothingOwed': 'Sizə ödəniləcək borc yoxdur', + 'costs.yourShare': 'Sizin payınız', + 'costs.youPaid': 'Siz ödəmisiniz', + 'costs.outstanding': 'Gözləyən məbləğ', + 'costs.outstandingSub': 'Ödəyicisi hələ təyin edilməyən xərclər', + 'costs.outstandingItems': 'xərc üçün ödəyici təyin edilməlidir', + + 'costs.expenses': 'Xərclər', + 'costs.entries': '{count} qeyd', + 'costs.searchPlaceholder': 'Xərcləri axtarın…', + 'costs.filter.all': 'Hamısı', + 'costs.filter.mine': 'Mənim ödədiklərim', + 'costs.filter.owed': 'Mənə borcludurlar', + 'costs.filter.allCategories': 'Bütün kateqoriyalar', + 'costs.filter.allDays': 'Bütün günlər', + 'costs.expensesCount': '{count} xərc', + + 'costs.addExpense': 'Xərc əlavə et', + 'costs.editExpense': 'Xərci redaktə et', + 'costs.noMatch': 'Axtarışınıza uyğun xərc yoxdur.', + 'costs.emptyText': 'Hələ xərc yoxdur. İlk xərci əlavə edin.', + 'costs.spent': '{amount} xərclənib', + 'costs.noDate': 'Tarix yoxdur', + 'costs.noOnePaid': 'Hələ heç kim ödəməyib', + 'costs.youLent': '{amount} borc verdiniz', + 'costs.youBorrowed': '{amount} borc aldınız', + + 'costs.settleUp': 'Hesablaş', + 'costs.history': 'Tarixçə', + 'costs.everyoneSquare': 'Hamının hesabı bağlanıb', + 'costs.nothingOutstanding': + 'Hazırda gözləyən heç bir ödəniş yoxdur.', + 'costs.pay': 'ödə', + 'costs.pays': 'ödəyir', + 'costs.settle': 'Hesablaş', + 'costs.balances': 'Balanslar', + + 'costs.finalBudget': 'Yekun büdcə', + 'costs.finalExpenses': 'Ödənilmiş xərclər', + 'costs.finalReimbursed': 'Xalis geri ödənişlər', + 'costs.finalPending': 'Gözləyən geri ödənişlər', + 'costs.byCategory': 'Kateqoriya üzrə', + 'costs.noCategories': 'Hələ xərc yoxdur.', + + 'costs.settleHistory': 'Hesablaşma tarixçəsi', + 'costs.noSettlements': 'Hələ hesablaşmış ödəniş yoxdur.', + 'costs.paymentsSettled': '{count} ödəniş üzrə hesablaşılıb', + 'costs.paid': 'ödədi', + 'costs.undo': 'Geri qaytar', + + 'costs.whatFor': 'Bu xərc nə üçün idi?', + 'costs.namePlaceholder': + 'məs. Şam yeməyi, suvenirlər, yanacaq…', + 'costs.note': 'Qeyd', + 'costs.notePlaceholder': + 'Nələri əhatə etdiyi, kimin nə qədər qaytarmalı olduğu…', + 'costs.addNote': 'Qeyd əlavə et', + 'costs.showNote': 'Qeydi göstər', + 'costs.hideNote': 'Qeydi gizlət', + + 'costs.totalAmount': 'Ümumi məbləğ', + 'costs.currency': 'Valyuta', + 'costs.day': 'Gün', + 'costs.rateLabel': '1 {from} məbləğinin {to} qarşılığı', + 'costs.category': 'Kateqoriya', + + 'costs.whoPaid': 'Kim ödədi?', + 'costs.multiplePayers': 'Bir neçə nəfər ödədi', + 'costs.singlePayer': 'Bir nəfər ödədi', + 'costs.payersUnbalanced': + 'Ödəyicilərin məbləğlərinin cəmi {amount} olmalıdır', + + 'costs.splitBetween': 'Bərabər bölüşdürüləcək şəxslər', + 'costs.split': 'Bölüşdür', + 'costs.splitEqually': 'Bərabər', + 'costs.splitCustom': 'Fərdi', + 'costs.splitTicket': 'Qəbz üzrə', + 'costs.pickSomeone': + 'Bölüşdürmək üçün ən azı bir nəfər seçin.', + 'costs.splitSummary': + '{count} nəfər arasında bölünüb · hərəsinə {amount}', + + 'costs.cat.accommodation': 'Yaşayış yeri', + 'costs.cat.food': 'Yemək və içki', + 'costs.cat.groceries': 'Ərzaq', + 'costs.cat.transport': 'Nəqliyyat', + 'costs.cat.flights': 'Uçuşlar', + 'costs.cat.activities': 'Fəaliyyətlər', + 'costs.cat.sightseeing': 'Görməli yerlər', + 'costs.cat.shopping': 'Alış-veriş', + 'costs.cat.fees': 'Rüsumlar və biletlər', + 'costs.cat.health': 'Sağlamlıq', + 'costs.cat.tips': 'Bəxşişlər', + 'costs.cat.fuel': 'Yanacaq', + 'costs.cat.parking': 'Parkinq', + 'costs.cat.other': 'Digər', + + 'costs.daysCount': '{count} gün', + 'costs.travelers': '{count} səyahətçi', + 'costs.liveRate': 'cari məzənnə', + + 'costs.settleAll': 'Hamısı üzrə hesablaş', + 'costs.payment': 'Ödəniş', + 'costs.editPayment': 'Ödənişi redaktə et', + 'costs.addPayment': 'Ödəniş əlavə et', + + 'costs.unfinished': 'Tamamlanmayıb', + 'costs.unfinishedHint': 'Yalnız ümumi məbləğ — hələ hesablaşmayıb', + 'costs.tapToInclude': 'Daxil etmək üçün toxunun', + 'costs.amount': 'Məbləğ', + + 'costs.ticketItemName': 'Elementin adı', + 'costs.ticketSplitting': 'Bölüşdürmə:', + 'costs.ticketAddItem': 'Element əlavə et', + 'costs.ticketShares': 'Fərdi paylar', + 'costs.excluded': 'Daxil edilməyib', + 'costs.splitBalanced': 'Bölüşdürmə ümumi məbləğə uyğundur', + 'costs.splitSumUnder': + 'Payların cəmi: {total} məbləğindən {sum} ({diff} azdır)', + 'costs.splitSumOver': + 'Payların cəmi: {total} məbləğindən {sum} ({diff} çoxdur)', + 'costs.toggleSign': + 'Xərc və geri ödəniş arasında keçid et', + + 'costs.receipts': 'Qəbzlər', + 'costs.receiptsTitle': 'Qəbzlər və fakturalar', + 'costs.attachReceipt': 'Qəbz / faktura əlavə et', + 'costs.noReceipts': 'Əlavə edilmiş qəbz yoxdur', + 'costs.deleteReceipt': 'Qəbzi sil', + 'costs.viewReceipt': 'Qəbzə bax', + 'costs.receiptLeftBehind': + 'Yadda saxlamaq mümkün olmadı və yüklənmiş {count} qəbz hələ də qalır. Onları Fayllar bölməsindən silin.', +}; + +export default budget; \ No newline at end of file diff --git a/shared/src/i18n/az/categories.ts b/shared/src/i18n/az/categories.ts new file mode 100644 index 000000000..2fbe6f739 --- /dev/null +++ b/shared/src/i18n/az/categories.ts @@ -0,0 +1,30 @@ +import type { TranslationStrings } from '../types'; + +const categories: TranslationStrings = { + 'categories.title': 'Kateqoriyalar', + 'categories.subtitle': 'Məkan kateqoriyalarını idarə edin', + 'categories.new': 'Yeni kateqoriya', + 'categories.empty': 'Hələ kateqoriya yoxdur', + 'categories.namePlaceholder': 'Kateqoriyanın adı', + 'categories.icon': 'İkon', + 'categories.color': 'Rəng', + 'categories.customColor': 'Fərdi rəng seç', + 'categories.preview': 'Önizləmə', + 'categories.defaultName': 'Kateqoriya', + 'categories.update': 'Yenilə', + 'categories.create': 'Yarat', + + 'categories.confirm.delete': + 'Kateqoriya silinsin? Bu kateqoriyadakı məkanlar silinməyəcək.', + + 'categories.toast.loadError': + 'Kateqoriyaları yükləmək mümkün olmadı', + 'categories.toast.nameRequired': 'Ad daxil edin', + 'categories.toast.updated': 'Kateqoriya yeniləndi', + 'categories.toast.created': 'Kateqoriya yaradıldı', + 'categories.toast.saveError': 'Yadda saxlamaq mümkün olmadı', + 'categories.toast.deleted': 'Kateqoriya silindi', + 'categories.toast.deleteError': 'Silmək mümkün olmadı', +}; + +export default categories; \ No newline at end of file diff --git a/shared/src/i18n/az/collab.ts b/shared/src/i18n/az/collab.ts new file mode 100644 index 000000000..bf2e96bdc --- /dev/null +++ b/shared/src/i18n/az/collab.ts @@ -0,0 +1,119 @@ +import type { TranslationStrings } from '../types'; + +const collab: TranslationStrings = { + 'collab.chat.readOnly': 'Bu çat yalnız oxuma rejimindədir', + 'collab.chat.messageOptions': 'Mesaj seçimləri', + + 'collab.polls.confirmDeleteTitle': 'Sorğu silinsin?', + 'collab.polls.confirmDeleteBody': 'Bu sorğu həmişəlik silinəcək.', + 'collab.polls.countdownDaysHours': '{d} gün {h} saat qalıb', + 'collab.polls.countdownHoursMinutes': '{h} saat {m} dəq. qalıb', + 'collab.polls.countdownMinutes': '{m} dəq. qalıb', + 'collab.polls.clearDeadline': 'Son tarixi sil', + + 'collab.tabs.chat': 'Çat', + 'collab.tabs.notes': 'Qeydlər', + 'collab.tabs.polls': 'Sorğular', + 'collab.tabs.links': 'Linklər', + + 'collab.links.add': 'Link əlavə et', + 'collab.chat.imageRejected': + 'Yalnız ölçüsü 10 MB-dək olan JPEG, PNG, GIF və WebP şəkillərinə icazə verilir', + 'collab.links.cancel': 'Ləğv et', + 'collab.links.save': 'Linki yadda saxla', + 'collab.links.titlePlaceholder': 'Linkin başlığı', + 'collab.links.urlPlaceholder': 'https://...', + 'collab.links.empty': 'Hələ paylaşılan link yoxdur', + 'collab.links.pin': 'Linki bərkit', + 'collab.links.unpin': 'Linkin bərkidilməsini ləğv et', + 'collab.links.delete': 'Linki sil', + 'collab.links.edit': 'Linki redaktə et', + 'collab.links.open': 'Linki aç', + 'collab.links.confirmDeleteTitle': 'Link silinsin?', + 'collab.links.confirmDeleteBody': 'Bu link həmişəlik silinəcək.', + + 'collab.whatsNext.title': 'Növbədə nə var', + 'collab.whatsNext.today': 'Bu gün', + 'collab.whatsNext.tomorrow': 'Sabah', + 'collab.whatsNext.empty': 'Qarşıdan gələn fəaliyyət yoxdur', + 'collab.whatsNext.until': '–', + 'collab.whatsNext.emptyHint': + 'Vaxtı müəyyən edilmiş fəaliyyətlər burada görünəcək', + + 'collab.chat.send': 'Göndər', + 'collab.chat.placeholder': 'Mesaj yazın...', + 'collab.chat.empty': 'Söhbətə başlayın', + 'collab.chat.emptyHint': + 'Mesajlar bütün səyahət üzvləri ilə paylaşılır', + 'collab.chat.emptyDesc': + 'Səyahət qrupunuzla ideyaları, planları və yenilikləri paylaşın', + 'collab.chat.today': 'Bu gün', + 'collab.chat.yesterday': 'Dünən', + 'collab.chat.deletedMessage': 'mesajı sildi', + 'collab.chat.reply': 'Cavab ver', + 'collab.chat.loadMore': 'Əvvəlki mesajları yüklə', + 'collab.chat.justNow': 'indicə', + 'collab.chat.minutesAgo': '{n} dəq. əvvəl', + 'collab.chat.hoursAgo': '{n} saat əvvəl', + + 'collab.notes.title': 'Qeydlər', + 'collab.notes.new': 'Yeni qeyd', + 'collab.notes.empty': 'Hələ qeyd yoxdur', + 'collab.notes.emptyHint': 'İdeya və planlarınızı qeyd etməyə başlayın', + 'collab.notes.all': 'Hamısı', + 'collab.notes.titlePlaceholder': 'Qeydin başlığı', + 'collab.notes.content': 'Məzmun', + 'collab.notes.removeFile': '{name} faylını sil', + 'collab.notes.contentPlaceholder': 'Bir şey yazın...', + 'collab.notes.categoryPlaceholder': 'Kateqoriya', + 'collab.notes.newCategory': 'Yeni kateqoriya...', + 'collab.notes.category': 'Kateqoriya', + 'collab.notes.noCategory': 'Kateqoriya yoxdur', + 'collab.notes.color': 'Rəng', + 'collab.notes.save': 'Yadda saxla', + 'collab.notes.cancel': 'Ləğv et', + 'collab.notes.edit': 'Redaktə et', + 'collab.notes.delete': 'Sil', + 'collab.notes.confirmDeleteTitle': 'Qeyd silinsin?', + 'collab.notes.confirmDeleteBody': 'Bu qeyd həmişəlik silinəcək.', + 'collab.notes.pin': 'Bərkit', + 'collab.notes.unpin': 'Bərkidilməni ləğv et', + 'collab.notes.daysAgo': '{n} gün əvvəl', + 'collab.notes.categorySettings': 'Kateqoriyaları idarə et', + 'collab.notes.create': 'Yarat', + 'collab.notes.website': 'Veb-sayt', + 'collab.notes.websitePlaceholder': 'https://...', + 'collab.notes.attachFiles': 'Fayllar əlavə et', + 'collab.notes.noCategoriesYet': 'Hələ kateqoriya yoxdur', + 'collab.notes.emptyDesc': 'Başlamaq üçün qeyd yaradın', + + 'collab.polls.title': 'Sorğular', + 'collab.polls.new': 'Yeni sorğu', + 'collab.polls.empty': 'Hələ sorğu yoxdur', + 'collab.polls.emptyHint': 'Qrupa sual verin və birlikdə səs verin', + 'collab.polls.question': 'Sual', + 'collab.polls.questionPlaceholder': 'Nə edək?', + 'collab.polls.markdownHint': 'Markdown dəstəklənir', + 'collab.polls.addOption': '+ Seçim əlavə et', + 'collab.polls.optionPlaceholder': 'Seçim {n}', + 'collab.polls.create': 'Sorğu yarat', + 'collab.polls.close': 'Bağla', + 'collab.polls.closed': 'Bağlanıb', + 'collab.polls.votes': '{n} səs', + 'collab.polls.vote': '{n} səs', + 'collab.polls.multipleChoice': 'Çoxseçimli', + 'collab.polls.multiChoice': 'Çoxseçimli', + 'collab.polls.deadline': 'Son tarix', + 'collab.polls.option': 'Seçim', + 'collab.polls.options': 'Seçimlər', + 'collab.polls.delete': 'Sil', + 'collab.polls.closedSection': 'Bağlanmış sorğular', + + 'collab.chat.imageLimit': + 'Hər mesaja maksimum {max} şəkil əlavə edə bilərsiniz', + 'collab.chat.uploading': 'Yüklənir: {percent}%', + 'collab.chat.attachImages': 'Şəkillər əlavə et', + 'collab.chat.attachedImage': 'Əlavə edilmiş şəkil', + 'collab.chat.closeImage': 'Şəkli bağla', +}; +export default collab; \ No newline at end of file diff --git a/shared/src/i18n/az/collection.ts b/shared/src/i18n/az/collection.ts new file mode 100644 index 000000000..a0f846aef --- /dev/null +++ b/shared/src/i18n/az/collection.ts @@ -0,0 +1,232 @@ +import type { TranslationStrings } from '../types'; + +const collection: TranslationStrings = { + 'collections.saveNToList': '{count} məkanı siyahıya əlavə et', + 'collections.addedNToList': '{count} məkan {name} siyahısında saxlanıldı', + 'collections.noOwnLists': 'Hələ siyahınız yoxdur', + 'collections.saveToListHint': 'Dublikatlar avtomatik buraxılır', + 'collections.role.label': 'Rol', + 'collections.role.viewer': 'İzləyici', + 'collections.role.editor': 'Redaktor', + 'collections.role.admin': 'Administrator', + 'collections.picker.allLists': 'Bütün siyahılar', + 'collections.select': 'Seç', + 'collections.selectAll': 'Hamısını seç', + 'collections.deselectAll': 'Bütün seçimləri ləğv et', + 'collections.moveToList': 'Siyahıya köçür', + 'collections.duplicateToList': 'Siyahıya kopyala', + 'collections.moveToListTitle': '{count} məkanı başqa siyahıya köçür', + 'collections.duplicateToListTitle': '{count} məkanı başqa siyahıya kopyala', + 'collections.noOtherLists': 'Başqa siyahı yoxdur', + 'collections.movedCount': '{count} məkan köçürüldü', + 'collections.duplicatedCount': '{count} məkan kopyalandı', + 'collections.placeCount': '{count} məkan', + 'collections.category': 'Kateqoriya', + 'collections.noCategory': 'Kateqoriya yoxdur', + 'collections.editListTitle': 'Siyahını redaktə et', + 'collections.coverImage': 'Üzlük şəkli', + 'collections.addCover': 'Üzlük əlavə et', + 'collections.changeCover': 'Üzlüyü dəyiş', + 'collections.description': 'Təsvir', + 'collections.descriptionPlaceholder': 'Təsvir əlavə edin…', + 'collections.links': 'Linklər', + 'collections.linkLabel': 'Etiket', + 'collections.addLink': 'Link əlavə et', + 'collections.addDetails': 'Təfərrüatlar əlavə et', + 'collections.addPlace': 'Məkan əlavə et', + 'collections.addPlaceSearch': 'Məkan axtarın…', + 'collections.addPlaceHint': 'Bu siyahıya əlavə etmək üçün məkan axtarın', + 'collections.importFromTrip': 'Səyahətdən idxal et', + 'collections.importTitle': 'Səyahətdən idxal et', + 'collections.importDoneTitle': 'İdxal tamamlandı', + 'collections.importPickTripHint': 'Səyahət seçin və məkanlarını {name} siyahısına əlavə edin.', + 'collections.importNoTrips': 'Hələ səyahət yoxdur', + 'collections.importPlacesCount': '{count} məkan', + 'collections.importSearchPlaces': 'Məkanları axtarın…', + 'collections.importOnlyNew': 'Yalnız yenilər', + 'collections.importSelectAll': 'Hamısını seç', + 'collections.importClearSelection': 'Seçimi təmizlə', + 'collections.importAlreadySaved': 'Artıq saxlanılıb', + 'collections.importUnscheduled': 'Planlaşdırılmayıb', + 'collections.importOnDay': '{count}-ci gün', + 'collections.importSelectedCount': '{count} seçilib', + 'collections.importAction': '{count} məkanı idxal et', + 'collections.importEmptyTrip': 'Bu səyahətdə hələ məkan yoxdur', + 'collections.importNothingNew': 'Bu səyahətdəki bütün məkanlar artıq siyahıdadır', + 'collections.importDone': '{count} məkan əlavə edildi', + 'collections.importDoneSkipped': '{count} məkan artıq siyahıda olduğu üçün dəyişdirilmədi', + 'collections.importDoneClean': 'İndi hamısı {name} siyahısındadır', + 'collections.sort.default': 'Standart', + 'collections.sort.nameAsc': 'Ad (A–Z)', + 'collections.coordinates': 'Koordinatlar', + 'collections.showList': 'Siyahını göstər', + 'collections.expandMap': 'Xəritəni genişləndir', + 'collections.hero.mine': 'Mənim kolleksiyam', + 'collections.hero.shared': 'Sizinlə paylaşılan', + 'collections.hero.all': 'Kitabxananız', + 'collections.title': 'Kolleksiyalar', + 'collections.subtitle': 'Siyahılar üzrə təşkil edilmiş saxlanılan məkanlarınız', + + 'collections.newList': 'Yeni siyahı', + 'collections.create': 'Yarat', + 'collections.editList': 'Adını dəyiş', + 'collections.listMenu': 'Siyahı seçimləri', + 'collections.deleteList': 'Siyahını sil', + 'collections.deleteListConfirm': + 'Bu, siyahını və ondakı bütün saxlanılan məkanları həmişəlik siləcək. Bu əməliyyatı geri qaytarmaq mümkün deyil.', + 'collections.listName': 'Siyahının adı', + 'collections.listNamePlaceholder': 'məs. Tokio 2025', + 'collections.listColor': 'Rəng', + 'collections.allSaved': 'Bütün saxlanılanlar', + 'collections.shared': 'Paylaşılan', + + 'collections.empty.title': 'Hələ məkan yoxdur', + 'collections.empty.text': 'Bu siyahını yaratmaq üçün istənilən səyahətdən məkanlar saxlayın.', + 'collections.empty.noMatchTitle': 'Uyğun nəticə yoxdur', + 'collections.empty.noMatchText': 'Filtrinizə və ya axtarışınıza uyğun saxlanılan məkan yoxdur.', + 'collections.empty.firstTitle': 'İlk kolleksiyanızı yaradın', + 'collections.empty.firstText': 'Səyahətlər arasında xatırlamaq istədiyiniz məkanları saxlamaq üçün siyahı yaradın.', + + 'collections.view.grid': 'Tor', + 'collections.view.list': 'Siyahı', + 'collections.view.map': 'Xəritə', + + 'collections.status.idea': 'İdeya', + 'collections.status.want': 'Getmək istəyirəm', + 'collections.status.visited': 'Ziyarət edilib', + 'collections.status.filterAll': 'Hamısı', + 'collections.status.cycleHint': 'dəyişmək üçün toxunun', + + 'collections.markVisited': 'Ziyarət edilib kimi işarələ', + 'collections.markVisitedAll': 'Hamısını ziyarət edilib kimi işarələ', + 'collections.markVisitedSelection': 'Siyahılarınızdakıları ziyarət edilib kimi işarələ', + 'collections.markVisitedNone': 'Bu məkanların heç biri siyahıda saxlanılmayıb', + 'collections.markedVisited': 'Ziyarət edilib kimi işarələndi', + 'collections.markedVisitedTrip': '{count} məkan ziyarət edilib kimi işarələndi', + + 'collections.copyToTrip': 'Səyahətə kopyala', + 'collections.copyToTripTitle': 'Səyahətə kopyala', + 'collections.copyN': '{count} məkanı səyahətə kopyala', + 'collections.copyToTripSearch': 'Səyahətləri axtar', + 'collections.searchLists': 'Siyahıları axtar', + 'collections.copyToTripConfirm': 'Kopyala', + 'collections.noTrips': 'Hələ səyahət yoxdur', + 'collections.alreadyInTrip': 'Artıq bu səyahətdədir', + 'collections.copied': 'Səyahətə kopyalandı', + 'collections.copiedCount': '{count} məkan kopyalandı', + 'collections.skippedDuplicates': '{count} dublikat buraxıldı', + 'collections.copyNothing': 'Kopyalanacaq heç nə yoxdur', + 'collections.removeFromList': 'Siyahıdan sil', + 'collections.removeFromListConfirm': 'Bu məkan siyahıdan silinsin?', + 'collections.removeFromCollection': 'Kolleksiyadan sil', + + 'collections.saved': '{name} siyahısında saxlanıldı', + 'collections.savedUndo': 'Geri qaytar', + 'collections.viewInCollection': 'Bax', + 'collections.duplicateWarning': 'Bu məkan artıq siyahıdadır', + + 'collections.search': 'Məkanları axtar', + 'collections.selectMode': 'Seç', + 'collections.selectedCount': '{count} seçilib', + + 'collections.pickList': 'Siyahıda saxla', + 'collections.pickListPlaceholder': 'Siyahı seçin', + 'collections.addedToList': '{name} siyahısına əlavə edildi', + 'collections.removedFromList': '{name} siyahısından silindi', + 'collections.inLists': 'Siyahılarınızda', + 'collections.otherLists': 'Siyahıya əlavə et', + 'collections.noListsYet': 'Məkanları saxlamaq üçün əvvəlcə siyahı yaradın.', + 'collections.removedFromAll': 'Kolleksiyadan silindi', + 'collections.picker.title': 'Saxlanılan məkanlar', + 'collections.picker.showMore': 'Daha {count} məkan göstər', + 'collections.picker.search': 'Saxlanılan məkanlarınızda axtar', + 'collections.picker.empty': 'Əlavə ediləcək saxlanılan məkan yoxdur', + 'collections.picker.hint': 'Kolleksiyalarınızdan məkan seçin', + 'collections.picker.use': 'İstifadə et', + + // Export / import a list as a file (#2198) + 'collections.file.export': 'İxrac et', + 'collections.file.exportTitle': 'Bu siyahını fayl kimi endir', + 'collections.file.importButton': 'Fayldan siyahı idxal et', + 'collections.file.importTitle': 'Siyahını idxal et', + 'collections.file.choose': 'Siyahı faylı seç', + 'collections.file.confirm': 'İdxal et', + 'collections.file.targetNew': 'Yeni siyahı', + 'collections.file.targetNewHint': 'Faylı ayrıca siyahı kimi əlavə et', + 'collections.file.targetExisting': 'Siyahıya əlavə et', + 'collections.file.targetExistingHint': 'Mövcud siyahılarınızdan birinə', + 'collections.file.searchLists': 'Siyahıları axtar', + 'collections.file.intoHint': 'Siyahıda artıq olan məkanlar, siyahının adı və rəngi dəyişdirilmir. Fayldakı yeni etiketlər əlavə edilir.', + 'collections.file.confirmInto': 'Siyahıya əlavə et', + 'collections.file.doneInto': '{count} məkan {name} siyahısına əlavə edildi', + 'collections.file.doneIntoDuplicates': '{count} məkan {name} siyahısına əlavə edildi, {duplicates} məkan artıq orada idi', + 'collections.file.doneIntoNothing': 'Fayldakı bütün məkanlar artıq {name} siyahısındadır', + 'collections.file.change': 'Dəyiş', + 'collections.file.labelCount': '{count} etiket', + 'collections.file.hint': + 'Məkanlar sizə aid yeni siyahı kimi əlavə ediləcək. Reytinqlər, üzvlər və yüklənmiş fotolar idxal edilməyəcək.', + 'collections.file.done': '{count} məkan idxal edildi', + 'collections.file.doneSkipped': '{count} məkan idxal edildi, {skipped} məkan buraxıldı', + 'collections.file.errorTooLarge': 'Bu fayl siyahı kimi istifadə edilmək üçün çox böyükdür.', + 'collections.file.errorUnreadable': 'Bu faylı oxumaq mümkün olmadı.', + 'collections.file.errorNotACollection': 'Bu, TREK siyahı faylı deyil.', + 'collections.file.formatTrek': 'TREK siyahısı', + 'collections.file.formatTrekHint': 'Etiketlər və statuslarla başqa TREK üçün', + 'collections.file.formatGpxHint': 'OsmAnd, Organic Maps, Garmin və digər xəritə tətbiqləri üçün yol nöqtələri', + 'collections.file.gpxOmitted': '{count} məkanın koordinatları olmadığı üçün GPX faylına daxil edilmədi', + 'collections.file.gpxNothing': 'Bu məkanların heç birinin koordinatları yoxdur, buna görə GPX faylına əlavə ediləcək heç nə yoxdur.', + 'collections.file.reading': 'Fayl oxunur…', + 'collections.file.gpxSkipped': 'İstifadəyə yararlı koordinatları olmayan {count} yol nöqtəsi daxil edilmir.', + 'collections.file.gpxTrack': 'Bu faylda həmçinin {count} iz nöqtəsi var. İzlər deyil, yalnız yol nöqtələri idxal edilir.', + 'collections.file.gpxEmpty': 'Bu GPX faylında yol nöqtəsi yoxdur, buna görə idxal ediləcək heç nə yoxdur.', + 'collections.file.errorNotGpx': 'Bu, GPX faylı deyil.', + 'collections.file.errorTooManyPlaces': + 'Bu faylda {count} ədəddən çox məkan var. Faylı hissələrə bölün və hər hissəni ayrıca idxal edin.', + + 'collections.share.title': 'Siyahını paylaş', + 'collections.share.titleNamed': '“{name}” siyahısını paylaş', + 'collections.share.button': 'Paylaş', + 'collections.share.members': 'Üzvlər', + 'collections.share.owner': 'Sahib', + 'collections.share.you': 'siz', + 'collections.share.pending': 'dəvət gözləyir', + 'collections.share.accepted': 'qəbul edilib', + 'collections.share.invite': 'Birini dəvət et', + 'collections.share.inviteUser': 'İstifadəçi seçin', + 'collections.share.sendInvite': 'Dəvət göndər', + 'collections.share.inviteHint': 'Dəvət edilən şəxslər bu siyahıya baxa və onu redaktə edə bilərlər.', + 'collections.share.noUsers': 'Dəvət edilə biləcək istifadəçi yoxdur.', + 'collections.share.memberHint': 'Yalnız siyahının sahibi insanları dəvət edə və ya çıxara bilər.', + 'collections.share.cancel': 'Ləğv et', + 'collections.share.leave': 'Siyahıdan ayrıl', + 'collections.share.leaveConfirm': 'Bu paylaşılan siyahıdan ayrılasınız? Yenidən dəvət edilənədək giriş icazənizi itirəcəksiniz.', + 'collections.share.left': 'Siyahıdan ayrıldınız', + 'collections.share.remove': 'Çıxar', + + 'collections.invites.title': 'Dəvətlər', + 'collections.invites.from': 'göndərən:', + 'collections.invites.accept': 'Qəbul et', + 'collections.invites.decline': 'Rədd et', + 'collections.invites.received': 'Yeni siyahı dəvətiniz var', + 'collections.invite.sent': 'Dəvət göndərildi', + 'collections.invite.error': 'Dəvəti göndərmək mümkün olmadı', + 'collections.invite.accepted': 'Dəvət qəbul edildi', + 'collections.invite.declined': 'Dəvət rədd edildi', + + 'collections.widget.title': 'Kolleksiyalar', + 'collections.widget.empty': 'Hələ saxlanılan məkan yoxdur', + 'collections.widget.savedCount': '{count} məkan saxlanılıb', + + 'collections.labels.title': 'Etiketlər', + 'collections.labels.manage': 'Etiketləri idarə et', + 'collections.labels.add': 'Etiket əlavə et', + 'collections.labels.name': 'Etiketin adı', + 'collections.labels.namePlaceholder': 'məs. Berlin', + 'collections.labels.assign': 'Etiket təyin et', + 'collections.labels.assignN': '{count} məkana etiket əlavə et', + 'collections.labels.assignedCount': '{count} məkan etiketləndi', + 'collections.labels.empty': 'Hələ etiket yoxdur', + 'collections.labels.emptyHint': 'Bu siyahıdakı məkanları qruplaşdırmaq üçün əvvəlcə etiket yaradın.', +}; + +export default collection; \ No newline at end of file diff --git a/shared/src/i18n/az/common.ts b/shared/src/i18n/az/common.ts new file mode 100644 index 000000000..6d1757160 --- /dev/null +++ b/shared/src/i18n/az/common.ts @@ -0,0 +1,77 @@ +import type { TranslationStrings } from '../types'; + +const common: TranslationStrings = { + 'common.save': 'Yadda saxla', + 'common.showMore': 'Daha çox göstər', + 'common.showLess': 'Daha az göstər', + 'common.cancel': 'Ləğv et', + 'common.clear': 'Təmizlə', + 'common.delete': 'Sil', + 'common.preview': 'Önizləmə', + 'common.edit': 'Redaktə et', + 'common.add': 'Əlavə et', + 'common.loading': 'Yüklənir...', + 'common.import': 'İdxal et', + 'common.select': 'Seç', + 'common.selectAll': 'Hamısını seç', + 'common.deselectAll': 'Hamısının seçimini ləğv et', + 'common.error': 'Xəta', + 'common.success': 'Uğurlu', + 'common.unknownError': 'Bilinməyən xəta', + 'common.tooManyAttempts': 'Həddindən çox cəhd edildi. Zəhmət olmasa, bir qədər sonra yenidən cəhd edin.', + 'common.back': 'Geri', + 'common.all': 'Hamısı', + 'common.close': 'Bağla', + 'common.open': 'Aç', + 'common.upload': 'Yüklə', + 'common.search': 'Axtar', + 'common.confirm': 'Təsdiqlə', + 'common.ok': 'OK', + 'common.yes': 'Bəli', + 'common.no': 'Xeyr', + 'common.or': 'və ya', + 'common.none': 'Heç biri', + 'common.date': 'Tarix', + 'common.rename': 'Adını dəyiş', + 'common.discardChanges': 'Dəyişiklikləri ləğv et', + 'common.discard': 'İmtina et', + 'common.name': 'Ad', + 'common.email': 'E-poçt', + 'common.password': 'Parol', + 'common.saving': 'Saxlanılır...', + 'common.justNow': 'indicə', + 'common.hoursAgo': '{count}saat əvvəl', + 'common.daysAgo': '{count}gün əvvəl', + 'common.saved': 'Yadda saxlandı', + 'common.update': 'Yenilə', + 'common.change': 'Dəyiş', + 'common.uploading': 'Yüklənir...', + 'common.backToPlanning': 'Planlamaya geri qayıt', + 'common.reset': 'Sıfırla', + 'common.expand': 'Genişləndir', + 'common.collapse': 'Yığcamlaşdır', + 'common.copy': 'Kopyala', + 'common.copied': 'Kopyalandı', + 'common.datepicker.prevMonth': 'Əvvəlki ay', + 'common.datepicker.nextMonth': 'Növbəti ay', + 'common.datepicker.prevYear': 'Əvvəlki il', + 'common.datepicker.nextYear': 'Növbəti il', + 'common.datepicker.prevYears': 'Əvvəlki illər', + 'common.datepicker.nextYears': 'Növbəti illər', + 'common.datepicker.selectMonth': 'Ay seç', + 'common.datepicker.selectYear': 'İl seç', + 'common.datepicker.enterManually': 'Tarixi əl ilə daxil et', + 'common.datepicker.typeDate': 'Tarix daxil et', + 'common.datepicker.dialog': 'Tarix seçimi', + 'common.datepicker.clearDate': 'Tarixi təmizlə', + 'common.errorTitle': 'Xəta baş verdi', + 'common.errorBody': 'Tətbiqin bu hissəsi işləməyi dayandırdı. Məlumatlarınız təhlükəsizdir.', + 'common.errorPanelTitle': 'Bu bölməni göstərmək mümkün olmadı.', + 'common.errorPanelBody': 'Səhifənin qalan hissəsi işləməyə davam edir.', + 'common.errorRetry': 'Yenidən cəhd et', + 'common.errorReload': 'Səhifəni yenilə', + 'common.errorUpdateTitle': 'Yeni versiya mövcuddur', + 'common.errorUpdateBody': 'Bu səhifə açıq olarkən TREK yeniləndi. Yeni versiyanı əldə etmək üçün səhifəni yenilə.', + 'common.errorPluginTitle': 'Bu plagini göstərmək mümkün olmadı', +}; +export default common; diff --git a/shared/src/i18n/az/dashboard.ts b/shared/src/i18n/az/dashboard.ts new file mode 100644 index 000000000..71ac38e4b --- /dev/null +++ b/shared/src/i18n/az/dashboard.ts @@ -0,0 +1,209 @@ +import type { TranslationStrings } from '../types'; + +const dashboard: TranslationStrings = { + 'dashboard.title': 'Səyahətlərim', + 'dashboard.subtitle.loading': 'Səyahətlər yüklənir...', + 'dashboard.subtitle.trips': '{count} səyahət ({archived} arxivləşdirilib)', + 'dashboard.subtitle.empty': 'İlk səyahətinizə başlayın', + 'dashboard.subtitle.activeOne': '{count} aktiv səyahət', + 'dashboard.subtitle.activeMany': '{count} aktiv səyahət', + 'dashboard.subtitle.archivedSuffix': ' · {count} arxivləşdirilib', + 'dashboard.newTrip': 'Yeni səyahət', + 'dashboard.newTripSub': 'Sıfırdan yeni səyahət planlaşdırın', + 'dashboard.subscribeAllTrips': 'Bütün səyahətlərə abunə ol', + 'dashboard.subscribeAllTripsDesc': + 'Bütün aktiv səyahətləriniz üçün avtomatik sinxronlaşdırılan vahid təqvim lenti. Arxivləşdirilmiş və 90 gündən çox əvvəl başa çatmış səyahətlər daxil edilmir.', + 'dashboard.gridView': 'Tor görünüşü', + 'dashboard.listView': 'Siyahı görünüşü', + 'dashboard.currency': 'Valyuta', + 'dashboard.timezone': 'Saat qurşaqları', + 'dashboard.localTime': 'Yerli vaxt', + 'dashboard.timezoneCustomTitle': 'Xüsusi saat qurşağı', + 'dashboard.timezoneCustomLabelPlaceholder': 'Etiket (istəyə bağlı)', + 'dashboard.timezoneCustomTzPlaceholder': 'məs. America/New_York', + 'dashboard.timezoneCustomAdd': 'Əlavə et', + 'dashboard.timezoneCustomErrorEmpty': 'Saat qurşağının identifikatorunu daxil edin', + 'dashboard.timezoneCustomErrorInvalid': 'Saat qurşağı etibarsızdır. Europe/Berlin kimi formatdan istifadə edin', + 'dashboard.timezoneCustomErrorDuplicate': 'Artıq əlavə edilib', + 'dashboard.emptyTitle': 'Hələ səyahət yoxdur', + 'dashboard.emptyText': 'İlk səyahətinizi yaradın və planlaşdırmağa başlayın!', + 'dashboard.emptyButton': 'İlk səyahəti yarat', + 'dashboard.nextTrip': 'Növbəti səyahət', + 'dashboard.shared': 'Paylaşılıb', + 'dashboard.sharedBy': '{name} tərəfindən paylaşılıb', + 'dashboard.days': 'Günlər', + 'dashboard.places': 'Məkanlar', + 'dashboard.members': 'Yoldaşlar', + 'dashboard.archive': 'Arxivləşdir', + 'dashboard.copyTrip': 'Nüsxəsini yarat', + 'dashboard.copySuffix': 'nüsxə', + 'dashboard.restore': 'Bərpa et', + 'dashboard.archived': 'Arxivləşdirilib', + 'dashboard.status.ongoing': 'Davam edir', + 'dashboard.status.today': 'Bu gün', + 'dashboard.status.tomorrow': 'Sabah', + 'dashboard.status.past': 'Başa çatıb', + 'dashboard.status.daysLeft': '{count} gün qalıb', + 'dashboard.toast.loadError': 'Səyahətləri yükləmək mümkün olmadı', + 'dashboard.loadErrorBanner': 'Serverə qoşulmaq mümkün olmadı. Səyahətləriniz təhlükəsizdir — yenidən cəhd edin.', + 'dashboard.retry': 'Yenidən cəhd et', + 'dashboard.toast.created': 'Səyahət uğurla yaradıldı!', + 'dashboard.toast.createError': 'Səyahəti yaratmaq mümkün olmadı', + 'dashboard.toast.updated': 'Səyahət yeniləndi!', + 'dashboard.toast.updateError': 'Səyahəti yeniləmək mümkün olmadı', + 'dashboard.toast.deleted': 'Səyahət silindi', + 'dashboard.toast.deleteError': 'Səyahəti silmək mümkün olmadı', + 'dashboard.toast.archived': 'Səyahət arxivləşdirildi', + 'dashboard.toast.archiveError': 'Səyahəti arxivləşdirmək mümkün olmadı', + 'dashboard.toast.restored': 'Səyahət bərpa edildi', + 'dashboard.toast.restoreError': 'Səyahəti bərpa etmək mümkün olmadı', + 'dashboard.toast.copied': 'Səyahətin nüsxəsi yaradıldı!', + 'dashboard.toast.copyError': 'Səyahətin nüsxəsini yaratmaq mümkün olmadı', + 'dashboard.confirm.delete': '"{title}" səyahəti silinsin? Bütün məkanlar və planlar həmişəlik silinəcək.', + 'dashboard.confirm.copy.title': 'Bu səyahətin nüsxəsi yaradılsın?', + 'dashboard.confirm.copy.willCopy': 'Nüsxəyə daxil ediləcək', + 'dashboard.confirm.copy.will1': 'Günlər, məkanlar və gün təyinatları', + 'dashboard.confirm.copy.will2': 'Yaşayış yerləri və rezervasiyalar', + 'dashboard.confirm.copy.will3': 'Büdcə elementləri və kateqoriyaların sırası', + 'dashboard.confirm.copy.will4': 'Çamadan siyahıları (işarələnməmiş)', + 'dashboard.confirm.copy.will5': 'Tapşırıqlar (təyin edilməmiş və işarələnməmiş)', + 'dashboard.confirm.copy.will6': 'Gün qeydləri', + 'dashboard.confirm.copy.wontCopy': 'Nüsxəyə daxil edilməyəcək', + 'dashboard.confirm.copy.wont1': 'Əməkdaşlar və üzv təyinatları', + 'dashboard.confirm.copy.wont2': 'Birgə qeydlər, sorğular və mesajlar', + 'dashboard.confirm.copy.wont3': 'Fayllar və fotoşəkillər', + 'dashboard.confirm.copy.wont4': 'Paylaşım tokenləri', + 'dashboard.confirm.copy.confirm': 'Səyahətin nüsxəsini yarat', + 'dashboard.editTrip': 'Səyahəti redaktə et', + 'dashboard.createTrip': 'Yeni səyahət yarat', + 'dashboard.tripTitle': 'Başlıq', + 'dashboard.tripTitlePlaceholder': 'məs. Yaponiyada yay', + 'dashboard.tripDescription': 'Təsvir', + 'dashboard.tripDescriptionPlaceholder': 'Bu səyahət nə haqqındadır?', + 'dashboard.startDate': 'Başlama tarixi', + 'dashboard.endDate': 'Bitmə tarixi', + 'dashboard.dayCount': 'Günlərin sayı', + 'dashboard.dayCountHint': 'Səyahət tarixləri təyin edilmədikdə neçə günün planlaşdırılacağını göstərin.', + 'dashboard.noDateHint': 'Tarix təyin edilməyib — standart olaraq 7 gün yaradılacaq. Bunu istənilən vaxt dəyişə bilərsiniz.', + 'dashboard.coverImage': 'Üz qabığı şəkli', + 'dashboard.addCoverImage': 'Üz qabığı şəkli əlavə et (və ya sürükləyib burax)', + 'dashboard.addMembers': 'Səyahət yoldaşları', + 'dashboard.addMember': 'Yoldaş əlavə et', + 'dashboard.coverSaved': 'Üz qabığı şəkli saxlanıldı', + 'dashboard.coverUploadError': 'Şəkli yükləmək mümkün olmadı', + 'dashboard.coverSaveError': 'Üz qabığı şəklini saxlamaq mümkün olmadı', + 'dashboard.coverRemoveError': 'Şəkli silmək mümkün olmadı', + 'dashboard.searchUnsplash': 'Unsplash-da axtar', + 'dashboard.unsplashSearchPlaceholder': 'İstiqamət şəkillərini axtar', + 'dashboard.unsplashQueryRequired': 'Axtarış sözü daxil edin', + 'dashboard.unsplashNoResults': 'Şəkil tapılmadı', + 'dashboard.coverSearchError': 'Unsplash-da axtarış aparmaq mümkün olmadı', + 'dashboard.useUnsplashPhoto': '{photographer} tərəfindən çəkilmiş Unsplash şəklindən istifadə et', + 'dashboard.titleRequired': 'Başlıq tələb olunur', + 'dashboard.endDateError': 'Bitmə tarixi başlama tarixindən sonra olmalıdır', + 'dashboard.tripTooLong': 'Səyahət ən çox {days} gün davam edə bilər', + 'dashboard.dateShiftTitle': 'Yeni başlama tarixi', + 'dashboard.dateShiftIntro': 'Səyahətin başlama tarixini dəyişdiniz. Planlarınız yeni tarixlərə necə uyğunlaşdırılsın?', + 'dashboard.dateShiftKeepBookings': 'Rezervasiyaların tarixlərini saxla', + 'dashboard.dateShiftKeepBookingsDesc': + 'Günlük planlar yeni tarixlərə köçürülür, rezervasiya və yaşayış yerləri isə tarixləri hələ də səyahət müddətinə daxil olduğu halda ilkin tarixlərində qalır.', + 'dashboard.dateShiftAll': 'Hər şeyi yeni tarixlərə köçür', + 'dashboard.dateShiftAllDesc': + 'Rezervasiya və yaşayış yerləri də daxil olmaqla bütün səyahət planı yeni tarixlərə köçürülür.', + 'dashboard.dateShiftHint': + 'Məsləhət: marşrutun yalnız bir hissəsini dəyişmək üçün planlayıcıda “Günləri yenidən sırala” bölməsini açın, tarixini göstərən düymə ilə səyahətdən sonrakı günü əlavə edin və həmin günü boşluğun olduğu yerə köçürün.', + 'dashboard.shrinkTitle': 'Günlər silinsin?', + 'dashboard.shrinkIntro': 'Yeni tarixləri yadda saxlamaq bu günləri siləcək:', + 'dashboard.shrinkMoreDays': '+{count} daha', + 'dashboard.shrinkLastDays': 'İlk deyil, son günlər silinir', + 'dashboard.shrinkLastDaysHint': + 'Gün planları yeni tarixlərlə birlikdə hərəkət etdiyi üçün başlanğıc tarixi dəyişdirilsə belə, həmişə planın son günləri silinir.', + 'dashboard.shrinkBookingsHint': + 'Onlar Rezervasiyalar bölməsində qalır. Tarixi hələ də səyahət müddətinə daxil olan rezervasiya həmin günə yenidən əlavə edilir.', + 'dashboard.shrinkBookingsShiftHint': 'Onlar gün təyin edilmədən Rezervasiyalar bölməsində qalır.', + 'dashboard.shrinkStayHint': + 'Giriş və ya çıxış silinən günə düşdüyü üçün qalma qeydi tamamilə silinir.', + 'dashboard.shrinkStayBookedHint': + 'Giriş və ya çıxış silinən günə düşdüyü üçün qalma qeydi tamamilə silinir. Onun “{booking}” rezervasiyası və xərci Rezervasiyalar bölməsində qalır.', + 'dashboard.shrinkStayBookingHint': + 'Giriş və ya çıxış silinən günə düşdüyü üçün qalma qeydi tamamilə silinir. Onun “{booking}” rezervasiyası Rezervasiyalar bölməsində qalır.', + 'dashboard.shrinkConfirm': 'Günləri sil və yadda saxla', + 'dashboard.shrinkUnknown': + 'Bu səyahətin günlərini yoxlamaq mümkün olmadı. Yeni tarixlər daha az günü əhatə edirsə, yadda saxlamaq son günləri və həmin günlərdə planlaşdırılmış hər şeyi siləcək.', + 'dashboard.greeting.morning': 'Sabahınız xeyir,', + 'dashboard.greeting.afternoon': 'Günortanız xeyir,', + 'dashboard.greeting.evening': 'Axşamınız xeyir,', + 'dashboard.mobile.liveNow': 'Hazırda davam edir', + 'dashboard.mobile.tripProgress': 'Səyahətin gedişatı', + 'dashboard.mobile.daysLeft': '{count} gün qalıb', + 'dashboard.mobile.places': 'Məkanlar', + 'dashboard.mobile.buddies': 'Yoldaşlar', + 'dashboard.mobile.newTrip': 'Yeni səyahət', + 'dashboard.mobile.addCoverImage': 'Üz qabığı şəkli əlavə et', + 'dashboard.mobile.currency': 'Valyuta', + 'dashboard.mobile.timezone': 'Saat qurşağı', + 'dashboard.mobile.upcomingTrips': 'Qarşıdakı səyahətlər', + 'dashboard.mobile.yourTrips': 'Səyahətləriniz', + 'dashboard.mobile.trips': 'səyahət', + 'dashboard.mobile.starts': 'Başlayır', + 'dashboard.mobile.duration': 'Müddət', + 'dashboard.mobile.day': 'gün', + 'dashboard.mobile.days': 'gün', + 'dashboard.mobile.ongoing': 'Davam edir', + 'dashboard.mobile.startsToday': 'Bu gün başlayır', + 'dashboard.mobile.tomorrow': 'Sabah', + 'dashboard.mobile.inDays': '{count} gün sonra', + 'dashboard.mobile.inMonths': '{count} ay sonra', + 'dashboard.mobile.spotlightDayOf': 'Gün {day}/{total}', + 'dashboard.mobile.spotlightDayOne': '{count} gün', + 'dashboard.mobile.spotlightDaysMany': '{count} gün', + 'dashboard.mobile.completed': 'Tamamlanıb', + 'dashboard.mobile.currencyConverter': 'Valyuta çeviricisi', + 'dashboard.filter.planned': 'Planlaşdırılıb', + 'dashboard.hero.badgeLive': 'HAZIRDA DAVAM EDİR', + 'dashboard.hero.badgeToday': 'BU GÜN BAŞLAYIR', + 'dashboard.hero.badgeTomorrow': 'SABAH', + 'dashboard.hero.badgeNext': 'NÖVBƏTİ', + 'dashboard.hero.badgeRecent': 'SON', + 'dashboard.hero.tripDates': 'Səyahət tarixləri', + 'dashboard.hero.noDates': 'Tarixlər təyin edilməyib', + 'dashboard.hero.travelerOne': '{count} səyahətçi', + 'dashboard.hero.travelerMany': '{count} səyahətçi', + 'dashboard.hero.destinationOne': '{count} istiqamət', + 'dashboard.hero.destinationMany': '{count} istiqamət', + 'dashboard.hero.dayUnitOne': 'gün', + 'dashboard.hero.dayUnitMany': 'gün', + 'dashboard.hero.dayLeft': 'Qalan gün', + 'dashboard.hero.daysLeft': 'Qalan günlər', + 'dashboard.hero.lastDay': 'Son gün', + 'dashboard.hero.untilStart': 'Başlanmasına qalan', + 'dashboard.hero.startsIn': 'Səyahətin başlanmasına', + 'dashboard.atlas.countriesVisited': 'Atlas · Ziyarət edilmiş ölkələr', + 'dashboard.atlas.ofTotal': '{total} ölkədən', + 'dashboard.atlas.tripsTotal': 'Səyahətlərin ümumi sayı', + 'dashboard.atlas.placesMapped': 'Xəritəyə əlavə edilmiş {count} məkan', + 'dashboard.atlas.daysTraveled': 'Səyahətdə keçirilən günlər', + 'dashboard.atlas.daysUnit': 'gün', + 'dashboard.atlas.acrossAllTrips': 'bütün səyahətlər üzrə', + 'dashboard.atlas.distanceFlown': 'Uçuş məsafəsi', + 'dashboard.atlas.kmUnit': 'km', + 'dashboard.atlas.aroundEquator': '≈ ekvator ətrafında {count} dövrə', + 'dashboard.card.idea': 'İdeya', + 'dashboard.card.buddyOne': 'Yoldaş', + 'dashboard.fx.from': 'Mənbə', + 'dashboard.fx.to': 'Hədəf', + 'dashboard.fx.unavailable': 'Məzənnə mövcud deyil', + 'dashboard.tz.searchPlaceholder': 'Saat qurşağı axtar…', + 'dashboard.tz.empty': 'Hələ başqa saat qurşağı yoxdur — + ilə əlavə edin', + 'dashboard.upcoming.title': 'Qarşıdakı rezervasiyalar', + 'dashboard.upcoming.empty': 'Hələ heç nə rezervasiya edilməyib.', + 'dashboard.aria.toggleView': 'Görünüşü dəyiş', + 'dashboard.aria.filter': 'Filtrlə', + 'dashboard.aria.duplicate': 'Nüsxəsini yarat', + 'dashboard.aria.refreshRates': 'Məzənnələri yenilə', + 'dashboard.aria.swapCurrencies': 'Valyutaların yerini dəyiş', + 'dashboard.aria.addTimezone': 'Saat qurşağı əlavə et', + 'dashboard.aria.removeTimezone': '{city} saat qurşağını sil', + 'dashboard.dayCountRequired': 'Günlərin sayı tələb olunur', +}; +export default dashboard; \ No newline at end of file diff --git a/shared/src/i18n/az/dawarich.ts b/shared/src/i18n/az/dawarich.ts new file mode 100644 index 000000000..715c017c5 --- /dev/null +++ b/shared/src/i18n/az/dawarich.ts @@ -0,0 +1,180 @@ +import type { TranslationStrings } from '../types'; + +const dawarich: TranslationStrings = { + // ── Connection ───────────────────────────────────────────────────────────── + 'dawarich.title': 'Dawarich', + 'dawarich.intro': + 'Həqiqətən haralara getdiyinizi görmək üçün öz Dawarich instansiyanızı qoşun. TREK məlumatları oxuyaraq gündəlik qeydləri, məkanlar və ölkələr təklif edir — siz təsdiqləyənədək heç nə əlavə edilmir və Dawarich-ə heç nə geri yazılmır.', + 'dawarich.url': 'İnstansiya ünvanı', + 'dawarich.apiKey': 'API açarı', + 'dawarich.apiKeyPlaceholder': 'Dawarich API açarınızı yapışdırın', + 'dawarich.apiKeyHint': 'Dawarich-də Hesab → API açarı bölməsində yerləşir. Şifrələnmiş şəkildə saxlanılır və bir daha göstərilmir.', + 'dawarich.allowInsecureTls': 'Öz-özünə imzalanmış sertifikata icazə ver', + 'dawarich.allowInsecureTlsHint': 'Yalnız instansiyanız serverinizin etibar etmədiyi sertifikatdan istifadə edirsə tələb olunur.', + 'dawarich.syncEnabled': 'Yeni dayanma qeydlərini avtomatik yoxla', + 'dawarich.syncEnabledHint': 'Deaktiv olduqda TREK Dawarich-i yalnız siz istədiyiniz zaman oxuyur.', + 'dawarich.test.button': 'Bağlantını yoxla', + 'dawarich.test.success': 'Qoşuldu. Son 30 gündə {count} dayanma qeydi tapıldı.', + 'dawarich.test.failed': 'Dawarich ilə əlaqə yaratmaq mümkün olmadı.', + 'dawarich.syncNow': 'İndi yoxla', + 'dawarich.connected': 'Qoşulub', + 'dawarich.notConnected': 'Qoşulmayıb', + 'dawarich.disconnect': 'Bağlantını kəs', + 'dawarich.lastSync': 'Son yoxlama: {when}', + 'dawarich.neverSynced': 'Hələ yoxlanılmayıb', + 'dawarich.syncPartial': 'bəzi səyahətləri oxumaq mümkün olmadı', + 'dawarich.serverVersion': 'Dawarich {version}', + + 'dawarich.toast.saved': 'Dawarich bağlantısı yadda saxlanıldı', + 'dawarich.toast.saveError': 'Bağlantını yadda saxlamaq mümkün olmadı', + 'dawarich.toast.disconnected': 'Dawarich bağlantısı kəsildi', + 'dawarich.toast.synced': '{count} yeni dayanma qeydi tapıldı', + 'dawarich.toast.syncError': 'Dawarich-i oxumaq mümkün olmadı', + 'dawarich.toast.syncRunning': 'Yoxlama artıq davam edir', + 'dawarich.toast.acceptError': 'Bunu əlavə etmək mümkün olmadı', + 'dawarich.toast.updateError': 'Bu təklifi yeniləmək mümkün olmadı', + 'dawarich.toast.accepted.place': 'Səyahətə əlavə edildi', + 'dawarich.toast.accepted.journal': 'Gündəliyə əlavə edildi', + 'dawarich.toast.accepted.bucket_list': 'Arzular siyahısında tamamlandı kimi işarələndi', + + // ── What the connected instance can do ───────────────────────────────────── + 'dawarich.capability.visits': 'dayanma qeydləri', + 'dawarich.capability.track': 'qeydə alınmış marşrut', + 'dawarich.capability.locations': 'arzular siyahısı ilə uyğunlaşdırma', + 'dawarich.capability.visitedCities': 'ölkələr və şəhərlər', + 'dawarich.capability.missing': 'Bu Dawarich versiyası bunları dəstəkləmir: {features}.', + + // ── Failure reasons, as sentences the reader can act on ──────────────────── + 'dawarich.error.unreachable': 'TREK həmin ünvana çata bilmədi.', + 'dawarich.error.unauthorized': 'Dawarich API açarını rədd etdi.', + 'dawarich.error.forbidden': 'Bu API açarının həmin məlumatları oxumaq icazəsi yoxdur.', + 'dawarich.error.not_found': 'Bu Dawarich versiyasında həmin son nöqtə yoxdur.', + 'dawarich.error.rate_limited': 'Dawarich TREK-dən sorğuları yavaşlatmasını istədi. Bir az sonra yenidən cəhd edin.', + 'dawarich.error.server_error': 'Dawarich xəta ilə cavab verdi.', + 'dawarich.error.invalid_response': 'Həmin ünvan Dawarich olmayan bir xidmətlə cavab verdi.', + 'dawarich.error.too_large': 'Dawarich TREK-in bir dəfəyə oxuya biləcəyindən çox məlumat göndərdi.', + 'dawarich.error.not_connected': 'Hələ heç bir Dawarich instansiyası qoşulmayıb.', + 'dawarich.error.addon_disabled': 'Dawarich əlavəsi bu instansiya üçün deaktiv edilib.', + 'dawarich.error.offline': 'Bu əməliyyat internet bağlantısı tələb edir — TREK hazırda oflayndır.', + 'dawarich.error.invalid_url': 'TREK həmin ünvandan istifadə edə bilmir.', + 'dawarich.warning.private_ip': 'Həmin ünvan şəxsi IP-yə ({ip}) yönəlir. Bunun nəzərdə tutduğunuz ünvan olduğuna əmin olun — serverin ona çatması üçün ALLOW_INTERNAL_NETWORK=true tələb oluna bilər.', + 'dawarich.error.unknown': 'Dawarich ilə əlaqə zamanı xəta baş verdi.', + + // ── The recorded route on the map ────────────────────────────────────────── + 'dawarich.trail.show': 'Qeydə alınmış marşrutu göstər', + 'dawarich.trail.hide': 'Qeydə alınmış marşrutu gizlət', + 'dawarich.trail.loading': 'Qeydə alınmış marşrut yüklənir…', + 'dawarich.trail.empty': 'Bu tarixlərdə heç nə qeydə alınmayıb', + 'dawarich.trail.offline': 'Qeydə alınmış marşrut internet bağlantısı tələb edir', + 'dawarich.trail.unavailable': 'Qeydə alınmış marşrutu yükləmək mümkün olmadı', + + // ── Suggestions ──────────────────────────────────────────────────────────── + 'dawarich.duration.minutes': '{minutes} dəq.', + 'dawarich.duration.hours': '{hours} saat', + 'dawarich.duration.hoursMinutes': '{hours} saat {minutes} dəq.', + 'dawarich.checkedAgo': '{ago} yoxlanıldı', + + 'dawarich.badge.lowConfidence': 'Qeyri-müəyyən', + 'dawarich.badge.sourceChanged': 'Dawarich-də dəyişdirilib', + 'dawarich.badge.sourceMissing': 'Dawarich-dən silinib', + + 'dawarich.suggestions.title': 'Dawarich-dən', + 'dawarich.suggestions.pending': '{count} təklif sizi gözləyir', + 'dawarich.suggestions.loading': 'Dawarich oxunur…', + 'dawarich.suggestions.notConnected': 'Dayanma qeydlərinizi burada görmək üçün Tənzimləmələr bölməsində Dawarich-i qoşun.', + 'dawarich.suggestions.unavailable': 'Dawarich-i oxumaq mümkün olmadı.', + 'dawarich.suggestions.allHandled': 'Burada qeydə alınan hər şey nəzərdən keçirilib.', + 'dawarich.suggestions.asJournal': 'Gündəlik qeydi yaz', + 'dawarich.suggestions.asPlace': 'Məkan kimi əlavə et', + 'dawarich.suggestions.dismiss': 'Ziyarət etdiyim məkan deyil', + 'dawarich.suggestions.dismissed': 'Rədd edilib', + 'dawarich.suggestions.restore': 'Geri qaytar', + 'dawarich.suggestions.showHandled': 'Nəzərdən keçirilmiş {count} təklifi göstər', + 'dawarich.suggestions.hideHandled': 'Nəzərdən keçirilmiş təklifləri gizlət', + 'dawarich.suggestions.matchesWish': 'Arzular siyahınızdadır: {name}', + 'dawarich.suggestions.acceptedAs.place': 'Məkan kimi əlavə edilib', + 'dawarich.suggestions.acceptedAs.journal': 'Gündəlikdədir', + 'dawarich.suggestions.acceptedAs.bucket_list': 'Arzu tamamlandı kimi işarələnib', + 'dawarich.suggestions.sourceChanged': + 'Bu dayanma qeydindən istifadə etdikdən sonra o, Dawarich-də dəyişdirilib. TREK-də yazdıqlarınız dəyişdirilməyib.', + 'dawarich.suggestions.sourceMissing': + 'Bu dayanma qeydi artıq Dawarich-də mövcud deyil. TREK-də yazdıqlarınız dəyişdirilməyib.', + 'dawarich.sourceStatus.suggested': 'Aşkarlanıb, təsdiqlənməyib', + 'dawarich.confidence.high': 'Etibarlı aşkarlama', + 'dawarich.confidence.medium': 'Kifayət qədər etibarlı aşkarlama', + 'dawarich.confidence.low': 'Qeyri-müəyyən aşkarlama', + + // ── The review step ──────────────────────────────────────────────────────── + 'dawarich.accept.title.place': 'Bu dayanma qeydini məkan kimi əlavə et', + 'dawarich.accept.title.journal': 'Gündəlik qeydi yaz', + 'dawarich.accept.title.bucket_list': 'Arzunu tamamlandı kimi işarələ', + 'dawarich.accept.confirm.place': 'Məkan əlavə et', + 'dawarich.accept.confirm.journal': 'Qeyd əlavə et', + 'dawarich.accept.confirm.bucket_list': 'Tamamlandı kimi işarələ', + 'dawarich.accept.recorded': '{from}–{to} aralığında qeydə alınıb', + 'dawarich.accept.duration': '{minutes} dəq.', + 'dawarich.accept.name': 'Ad', + 'dawarich.accept.date': 'Tarix', + 'dawarich.accept.from': 'Çatma', + 'dawarich.accept.to': 'Ayrılma', + 'dawarich.accept.trip': 'Səyahət', + 'dawarich.accept.thisTrip': 'Bu səyahət', + 'dawarich.accept.pickTrip': 'Səyahət seçin', + 'dawarich.accept.day': 'Gün', + 'dawarich.accept.noDay': 'Hələ günə təyin edilməyib', + 'dawarich.accept.journal': 'Gündəlik', + 'dawarich.accept.pickJournal': 'Gündəlik seçin', + 'dawarich.accept.notes': 'Qeydlər', + 'dawarich.accept.story': 'Hekayəniz', + 'dawarich.accept.storyPlaceholder': 'Burada nə baş verdi?', + 'dawarich.accept.photosHint': 'Qeyd yaradıldıqdan sonra ona fotolar əlavə edin.', + + // ── A place that came out of a recording ────────────────────────────────── + 'dawarich.place.fromDawarich': 'Dawarich qeydlərinizdən əlavə edilib', + + // ── Wishlist ─────────────────────────────────────────────────────────────── + 'dawarich.bucket.title': 'Arzular siyahınızı Dawarich ilə yoxlayın', + 'dawarich.bucket.description': + 'Getmək istədiyiniz məkanları qeydlərinizdə axtarır. Ziyarətin təsdiqlənməsi üçün həm yaxınlıq, həm də məkanda keçirilən vaxt nəzərə alınır — sadəcə yanından keçmək hesablanmır.', + 'dawarich.bucket.scan': 'Arzular siyahısını yoxla', + 'dawarich.bucket.scanning': 'Yoxlanılır…', + 'dawarich.bucket.noMatches': 'Arzular siyahınızdakı məkanlardan heç biri qeydlərinizdə tapılmadı.', + 'dawarich.bucket.alreadyVisited': 'Artıq tamamlandı kimi işarələnib', + 'dawarich.bucket.confirm': '{count} arzunu tamamlandı kimi işarələ', + 'dawarich.bucket.confirmed': '{count} arzu tamamlandı kimi işarələndi', + 'dawarich.bucket.skipped': '{count} qeydin koordinatları olmadığından onları yoxlamaq mümkün olmadı.', + 'dawarich.bucket.truncated': 'Yalnız ilk qeydlər yoxlanıldı. Qalanlarını yoxlamaq üçün yenidən işə salın.', + 'dawarich.bucket.visitedFrom': 'Dawarich qeydlərinizə əsasən tamamlandı kimi işarələnib', + 'dawarich.bucket.clearVisit': 'Geri qaytar', + + // ── Atlas ────────────────────────────────────────────────────────────────── + 'dawarich.atlas.title': 'Dawarich-dən ölkələr', + 'dawarich.atlas.description': + 'Qeydlərinizə əsasən olduğunuz ölkələr. Atlasınıza əlavə etmək istədiyiniz ölkələri təsdiqləyin — heç nə avtomatik əlavə edilmir və əl ilə işarələdikləriniz dəyişdirilmir.', + 'dawarich.atlas.load': 'Ölkələri axtar', + 'dawarich.atlas.loading': 'Qeydləriniz oxunur…', + 'dawarich.atlas.empty': 'Qeydlərinizdə TREK-də artıq olmayan yeni ölkə tapılmadı.', + 'dawarich.atlas.cities': '{count} şəhər', + 'dawarich.atlas.citiesOne': '1 şəhər', + 'dawarich.atlas.accept': '{count} ölkə əlavə et', + 'dawarich.atlas.accepted': '{count} ölkə əlavə edildi', + 'dawarich.atlas.unresolved': 'TREK bunları ölkə ilə uyğunlaşdıra bilmədi: {names}.', + 'dawarich.atlas.source': 'Dawarich-dən', + 'dawarich.atlas.range': '{from}–{to} aralığı yoxlanıldı', + + 'dawarich.atlas.trigger': 'Qeydlərinizdən arzular və ölkələr', + 'dawarich.atlas.dialogSubtitle': 'Qeydlərinizin Atlasınız haqqında göstərdikləri', + 'dawarich.atlas.tab.wishes': 'Arzular siyahısı', + 'dawarich.atlas.tab.countries': 'Ölkələr', + 'dawarich.atlas.window': 'Son 12 ay yoxlanıldı.', + 'dawarich.selected': '{count} seçilib', + 'dawarich.again': 'Yenidən yoxla', + 'dawarich.bucket.metersAway': '{meters} m uzaqda', + 'dawarich.bucket.kilometersAway': '{km} km uzaqda', + 'dawarich.bucket.rule': 'Arzu məkandan {meters} m məsafə daxilində və orada ən azı {minutes} dəqiqə qaldıqda tamamlanmış sayılır.', + + 'dawarich.journey.dayStays.one': 'Dawarich-dən 1 dayanma qeydi', + 'dawarich.journey.dayStays.other': 'Dawarich-dən {count} dayanma qeydi', +}; + +export default dawarich; \ No newline at end of file diff --git a/shared/src/i18n/az/day.ts b/shared/src/i18n/az/day.ts new file mode 100644 index 000000000..a81852371 --- /dev/null +++ b/shared/src/i18n/az/day.ts @@ -0,0 +1,31 @@ +import type { TranslationStrings } from '../types'; + +const day: TranslationStrings = { + 'day.precipProb': 'Yağış ehtimalı', + 'day.precipitation': 'Yağıntı', + 'day.wind': 'Külək', + 'day.sunrise': 'Günəşin doğması', + 'day.sunset': 'Günəşin batması', + 'day.hourlyForecast': 'Saatlıq hava proqnozu', + 'day.climateHint': + 'Tarixi orta göstəricilər — real hava proqnozu bu tarixə 16 gün qalmış əlçatan olacaq.', + 'day.noWeather': + 'Hava məlumatı mövcud deyil. Koordinatları olan bir məkan əlavə edin.', + 'day.weatherFor': '{name} üçün hava proqnozu', + 'day.overview': 'Günün icmalı', + + 'day.accommodation': 'Yaşayış yeri', + 'day.addAccommodation': 'Yaşayış yeri əlavə et', + 'day.hotelDayRange': 'Günlərə tətbiq et', + 'day.noPlacesForHotel': + 'Əvvəlcə səyahətinizə məkanlar əlavə edin', + 'day.allDays': 'Hamısı', + 'day.checkIn': 'Giriş', + 'day.checkInUntil': 'Qədər', + 'day.checkOut': 'Çıxış', + 'day.confirmation': 'Təsdiq', + 'day.editAccommodation': 'Yaşayış yerini redaktə et', + 'day.reservations': 'Rezervasiyalar', +}; + +export default day; \ No newline at end of file diff --git a/shared/src/i18n/az/dayplan.ts b/shared/src/i18n/az/dayplan.ts new file mode 100644 index 000000000..ecb9761df --- /dev/null +++ b/shared/src/i18n/az/dayplan.ts @@ -0,0 +1,164 @@ +import type { TranslationStrings } from '../types'; + +const dayplan: TranslationStrings = { + 'dayplan.icsTooltip': 'Təqvimi ixrac et (ICS)', + 'dayplan.emptyDay': 'Bu gün üçün heç bir məkan planlaşdırılmayıb', + 'dayplan.addPlaceHere': 'Bu günə məkan əlavə et', + 'dayplan.cannotReorderTransport': + 'Sabit vaxtı olan rezervasiyaların sırası dəyişdirilə bilməz', + + 'dayplan.confirmRemoveTimeTitle': 'Vaxt silinsin?', + 'dayplan.confirmRemoveTimeBody': + 'Bu məkanın sabit vaxtı var ({time}). Onu daşıdıqda vaxt silinəcək və sərbəst sıralama mümkün olacaq.', + 'dayplan.confirmRemoveTimeAction': 'Vaxtı sil və daşı', + + 'dayplan.confirmDeleteNoteTitle': 'Qeyd silinsin?', + 'dayplan.confirmDeleteNoteBody': 'Bu qeyd həmişəlik silinəcək.', + + 'dayplan.cannotDropOnTimed': + 'Elementlər vaxtı müəyyən edilmiş qeydlərin arasına yerləşdirilə bilməz', + 'dayplan.cannotBreakChronology': + 'Bu, vaxtı müəyyən edilmiş elementlərin və rezervasiyaların xronoloji ardıcıllığını pozacaq', + + 'dayplan.addNote': 'Qeyd əlavə et', + 'dayplan.expandAll': 'Bütün günləri genişləndir', + 'dayplan.collapseAll': 'Bütün günləri yığ', + 'dayplan.editNote': 'Qeydi redaktə et', + 'dayplan.noteAdd': 'Qeyd əlavə et', + 'dayplan.noteEdit': 'Qeydi redaktə et', + 'dayplan.noteDelete': 'Qeydi sil', + 'dayplan.noteTitle': 'Qeyd', + 'dayplan.noteSubtitle': 'Günlük qeyd', + 'dayplan.noteIcon': 'İkon', + + 'notes.appearance': 'Görünüş', + 'notes.preview': 'Önizləmə', + 'notes.bodyPlaceholder': 'Təfərrüatlar, linklər, xatırlatmalar…', + 'notes.markdownHint': 'Markdown dəstəklənir', + 'notes.format.toolbar': 'Formatlama', + 'notes.format.bold': 'Qalın', + 'notes.format.italic': 'Maili', + 'notes.format.strike': 'Üstündən xətt çəkilmiş', + 'notes.format.code': 'Kod', + 'notes.format.link': 'Link', + 'notes.format.list': 'Markerli siyahı', + 'notes.format.orderedList': 'Nömrələnmiş siyahı', + 'notes.format.quote': 'Sitat', + + 'notes.color.label': 'Rəng', + 'notes.color.none': 'Rəngsiz', + 'notes.color.red': 'Qırmızı', + 'notes.color.orange': 'Narıncı', + 'notes.color.amber': 'Kəhrəba', + 'notes.color.green': 'Yaşıl', + 'notes.color.cyan': 'Firuzəyi', + 'notes.color.blue': 'Mavi', + 'notes.color.purple': 'Bənövşəyi', + + 'dayplan.totalCost': 'Ümumi xərc', + 'dayplan.days': 'Günlər', + 'dayplan.dayN': '{n}-ci gün', + 'dayplan.calculating': 'Hesablanır...', + 'dayplan.route': 'Marşrut', + 'dayplan.optimize': 'Optimallaşdır', + + 'dayplan.transportMode.change': 'Nəqliyyat növünü dəyiş', + 'dayplan.transportMode.useDefault': + 'Günün standart seçimindən istifadə et', + + 'dayplan.optimized': 'Marşrut optimallaşdırıldı', + 'dayplan.routeError': 'Marşrutu hesablamaq mümkün olmadı', + 'dayplan.toast.needTwoPlaces': + 'Marşrutu optimallaşdırmaq üçün ən azı iki məkan tələb olunur', + 'dayplan.toast.routeOptimized': 'Marşrut optimallaşdırıldı', + 'dayplan.toast.routeOptimizedFromHotel': + 'Marşrut yaşayış yerinizdən başlayaraq optimallaşdırıldı', + 'dayplan.toast.noGeoPlaces': + 'Marşrutun hesablanması üçün koordinatları olan heç bir məkan tapılmadı', + + 'dayplan.confirmed': 'Təsdiqlənib', + 'dayplan.pendingRes': 'Gözləyir', + + 'dayplan.export': 'İxrac et', + 'dayplan.exportIntro': + 'Planınızı özünüzlə aparın: sənəd kimi, təqviminizdə və ya GPS cihazınızda.', + 'dayplan.exportDocument': 'Sənəd', + 'dayplan.exportCalendar': 'Təqvim', + 'dayplan.exportMaps': 'Xəritələr və GPS', + + 'dayplan.pdf': 'PDF', + 'dayplan.pdfTooltip': 'Günlük planı PDF kimi ixrac et', + 'dayplan.gpxTooltip': + 'Oflayn xəritələr və GPS cihazları üçün GPX kimi ixrac et', + 'dayplan.gpxAll': 'Bütün səyahət', + 'dayplan.gpxPlaces': 'Yalnız məkanlar', + 'dayplan.gpxDays': 'Günlər marşrut kimi', + 'dayplan.gpxEmpty': 'Hələ ixrac ediləcək heç nə yoxdur', + 'dayplan.gpxFailed': 'GPX ixracı uğursuz oldu', + 'dayplan.pdfError': 'PDF-i ixrac etmək mümkün olmadı', + + 'dayplan.mobile.addPlace': 'Məkan əlavə et', + 'dayplan.mobile.searchPlaces': 'Məkanları axtarın...', + 'dayplan.mobile.allAssigned': 'Bütün məkanlar günlərə təyin edilib', + 'dayplan.mobile.noMatch': 'Uyğun nəticə yoxdur', + 'dayplan.mobile.createNew': 'Yeni məkan yarat', + + 'dayplan.reorderDays': 'Günlərin sırasını dəyiş', + 'dayplan.reorderTitle': 'Günlərin sırasını dəyiş', + 'dayplan.reorderHint': + 'Günə aid məkanlar, qeydlər və rezervasiyalar günlə birlikdə daşınacaq.', + 'dayplan.addDay': 'Gün əlavə et', + 'dayplan.moveUp': 'Yuxarı daşı', + 'dayplan.moveDown': 'Aşağı daşı', + 'dayplan.reorderUndo': 'Günlərin sırasını dəyiş', + 'dayplan.reorderError': + 'Günlərin sırasını dəyişmək mümkün olmadı', + 'dayplan.addDayError': 'Gün əlavə etmək mümkün olmadı', + 'dayplan.deleteDay': 'Günü sil', + 'dayplan.deleteDayTitle': '{day} silinsin?', + 'dayplan.deleteDayBody': 'Gün səyahətdən silinəcək. Bunu geri qaytarmaq mümkün deyil.', + 'dayplan.deleteDayEmpty': 'Bu gün üçün heç nə planlaşdırılmayıb.', + 'dayplan.impactPlaces': 'Planlaşdırılmış məkanlar: {count}', + 'dayplan.impactPlacesHint': 'Onlar məkanlar siyahısında qalır.', + 'dayplan.impactNotes': 'Qeydlər: {count}', + 'dayplan.impactTexts': 'Gün başlıqları və təsvirləri: {count}', + 'dayplan.impactDeletedHint': 'Onlar da silinəcək.', + 'dayplan.impactBookings': 'Rezervasiyalar: {count}', + 'dayplan.impactStay': '{name} məkanında qalma', + 'dayplan.deleteDayBookingsHint': 'Onlar gün təyin edilmədən Rezervasiyalar bölməsində qalır.', + 'dayplan.deleteDayStayHint': 'Giriş və ya çıxış bu günə düşdüyü üçün qalma qeydi ləğv edilir.', + 'dayplan.deleteDayStayBookedHint': + 'Giriş və ya çıxış bu günə düşdüyü üçün qalma qeydi, “{booking}” rezervasiyası və onun xərci birlikdə ləğv edilir.', + 'dayplan.deleteDayStayBookingHint': + 'Giriş və ya çıxış bu günə düşdüyü üçün qalma qeydi və “{booking}” rezervasiyası birlikdə ləğv edilir.', + 'dayplan.deleteDayStayPaidHint': + 'Giriş və ya çıxış bu günə düşdüyü üçün qalma qeydi, “{booking}” rezervasiyası və onun {amount} məbləğində xərci birlikdə ləğv edilir.', + 'dayplan.deleteDayShift': 'Sonrakı günlər: {count}', + 'dayplan.deleteDayShiftHint': 'Hər biri bir tarix əvvələ keçiriləcək.', + 'dayplan.deleteDayShiftBookingsHint': + 'Hər biri bir tarix əvvələ keçiriləcək. Birlikdə köçürülən rezervasiyalar: {count}', + 'dayplan.deleteDayShrink': 'Səyahət artıq {date} tarixində bitir', + 'dayplan.deleteDayShrinkHint': 'Son tarixi qəbul edəcək tarixsiz gün yoxdur.', + 'dayplan.impactStayShorter': '{name} məkanında qalma: bir gecə az', + 'dayplan.deleteDayStayShorterHint': + 'Bu günü əhatə etdiyi üçün çıxış tarixi artıq {date} olacaq.', + 'dayplan.deleteDayStayShorterUndatedHint': + 'Bu günü əhatə etdiyi üçün qalma müddəti artıq bir gün əvvəl bitir.', + 'dayplan.deleteDaySpareDated': '{day}, {date} tarixini qəbul edir', + 'dayplan.deleteDaySpareDatedHint': + 'Bu, tarixsiz ilk gündür və səyahətin son tarixini qəbul edir.', + 'dayplan.deleteDayLast': 'Səyahətdə ən azı bir gün olmalıdır', + 'dayplan.daysOffline': 'Günləri dəyişmək üçün internet bağlantısı lazımdır', + 'dayplan.deleteDaySuccess': 'Gün silindi', + 'dayplan.deleteDayError': 'Günü silmək mümkün olmadı', + 'dayplan.addUndatedDay': 'Tarixsiz', + 'dayplan.addUndatedDayHint': + 'Sona tarixsiz gün əlavə edir. Səyahətin tarixləri dəyişməz qalır.', + 'dayplan.addDatedDay': '{date} tarixini əlavə et', + 'dayplan.addDatedDayHint': + '{date} tarixini əlavə edir və səyahəti bir gün uzadır.', + 'dayplan.tripExtended': + 'Gün əlavə edildi. Səyahət artıq bir gün sonra, {date} tarixində bitir.', +}; + +export default dayplan; \ No newline at end of file diff --git a/shared/src/i18n/az/docsync.ts b/shared/src/i18n/az/docsync.ts new file mode 100644 index 000000000..a01cce7a4 --- /dev/null +++ b/shared/src/i18n/az/docsync.ts @@ -0,0 +1,201 @@ +import type { TranslationStrings } from '../types'; + +const docsync: TranslationStrings = { + 'docsync.title': 'Sənəd sinxronizasiyası', + 'docsync.noProviders': 'Heç bir sənəd provayderi mövcud deyil', + 'docsync.noProvidersHint': + 'Sistem administratoru bunları İdarəetmə → Əlavələr → Sənədlər bölməsində aktivləşdirir.', + 'docsync.addProvider': 'Provayder qoş', + 'docsync.test': 'Bağlantını sına', + 'docsync.connect.optional': 'İstəyə bağlı', + 'docsync.connected': 'Qoşulub', + 'docsync.chooseFolder': 'Qovluq seç', + 'docsync.noFolders': 'Bu sistemdə hələ heç nə tapılmadı.', + 'docsync.newFolderPlaceholder': 'Yeni qovluğun adı', + 'docsync.syncNow': 'İndi sinxronlaşdır', + 'docsync.unlink': 'Bağlantını kəs', + 'docsync.confirmUnlink': + 'Sənədlər TREK-də və saxlama xidmətində qalacaq. Yalnız onların arasındakı əlaqə silinəcək.', + 'docsync.syncEnabled': 'Avtomatik sinxronlaşdır', + 'docsync.deletePolicy': 'Sənəd silindikdə', + 'docsync.deleteUnlink': 'Hər iki nüsxəni saxla', + 'docsync.deleteTrash': 'Zibil qutusuna köçür', + 'docsync.conflictPolicy': 'Hər iki tərəf dəyişdikdə', + 'docsync.onConflict.manual': 'Məndən soruş', + 'docsync.onConflict.trek_wins': 'TREK nüsxəsini saxla', + 'docsync.onConflict.provider_wins': 'Saxlama xidmətindəki nüsxəni saxla', + 'docsync.webhookHint': + 'Dəyişikliklərin dərhal çatması üçün bu URL-ni provayderinizə daxil edin. Bu edilmədikdə TREK müəyyən vaxt intervalları ilə yoxlayır.', + + // Connection form fields. The keys mirror the `label` column in + // document_provider_fields, which stores a key suffix rather than text. + 'docsync.providerUrl': 'Ünvan', + 'docsync.providerApiToken': 'API tokeni', + 'docsync.providerApiKey': 'API açarı', + 'docsync.providerAppPassword': 'Tətbiq parolu', + 'docsync.providerAppToken': 'Tətbiq tokeni', + 'docsync.providerUsername': 'İstifadəçi adı', + 'docsync.providerPassword': 'Parol', + 'docsync.providerOrganization': 'Təşkilat ID-si', + 'docsync.providerBasePath': 'Əsas qovluq', + 'docsync.providerOTP': 'İki faktorlu doğrulama kodu', + 'docsync.allowInsecureTls': 'Öz-özünə imzalanmış sertifikatı qəbul et', + + 'docsync.hintPaperlessToken': + 'Paperless-də Profilim bölməsindən yaradın. Token həmin hesabın bütün hüquqlarını daşıyır.', + 'docsync.hintPapraKey': + 'Papra-da API açarları bölməsindən yaradın. Papra açarları üzv olduğunuz bütün təşkilatlara həmişə giriş əldə edir.', + 'docsync.hintPapraOrg': 'Papra ünvan sətrindəki org_… ID-si.', + 'docsync.hintNextcloudLogin': 'E-poçt ünvanınız deyil, Nextcloud giriş adınız.', + 'docsync.hintNextcloudAppPassword': + 'Tənzimləmələr → Təhlükəsizlik → Yeni tətbiq parolu yarat. Hesab parolunuzu heç vaxt istifadə etməyin.', + 'docsync.hintOpenCloudToken': 'OpenCloud-da tətbiq tokenləri bölməsindən yaradılır.', + 'docsync.hintBasePath': 'TREK-in səyahət qovluqlarını axtardığı yer. Standart olaraq /TREK.', + 'docsync.hintSynologyUrl': + 'Portu da daxil edin, məsələn, https://nas.example.com:5001', + 'docsync.hintSynologyUser': + 'Yalnız bu paylaşılan qovluğa giriş icazəsi olan ayrıca DSM hesabından istifadə etmək daha yaxşıdır.', + 'docsync.hintSynologyOtp': + 'Hesab iki faktorlu doğrulamadan istifadə edirsə, yalnız bir dəfə tələb olunur.', + + 'docsync.linkState.never': 'Hələ sinxronlaşdırılmayıb', + 'docsync.linkState.ok': 'Sinxronlaşdırılıb', + 'docsync.linkState.partial': 'Qismən sinxronlaşdırılıb', + 'docsync.linkState.failed': 'Uğursuz oldu', + 'docsync.linkState.needs_reauth': 'Yenidən daxil olun', + 'docsync.linkState.scope_lost': 'Qovluq artıq mövcud deyil', + 'docsync.linkState.orphaned': 'Sahib səyahətdən ayrılıb', + + 'docsync.state.pending': 'Gözləyir', + 'docsync.state.synced': 'Sinxronlaşdırılıb', + 'docsync.state.conflict': 'Ziddiyyət', + 'docsync.state.rejected_type': 'Fayl növünə icazə verilmir', + 'docsync.state.too_large': 'Həddindən artıq böyükdür', + 'docsync.state.error': 'Xəta', + 'docsync.state.remote_missing': 'Provayderdə yoxdur', + 'docsync.state.local_deleted': 'TREK-də silinib', + 'docsync.state.scope_drift': 'Qovluqdan kənara köçürülüb', + + 'docsync.conflict.resolve': '{count} ziddiyyəti həll et', + + 'docsync.conflict.title': 'Hər iki nüsxə dəyişdirilib', + 'docsync.conflict.keepTrek': 'TREK versiyasını saxla', + 'docsync.conflict.keepProvider': 'Provayder versiyasını saxla', + 'docsync.conflict.keepBoth': 'Hər ikisini saxla', + + // Failure reasons travel as codes, never as upstream text: a provider answers + // in English, or with a proxy's HTML login page, and neither belongs here. + 'docsync.error.unreachable': 'Provayderə qoşulmaq mümkün olmadı.', + 'docsync.error.tls_untrusted': + 'Sertifikat rədd edildi. Bu sistemə etibar edirsinizsə, öz-özünə imzalanmış sertifikatlara icazə verin.', + 'docsync.error.unauthorized': 'Giriş məlumatları qəbul edilmədi.', + 'docsync.error.forbidden': 'Bu hesabın həmin əməliyyatı yerinə yetirməsinə icazə verilmir.', + 'docsync.error.not_found': 'Provayderdə tapılmadı.', + 'docsync.error.scope_missing': 'Qoşulmuş qovluq artıq mövcud deyil.', + 'docsync.error.rate_limited': + 'Provayder sorğu tezliyini məhdudlaşdırır. TREK daha sonra yenidən cəhd edəcək.', + 'docsync.error.too_large': 'Fayl provayderin qəbul etdiyi ölçüdən böyükdür.', + 'docsync.error.unsupported_type': 'Provayder bu fayl növünü qəbul etmir.', + 'docsync.error.quota_exceeded': 'Provayderdə boş yer qalmayıb.', + 'docsync.error.conflict': 'Sənəd hər iki tərəfdə dəyişdirilib.', + 'docsync.error.checksum_mismatch': 'Fayl ötürülmə zamanı bütöv çatmayıb.', + 'docsync.error.provider_error': 'Provayder xəta bildirdi.', + 'docsync.error.timeout': 'Provayderin cavabı həddindən artıq gecikdi.', + 'docsync.error.ssrf_blocked': 'Bu ünvana icazə verilmir.', + 'docsync.error.mass_delete_guard': + 'Sənədlərin əksəriyyəti eyni anda yoxa çıxdığı üçün heç nə dəyişdirilmədi. Qovluğun hələ də qoşulu olduğunu yoxlayın.', + 'docsync.error.unknown': 'Nəsə yanlış getdi.', + + // ── The dialog ───────────────────────────────────────────────────────────── + 'docsync.sidebar.connected': 'Bu səyahət', + 'docsync.addAnother': 'Başqa provayder əlavə et', + 'docsync.syncing': 'Sinxronlaşdırılır', + 'docsync.card.pickFolder': 'Qoşulub, qovluq seçin', + + 'docsync.empty.title': 'Hələ heç nə qoşulmayıb', + 'docsync.empty.hintOwner': + 'Soldan saxlama xidməti seçin. TREK hər şeyin öz nüsxəsini saxlayır, buna görə xidmət yoxa çıxsa belə heç nə itmir.', + 'docsync.empty.hintMember': + 'Bunu səyahətin sahibi quraşdırır. Hər bir halda sənədlər TREK-də qalır.', + + // How each product files things. Shown before anyone connects, because it is + // what the next screen will ask for. + 'docsync.model.paperless': 'Etiket üzrə fayllar', + 'docsync.model.papra': 'Təşkilat daxilində etiket üzrə fayllar', + 'docsync.model.nextcloud': 'Qovluqdakı fayllar', + 'docsync.model.opencloud': 'Məkandakı fayllar', + 'docsync.model.synologydrive': 'NAS-dakı qovluqda yerləşən fayllar', + + // ── The flow bar ─────────────────────────────────────────────────────────── + 'docsync.flow.trek': 'TREK', + 'docsync.flow.toProvider': 'Saxlama xidmətinə', + 'docsync.flow.toTrek': 'Saxlama xidmətindən', + 'docsync.flow.documents': 'sənəd', + 'docsync.flow.summary.both': 'Sənədlər hər iki istiqamətdə ötürülür.', + 'docsync.flow.summary.pull': 'Sənədlər yalnız daxil olur.', + 'docsync.flow.summary.push': 'Sənədlər yalnız xaricə göndərilir.', + 'docsync.flow.summaryEditable.both': + 'Hər iki istiqamətdə ötürülür. Dayandırmaq üçün istiqamətlərdən birinə toxunun.', + 'docsync.flow.summaryEditable.pull': + 'Yalnız daxil olur. Xaricə də göndərmək üçün digər istiqamətə toxunun.', + 'docsync.flow.summaryEditable.push': + 'Yalnız xaricə göndərilir. Daxil də etmək üçün digər istiqamətə toxunun.', + + // ── One binding ──────────────────────────────────────────────────────────── + 'docsync.binding.settings': 'Tənzimləmələr', + 'docsync.binding.folder': 'Qovluq', + 'docsync.binding.lastRun': 'Son icra', + 'docsync.binding.autoOff': 'Dayandırılıb', + 'docsync.binding.neverRun': 'hələ icra edilməyib', + 'docsync.binding.deleteHint': 'Digər tərəfdəki nüsxəyə nə ediləcəyi.', + 'docsync.binding.conflictHint': + 'Sənəd hər iki yerdə redaktə edildikdə hansı nüsxənin saxlanılacağı.', + 'docsync.binding.autoHint': 'Arxa fonda dəyişiklikləri yoxla.', + 'docsync.binding.webhookTitle': 'Ani yeniləmələr', + 'docsync.binding.copy': 'Kopyala', + 'docsync.binding.copied': 'Kopyalandı', + + // ── Connecting ───────────────────────────────────────────────────────────── + 'docsync.connect.submit': 'Qoşul', + 'docsync.connect.testing': 'Qoşulmağa cəhd edilir', + 'docsync.connect.okAs': 'Qoşuldu, {account} hesabı ilə daxil olundu', + 'docsync.connect.insecureHint': + 'Öz-özünə imzalanmış sertifikata malik şəxsi şəbəkənizdəki sistem üçün.', + 'docsync.connect.about.paperless': + 'TREK bu səyahətin fayllarını ayrıca etiket altında saxlayır və arxivinizin qalan hissəsinə toxunmur.', + 'docsync.connect.about.papra': + 'Bu səyahətin aid olduğu təşkilatı seçin. TREK faylları onun daxilində ayrıca etiket altında saxlayır.', + 'docsync.connect.about.nextcloud': + 'Hesab parolunuzdan deyil, tətbiq parolundan istifadə edin: o, iki faktorlu doğrulama ilə işləyir və ayrıca ləğv edilə bilər.', + 'docsync.connect.about.opencloud': + 'TREK bu səyahət üçün digər hər şeydən ayrı öz məkanını əldə edir.', + 'docsync.connect.about.synologydrive': + 'Yalnız bu səyahətin istifadə etməli olduğu paylaşılan qovluğa giriş əldə edən DSM hesabından istifadə etmək daha yaxşıdır.', + + // ── Picking the container ────────────────────────────────────────────────── + 'docsync.scope.title': 'Bu səyahət {provider} daxilində harada saxlanılsın?', + 'docsync.scope.intro': + 'Yalnız buradakı məzmun sinxronlaşdırılır. Saxlama xidmətinizdəki digər hər şey TREK-dən kənarda qalır.', + 'docsync.scope.createTitle': 'Yenisini yarat', + 'docsync.scope.createAction': 'Yarat', + 'docsync.scope.pickTitle': 'Və ya mövcud olanlardan istifadə et', + 'docsync.scope.search': 'Axtar', + 'docsync.scope.noMatch': 'Uyğun nəticə tapılmadı.', + + // ── Things a person has to decide ────────────────────────────────────────── + 'docsync.issues.title': 'Yoxlanılmalıdır', + 'docsync.issues.conflict': + 'Hər iki yerdə dəyişdirilib. Hansının saxlanılacağını seçin.', + 'docsync.issues.remote_missing': + 'Saxlama xidmətindən silinib. TREK nüsxəsi hələ də buradadır.', + 'docsync.issues.rejected_type': 'Bu fayl növünə burada icazə verilmir.', + 'docsync.issues.too_large': 'İcazə verilən ölçüdən böyükdür.', + 'docsync.issues.error': 'Ötürmə baş tutmadı.', + + 'docsync.error.unknown_provider': 'Bu provayder həmin sistemdə mövcud deyil.', + 'docsync.error.provider_disabled': + 'Dayandırılıb: administrator bu provayderi deaktiv edib. O, yenidən aktivləşdirildikdə sinxronlaşdırma davam edəcək.', + 'docsync.binding.reconnect': 'Yenidən qoşul', +}; + +export default docsync; \ No newline at end of file diff --git a/shared/src/i18n/az/externalNotifications.ts b/shared/src/i18n/az/externalNotifications.ts new file mode 100644 index 000000000..2bde57d54 --- /dev/null +++ b/shared/src/i18n/az/externalNotifications.ts @@ -0,0 +1,80 @@ +import type { NotificationLocale } from '../externalNotifications/types'; +const az: NotificationLocale = { + email: { + footer: 'Bu məktubu TREK-də bildirişləriniz aktiv olduğu üçün aldınız.', + manage: 'Seçimləri Tənzimləmələr bölməsində idarə edin', + madeWith: 'Hazırlanıb:', + openTrek: 'TREK-i aç', + }, + events: { + trip_invite: (p) => ({ + title: `Səyahət dəvəti: “${p.trip}”`, + body: `${p.actor} ${p.invitee || 'bir üzvü'} “${p.trip}” səyahətinə dəvət etdi.`, + }), + booking_change: (p) => ({ + title: `Yeni rezervasiya: ${p.booking}`, + body: `${p.actor} “${p.trip}” səyahətinə yeni ${p.type} rezervasiyası — “${p.booking}” əlavə etdi.`, + }), + trip_reminder: (p) => ({ + title: `Səyahət xatırlatması: ${p.trip}`, + body: `“${p.trip}” səyahətiniz yaxınlaşır!`, + }), + todo_due: (p) => ({ + title: `Tapşırığın son tarixi: ${p.todo}`, + body: `“${p.trip}” səyahətindəki “${p.todo}” tapşırığının son tarixi: ${p.due}.`, + }), + vacay_invite: (p) => ({ + title: 'Vacay birləşdirmə dəvəti', + body: `${p.actor} sizi tətil planlarını birləşdirməyə dəvət etdi. Qəbul və ya rədd etmək üçün TREK-i açın.`, + }), + vacay_share: (p) => ({ + title: 'Vacay təqvimi paylaşıldı', + body: `${p.actor} tətil təqvimini sizinlə paylaşdı. Baxmaq üçün TREK-i açın.`, + }), + collection_invite: (p) => ({ + title: 'Kolleksiya dəvəti', + body: `${p.actor} sizi kolleksiyanı paylaşmağa dəvət etdi. Qəbul və ya rədd etmək üçün TREK-i açın.`, + }), + photos_shared: (p) => ({ + title: `${p.count} foto paylaşıldı`, + body: `${p.actor} “${p.trip}” səyahətində ${p.count} foto paylaşdı.`, + }), + collab_message: (p) => ({ + title: `“${p.trip}” səyahətində yeni mesaj`, + body: `${p.actor}: ${p.preview}`, + }), + packing_tagged: (p) => ({ + title: `Baqaj: ${p.category}`, + body: `${p.actor} sizi “${p.trip}” səyahətində “${p.category}” baqaj kateqoriyasına təyin etdi.`, + }), + version_available: (p) => ({ + title: 'Yeni TREK versiyası əlçatandır', + body: `TREK ${p.version} artıq əlçatandır. Yeniləmək üçün administrator panelinə keçin.`, + }), + replica_failure: (p) => ({ + title: 'Yaddaş replikası xətası', + body: + `“${p.backend}” replikasına yazmaq mümkün olmadı: ${p.key} üçün ${p.op} — ${p.error}.` + + (p.suppressed !== '0' + ? ` Son bildirişdən bəri ${p.suppressed} əlavə xəta gizlədilib.` + : ''), + }), + synology_session_cleared: () => ({ + title: 'Synology sessiyası təmizləndi', + body: 'Synology hesabınız və ya URL-iniz dəyişib. Synology Photos sessiyanız bağlanıb.', + }), + plugin_notification: (p) => ({ + title: p.title ?? '', + body: p.body ?? '', + }), + }, + passwordReset: { + subject: 'Parolunuzu sıfırlayın', + greeting: 'Salam', + body: 'TREK hesabınızın parolunu sıfırlamaq üçün sorğu aldıq. Yeni parol təyin etmək üçün aşağıdakı düyməyə klikləyin.', + ctaIntro: 'Parolu sıfırla', + expiry: 'Bu linkin vaxtı 60 dəqiqədən sonra bitəcək.', + ignore: 'Bu sorğunu siz göndərməmisinizsə, məktubu nəzərə almaya bilərsiniz — parolunuz dəyişməyəcək.', + }, +}; +export default az; \ No newline at end of file diff --git a/shared/src/i18n/az/files.ts b/shared/src/i18n/az/files.ts new file mode 100644 index 000000000..10a641be3 --- /dev/null +++ b/shared/src/i18n/az/files.ts @@ -0,0 +1,86 @@ +import type { TranslationStrings } from '../types'; + +const files: TranslationStrings = { + 'files.filterStarred': 'Ulduzlu', + 'files.link': 'Əlaqələndir', + 'files.linkTitle': 'Faylı əlaqələndir', + 'files.linkEmpty': + 'Əlaqələndiriləcək məkan və ya rezervasiya yoxdur', + 'files.menu': 'Daha çox seçim', + + 'files.uploadErrorSize': + 'Fayl həddindən çox böyükdür (maksimum 50 MB)', + 'files.title': 'Fayllar', + 'files.pageTitle': 'Fayllar və sənədlər', + 'files.subtitle': '{trip} üçün {count} fayl', + 'files.download': 'Endir', + 'files.openError': 'Faylı açmaq mümkün olmadı', + 'files.downloadPdf': 'PDF-i endir', + 'files.count': '{count} fayl', + 'files.countSingular': '1 fayl', + 'files.uploaded': '{count} fayl yükləndi', + 'files.uploadError': 'Yükləmə uğursuz oldu', + 'files.uploadErrorType': 'Bu fayl növü dəstəklənmir', + + 'files.dropzone': 'Faylları buraya sürükləyib buraxın', + 'files.dropzoneHint': 'və ya seçmək üçün klikləyin', + 'files.allowedTypes': + 'Şəkillər, PDF, DOC, DOCX, XLS, XLSX, TXT, CSV · Maksimum 50 MB', + 'files.uploading': 'Yüklənir...', + + 'files.filterAll': 'Hamısı', + 'files.filterPdf': 'PDF-lər', + 'files.filterImages': 'Şəkillər', + 'files.filterDocs': 'Sənədlər', + 'files.filterCollab': 'Əməkdaşlıq qeydləri', + 'files.sourceCollab': 'Əməkdaşlıq qeydlərindən', + + 'files.empty': 'Hələ fayl yoxdur', + 'files.emptyHint': + 'Səyahətinizə əlavə etmək üçün fayllar yükləyin', + 'files.openTab': 'Yeni tabda aç', + 'files.confirm.delete': + 'Bu faylı silmək istədiyinizə əminsiniz?', + 'files.toast.deleted': 'Fayl silindi', + 'files.toast.deleteError': 'Faylı silmək mümkün olmadı', + + 'files.sourcePlan': 'Günlük plan', + 'files.sourceBooking': 'Rezervasiya', + 'files.sourceTransport': 'Nəqliyyat', + 'files.attach': 'Əlavə et', + 'files.pasteHint': + 'Şəkilləri mübadilə buferindən də yapışdıra bilərsiniz (Ctrl+V)', + + 'files.trash': 'Zibil qutusu', + 'files.trashEmpty': 'Zibil qutusu boşdur', + 'files.emptyTrash': 'Zibil qutusunu boşalt', + 'files.restore': 'Bərpa et', + + 'files.star': 'Ulduzla', + 'files.unstar': 'Ulduzu sil', + + 'files.assign': 'Təyin et', + 'files.assignTitle': 'Faylı təyin et', + 'files.assignPlace': 'Məkan', + 'files.assignBooking': 'Rezervasiya', + 'files.assignTransport': 'Nəqliyyat', + 'files.unassigned': 'Təyin edilməyib', + 'files.unlink': 'Əlaqəni sil', + + 'files.toast.trashed': 'Zibil qutusuna köçürüldü', + 'files.toast.restored': 'Fayl bərpa edildi', + 'files.toast.trashEmptied': 'Zibil qutusu boşaldıldı', + 'files.toast.assigned': 'Fayl təyin edildi', + 'files.toast.assignError': 'Faylı təyin etmək mümkün olmadı', + 'files.toast.restoreError': 'Bərpa etmək mümkün olmadı', + + 'files.confirm.permanentDelete': + 'Bu fayl həmişəlik silinsin? Bu əməliyyatı geri qaytarmaq mümkün deyil.', + 'files.confirm.emptyTrash': + 'Zibil qutusundakı bütün fayllar həmişəlik silinsin? Bu əməliyyatı geri qaytarmaq mümkün deyil.', + + 'files.noteLabel': 'Qeyd', + 'files.notePlaceholder': 'Qeyd əlavə edin...', +}; + +export default files; \ No newline at end of file diff --git a/shared/src/i18n/az/help.ts b/shared/src/i18n/az/help.ts new file mode 100644 index 000000000..96a407bc0 --- /dev/null +++ b/shared/src/i18n/az/help.ts @@ -0,0 +1,13 @@ +import type { TranslationStrings } from '../types'; + +const help: TranslationStrings = { + 'help.title': 'Kömək və sənədlər', + 'help.search': 'Sənədlərdə axtar…', + 'help.contents': 'Mündəricat', + 'help.noResults': 'Uyğun səhifə tapılmadı.', + 'help.errorTitle': 'Bu səhifəni yükləmək mümkün olmadı', + 'help.errorBody': + 'Kömək məzmunu TREK vikisindən əldə edilir. İnternet bağlantınızı yoxlayın və yenidən cəhd edin.', +}; + +export default help; \ No newline at end of file diff --git a/shared/src/i18n/az/index.ts b/shared/src/i18n/az/index.ts new file mode 100644 index 000000000..d7fad9f62 --- /dev/null +++ b/shared/src/i18n/az/index.ts @@ -0,0 +1,114 @@ +import admin from './admin'; +import dawarich from './dawarich'; +import docsync from './docsync'; +import airport from './airport'; +import atlas from './atlas'; +import backup from './backup'; +import budget from './budget'; +import categories from './categories'; +import collab from './collab'; +import collection from './collection'; +import common from './common'; +import dashboard from './dashboard'; +import day from './day'; +import dayplan from './dayplan'; +import files from './files'; +import help from './help'; +import inspector from './inspector'; +import journey from './journey'; +import login from './login'; +import map from './map'; +import members from './members'; +import memories from './memories'; +import mobileAdmin from './mobileAdmin'; +import mobileAtlas from './mobileAtlas'; +import mobileCollections from './mobileCollections'; +import mobileJourney from './mobileJourney'; +import mobileNav from './mobileNav'; +import mobileSettings from './mobileSettings'; +import mobileTrip from './mobileTrip'; +import mobileVacay from './mobileVacay'; +import nav from './nav'; +import notif from './notif'; +import notifications from './notifications'; +import oauth from './oauth'; +import packing from './packing'; +import pdf from './pdf'; +import perm from './perm'; +import photos from './photos'; +import places from './places'; +import planner from './planner'; +import register from './register'; +import roadtrip from './roadtrip'; +import reservations from './reservations'; +import settings from './settings'; +import share from './share'; +import shared from './shared'; +import stats from './stats'; +import storage from './storage'; +import system_notice from './system_notice'; +import todo from './todo'; +import transport from './transport'; +import trip from './trip'; +import trips from './trips'; +import undo from './undo'; +import vacay from './vacay'; + +const locale = { + ...common, + ...trips, + ...nav, + ...dashboard, + ...roadtrip, + ...settings, + ...admin, + ...dayplan, + ...share, + ...shared, + ...login, + ...register, + ...vacay, + ...collection, + ...atlas, + ...trip, + ...places, + ...inspector, + ...reservations, + ...airport, + ...map, + ...budget, + ...files, + ...packing, + ...members, + ...categories, + ...backup, + ...photos, + ...pdf, + ...planner, + ...stats, + ...day, + ...memories, + ...collab, + ...perm, + ...undo, + ...notifications, + ...todo, + ...notif, + ...journey, + ...oauth, + ...system_notice, + ...transport, + ...help, + ...mobileTrip, + ...mobileJourney, + ...mobileVacay, + ...mobileAtlas, + ...mobileNav, + ...mobileAdmin, + ...mobileSettings, + ...mobileCollections, + ...storage, + ...dawarich, + ...docsync, +}; +export default locale; diff --git a/shared/src/i18n/az/inspector.ts b/shared/src/i18n/az/inspector.ts new file mode 100644 index 000000000..d2f2b1e06 --- /dev/null +++ b/shared/src/i18n/az/inspector.ts @@ -0,0 +1,31 @@ +import type { TranslationStrings } from '../types'; + +const inspector: TranslationStrings = { + 'inspector.opened': 'Açıqdır', + 'inspector.closed': 'Bağlıdır', + 'inspector.openingHours': 'İş saatları', + 'inspector.showHours': 'İş saatlarını göstər', + 'inspector.files': 'Fayllar', + 'inspector.filesCount': '{count} fayl', + 'inspector.remove': 'Sil', + 'inspector.removeFromDay': 'Gündən çıxar', + 'inspector.addToDay': 'Günə əlavə et', + 'inspector.confirmedRes': 'Təsdiqlənmiş rezervasiya', + 'inspector.pendingRes': 'Gözləyən rezervasiya', + 'inspector.google': 'Google Maps', + 'inspector.navigation': 'Naviqasiya', + 'inspector.openWith': 'Bununla aç', + 'inspector.openStreetMap': 'OpenStreetMap', + 'inspector.website': 'Veb-saytı aç', + 'inspector.saveToCollection': 'Kolleksiyada yadda saxla', + 'inspector.savedToCollection': 'Yadda saxlanıldı', + 'inspector.addRes': 'Rezervasiya', + 'inspector.editRes': 'Rezervasiyanı redaktə et', + 'inspector.participants': 'İştirakçılar', + 'inspector.trackStats': 'Trek statistikası', + 'inspector.trackColor': 'Trekin rəngi', + 'inspector.trackColorAuto': 'Avtomatik rəng', + 'inspector.trackColorCustom': 'Fərdi rəng seç', +}; + +export default inspector; \ No newline at end of file diff --git a/shared/src/i18n/az/journey.ts b/shared/src/i18n/az/journey.ts new file mode 100644 index 000000000..58cac2850 --- /dev/null +++ b/shared/src/i18n/az/journey.ts @@ -0,0 +1,772 @@ +import type { TranslationStrings } from '../types'; + +const journey: TranslationStrings = { + 'journey.search.placeholder': 'Səyahət gündəliklərini axtarın…', + 'journey.search.noResults': '“{query}” ilə uyğun gündəlik yoxdur', + 'journey.title': 'Səyahət gündəliyi', + 'journey.subtitle': 'Səyahətlərinizi baş verdiyi anda qeyd edin', + 'journey.new': 'Yeni səyahət gündəliyi', + 'journey.create': 'Yarat', + 'journey.titlePlaceholder': 'Haraya gedirsiniz?', + 'journey.empty': 'Hələ səyahət gündəliyi yoxdur', + 'journey.emptyHint': 'Növbəti səyahətinizi sənədləşdirməyə başlayın', + 'journey.deleted': 'Səyahət gündəliyi silindi', + 'journey.createError': 'Səyahət gündəliyini yaratmaq mümkün olmadı', + 'journey.deleteError': 'Səyahət gündəliyini silmək mümkün olmadı', + 'journey.deleteConfirmTitle': 'Sil', + 'journey.deleteConfirmMessage': + '“{title}” silinsin? Bu əməliyyatı geri qaytarmaq mümkün deyil.', + 'journey.deleteConfirmGeneric': + 'Bunu silmək istədiyinizə əminsiniz?', + 'journey.notFound': 'Səyahət gündəliyi tapılmadı', + 'journey.photos': 'Fotolar', + 'journey.timelineEmpty': 'Hələ dayanacaq yoxdur', + 'journey.timelineEmptyHint': + 'Başlamaq üçün məkanda qeydiyyatdan keçin və ya gündəlik qeydi yazın', + + 'journey.status.draft': 'Qaralama', + 'journey.status.active': 'Aktiv', + 'journey.status.completed': 'Tamamlanıb', + 'journey.status.upcoming': 'Qarşıdan gəlir', + 'journey.status.archived': 'Arxivləşdirilib', + + 'journey.checkin.add': 'Məkanda qeydiyyatdan keç', + 'journey.checkin.namePlaceholder': 'Məkanın adı', + 'journey.checkin.notesPlaceholder': 'Qeydlər (istəyə bağlı)', + 'journey.checkin.save': 'Yadda saxla', + 'journey.checkin.error': 'Məkan qeydiyyatını yadda saxlamaq mümkün olmadı', + + 'journey.entry.add': 'Gündəlik', + 'journey.entry.edit': 'Qeydi redaktə et', + 'journey.entry.titlePlaceholder': 'Başlıq (istəyə bağlı)', + 'journey.entry.bodyPlaceholder': 'Bu gün nə baş verdi?', + 'journey.entry.save': 'Yadda saxla', + 'journey.entry.error': 'Qeydi yadda saxlamaq mümkün olmadı', + + 'journey.photo.add': 'Foto', + 'journey.photo.uploadError': 'Yükləmə uğursuz oldu', + + 'journey.share.share': 'Paylaş', + 'journey.share.public': 'İctimai', + 'journey.share.linkCopied': 'İctimai link kopyalandı', + 'journey.share.disabled': 'İctimai paylaşım deaktiv edilib', + + 'journey.editor.titlePlaceholder': 'Bu ana bir ad verin...', + 'journey.editor.bodyPlaceholder': 'Bu günün hekayəsini danışın...', + 'journey.editor.placePlaceholder': 'Məkan (istəyə bağlı)', + 'journey.editor.tagsPlaceholder': + 'Teqlər: gizli inci, ən yaxşı yemək, yenidən gəlməli...', + 'journey.visibility.private': 'Şəxsi', + 'journey.visibility.shared': 'Paylaşılan', + 'journey.visibility.public': 'İctimai', + + 'journey.emptyState.title': 'Hekayəniz burada başlayır', + 'journey.emptyState.subtitle': + 'Bir məkanda qeydiyyatdan keçin və ya ilk gündəlik qeydinizi yazın', + + 'journey.frontpage.subtitle': + 'Səyahətlərinizi heç vaxt unutmayacağınız hekayələrə çevirin', + 'journey.frontpage.createJourney': 'Səyahət gündəliyi yarat', + 'journey.frontpage.activeJourney': 'Aktiv səyahət gündəliyi', + 'journey.frontpage.latestJourney': 'Son səyahət gündəliyi', + 'journey.frontpage.allJourneys': 'Bütün səyahət gündəlikləri', + 'journey.frontpage.journeys': 'səyahət gündəliyi', + 'journey.frontpage.createNew': 'Yeni səyahət gündəliyi yarat', + 'journey.frontpage.createNewSub': + 'Səyahətləri seçin, hekayələr yazın və macəralarınızı paylaşın', + 'journey.frontpage.live': 'Canlı', + 'journey.frontpage.synced': 'Sinxronlaşdırılıb', + 'journey.frontpage.continueWriting': 'Yazmağa davam et', + 'journey.frontpage.updated': '{time} yeniləndi', + 'journey.frontpage.suggestionLabel': 'Səyahət indicə başa çatdı', + 'journey.frontpage.suggestionText': + '{title} səyahətini gündəliyə çevirin', + 'journey.frontpage.dismiss': 'Bağla', + 'journey.frontpage.journeyName': 'Səyahət gündəliyinin adı', + 'journey.frontpage.namePlaceholder': 'məs. Cənub-Şərqi Asiya 2026', + 'journey.frontpage.selectTrips': 'Səyahətləri seç', + 'journey.frontpage.tripsSelected': 'səyahət seçilib', + 'journey.frontpage.trips': 'səyahət', + 'journey.frontpage.placesImported': 'məkan idxal ediləcək', + 'journey.frontpage.places': 'məkan', + + 'journey.detail.backToJourney': 'Səyahət gündəliyinə qayıt', + 'journey.detail.syncedWithTrips': 'Səyahətlərlə sinxronlaşdırılıb', + 'journey.detail.addEntry': 'Qeyd əlavə et', + 'journey.detail.jumpToTop': 'Yuxarı qayıt', + 'journey.detail.jumpToLast': 'Sonuncu qeydə keç', + 'journey.detail.newEntry': 'Yeni qeyd', + 'journey.detail.editEntry': 'Qeydi redaktə et', + 'journey.detail.noEntries': 'Hələ qeyd yoxdur', + 'journey.detail.noEntriesHint': + 'İlkin qeydlərlə başlamaq üçün səyahət əlavə edin', + 'journey.detail.noPhotos': 'Hələ foto yoxdur', + 'journey.detail.noPhotosHint': + 'Qeydlərə fotolar yükləyin və ya Immich/Synology kitabxananıza baxın', + 'journey.detail.journeyTab': 'Səyahət gündəliyi', + 'journey.detail.journeyStats': 'Gündəlik statistikası', + 'journey.detail.syncedTrips': 'Sinxronlaşdırılmış səyahətlər', + 'journey.detail.noTripsLinked': 'Hələ əlaqələndirilmiş səyahət yoxdur', + 'journey.detail.contributors': 'İştirakçılar', + 'journey.detail.readMore': 'Davamını oxu', + 'journey.detail.prosCons': 'Müsbət və mənfi cəhətlər', + 'journey.detail.photos': 'foto', + 'journey.detail.day': '{number}-ci gün', + 'journey.detail.places': 'məkan', + + 'journey.stats.days': 'Günlər', + 'journey.stats.cities': 'Şəhərlər', + 'journey.stats.entries': 'Qeydlər', + 'journey.stats.photos': 'Fotolar', + 'journey.stats.places': 'Məkanlar', + + 'journey.skeletons.show': 'Təklifləri göstər', + 'journey.skeletons.hide': 'Təklifləri gizlət', + 'journey.verdict.lovedIt': 'Çox bəyəndim', + 'journey.verdict.couldBeBetter': 'Daha yaxşı ola bilərdi', + 'journey.synced.places': 'məkan', + 'journey.synced.synced': 'sinxronlaşdırılıb', + + 'journey.editor.discardChangesConfirm': + 'Yadda saxlanılmamış dəyişiklikləriniz var. Onlardan imtina edilsin?', + 'journey.editor.uploadFailed': 'Fotonu yükləmək mümkün olmadı', + 'journey.editor.uploadPhotos': 'Fotolar yüklə', + 'journey.editor.uploading': 'Yüklənir...', + 'journey.editor.uploadingProgress': '{done}/{total} yüklənir…', + 'journey.editor.uploadPartialFailed': + '{total} fotodan {failed} ədədini yükləmək mümkün olmadı — yenidən sınamaq üçün bir daha yadda saxlayın', + 'journey.editor.fromGallery': 'Qalereyadan', + 'journey.editor.allPhotosAdded': 'Bütün fotolar artıq əlavə edilib', + 'journey.editor.externalPhotos': 'Xarici fotolar', + 'journey.editor.externalPhotosFor': '{date} üçün fotolar', + 'journey.editor.externalPhotosNearby': 'Əvvəlcə yaxınlıqdakı fotolar', + 'journey.editor.externalPhotosNoLocation': 'Bu günə aid bütün fotolar', + 'journey.editor.externalPhotosQueued': 'növbəyə əlavə edilib', + 'journey.editor.externalPhotosUnavailable': + 'Qoşulmuş foto provayderi mövcud deyil.', + 'journey.editor.externalPhotosPartialFailed': + '{failed} foto qrupunu yükləmək mümkün olmadı — yenidən sınamaq üçün bir daha yadda saxlayın', + + 'journey.editor.writeStory': 'Hekayənizi yazın...', + 'journey.editor.prosCons': 'Müsbət və mənfi cəhətlər', + 'journey.editor.pros': 'Müsbət cəhətlər', + 'journey.editor.cons': 'Mənfi cəhətlər', + 'journey.editor.proPlaceholder': 'Möhtəşəm bir şey...', + 'journey.editor.conPlaceholder': 'O qədər də yaxşı olmayan...', + 'journey.editor.addAnother': 'Başqasını əlavə et', + 'journey.editor.date': 'Tarix', + 'journey.editor.location': 'Məkan', + 'journey.editor.searchLocation': 'Məkan axtarın...', + 'journey.editor.mood': 'Əhvali-ruhiyyə', + 'journey.editor.weather': 'Hava', + 'journey.editor.photoFirst': '1-ci', + 'journey.editor.makeFirst': '1-ci et', + 'journey.editor.searching': 'Axtarılır...', + 'journey.editor.useCurrentLocation': 'Cari məkanımdan istifadə et', + 'journey.editor.locationPermissionDenied': + 'Məkan məlumatlarına giriş rədd edildi. Brauzer tənzimləmələrindən icazə verib yenidən cəhd edin.', + 'journey.editor.locationTimeout': + 'Məkanınızı müəyyən etmək çox vaxt apardı. Yenidən cəhd edin.', + 'journey.editor.locationUnavailable': + 'Məkanınızı müəyyən etmək mümkün olmadı.', + 'journey.editor.locationInsecureContext': + 'Məkan məlumatı təhlükəsiz (HTTPS) bağlantı tələb edir.', + + 'journey.mood.amazing': 'Möhtəşəm', + 'journey.mood.good': 'Yaxşı', + 'journey.mood.neutral': 'Normal', + 'journey.mood.rough': 'Çətin', + 'journey.weather.sunny': 'Günəşli', + 'journey.weather.partly': 'Dəyişkən buludlu', + 'journey.weather.cloudy': 'Buludlu', + 'journey.weather.rainy': 'Yağışlı', + 'journey.weather.stormy': 'Fırtınalı', + 'journey.weather.cold': 'Qarlı', + + 'journey.trips.linkTrip': 'Səyahəti əlaqələndir', + 'journey.trips.searchTrip': 'Səyahət axtar', + 'journey.trips.searchPlaceholder': 'Səyahətin adı və ya təyinat yeri...', + 'journey.trips.noTripsAvailable': 'Əlçatan səyahət yoxdur', + 'journey.trips.link': 'Əlaqələndir', + 'journey.trips.tripLinked': 'Səyahət əlaqələndirildi', + 'journey.trips.linkFailed': 'Səyahəti əlaqələndirmək mümkün olmadı', + 'journey.trips.addTrip': 'Səyahət əlavə et', + 'journey.trips.unlinkTrip': 'Səyahətlə əlaqəni sil', + 'journey.trips.unlinkMessage': + '“{title}” ilə əlaqə silinsin? Bu səyahətdən sinxronlaşdırılmış bütün qeydlər və fotolar həmişəlik silinəcək. Bu əməliyyatı geri qaytarmaq mümkün deyil.', + 'journey.trips.unlink': 'Əlaqəni sil', + 'journey.trips.tripUnlinked': 'Səyahətlə əlaqə silindi', + 'journey.trips.unlinkFailed': 'Səyahətlə əlaqəni silmək mümkün olmadı', + 'journey.trips.noTripsLinkedSettings': 'Əlaqələndirilmiş səyahət yoxdur', + + 'journey.contributors.invite': 'İştirakçı dəvət et', + 'journey.contributors.searchUser': 'İstifadəçi axtar', + 'journey.contributors.searchPlaceholder': 'İstifadəçi adı və ya e-poçt...', + 'journey.contributors.noUsers': 'Heç bir istifadəçi tapılmadı', + 'journey.contributors.role': 'Rol', + 'journey.contributors.added': 'İştirakçı əlavə edildi', + 'journey.contributors.addFailed': 'İştirakçını əlavə etmək mümkün olmadı', + 'journey.contributors.remove': 'İştirakçını çıxar', + 'journey.contributors.removeConfirm': + '{username} bu səyahət gündəliyindən çıxarılsın?', + 'journey.contributors.removed': 'İştirakçı çıxarıldı', + 'journey.contributors.removeFailed': 'İştirakçını çıxarmaq mümkün olmadı', + + 'journey.share.publicShare': 'İctimai paylaşım', + 'journey.share.createLink': 'Paylaşım linki yarat', + 'journey.share.linkCreated': 'Paylaşım linki yaradıldı', + 'journey.share.createFailed': 'Link yaratmaq mümkün olmadı', + 'journey.share.copy': 'Kopyala', + 'journey.share.copied': 'Kopyalandı!', + 'journey.share.timeline': 'Zaman xətti', + 'journey.share.gallery': 'Qalereya', + 'journey.share.map': 'Xəritə', + 'journey.share.removeLink': 'Paylaşım linkini sil', + 'journey.share.linkDeleted': 'Paylaşım linki silindi', + 'journey.share.deleteFailed': 'Silmək mümkün olmadı', + 'journey.share.updateFailed': 'Yeniləmək mümkün olmadı', + + 'journey.invite.role': 'Rol', + 'journey.invite.viewer': 'İzləyici', + 'journey.invite.editor': 'Redaktor', + 'journey.invite.invite': 'Dəvət et', + 'journey.invite.inviting': 'Dəvət edilir...', + + 'journey.settings.title': 'Səyahət gündəliyi tənzimləmələri', + 'journey.settings.coverImage': 'Üzlük şəkli', + 'journey.settings.changeCover': 'Üzlüyü dəyiş', + 'journey.settings.addCover': 'Üzlük şəkli əlavə et', + 'journey.settings.name': 'Ad', + 'journey.settings.subtitle': 'Altbaşlıq', + 'journey.settings.subtitlePlaceholder': + 'məs. Tailand, Vyetnam və Kamboca', + 'journey.settings.tracks': 'GPX izləri', + 'journey.settings.showTripTracks': 'Bütün səyahət GPX izlərini göstər', + 'journey.settings.showTripTracksHint': + 'Əlaqələndirilmiş səyahətlərdə qeydə alınmış marşrutları xəritədə göstərir.', + 'journey.settings.endJourney': 'Səyahət gündəliyini arxivləşdir', + 'journey.settings.reopenJourney': 'Səyahət gündəliyini bərpa et', + 'journey.settings.archived': 'Səyahət gündəliyi arxivləşdirildi', + 'journey.settings.reopened': 'Səyahət gündəliyi yenidən açıldı', + 'journey.settings.endDescription': + 'Canlı nişanını gizlədir. İstənilən vaxt yenidən aça bilərsiniz.', + 'journey.settings.delete': 'Sil', + 'journey.settings.deleteJourney': 'Səyahət gündəliyini sil', + 'journey.settings.deleteMessage': + '“{title}” silinsin? Bütün qeydlər və fotolar itiriləcək.', + 'journey.settings.saved': 'Tənzimləmələr yadda saxlanıldı', + 'journey.settings.saveFailed': 'Yadda saxlamaq mümkün olmadı', + 'journey.settings.coverUpdated': 'Üzlük yeniləndi', + 'journey.settings.coverFailed': 'Yükləmə uğursuz oldu', + 'journey.settings.failedToDelete': 'Silmək mümkün olmadı', + + 'journey.entries.deleteTitle': 'Qeydi sil', + 'journey.photosUploaded': '{count} foto yükləndi', + 'journey.photosUploadFailed': 'Bəzi fotoları yükləmək mümkün olmadı', + 'journey.photosAdded': '{count} foto əlavə edildi', + + 'journey.public.notFound': 'Tapılmadı', + 'journey.public.notFoundMessage': + 'Bu səyahət gündəliyi mövcud deyil və ya linkin vaxtı bitib.', + 'journey.public.readOnly': 'Yalnız oxuma · İctimai səyahət gündəliyi', + 'journey.public.tagline': 'Travel Resource & Exploration Kit', + 'journey.public.sharedVia': 'Paylaşım vasitəsi:', + 'journey.public.madeWith': 'Hazırlanıb:', + + 'journey.pdf.journeyBook': 'Səyahət kitabı', + 'journey.pdf.madeWith': 'TREK ilə hazırlanıb', + 'journey.pdf.day': 'Gün', + 'journey.pdf.theEnd': 'Son', + 'journey.pdf.saveAsPdf': 'PDF kimi yadda saxla', + 'journey.pdf.pages': 'səhifə', + + 'journey.picker.tripPeriod': 'Səyahət müddəti', + 'journey.picker.day': 'Bu gün', + 'journey.picker.dateRange': 'Tarix aralığı', + 'journey.picker.allPhotos': 'Bütün fotolar', + 'journey.picker.albums': 'Albomlar', + 'journey.picker.selected': 'seçilib', + 'journey.picker.addTo': 'Əlavə ediləcək yer:', + 'journey.picker.newGallery': 'Yeni qalereya', + 'journey.picker.selectAll': 'Hamısını seç', + 'journey.picker.deselectAll': 'Bütün seçimləri ləğv et', + 'journey.picker.noAlbums': 'Heç bir albom tapılmadı', + 'journey.picker.selectDate': 'Tarix seç', + 'journey.picker.search': 'Axtar', + + 'journey.studio.title': 'TREK Studio', + 'journey.studio.open': 'Studio', + 'journey.studio.openAria': 'Foto kitab studiyasını aç', + 'journey.studio.backToJourney': 'Səyahət gündəliyinə qayıt', + 'journey.studio.format': 'Səhifə formatı', + 'journey.studio.formatA4Landscape': 'A4 albom', + 'journey.studio.formatA4Portrait': 'A4 portret', + 'journey.studio.formatSquare21': 'Kvadrat 21 × 21 sm', + 'journey.studio.formatSquare30': 'Kvadrat 30 × 30 sm', + 'journey.studio.pages': 'Səhifələr', + 'journey.studio.cover': 'Üzlük', + 'journey.studio.inspector': 'Xüsusiyyətlər', + 'journey.studio.inspectorEmpty': + 'Redaktə etmək üçün səhifədə bir element seçin.', + 'journey.studio.emptySpread': 'Bu açılım hələ boşdur', + 'journey.studio.autoLayout': 'Avtomatik tərtibat', + 'journey.studio.export': 'İxrac et', + 'journey.studio.day': 'GÜN', + 'journey.studio.stations': 'Dayanacaqlar', + 'journey.studio.peersHere': 'burada', + 'journey.studio.folioAuto': 'Avtomatik', + + 'journey.studio.exportLayout': 'Tərtibat', + 'journey.studio.exportPages': 'Ayrı-ayrı səhifələr', + 'journey.studio.exportPagesHint': + 'Oxuma ardıcıllığı ilə hər vərəqdə bir səhifə. Çap üçün uyğundur.', + 'journey.studio.exportSpreads': 'Açılımlar', + 'journey.studio.exportSpreadsHint': + 'Kitabın açıldığı kimi hər dəfə iki səhifə. Oxumaq üçün uyğundur.', + 'journey.studio.exportFinishing': 'Son işləmə', + 'journey.studio.exportMarks': 'Kəsim nişanları', + 'journey.studio.exportMarksHint': + 'Hər kənara {bleed} mm daşma payı əlavə edir və kəsiləcək yerləri işarələyir', + 'journey.studio.exportNote': + '{width} × {height} mm ölçüdə {sheets} vərəq. Brauzeriniz çap görünüşünü PDF-ə çevirəcək.', + 'journey.studio.exportOpen': 'Çap görünüşü', + 'journey.studio.exportSave': 'PDF kimi yadda saxla', + 'journey.studio.exportPreparing': 'Hazırlanır', + 'journey.studio.exportSheetCount': '{count} vərəq', + + 'journey.studio.undo': 'Geri qaytar', + 'journey.studio.redo': 'Təkrar et', + 'journey.studio.zoomIn': 'Yaxınlaşdır', + 'journey.studio.zoomOut': 'Uzaqlaşdır', + 'journey.studio.zoomFit': 'Görünüşə sığdır', + + 'journey.studio.downloadSpread': 'Bu açılımı endir', + 'journey.studio.downloadSpreadHint': + 'Bu açılımın dizaynını fotolarsız fayl kimi yadda saxlayır; paylaşmaq və ya yenidən istifadə etmək mümkündür', + 'journey.studio.importSpread': 'İdxal et', + 'journey.studio.importSpreadHint': + 'Endirilmiş dizayn faylından açılım əlavə edin', + 'journey.studio.importSpreadFailed': + 'Bu fayl TREK Studio açılımı deyil', + + 'journey.studio.desktopOnly': 'Studio daha böyük ekran tələb edir', + 'journey.studio.desktopOnlyHint': + 'Kitab dizaynı geniş iş sahəsi tələb etdiyi üçün Studio və PDF yaratma funksiyası yalnız kompüterdə işləyir. Səyahət gündəliyinin digər bütün funksiyaları burada əvvəlki kimi işləyir.', + + 'journey.studio.formatA5Landscape': 'A5 albom', + 'journey.studio.bookView': 'Kitab görünüşü', + 'journey.studio.multiple': 'Bir neçə', + 'journey.studio.kind.photo': 'Foto', + 'journey.studio.kind.text': 'Mətn', + 'journey.studio.kind.shape': 'Fiqur', + 'journey.studio.position': 'Mövqe', + 'journey.studio.width': 'En', + 'journey.studio.height': 'Hündürlük', + 'journey.studio.text': 'Mətn', + 'journey.studio.typography': 'Şrift', + 'journey.studio.leading': 'Sətirarası', + 'journey.studio.colour': 'Rəng', + 'journey.studio.autoColour': 'Avtomatik', + 'journey.studio.countryNames': 'Adlar', + 'journey.studio.crop': 'Kəs', + 'journey.studio.look': 'Görünüş', + 'journey.studio.radius': 'Künc', + 'journey.studio.shape': 'Forma', + 'journey.studio.arrange': 'Sıralama', + 'journey.studio.toFront': 'Ən önə gətir', + 'journey.studio.forward': 'Önə gətir', + 'journey.studio.backward': 'Arxaya göndər', + 'journey.studio.toBack': 'Ən arxaya göndər', + 'journey.studio.lock': 'Kilidlə', + 'journey.studio.unlock': 'Kilidi aç', + 'journey.studio.delete': 'Sil', + 'journey.studio.pageHint': 'Səhifə', + 'journey.studio.boundHint': + 'Gündəlik qeydini izləyir. Burada redaktə etmək həmin əlaqəni pozacaq.', + + 'journey.studio.fit.cover': 'Doldur', + 'journey.studio.fit.contain': 'Sığdır', + 'journey.studio.filter.none': 'Orijinal', + 'journey.studio.filter.bw': 'Qara-ağ', + 'journey.studio.filter.warm': 'İsti', + 'journey.studio.shapeKind.rect': 'Düzbucaqlı', + 'journey.studio.shapeKind.ellipse': 'Ellips', + 'journey.studio.focalHint': + 'Kadrda qalacaq hissəni seçmək üçün nöqtəni daşıyın.', + + 'journey.studio.backCover': 'Arxa üzlük', + 'journey.studio.sections': 'Bölmələr', + 'journey.studio.content': 'Məzmun', + 'journey.studio.elements': 'Elementlər', + 'journey.studio.templates': 'Tərtibatlar', + 'journey.studio.photos': 'Fotolar', + 'journey.studio.entries': 'Qeydlər', + 'journey.studio.addToPage': 'Bu səhifəyə əlavə et', + 'journey.studio.noPhotos': 'Bu səyahət gündəliyində hələ foto yoxdur.', + 'journey.studio.untitled': 'Başlıqsız', + 'journey.studio.addTitle': 'Başlıq', + 'journey.studio.addStory': 'Hekayə', + 'journey.studio.addPlace': 'Məkan', + 'journey.studio.shapes': 'Fiqurlar', + 'journey.studio.frames': 'Çərçivələr', + 'journey.studio.emptyFrame': 'Boş çərçivə', + 'journey.studio.frameHint': + 'Boş çərçivə şəklin yerləşəcəyi yeri göstərir. Məzmun bölməsindən fotonu onun üzərinə sürükləyin.', + + 'journey.studio.shapeKind.line': 'Xətt', + 'journey.studio.styleTitle': 'Başlıq', + 'journey.studio.styleSubtitle': 'Altbaşlıq', + 'journey.studio.styleBody': 'Əsas mətn', + 'journey.studio.styleCaption': 'Fotoaltı yazı', + 'journey.studio.sampleHeading': 'Başlıq', + 'journey.studio.sampleSubheading': 'Altbaşlıq', + 'journey.studio.sampleBody': 'Bu gün haqqında bir şey yazın.', + 'journey.studio.sampleCaption': 'Fotoaltı yazı', + + 'journey.studio.templatesCoverHint': + 'Tərtibatlar daxili açılımlara tətbiq edilir. Ön və arxa üzlüklər ayrıca dizayn olunur.', + 'journey.studio.tpl.heroStory': 'Baş foto və hekayə', + 'journey.studio.tpl.fullBleed': 'Bir foto, tam açılım', + 'journey.studio.tpl.twoUp': 'İki tam səhifə', + 'journey.studio.tpl.grid4': 'Dörd bölmə', + 'journey.studio.tpl.grid6': 'Altı bölmə', + 'journey.studio.tpl.strip': 'Zolaq və mətn', + 'journey.studio.tpl.quietText': 'Yalnız mətn', + 'journey.studio.tpl.portraitPair': 'Bir cüt', + 'journey.studio.dropPhotoHere': 'Fotonuzu sürükləyib\nburaya buraxın', + 'journey.studio.searchContent': 'Foto və qeydləri axtarın', + 'journey.studio.noMatches': 'Uyğun nəticə yoxdur.', + + 'journey.studio.decorations': 'Dekorasiya', + 'journey.studio.quoteMark': 'Dırnaq işarəsi', + 'journey.studio.circleOutline': 'Konturlu dairə', + 'journey.studio.roundFrame': 'Yumru çərçivə', + 'journey.studio.shapeKind.rounded': 'Yumru künclü düzbucaqlı', + 'journey.studio.shapeKind.triangle': 'Üçbucaq', + 'journey.studio.shapeKind.outline': 'Yalnız kontur', + + 'journey.studio.travel': 'Səyahət', + 'journey.studio.travelEmpty': + 'Bu səyahət üzrə göstəricilər hələ hazır deyil.', + 'journey.studio.grids': 'Torlar', + 'journey.studio.gridHint': + 'Tor boş çərçivələr bloku əlavə edir. Məzmun bölməsindən fotoları onların üzərinə sürükləyin.', + 'journey.studio.lines': 'Xətlər', + 'journey.studio.frameStyles': 'Çərçivə üslubları', + 'journey.studio.frameShapes': 'Çərçivə formaları', + 'journey.studio.plainFrame': 'Sadə', + 'journey.studio.polaroidFrame': 'Polaroid', + 'journey.studio.whiteFrame': 'Ağ haşiyə', + 'journey.studio.shadowFrame': 'Kölgəli', + 'journey.studio.filmFrame': 'Film', + 'journey.studio.tapeFrame': 'Lentli', + + 'journey.studio.shapeGroup.basic': 'Əsas', + 'journey.studio.shapeGroup.polygons': 'Çoxbucaqlılar', + 'journey.studio.shapeGroup.stars': 'Ulduzlar', + 'journey.studio.shapeGroup.arrows': 'Oxlar', + 'journey.studio.shapeGroup.speech': 'Nitq', + 'journey.studio.shapeGroup.travel': 'Səyahət', + 'journey.studio.shapeGroup.decor': 'Dekorasiya', + 'journey.studio.shapeGroup.banners': 'Bannerlər', + + 'journey.studio.summary': 'Xülasə', + 'journey.studio.tripSummary': 'Səyahət xülasəsi', + 'journey.studio.statsRow': 'Bir sıra', + 'journey.studio.statsFull': 'Hər şey', + 'journey.studio.routeMap': 'Marşrut xəritəsi', + 'journey.studio.mapStyle.minimal': 'Minimal', + 'journey.studio.mapStyle.outline': 'Kontur', + 'journey.studio.mapStyle.paper': 'Kağız', + 'journey.studio.mapStyle.dark': 'Tünd', + + 'journey.studio.countries': 'Ölkələr', + 'journey.studio.countryList': 'Ölkə siyahısı', + 'journey.studio.countryGrid': 'Ölkə toru', + 'journey.studio.noCountries': + 'Bu səyahət üçün hələ ölkə müəyyən edilməyib.', + 'journey.studio.noRoute': + 'Hələ koordinatları olan dayanacaq yoxdur.', + + 'journey.studio.marks': 'Nişanlar', + 'journey.studio.dateMark': 'Tarix', + 'journey.studio.dayMark': 'Gün sayğacı', + 'journey.studio.dayWord': 'GÜN', + 'journey.studio.coordsMark': 'Koordinatlar', + 'journey.studio.coordsDms': 'Dərəcə', + 'journey.studio.coordsDecimal': 'Onluq', + 'journey.studio.flagMark': 'Bayraq', + 'journey.studio.distanceMark': 'Məsafə', + + 'journey.studio.metric.distance': 'Məsafə', + 'journey.studio.metric.days': 'Günlər', + 'journey.studio.metric.steps': 'Addımlar', + 'journey.studio.metric.photos': 'Fotolar', + 'journey.studio.metric.countries': 'Ölkələr', + 'journey.studio.metric.places': 'Məkanlar', + 'journey.studio.metric.furthest': 'Ən uzaq', + + 'journey.studio.kind.map': 'Xəritə', + 'journey.studio.kind.stats': 'Göstəricilər', + 'journey.studio.kind.countries': 'Ölkələr', + 'journey.studio.kind.badge': 'Nişan', + 'journey.studio.kind.list': 'Siyahı', + 'journey.studio.kind.icon': 'İkon', + + 'journey.studio.duplicate': 'Dublikat yarat', + 'journey.studio.style': 'Üslub', + 'journey.studio.shows': 'Göstərir', + 'journey.studio.size': 'Ölçü', + 'journey.studio.weight': 'Qalınlıq', + 'journey.studio.italic': 'Maili', + 'journey.studio.tracking': 'Hərf aralığı', + 'journey.studio.rotation': 'Fırlanma', + 'journey.studio.opacity': 'Şəffaflıq', + 'journey.studio.fill': 'Dolğu', + 'journey.studio.fillOn': 'Doldurulmuş', + 'journey.studio.stroke': 'Kontur', + 'journey.studio.strokeWidth': 'Qalınlıq', + 'journey.studio.gradient': 'Keçid', + 'journey.studio.gradientDown': 'Aşağıya', + 'journey.studio.gradientUp': 'Yuxarıya', + + 'journey.studio.showIcons': 'İkonlar', + 'journey.studio.mapFit': 'Sığdırma', + 'journey.studio.mapPadding': 'Boşluq', + 'journey.studio.mapShape': 'Forma', + 'journey.studio.align.left': 'Sol', + 'journey.studio.align.center': 'Mərkəz', + 'journey.studio.align.right': 'Sağ', + + 'journey.studio.markStyle.plain': 'Sadə', + 'journey.studio.markStyle.chip': 'Etiket', + 'journey.studio.markStyle.outline': 'Kontur', + 'journey.studio.markStyle.stacked': 'Üst-üstə', + + 'journey.studio.icon': 'İkon', + 'journey.studio.iconAndLabel': 'İkon və mətn', + 'journey.studio.iconOnly': 'Yalnız ikon', + 'journey.studio.labelOnly': 'Yalnız mətn', + 'journey.studio.icons': 'İkonlar', + 'journey.studio.iconsForTravel': 'Səyahət üçün', + 'journey.studio.iconsAll': 'Bütün ikonlar', + 'journey.studio.searchIcons': 'İkonları axtarın', + 'journey.studio.lineWidth': 'Qalınlıq', + 'journey.studio.mask': 'Formaya görə kəs', + 'journey.studio.maskNone': 'Heç biri', + 'journey.studio.frameStyle': 'Çərçivə', + + 'journey.studio.mapLayers': 'Laylar', + 'journey.studio.showLand': 'Ölkələr', + 'journey.studio.showRoute': 'Marşrut', + 'journey.studio.showPins': 'Dayanacaqlar', + 'journey.studio.showLabels': 'Etiketlər', + 'journey.studio.units': 'Ölçü vahidləri', + 'journey.studio.metrics': 'Göstəricilər', + 'journey.studio.layout': 'Tərtibat', + 'journey.studio.layoutGrid': 'Tor', + 'journey.studio.layoutRow': 'Sıra', + 'journey.studio.layoutColumn': 'Sütun', + 'journey.studio.layoutList': 'Siyahı', + 'journey.studio.showOutline': 'Konturlar', + 'journey.studio.showFlag': 'Bayraqlar', + 'journey.studio.showName': 'Adlar', + 'journey.studio.textScale': 'Mətn ölçüsü', + 'journey.studio.accent': 'Vurğu rəngi', + 'journey.studio.refresh': 'Səyahətdən yenilə', + 'journey.studio.staleHint': + 'Bu göstəricilər götürüldükdən sonra səyahət dəyişdirilib.', + 'journey.studio.align': 'Düzləndir', + + 'journey.studio.filter.cool': 'Soyuq', + 'journey.studio.filter.fade': 'Solğun', + 'journey.studio.filter.contrast': 'Kontrastlı', + 'journey.studio.strokeStyle': 'Xətt üslubu', + 'journey.studio.strokeSolid': 'Bütöv', + 'journey.studio.strokeDashed': 'Kəsik', + 'journey.studio.strokeDotted': 'Nöqtəli', + + 'journey.studio.singleFigures': 'Ayrı-ayrı göstəricilər', + 'journey.studio.addPage': 'Açılım əlavə et', + 'journey.studio.addPageAfter': 'Bundan sonra açılım əlavə et', + 'journey.studio.duplicatePage': 'Açılımın dublikatını yarat', + 'journey.studio.deletePage': 'Açılımı sil', + 'journey.studio.movePageUp': 'Əvvələ daşı', + 'journey.studio.movePageDown': 'Sonraya daşı', + 'journey.studio.beta': 'Beta', + 'journey.studio.addProsCons': 'Müsbət və mənfi cəhətlər', + 'journey.studio.showMarks': 'Nişanlar', + + 'journey.studio.formatCustom': 'Fərdi ölçü', + 'journey.studio.document': 'Sənəd', + 'journey.studio.pageNumbers': 'Səhifə nömrələri', + 'journey.studio.pageNumbersOn': 'Aktiv', + 'journey.studio.pageNumbersOff': 'Deaktiv', + 'journey.studio.folio.outer': 'Xarici', + 'journey.studio.folio.inner': 'Daxili', + 'journey.studio.folio.centre': 'Mərkəzdə', + 'journey.studio.folioStart': 'Başlanğıc nömrəsi', + 'journey.studio.folioMargin': 'Kənar boşluğu', + + 'journey.studio.relayoutSpread': 'Bu açılım', + 'journey.studio.relayoutSpreadHint': 'Onu qeydindən yenidən qur', + 'journey.studio.relayoutSpreadNone': + 'Bu səhifə qeyddən yaradılmayıb', + 'journey.studio.relayoutBook': 'Bütün kitab', + 'journey.studio.relayoutBookHint': + 'Bütün səhifələri əvəz edir — geri qaytarmaq mümkündür', + + 'journey.studio.tpl.coverFull': 'Tam daşma', + 'journey.studio.tpl.coverBand': 'Şəkil və zolaq', + 'journey.studio.tpl.coverWindow': 'Çərçivəli', + 'journey.studio.tpl.coverQuiet': 'Yalnız mətn', + 'journey.studio.tpl.coverHalf': 'İki yarı', + 'journey.studio.tpl.fullText': 'Şəkil və hekayə', + 'journey.studio.tpl.grid9': 'Doqquz bölmə', + 'journey.studio.tpl.mosaic': 'Mozaika', + 'journey.studio.tpl.bandQuote': 'Arada sitat', + 'journey.studio.tpl.staggerFour': 'Pilləli dördlük', + + 'journey.studio.weightMissing': + 'Bu şriftdə həmin qalınlıq mövcud deyil', + + 'journey.studio.mapSource': 'Xəritə mənbəyi', + 'journey.studio.mapSourceVector': 'Konturlar', + 'journey.studio.mapSourceRelief': 'Relyef', + 'journey.studio.routeLook': 'Marşrut xətti', + 'journey.studio.roads': 'Yollar', + 'journey.studio.roadsFetch': 'Yolları izlə', + 'journey.studio.roadsFollow': 'Yollar üzrə', + 'journey.studio.roadsDirect': 'Birbaşa', + 'journey.studio.roadsAgain': 'Yenidən əldə et', + 'journey.studio.roadsClear': 'Təmizlə', + 'journey.studio.roadsBusy': 'Sorğu göndərilir', + 'journey.studio.roadsHint': + 'Hər marşrut hissəsinin avtomobillə keçilən yolunu marşrut xidmətindən əldə edin. Uzun hissələr olduğu kimi qalacaq.', + 'journey.studio.roadsHave': + 'Yollar bu kitabda saxlanılır, buna görə oflayn çap zamanı da eyni xətt göstərilir.', + + 'journey.studio.routeStyle': 'Üslub', + 'journey.studio.routePlain': 'Sadə', + 'journey.studio.routeDrawn': 'Əl ilə çəkilmiş', + 'journey.studio.routeArc': 'Uzun hissələr', + 'journey.studio.routeStraight': 'Düz', + 'journey.studio.routeBow': 'Əyri', + 'journey.studio.routeDashArcs': 'Əyri hissələri kəsik xətlə göstər', + + 'journey.studio.mapStops': 'Dayanacaqlar', + 'journey.studio.pinDot': 'Nöqtələr', + 'journey.studio.pinPhoto': 'Fotolar', + 'journey.studio.pinPhotoNone': + 'Bu dayanacaqlarda hələ foto olmadığından onlar nöqtə kimi göstərilir.', + + 'journey.studio.mapSourceSatellite': 'Peyk', + 'journey.studio.recommended': 'tövsiyə edilir', + 'journey.studio.bleed': 'Daşma payı', + 'journey.studio.safeArea': 'Təhlükəsiz sahə', + 'journey.studio.mapSourceSatelliteHint': + 'Buludsuz Sentinel-2 təsvirləri, mənbə göstərilməklə pulsuz çap edilə bilər. Şəhər küçəsinədək aydın görünür.', + 'journey.studio.mapPerTrip': 'Hər dəfə bir səyahət', + 'journey.studio.mapWholeJourney': 'Bütün səyahət gündəliyi', + 'journey.studio.mapScope': 'Göstərir', + 'journey.studio.mapPrintDpi': 'Təxmini çap keyfiyyəti:', + 'journey.studio.mapPrintDpiLow': + 'bu ölçüdə bulanıqdır; daha geniş görünüş və ya başqa mənbə sınayın', + 'journey.studio.mapSourceReliefHint': + 'NASA kölgəli relyefi, pulsuz çap edilə bilər. Ölkə və ya qitə üçün uyğundur, bir şəhər üçün çox aşağı detallıdır.', + 'journey.studio.mapSourceTiles': 'Xəritə plitələri', + 'journey.studio.mapSourceStatic': 'Mapbox', + 'journey.studio.mapSourceHint': + 'Səhifə göstərilərkən əldə edilir və mənbəsi ilə birlikdə çap olunur', + + 'journey.studio.mapZoom': 'Miqyas', + 'journey.studio.mapFraming': 'Görünüş', + 'journey.studio.mapFitStops': 'Dayanacaqlar', + 'journey.studio.mapFitCountry': 'Bütün ölkə', + 'journey.studio.mapPadTight': 'Dar', + 'journey.studio.mapPadNormal': 'Normal', + 'journey.studio.mapPadWide': 'Geniş', + 'journey.studio.mapPadFar': 'Çox geniş', + 'journey.studio.mapClipRect': 'Çərçivə daxilində', + 'journey.studio.mapClipCountry': 'Formaya görə kəs', + 'journey.studio.mapClipNeedsCountry': + 'Formaya görə kəsmək üçün ölkə tələb olunur', + 'journey.studio.mapCutVector': 'Kəsilmiş forma', + 'journey.studio.mapCutTiles': 'Kəsilmiş xəritə', + 'journey.studio.mapZoomAuto': 'Sığdır', + + 'journey.studio.saving': 'Yadda saxlanılır', + 'journey.studio.saved': 'Yadda saxlandı', + 'journey.studio.saveFailed': 'Yadda saxlanılmadı', + 'journey.studio.saveRetry': 'Yenidən cəhd et', + 'journey.studio.saveConflict': + 'Başqa biri bu kitabı yadda saxlayıb', + 'journey.studio.saveTakeTheirs': 'Onların versiyasını götür', + 'journey.studio.saveKeepMine': 'Mənim versiyamı saxla', + 'journey.studio.rotate': 'Fırlat', + 'journey.studio.rotateLeft': 'Sola fırlat', + 'journey.studio.rotateRight': 'Sağa fırlat', + 'journey.studio.saveReadOnly': + 'Yalnız oxuma rejimi — yadda saxlanılmadı', + + 'journey.studio.filterPhotos': 'Fotoları filtrlə', + 'journey.studio.filterAll': 'Bütün fotolar', + 'journey.studio.filterLoose': 'Heç bir qeydə aid olmayan', + 'journey.studio.filterRecent': 'İndicə yüklənən', + 'journey.studio.filterThisPage': 'Bu səhifə', + 'journey.studio.entryPhotos': 'Fotolar', + 'journey.studio.noEntryPhotos': 'Bu qeyddə hələ foto yoxdur.', + 'journey.studio.noLoosePhotos': 'Buradakı bütün fotolar bir qeydə aiddir.', + + 'journey.studio.uploadPhotos': 'Fotolar yüklə', + 'journey.studio.uploadHint': + 'Şəkilləri buraya sürükləyib buraxın və ya seçmək üçün klikləyin', + 'journey.studio.uploadToEntry': + 'Yeni şəkillər bu qeydə əlavə ediləcək', + 'journey.studio.uploadToGallery': + 'Yeni şəkillər qalereyaya əlavə ediləcək', + 'journey.studio.uploading': '{total} şəkildən {done} yüklənir', + 'journey.studio.dropFilesHere': 'Şəkilləri əlavə etmək üçün buraya buraxın', + 'journey.studio.videosSkipped': + '{count} video daxil edilmədi. Kitabda yalnız şəkillər istifadə olunur.', + + 'journey.studio.fillPage': 'Səhifəni doldur', + 'journey.studio.fillSpread': 'Açılımı doldur', + 'journey.studio.fillHint': + 'Şəkli daşma payı daxil olmaqla bütün səhifəyə yayır və bütün digər elementlərin arxasına göndərir.', + + 'journey.studio.stops': 'Dayanacaqlar', + 'journey.studio.stopsHint': + 'Hər dayanacaq marşrut, məsafə və ölkələrin hesablanmasına daxil edilir. Məsələn, evinizə yaxın hava limanını daxil etməmək üçün onu deaktiv edin.', + 'journey.studio.stopOn': 'Hesablanır', + 'journey.studio.stopOff': 'Daxil edilməyib', + 'journey.studio.stopToggle': 'Bu dayanacağı hesablamaya daxil et', + 'journey.studio.stopsFailed': 'Dayanacağı dəyişmək mümkün olmadı.', + + 'journey.editor.statsExcluded': 'Marşruta daxil etmə', + 'journey.editor.statsExcludedHint': + 'Dayanacaq gündəlikdə qalır, lakin məsafə, ölkələr və Studiodakı xəritənin hesablanmasına daxil edilmir.', + 'journey.entry.offRoute': 'Marşrutdan kənar', + + 'journey.suggestions.dismiss': 'Bu təklifi bağla', + 'journey.suggestions.dismissed': 'Təklif bağlandı', + 'journey.suggestions.restore': 'Bağlanmış təklifləri geri qaytar', + 'journey.suggestions.restoreCount': 'Bağlanmış təkliflər ({count})', + 'journey.suggestions.restored': '{count} təklif geri qaytarıldı', + + 'journey.detail.addOnThisDay': 'Bu günə qeyd əlavə et', + 'journey.detail.jumpToDay': '{date} tarixinə keç', + 'journey.detail.searchPlaceholder': 'Bu səyahət gündəliyində axtar', + 'journey.detail.searchEmpty': '“{query}” ilə uyğun qeyd yoxdur', + + 'journey.settings.entryFields': 'Qeyd sahələri', + 'journey.settings.entryFieldsHint': + 'Bu səyahətdə istifadə edilməyən sahələri deaktiv edin. Artıq yazılmış heç nə itirilməyəcək.', + 'journey.settings.showVerdict': 'Müsbət və mənfi cəhətlər', + 'journey.settings.showMood': 'Əhvali-ruhiyyə', + 'journey.settings.showWeather': 'Hava', + + 'journey.entry.suggestion': 'Təklif', + 'journey.editor.addDetails': '+ Təfərrüatlar', +}; +export default journey; \ No newline at end of file diff --git a/shared/src/i18n/az/login.ts b/shared/src/i18n/az/login.ts new file mode 100644 index 000000000..22b1d5382 --- /dev/null +++ b/shared/src/i18n/az/login.ts @@ -0,0 +1,76 @@ +import type { TranslationStrings } from '../types'; + +const login: TranslationStrings = { + 'login.error': 'Giriş uğursuz oldu. Giriş məlumatlarınızı yoxlayın.', + 'login.tagline': 'Səyahətləriniz.\nPlanınız.', + 'login.description': 'İnteraktiv xəritələr, büdcələr və real vaxt sinxronizasiyası ilə səyahətləri birlikdə planlaşdırın.', + 'login.title': 'Daxil ol', + 'login.subtitle': 'Yenidən xoş gəlmisiniz', + 'login.signingIn': 'Daxil olunur…', + 'login.signIn': 'Daxil ol', + 'login.createAdmin': 'Administrator hesabı yarat', + 'login.createAdminHint': 'TREK üçün ilk administrator hesabını yaradın.', + 'login.setNewPassword': 'Yeni parol təyin et', + 'login.setNewPasswordHint': 'Davam etməzdən əvvəl parolunuzu dəyişməlisiniz.', + 'login.createAccount': 'Hesab yarat', + 'login.createAccountHint': 'Yeni hesab yaradın.', + 'login.creating': 'Yaradılır…', + 'login.noAccount': "Hesabınız yoxdur?", + 'login.hasAccount': 'Artıq hesabınız var?', + 'login.register': 'Qeydiyyatdan keç', + 'login.emailPlaceholder': 'nümunə@email.com', + 'login.username': 'İstifadəçi adı', + 'login.oidc.registrationDisabled': 'Qeydiyyat deaktiv edilib. Administratorunuzla əlaqə saxlayın.', + 'login.oidc.noEmail': 'Provayderdən e-poçt ünvanı alınmadı.', + 'login.oidc.tokenFailed': 'Autentifikasiya uğursuz oldu.', + 'login.oidc.invalidState': 'Sessiya etibarsızdır. Yenidən cəhd edin.', + 'login.demoFailed': 'Demo girişi uğursuz oldu', + 'login.oidcSignIn': '{name} ilə daxil ol', + 'login.oidcOnly': 'Parolla autentifikasiya deaktiv edilib. SSO provayderinizdən istifadə edərək daxil olun.', + 'login.oidcLoggedOut': 'Sistemdən çıxmısınız. SSO provayderinizdən istifadə edərək yenidən daxil olun.', + 'login.demoHint': 'Demonu sınayın — qeydiyyat tələb olunmur', + 'login.mfaTitle': 'İki faktorlu autentifikasiya', + 'login.mfaSubtitle': 'Autentifikator tətbiqinizdəki 6 rəqəmli kodu daxil edin.', + 'login.mfaCodeLabel': 'Doğrulama kodu', + 'login.mfaCodeRequired': 'Autentifikator tətbiqinizdəki kodu daxil edin.', + 'login.mfaHint': 'Google Authenticator, Authy və ya başqa TOTP tətbiqini açın.', + 'login.mfaBack': '← Girişə qayıt', + 'login.mfaVerify': 'Doğrula', + 'login.invalidInviteLink': 'Dəvət keçidi etibarsızdır və ya vaxtı bitib', + 'login.oidcFailed': 'OIDC girişi uğursuz oldu', + 'login.usernameRequired': 'İstifadəçi adı tələb olunur', + 'login.passwordMinLength': 'Parol ən azı 8 simvoldan ibarət olmalıdır', + 'login.forgotPassword': 'Parolu unutmusunuz?', + 'login.rememberMe': 'Məni yadda saxla', + 'login.forgotPasswordTitle': 'Parolunuzu sıfırlayın', + 'login.forgotPasswordBody': + "Qeydiyyatdan keçdiyiniz e-poçt ünvanını daxil edin. Hesab mövcuddursa, sıfırlama keçidi göndəriləcək.", + 'login.forgotPasswordSubmit': 'Sıfırlama keçidini göndər', + 'login.forgotPasswordSentTitle': 'E-poçtunuzu yoxlayın', + 'login.forgotPasswordSentBody': + 'Bu e-poçt ünvanı ilə hesab mövcuddursa, sıfırlama keçidi göndərilir. Keçidin etibarlılıq müddəti 60 dəqiqədir.', + 'login.forgotPasswordSmtpHintOff': + "Diqqət: administratorunuz SMTP-ni konfiqurasiya etməyib. Buna görə sıfırlama keçidi e-poçtla göndərilmək əvəzinə server konsoluna yazılacaq.", + 'login.backToLogin': 'Girişə qayıt', + 'login.newPassword': 'Yeni parol', + 'login.confirmPassword': 'Yeni parolu təsdiqlə', + 'login.passwordsDontMatch': "Parollar uyğun gəlmir", + 'login.mfaCode': '2FA kodu', + 'login.resetPasswordTitle': 'Yeni parol təyin et', + 'login.resetPasswordBody': 'Əvvəllər burada istifadə etmədiyiniz güclü parol seçin. Parol ən azı 8 simvoldan ibarət olmalıdır.', + 'login.resetPasswordMfaBody': 'Sıfırlamanı tamamlamaq üçün 2FA kodunuzu və ya ehtiyat kodu daxil edin.', + 'login.resetPasswordSubmit': 'Parolu sıfırla', + 'login.resetPasswordVerify': 'Doğrula və sıfırla', + 'login.resetPasswordSuccessTitle': 'Parol yeniləndi', + 'login.resetPasswordSuccessBody': 'İndi yeni parolunuzla daxil ola bilərsiniz.', + 'login.resetPasswordInvalidLink': 'Sıfırlama keçidi etibarsızdır', + 'login.resetPasswordInvalidLinkBody': 'Bu keçid mövcud deyil və ya işləmir. Davam etmək üçün yeni keçid tələb edin.', + 'login.resetPasswordFailed': 'Sıfırlama uğursuz oldu. Keçidin vaxtı bitmiş ola bilər.', + 'login.passkey.signIn': 'Passkey ilə daxil ol', + 'login.passkey.failed': 'Passkey ilə giriş uğursuz oldu. Yenidən cəhd edin.', + 'login.insecureCookie.title': "HTTP üzərindən giriş sessiyası saxlanmır", + 'login.insecureCookie.body': + 'Adi HTTP üzərindən qoşulduğunuz üçün brauzer TREK-in təhlükəsiz sessiya kukisini saxlamır — növbəti sorğu "Access token required" xətası ilə uğursuz olur. Həll: HTTPS istifadə edin və ya ev laboratoriyası üçün COOKIE_SECURE=false təyin edin.', + 'login.insecureCookie.link': 'Problemlərin həlli təlimatını aç', +}; +export default login; diff --git a/shared/src/i18n/az/map.ts b/shared/src/i18n/az/map.ts new file mode 100644 index 000000000..824a72f3a --- /dev/null +++ b/shared/src/i18n/az/map.ts @@ -0,0 +1,45 @@ +import type { TranslationStrings } from '../types'; + +const map: TranslationStrings = { + 'map.connections': 'Bağlantılar', + 'map.showConnections': 'Rezervasiya marşrutlarını göstər', + 'map.hideConnections': 'Rezervasiya marşrutlarını gizlət', + + 'poi.searchThisArea': 'Bu ərazidə axtar', + 'poi.cat.restaurants': 'Restoranlar', + 'poi.cat.cafes': 'Kafelər', + 'poi.cat.bars': 'Barlar və gecə həyatı', + 'poi.cat.hotels': 'Yaşayış yerləri', + 'poi.cat.sights': 'Görməli yerlər', + 'poi.cat.museums': 'Muzeylər və mədəniyyət', + 'poi.cat.nature': 'Təbiət və parklar', + 'poi.cat.activities': 'Fəaliyyətlər', + + 'map.showAllConnections': + 'Bütün rezervasiya marşrutlarını göstər', + 'map.hideAllConnections': + 'Bütün rezervasiya marşrutlarını gizlət', + + 'map.baseLayer.default': 'Xəritə', + 'map.baseLayer.satellite': 'Peyk', + 'map.baseLayer.switchToSatellite': 'Peyk görünüşünə keç', + 'map.baseLayer.switchToDefault': 'Xəritə görünüşünə keç', + + 'map.location.denied': + 'Məkan məlumatlarına giriş bloklanıb. Cihazınızın tənzimləmələrini yoxlayın; quraşdırılmış tətbiqin brauzerdən ayrı məkan icazəsi var.', + 'map.location.unavailable': + 'Mövcud yerinizi müəyyən etmək mümkün olmadı.', + 'map.location.timeout': + 'Məkanınızı müəyyən etmək çox vaxt apardı. Səmanın daha açıq göründüyü yerdə yenidən cəhd edin.', + + 'map.overview.show': 'Bütün səyahəti göstər', + 'map.overview.hide': 'Bütün səyahəti gizlət', + 'map.overview.total': 'Ümumi məsafə', + 'map.attribution': 'Xəritə mənbələri', + 'map.overview.unrouted': + '{count} marşrut hissəsini hesablamaq mümkün olmadığından məsafələr tam deyil.', + 'map.overview.dayUnrouted': + 'Bu günün {count} marşrut hissəsini hesablamaq mümkün olmadı', +}; + +export default map; \ No newline at end of file diff --git a/shared/src/i18n/az/members.ts b/shared/src/i18n/az/members.ts new file mode 100644 index 000000000..d740f425f --- /dev/null +++ b/shared/src/i18n/az/members.ts @@ -0,0 +1,50 @@ +import type { TranslationStrings } from '../types'; + +const members: TranslationStrings = { + 'members.shareTrip': 'Səyahəti paylaş', + 'members.inviteUser': 'İstifadəçi dəvət et', + 'members.selectUser': 'İstifadəçi seçin…', + 'members.invite': 'Dəvət et', + 'members.allHaveAccess': + 'Bütün istifadəçilərin artıq giriş icazəsi var.', + + 'members.access': 'Giriş icazəsi', + 'members.person': 'nəfər', + 'members.persons': 'nəfər', + 'members.you': 'siz', + 'members.owner': 'Sahib', + + 'members.leaveTrip': 'Səyahətdən ayrıl', + 'members.removeAccess': 'Giriş icazəsini ləğv et', + 'members.confirmLeave': + 'Səyahətdən ayrılasınız? Giriş icazənizi itirəcəksiniz.', + 'members.confirmRemove': + 'Bu istifadəçinin giriş icazəsi ləğv edilsin?', + + 'members.loadError': 'Üzvləri yükləmək mümkün olmadı', + 'members.added': 'əlavə edildi', + 'members.addError': 'Əlavə etmək mümkün olmadı', + 'members.removed': 'Üzv çıxarıldı', + 'members.removeError': 'Çıxarmaq mümkün olmadı', + + 'members.makeOwner': 'Sahib et', + 'members.confirmTransfer': + 'Sahiblik {name} adlı üzvə verilsin? Siz adi üzv olacaqsınız.', + 'members.transferError': 'Sahibliyi ötürmək mümkün olmadı', + + 'members.guests': 'Qonaqlar', + 'members.guest': 'Qonaq', + 'members.guestsHint': + 'Hesabı olmayan şəxslər. Onlar xərclərə, baqaj siyahısına və tapşırıqlara təyin edilə bilər, lakin sistemə daxil ola bilməzlər.', + 'members.addGuest': 'Qonaq əlavə et', + 'members.guestNamePlaceholder': 'Qonağın adı', + 'members.guestAdded': 'Qonaq əlavə edildi', + 'members.guestAddError': 'Qonağı əlavə etmək mümkün olmadı', + 'members.guestRenameError': + 'Qonağın adını dəyişmək mümkün olmadı', + 'members.guestRemoved': 'Qonaq çıxarıldı', + 'members.confirmRemoveGuest': + 'Bu qonaq çıxarılsın? Ona təyin edilmiş tapşırıqlar və xərc payları da silinəcək.', +}; + +export default members; \ No newline at end of file diff --git a/shared/src/i18n/az/memories.ts b/shared/src/i18n/az/memories.ts new file mode 100644 index 000000000..bb9c28f27 --- /dev/null +++ b/shared/src/i18n/az/memories.ts @@ -0,0 +1,108 @@ +import type { TranslationStrings } from '../types'; + +const memories: TranslationStrings = { + 'memories.title': 'Fotolar', + 'memories.notConnected': '{provider_name} qoşulmayıb', + 'memories.notConnectedHint': + 'Bu səyahətə fotolar əlavə etmək üçün Tənzimləmələr bölməsində {provider_name} serverinizi qoşun.', + 'memories.notConnectedMultipleHint': + 'Bu səyahətə fotolar əlavə etmək üçün Tənzimləmələr bölməsində bu foto provayderlərindən birini qoşun: {provider_names}.', + + 'memories.noDates': + 'Fotoları yükləmək üçün səyahətinizə tarixlər əlavə edin.', + 'memories.noPhotos': 'Heç bir foto tapılmadı', + 'memories.noPhotosHint': + 'Bu səyahətin tarix aralığı üçün {provider_name} daxilində heç bir foto tapılmadı.', + 'memories.photosFound': 'foto', + 'memories.fromOthers': 'başqalarından', + + 'memories.sharePhotos': 'Fotoları paylaş', + 'memories.sharing': 'Paylaşım', + 'memories.reviewTitle': 'Fotolarınızı nəzərdən keçirin', + 'memories.reviewHint': + 'Paylaşılmasını istəmədiyiniz fotolara klikləyin.', + 'memories.shareCount': '{count} foto paylaş', + + 'memories.providerUrl': 'Server URL-i', + 'memories.providerApiKey': 'API açarı', + 'memories.providerUsername': 'İstifadəçi adı', + 'memories.providerPassword': 'Parol', + 'memories.providerOTP': 'MFA kodu (aktivdirsə)', + 'memories.skipSSLVerification': + 'SSL sertifikatı yoxlamasını keç', + 'memories.immichAutoUpload': + 'Yüklənən səyahət fotolarını Immich-ə də köçür', + 'memories.providerUrlHintSynology': + 'URL-ə Photos tətbiqinin yolunu daxil edin, məsələn, https://nas:5001/photo', + + 'memories.testConnection': 'Bağlantını yoxla', + 'memories.testShort': 'Yoxla', + 'memories.testFirst': 'Əvvəlcə bağlantını yoxlayın', + 'memories.connected': 'Qoşulub', + 'memories.disconnected': 'Qoşulmayıb', + 'memories.connectionSuccess': '{provider_name} ilə bağlantı yaradıldı', + 'memories.connectionError': + '{provider_name} ilə bağlantı yaratmaq mümkün olmadı', + 'memories.saved': + '{provider_name} tənzimləmələri yadda saxlanıldı', + 'memories.providerDisconnectedBanner': + '{provider_name} ilə bağlantınız kəsilib. Fotolara baxmaq üçün Tənzimləmələr bölməsində yenidən qoşulun.', + 'memories.saveError': + '{provider_name} tənzimləmələrini yadda saxlamaq mümkün olmadı', + + 'memories.addPhotos': 'Fotolar əlavə et', + 'memories.linkAlbum': 'Albomu əlaqələndir', + 'memories.selectAlbum': '{provider_name} albomu seç', + 'memories.selectAlbumMultiple': 'Albom seç', + 'memories.noAlbums': 'Heç bir albom tapılmadı', + 'memories.syncAlbum': 'Albomu sinxronlaşdır', + 'memories.unlinkAlbum': 'Albomla əlaqəni sil', + 'memories.photos': 'foto', + + 'memories.selectPhotos': '{provider_name} daxilindən fotolar seç', + 'memories.selectPhotosMultiple': 'Fotolar seç', + 'memories.selectHint': 'Seçmək üçün fotolara toxunun.', + 'memories.selected': 'seçilib', + 'memories.addSelected': '{count} foto əlavə et', + 'memories.alreadyAdded': 'Əlavə edilib', + + 'memories.private': 'Şəxsi', + 'memories.stopSharing': 'Paylaşımı dayandır', + 'memories.oldest': 'Əvvəlcə ən köhnələr', + 'memories.newest': 'Əvvəlcə ən yenilər', + 'memories.allLocations': 'Bütün məkanlar', + 'memories.tripDates': 'Səyahət tarixləri', + 'memories.allPhotos': 'Bütün fotolar', + + 'memories.confirmShareTitle': + 'Səyahət üzvləri ilə paylaşılsın?', + 'memories.confirmShareHint': + '{count} foto bu səyahətin bütün üzvlərinə görünəcək. Daha sonra ayrı-ayrı fotoları şəxsi edə bilərsiniz.', + 'memories.confirmShareButton': 'Fotoları paylaş', + + 'memories.error.loadAlbums': + 'Albomları yükləmək mümkün olmadı', + 'memories.error.linkAlbum': + 'Albomu əlaqələndirmək mümkün olmadı', + 'memories.error.unlinkAlbum': + 'Albomla əlaqəni silmək mümkün olmadı', + 'memories.error.syncAlbum': + 'Albomu sinxronlaşdırmaq mümkün olmadı', + 'memories.error.loadPhotos': + 'Fotoları yükləmək mümkün olmadı', + 'memories.error.addPhotos': + 'Fotoları əlavə etmək mümkün olmadı', + 'memories.error.removePhoto': + 'Fotonu silmək mümkün olmadı', + 'memories.error.toggleSharing': + 'Paylaşım vəziyyətini yeniləmək mümkün olmadı', + + 'memories.saveRouteNotConfigured': + 'Bu provayder üçün yadda saxlama marşrutu konfiqurasiya edilməyib', + 'memories.testRouteNotConfigured': + 'Bu provayder üçün yoxlama marşrutu konfiqurasiya edilməyib', + 'memories.fillRequiredFields': + 'Bütün tələb olunan sahələri doldurun', +}; + +export default memories; \ No newline at end of file diff --git a/shared/src/i18n/az/mobileAdmin.ts b/shared/src/i18n/az/mobileAdmin.ts new file mode 100644 index 000000000..4f4944f10 --- /dev/null +++ b/shared/src/i18n/az/mobileAdmin.ts @@ -0,0 +1,9 @@ +import type { TranslationStrings } from '../types'; + +const mobileAdmin: TranslationStrings = { + 'mobileAdmin.create': 'Yeni istifadəçi', + 'mobileAdmin.updateAction': 'Yenilə', + 'mobileAdmin.updateLine': '{version} versiyası əlçatandır · sizdə {current} var', +}; + +export default mobileAdmin; \ No newline at end of file diff --git a/shared/src/i18n/az/mobileAtlas.ts b/shared/src/i18n/az/mobileAtlas.ts new file mode 100644 index 000000000..e6893180d --- /dev/null +++ b/shared/src/i18n/az/mobileAtlas.ts @@ -0,0 +1,8 @@ +import type { TranslationStrings } from '../types'; + +const mobileAtlas: TranslationStrings = { + 'mobileAtlas.visited': 'Ziyarət edilib', + 'mobileAtlas.planned': 'Planlaşdırılıb', +}; + +export default mobileAtlas; \ No newline at end of file diff --git a/shared/src/i18n/az/mobileCollections.ts b/shared/src/i18n/az/mobileCollections.ts new file mode 100644 index 000000000..91f721321 --- /dev/null +++ b/shared/src/i18n/az/mobileCollections.ts @@ -0,0 +1,7 @@ +import type { TranslationStrings } from '../types'; + +const mobileCollections: TranslationStrings = { + 'mobileCollections.status': 'Status', +}; + +export default mobileCollections; \ No newline at end of file diff --git a/shared/src/i18n/az/mobileJourney.ts b/shared/src/i18n/az/mobileJourney.ts new file mode 100644 index 000000000..3d5542bce --- /dev/null +++ b/shared/src/i18n/az/mobileJourney.ts @@ -0,0 +1,17 @@ +import type { TranslationStrings } from '../types'; + +const mobileJourney: TranslationStrings = { + 'mobileJourney.latestJourney': 'Son səyahət gündəliyi', + 'mobileJourney.otherJourneys': 'Digər səyahət gündəlikləri', + 'mobileJourney.entriesCount': '{count} qeyd', + 'mobileJourney.photosCount': '{count} foto', + 'mobileJourney.placesCount': '{count} məkan', + 'mobileJourney.daysCount': '{count} gün', + 'mobileJourney.time': 'Vaxt', + 'mobileJourney.tags': 'Teqlər', + 'mobileJourney.addTag': 'Teq əlavə et', + 'mobileJourney.uploadFromDevice': 'Cihazdan yüklə', + 'mobileJourney.browseProvider': '{name} kitabxanasına bax', +}; + +export default mobileJourney; \ No newline at end of file diff --git a/shared/src/i18n/az/mobileNav.ts b/shared/src/i18n/az/mobileNav.ts new file mode 100644 index 000000000..72b47ebc5 --- /dev/null +++ b/shared/src/i18n/az/mobileNav.ts @@ -0,0 +1,9 @@ +import type { TranslationStrings } from '../types'; + +const mobileNav: TranslationStrings = { + 'mobileNav.journeySub': 'Səyahət gündəliyi', + 'mobileNav.collectionsSub': 'Saxlanılan məkanlar', + 'mobileNav.more': 'Daha çox', +}; + +export default mobileNav; \ No newline at end of file diff --git a/shared/src/i18n/az/mobileSettings.ts b/shared/src/i18n/az/mobileSettings.ts new file mode 100644 index 000000000..adc6b8d33 --- /dev/null +++ b/shared/src/i18n/az/mobileSettings.ts @@ -0,0 +1,7 @@ +import type { TranslationStrings } from '../types'; + +const mobileSettings: TranslationStrings = { + 'mobileSettings.blurBookingCodesHint': 'Rezervasiya kodlarına toxunanadək onları gizlədin', +}; + +export default mobileSettings; \ No newline at end of file diff --git a/shared/src/i18n/az/mobileTrip.ts b/shared/src/i18n/az/mobileTrip.ts new file mode 100644 index 000000000..6a312ffd7 --- /dev/null +++ b/shared/src/i18n/az/mobileTrip.ts @@ -0,0 +1,75 @@ +import type { TranslationStrings } from '../types'; + +const mobileTrip: TranslationStrings = { + 'mobileTrip.addBookingShort': 'Rezervasiya', + 'mobileTrip.addNoteShort': 'Qeyd', + 'mobileTrip.addPlaceShort': 'Məkan', + 'mobileTrip.addToDayQuestion': 'Günə əlavə edilsin?', + 'mobileTrip.addTransportShort': 'Nəqliyyat', + 'mobileTrip.allDays': 'Bütün günlər', + 'mobileTrip.assignedDays': 'Təyin edilmiş günlər', + 'mobileTrip.assignmentNotes': 'Günə aid qeydlər', + 'mobileTrip.bookingsEmpty': 'Hələ rezervasiya yoxdur', + 'mobileTrip.collabFeatureDisabled': 'Bu funksiya həmin səyahət üçün deaktiv edilib', + 'mobileTrip.compactView': 'Yığcam görünüş', + 'mobileTrip.dayAnnounce': 'Gün {current}/{total}', + 'mobileTrip.dayTitlePlaceholder': 'Günün başlığı', + 'mobileTrip.export': 'İxrac et', + 'mobileTrip.filesEmpty': 'Hələ fayl yoxdur', + 'mobileTrip.filesNext': 'Növbəti fayl', + 'mobileTrip.filesPrev': 'Əvvəlki fayl', + 'mobileTrip.googleMaps': 'Google Maps', + 'mobileTrip.coMaps': 'CoMaps', + 'mobileTrip.icsDownload': '.ics faylını endir', + 'mobileTrip.icsSubscribe': 'Təqvimə abunə ol', + 'mobileTrip.icsSubscribeSub': 'Təqvim tətbiqinizdə avtomatik yenilənir', + 'mobileTrip.importListSub': 'Paylaşılan siyahı linkini daxil edin', + 'mobileTrip.importPlaces': 'Məkanları idxal et', + 'mobileTrip.inCountdown': '{time} sonra', + 'mobileTrip.listView': 'Siyahı görünüşü', + 'mobileTrip.mapView': 'Xəritə görünüşü', + 'mobileTrip.more': 'Daha çox', + 'mobileTrip.newCategory': 'Yeni kateqoriya', + 'mobileTrip.newReservation': 'Yeni rezervasiya', + 'mobileTrip.notes': 'Qeydlər', + 'mobileTrip.onMap': 'Xəritədə', + 'mobileTrip.profileDriving': 'Avtomobillə', + 'mobileTrip.profileWalking': 'Piyada', + 'mobileTrip.renameDay': 'Günün adını dəyiş', + 'mobileTrip.resBadge': 'Rezervasiya', + 'mobileTrip.showOnMap': 'Xəritədə göstər', + 'mobileTrip.statDocuments': '{count} fayl', + 'mobileTrip.statPeople': '{count} nəfər', + 'mobileTrip.stay': 'Qalma', + 'mobileTrip.tapAgainToDelete': 'Silmək üçün yenidən toxunun', + 'mobileTrip.todoOpenCount': '{count} açıq', + 'mobileTrip.travel': 'Yol', + 'mobileTrip.upNext': 'Növbədə', + 'mobileTrip.viewDetails': 'Təfərrüatlara bax', + 'mobileTrip.transportsEmpty': 'Hələ nəqliyyat yoxdur', + 'mobileTrip.rtInfoTitle': 'Avtomobil marşrutu göstəriciləri', + 'mobileTrip.rtDesktopNote': + 'Bu göstəricilər kompüterdə təyin edilir. Orada alternativ marşrutları müqayisə edə və günü idxal edilmiş iz üzrə hərəkət edəcək şəkildə qura bilərsiniz.', + 'mobileTrip.rtPlanOnDesktop': 'Planlaşdırma kompüterdə aparılır. Gündə iki məkan olduqda TREK avtomobil marşrutunu hesablayır.', + 'mobileTrip.rtSearchOffline': 'İnternet bağlantısı tələb olunur: axtarış qarşıdakı marşrutu yoxlayır.', + 'mobileTrip.rtBehind': 'Plandan {time} geri', + 'mobileTrip.rtStart': 'Başlanğıc', + 'mobileTrip.rtStayScope': 'Qalma müddəti məkana aiddir, buna görə bu dayanacağın planlaşdırıldığı hər gün üçün hesablanır.', + 'mobileTrip.rtStayLess': '{count} dəqiqə az', + 'mobileTrip.rtStayMore': '{count} dəqiqə çox', + 'mobileTrip.rtNightDesktopOnly': + 'Bu məkanda gecələmə rezervasiyası kompüter planlayıcısında edilir. Burada onu yalnız silə bilərsiniz.', + 'mobileTrip.rtReach': 'Nə qədər uzaqda', + 'mobileTrip.rtReachAhead': 'Qarşıda {distance}', + 'mobileTrip.rtFromNext': 'Növbəti dayanacağınızdan', + 'mobileTrip.rtFromStart': 'Mərhələnin başlanğıcından', + 'mobileTrip.rtNoneAhead': 'Qarşıdakı yolda heç nə yoxdur. Bütün mərhələ üzrə sınayın.', + 'mobileTrip.rtNoneOnStage': 'Bu mərhələdə həmin növdə heç nə yoxdur.', + 'mobileTrip.rtTruncated.one': '1 marşrut hissəsində bir cavaba sığmayacaq qədər nəticə var. Qalanlarını görmək üçün daha az növ seçin.', + 'mobileTrip.rtTruncated.other': + '{count} marşrut hissəsində bir cavaba sığmayacaq qədər nəticə var. Qalanlarını görmək üçün daha az növ seçin.', + 'mobileTrip.rtNoDay': 'Gün seçilməyib', + 'mobileTrip.rtNoDayHint': 'Xəritə bütün səyahəti göstərir. Avtomobil marşrutunu görmək üçün yuxarıdan bir gün seçin.', +}; + +export default mobileTrip; \ No newline at end of file diff --git a/shared/src/i18n/az/mobileVacay.ts b/shared/src/i18n/az/mobileVacay.ts new file mode 100644 index 000000000..a7fb5c414 --- /dev/null +++ b/shared/src/i18n/az/mobileVacay.ts @@ -0,0 +1,19 @@ +import type { TranslationStrings } from '../types'; + +const mobileVacay: TranslationStrings = { + 'mobileVacay.prevYear': 'Əvvəlki il', + 'mobileVacay.nextYear': 'Növbəti il', + 'mobileVacay.prevMonth': 'Əvvəlki ay', + 'mobileVacay.nextMonth': 'Növbəti ay', + 'mobileVacay.usedCount': '{count} istifadə edilib', + 'mobileVacay.leftCount': '{count} qalıb', + 'mobileVacay.left': 'qalıb', + 'mobileVacay.modeCompany': 'Şirkət', + 'mobileVacay.decreaseAllowance': 'Məzuniyyət limitini azalt', + 'mobileVacay.increaseAllowance': 'Məzuniyyət limitini artır', + 'mobileVacay.companyLegend': 'Şirkət günləri', + 'mobileVacay.editCalendar': 'Təqvimi redaktə et', + 'mobileVacay.viewYear': 'İlə bax', +}; + +export default mobileVacay; \ No newline at end of file diff --git a/shared/src/i18n/az/nav.ts b/shared/src/i18n/az/nav.ts new file mode 100644 index 000000000..03300f1dc --- /dev/null +++ b/shared/src/i18n/az/nav.ts @@ -0,0 +1,21 @@ +import type { TranslationStrings } from '../types'; + +const nav: TranslationStrings = { + 'nav.trip': 'Səyahət', + 'nav.share': 'Paylaş', + 'nav.settings': 'Tənzimləmələr', + 'nav.admin': 'Admin', + 'nav.logout': 'Çıxış et', + 'nav.lightMode': 'İşıqlı rejim', + 'nav.darkMode': 'Qaranlıq rejim', + 'nav.autoMode': 'Avtomatik rejim', + 'nav.administrator': 'Administrator', + 'nav.myTrips': 'Səyahətlərim', + 'nav.profile': 'Profil', + 'nav.bottomSettings': 'Tənzimləmələr', + 'nav.bottomAdmin': 'Admin tənzimləmələri', + 'nav.bottomLogout': 'Çıxış et', + 'nav.bottomAdminBadge': 'Admin', + 'nav.help': 'Kömək', +}; +export default nav; diff --git a/shared/src/i18n/az/notif.ts b/shared/src/i18n/az/notif.ts new file mode 100644 index 000000000..05221d51c --- /dev/null +++ b/shared/src/i18n/az/notif.ts @@ -0,0 +1,50 @@ +import type { TranslationStrings } from '../types'; + +const notif: TranslationStrings = { + 'notif.test.title': '[Test] Bildiriş', + 'notif.test.simple.text': 'Bu, sadə test bildirişidir.', + 'notif.test.boolean.text': 'Bu test bildirişini qəbul edirsiniz?', + 'notif.test.navigate.text': 'İdarə panelinə keçmək üçün aşağıya klikləyin.', + 'notif.trip_invite.title': 'Səyahət dəvəti', + 'notif.trip_invite.text': '{actor} sizi {trip} səyahətinə dəvət etdi', + 'notif.booking_change.title': 'Rezervasiya yeniləndi', + 'notif.booking_change.text': '{actor} {trip} səyahətindəki rezervasiyanı yenilədi', + 'notif.trip_reminder.title': 'Səyahət xatırlatması', + 'notif.trip_reminder.text': '{trip} səyahətiniz yaxınlaşır!', + 'notif.todo_due.title': 'Tapşırığın son tarixi', + 'notif.todo_due.text': '{trip} səyahətindəki {todo} tapşırığının son tarixi: {due}', + 'notif.vacay_invite.title': 'Tətil planlarını birləşdirmə dəvəti', + 'notif.vacay_invite.text': '{actor} sizi tətil planlarını birləşdirməyə dəvət etdi', + 'notif.vacay_share.title': 'Tətil təqvimi paylaşıldı', + 'notif.vacay_share.text': '{actor} tətil təqvimini sizinlə paylaşdı', + 'notif.collection_invite.title': 'Kolleksiyaya dəvət', + 'notif.collection_invite.text': '{actor} sizi kolleksiyanı paylaşmağa dəvət etdi', + 'notif.photos_shared.title': 'Fotolar paylaşıldı', + 'notif.photos_shared.text': '{actor} {trip} səyahətində {count} foto paylaşdı', + 'notif.collab_message.title': 'Yeni mesaj', + 'notif.collab_message.text': '{actor} {trip} səyahətində mesaj göndərdi', + 'notif.packing_tagged.title': 'Çamadan tapşırığı', + 'notif.packing_tagged.text': '{actor} {trip} səyahətindəki {category} kateqoriyasını sizə tapşırdı', + 'notif.version_available.title': 'Yeni versiya mövcuddur', + 'notif.version_available.text': 'TREK {version} artıq mövcuddur', + 'notif.replica_failure.title': 'Yaddaş replikasında xəta', + 'notif.replica_failure.text': "'{backend}' replikasına yazmaq mümkün olmadı: {key} üçün {op} — {error}", + 'notif.replica_failure.textSuppressed': "'{backend}' replikasına yazmaq mümkün olmadı: {key} üçün {op} — {error}. Son bildirişdən bəri daha {suppressed} xəta üçün bildiriş göstərilmədi.", + 'notif.action.view_trip': 'Səyahətə bax', + 'notif.action.view_collab': 'Mesajlara bax', + 'notif.action.view_packing': 'Çamadan siyahısına bax', + 'notif.action.view_photos': 'Fotolara bax', + 'notif.action.view_vacay': 'Tətilə bax', + 'notif.action.view_collection': 'Kolleksiyaya bax', + 'notif.action.view_admin': 'İdarəetməyə keç', + 'notif.action.view': 'Bax', + 'notif.action.accept': 'Qəbul et', + 'notif.action.decline': 'İmtina et', + 'notif.plugin.title': '{title}', + 'notif.plugin.text': '{body}', + 'notif.generic.title': 'Bildiriş', + 'notif.generic.text': 'Yeni bildirişiniz var', + 'notif.dev.unknown_event.title': '[DEV] Naməlum hadisə', + 'notif.dev.unknown_event.text': '"{event}" hadisə növü EVENT_NOTIFICATION_CONFIG daxilində qeydiyyatdan keçməyib', +}; +export default notif; \ No newline at end of file diff --git a/shared/src/i18n/az/notifications.ts b/shared/src/i18n/az/notifications.ts new file mode 100644 index 000000000..4b6e7b4f0 --- /dev/null +++ b/shared/src/i18n/az/notifications.ts @@ -0,0 +1,52 @@ +import type { TranslationStrings } from '../types'; + +const notifications: TranslationStrings = { + 'notifications.title': 'Bildirişlər', + 'notifications.markAllRead': 'Hamısını oxunmuş kimi işarələ', + 'notifications.deleteAll': 'Hamısını sil', + 'notifications.showAll': 'Bütün bildirişləri göstər', + 'notifications.empty': 'Bildiriş yoxdur', + 'notifications.emptyDescription': 'Bütün bildirişlərə baxmısınız!', + 'notifications.all': 'Hamısı', + 'notifications.unreadOnly': 'Oxunmamış', + 'notifications.markRead': 'Oxunmuş kimi işarələ', + 'notifications.markUnread': 'Oxunmamış kimi işarələ', + 'notifications.delete': 'Sil', + 'notifications.system': 'Sistem', + + 'notifications.synologySessionCleared.title': + 'Synology Photos bağlantısı kəsildi', + 'notifications.synologySessionCleared.text': + 'Serveriniz və ya hesabınız dəyişib — bağlantını yenidən yoxlamaq üçün Tənzimləmələr bölməsinə keçin.', + + 'notifications.versionAvailable.title': 'Yeniləmə əlçatandır', + 'notifications.versionAvailable.text': + 'TREK {version} artıq əlçatandır.', + 'notifications.versionAvailable.button': 'Təfərrüatlara bax', + + 'notifications.test.title': '{actor} tərəfindən test bildirişi', + 'notifications.test.text': 'Bu, sadə test bildirişidir.', + + 'notifications.test.booleanTitle': + '{actor} təsdiqinizi istəyir', + 'notifications.test.booleanText': + 'Bu, seçimli test bildirişidir. Aşağıdakı əməliyyatlardan birini seçin.', + 'notifications.test.accept': 'Təsdiqlə', + 'notifications.test.decline': 'Rədd et', + + 'notifications.test.navigateTitle': 'Buna nəzər salın', + 'notifications.test.navigateText': + 'Bu, yönləndirmə test bildirişidir.', + 'notifications.test.goThere': 'Keçid et', + + 'notifications.test.adminTitle': 'Administrator elanı', + 'notifications.test.adminText': + '{actor} bütün administratorlara test bildirişi göndərdi.', + + 'notifications.test.tripTitle': + '{actor} səyahətinizdə paylaşım etdi', + 'notifications.test.tripText': + '“{trip}” səyahəti üçün test bildirişi.', +}; + +export default notifications; \ No newline at end of file diff --git a/shared/src/i18n/az/oauth.ts b/shared/src/i18n/az/oauth.ts new file mode 100644 index 000000000..df59c8bb7 --- /dev/null +++ b/shared/src/i18n/az/oauth.ts @@ -0,0 +1,152 @@ +import type { TranslationStrings } from '../types'; + +const oauth: TranslationStrings = { + 'oauth.scope.group.trips': 'Səyahətlər', + 'oauth.scope.group.places': 'Məkanlar', + 'oauth.scope.group.collections': 'Kolleksiyalar', + 'oauth.scope.group.atlas': 'Atlas', + 'oauth.scope.group.packing': 'Baqaj', + 'oauth.scope.group.todos': 'Tapşırıqlar', + 'oauth.scope.group.budget': 'Büdcə', + 'oauth.scope.group.reservations': 'Rezervasiyalar', + 'oauth.scope.group.collab': 'Əməkdaşlıq', + 'oauth.scope.group.notifications': 'Bildirişlər', + 'oauth.scope.group.vacay': 'Məzuniyyət', + 'oauth.scope.group.geo': 'Coğrafi məlumatlar', + 'oauth.scope.group.weather': 'Hava', + 'oauth.scope.group.journey': 'Səyahət gündəlikləri', + 'oauth.scope.trips:read.label': 'Səyahətlərə və marşrutlara bax', + 'oauth.scope.trips:read.description': + 'Səyahətləri, günləri, günlük qeydləri və üzvləri oxumaq', + 'oauth.scope.trips:write.label': 'Səyahətləri və marşrutları redaktə et', + 'oauth.scope.trips:write.description': + 'Səyahətlər, günlər və qeydlər yaratmaq və yeniləmək, həmçinin üzvləri idarə etmək', + 'oauth.scope.trips:delete.label': 'Səyahətləri sil', + 'oauth.scope.trips:delete.description': + 'Bütün səyahətləri həmişəlik silmək — bu əməliyyatı geri qaytarmaq mümkün deyil', + 'oauth.scope.trips:share.label': 'Paylaşma keçidlərini idarə et', + 'oauth.scope.trips:share.description': + 'Səyahətlər üçün açıq paylaşma keçidləri yaratmaq, yeniləmək və ləğv etmək', + 'oauth.scope.places:read.label': 'Məkanlara və xəritə məlumatlarına bax', + 'oauth.scope.places:read.description': + 'Məkanları, gün təyinatlarını, etiketləri və kateqoriyaları oxumaq', + 'oauth.scope.places:write.label': 'Məkanları idarə et', + 'oauth.scope.places:write.description': + 'Məkanları, təyinatları və etiketləri yaratmaq, yeniləmək və silmək', + 'oauth.scope.collections:read.label': 'Kolleksiyalara bax', + 'oauth.scope.collections:read.description': + 'Yadda saxlanılmış məkan kolleksiyalarını, onların məkanlarını, reytinqlərini, etiketlərini və üzvlərini oxumaq', + 'oauth.scope.collections:write.label': 'Kolleksiyaları idarə et', + 'oauth.scope.collections:write.description': + 'Kolleksiyalar yaratmaq və redaktə etmək, məkanları yadda saxlamaq, qiymətləndirmək, etiketləmək və kopyalamaq, həmçinin siyahıları paylaşmaq', + 'oauth.scope.atlas:read.label': 'Atlasa bax', + 'oauth.scope.atlas:read.description': + 'Ziyarət edilmiş ölkələri, regionları və arzular siyahısını oxumaq', + 'oauth.scope.atlas:write.label': 'Atlası idarə et', + 'oauth.scope.atlas:write.description': + 'Ölkələri və regionları ziyarət edilmiş kimi işarələmək və arzular siyahısını idarə etmək', + 'oauth.scope.packing:read.label': 'Baqaj siyahılarına bax', + 'oauth.scope.packing:read.description': + 'Baqaj elementlərini, çantaları və kateqoriyalara təyin edilmiş şəxsləri oxumaq', + 'oauth.scope.packing:write.label': 'Baqaj siyahılarını idarə et', + 'oauth.scope.packing:write.description': + 'Baqaj elementlərini və çantaları əlavə etmək, yeniləmək, silmək, vəziyyətini dəyişmək və yenidən sıralamaq', + 'oauth.scope.todos:read.label': 'Tapşırıq siyahılarına bax', + 'oauth.scope.todos:read.description': + 'Səyahət tapşırıqlarını və kateqoriyalara təyin edilmiş şəxsləri oxumaq', + 'oauth.scope.todos:write.label': 'Tapşırıq siyahılarını idarə et', + 'oauth.scope.todos:write.description': + 'Tapşırıqlar yaratmaq, yeniləmək, vəziyyətini dəyişmək, silmək və yenidən sıralamaq', + 'oauth.scope.budget:read.label': 'Büdcəyə bax', + 'oauth.scope.budget:read.description': + 'Büdcə elementlərini və xərclərin bölgüsünü oxumaq', + 'oauth.scope.budget:write.label': 'Büdcəni idarə et', + 'oauth.scope.budget:write.description': + 'Büdcə elementləri yaratmaq, yeniləmək və silmək', + 'oauth.scope.reservations:read.label': 'Rezervasiyalara bax', + 'oauth.scope.reservations:read.description': + 'Rezervasiyaları və qalma yeri məlumatlarını oxumaq', + 'oauth.scope.reservations:write.label': 'Rezervasiyaları idarə et', + 'oauth.scope.reservations:write.description': + 'Rezervasiyalar yaratmaq, yeniləmək, silmək və yenidən sıralamaq', + 'oauth.scope.collab:read.label': 'Əməkdaşlıq məlumatlarına bax', + 'oauth.scope.collab:read.description': + 'Birgə qeydləri, sorğuları və mesajları oxumaq', + 'oauth.scope.collab:write.label': 'Əməkdaşlığı idarə et', + 'oauth.scope.collab:write.description': + 'Birgə qeydlər, sorğular və mesajlar yaratmaq, yeniləmək və silmək', + 'oauth.scope.notifications:read.label': 'Bildirişlərə bax', + 'oauth.scope.notifications:read.description': + 'Tətbiqdaxili bildirişləri və oxunmamış bildirişlərin sayını oxumaq', + 'oauth.scope.notifications:write.label': 'Bildirişləri idarə et', + 'oauth.scope.notifications:write.description': + 'Bildirişləri oxunmuş kimi işarələmək və onlara cavab vermək', + 'oauth.scope.vacay:read.label': 'Məzuniyyət planlarına bax', + 'oauth.scope.vacay:read.description': + 'Məzuniyyət planlaşdırma məlumatlarını, qeydlərini və statistikasını oxumaq', + 'oauth.scope.vacay:write.label': 'Məzuniyyət planlarını idarə et', + 'oauth.scope.vacay:write.description': + 'Məzuniyyət qeydlərini, bayramları və komanda planlarını yaratmaq və idarə etmək', + 'oauth.scope.geo:read.label': 'Xəritələr və geokodlaşdırma', + 'oauth.scope.geo:read.description': + 'Məkanları axtarmaq, xəritə URL-lərini müəyyən etmək və koordinatları əks geokodlaşdırmaq', + 'oauth.scope.weather:read.label': 'Hava proqnozları', + 'oauth.scope.weather:read.description': + 'Səyahət məkanları və tarixləri üçün hava proqnozlarını əldə etmək', + 'oauth.scope.journey:read.label': 'Səyahət gündəliklərinə bax', + 'oauth.scope.journey:read.description': + 'Səyahət gündəliklərini, qeydləri və iştirakçılar siyahısını oxumaq', + 'oauth.scope.journey:write.label': 'Səyahət gündəliklərini idarə et', + 'oauth.scope.journey:write.description': + 'Səyahət gündəliklərini və onların qeydlərini yaratmaq, yeniləmək və silmək', + 'oauth.scope.journey:share.label': 'Səyahət gündəliyi keçidlərini idarə et', + 'oauth.scope.journey:share.description': + 'Səyahət gündəlikləri üçün açıq paylaşma keçidləri yaratmaq, yeniləmək və ləğv etmək', + 'oauth.authorize.authorizing': 'İcazə verilir…', + 'oauth.authorize.loading': 'Yüklənir…', + 'oauth.authorize.errorTitle': 'İcazə xətası', + 'oauth.authorize.loginTitle': 'Davam etmək üçün daxil olun', + 'oauth.authorize.loginDescription': + '{client} TREK hesabınıza giriş istəyir. Əvvəlcə daxil olun.', + 'oauth.authorize.loginButton': 'TREK-ə daxil ol', + 'oauth.authorize.requestLabel': 'İcazə sorğusu', + 'oauth.authorize.requestDescription': + 'Bu tətbiq TREK hesabınıza giriş icazəsi istəyir.', + 'oauth.authorize.trustNote': + 'Yalnız etibar etdiyiniz tətbiqlərə giriş icazəsi verin. Məlumatlarınız serverinizdə qalır.', + 'oauth.authorize.selectScope': 'Ən azı bir icazə sahəsi seçin', + 'oauth.authorize.approveOneScope': 'Təsdiqlə ({count} icazə sahəsi)', + 'oauth.authorize.approveManyScopes': 'Təsdiqlə ({count} icazə sahəsi)', + 'oauth.authorize.approveAccess': 'Girişə icazə ver', + 'oauth.authorize.deny': 'Rədd et', + 'oauth.authorize.choosePermissions': 'Veriləcək icazələri seçin', + 'oauth.authorize.permissionsRequested': 'Tələb edilən icazələr', + 'oauth.authorize.alwaysIncluded': 'Həmişə daxildir', + 'oauth.authorize.alwaysTool.listTrips': + 'Süni intellektin səyahət ID-lərini müəyyən edə bilməsi üçün səyahətlərinizi siyahılamaq', + 'oauth.authorize.alwaysTool.getTripSummary': + 'Digər alətlərdən istifadə etmək üçün tələb olunan səyahət icmalını oxumaq', + 'oauth.scope.group.files': 'Fayllar', + 'oauth.scope.group.settings': 'Tənzimləmələr', + 'oauth.scope.files:read.label': 'Səyahət fayllarına bax', + 'oauth.scope.files:read.description': + 'Səyahətdəki sənədləri siyahılamaq: adları, ölçüləri, onları kimin yüklədiyi və nəyə əlaqələndirildiyi', + 'oauth.scope.files:write.label': 'Səyahət fayllarını təşkil et', + 'oauth.scope.files:write.description': + 'Faylların adını və təsvirini dəyişmək, onları rezervasiyalara və məkanlara əlaqələndirmək, seçilmişlərə əlavə etmək və zibil qutusuna köçürmək', + 'oauth.scope.files:content.label': 'Fayl məzmununu oxu', + 'oauth.scope.files:content.description': + 'Rezervasiya PDF-i və ya bilet kimi yüklənmiş sənədin daxilindəki məzmunu oxumaq', + 'oauth.scope.settings:read.label': 'Seçimlərinizə bax', + 'oauth.scope.settings:read.description': + 'Ölçü vahidlərini, vaxt formatını, dili, standart valyutanı və başlanğıc səhifəsini oxumaq', + 'oauth.scope.settings:write.label': 'Seçimlərinizi dəyiş', + 'oauth.scope.settings:write.description': + 'Ölçü vahidlərini, vaxt formatını, dili, standart valyutanı və başlanğıc səhifəsini dəyişmək. Saxlanılan API açarlarına heç vaxt giriş verilmir', + 'oauth.scope.group.plugins': 'Plaginlər', + 'oauth.scope.plugins:use.label': 'Plagin alətlərini işə sal', + 'oauth.scope.plugins:use.description': + 'Bu müştəriyə administratorun quraşdırdığı və təsdiqlədiyi plaginlərin yayımladığı alətləri çağırmağa icazə vermək. Hər plagin bu tokendəki icazə sahələri ilə deyil, ona əvvəlcədən verilmiş giriş icazələri ilə işləyir', +}; + +export default oauth; \ No newline at end of file diff --git a/shared/src/i18n/az/packing.ts b/shared/src/i18n/az/packing.ts new file mode 100644 index 000000000..0f62bfa2b --- /dev/null +++ b/shared/src/i18n/az/packing.ts @@ -0,0 +1,240 @@ +import type { TranslationStrings } from '../types'; + +const packing: TranslationStrings = { + 'packing.actions': 'Əməliyyatlar', + 'packing.editDone': 'Hazır', + 'packing.personalEmptyHint': + 'Şəxsi siyahınız boşdur — paylaşılan elementləri siyahınıza köçürün və ya yenisini əlavə edin.', + 'packing.assignMembers': 'Üzvləri təyin et', + 'packing.categoryOptions': 'Siyahı seçimləri', + 'packing.editItem': 'Elementi redaktə et', + 'packing.itemName': 'Ad', + 'packing.itemQuantity': 'Say', + 'packing.itemWeight': 'Çəki (qram)', + + 'packing.title': 'Baqaj siyahısı', + 'packing.empty': 'Baqaj siyahısı boşdur', + 'packing.import': 'İdxal et', + 'packing.importTitle': 'Baqaj siyahısını idxal et', + 'packing.importHint': + 'Hər sətirdə bir element. Format: Kateqoriya, Ad, qramla çəki (istəyə bağlı), Çanta (istəyə bağlı), checked/unchecked (istəyə bağlı)', + 'packing.importPlaceholder': + 'Gigiyena, Diş fırçası\nGeyim, Köynəklər, 200\nSənədlər, Pasport, , Əl yükü\nElektronika, Şarj cihazı, 50, Çamadan, checked', + 'packing.importCsv': 'CSV/TXT yüklə', + 'packing.importAction': '{count} elementi idxal et', + 'packing.importSuccess': '{count} element idxal edildi', + 'packing.importError': 'İdxal uğursuz oldu', + 'packing.importEmpty': 'İdxal ediləcək element yoxdur', + + 'packing.progress': + '{total} elementdən {packed} yığılıb ({percent}%)', + 'packing.clearChecked': 'İşarələnmiş {count} elementi sil', + 'packing.clearCheckedShort': '{count} elementi sil', + + 'packing.suggestions': 'Təkliflər', + 'packing.suggestionsTitle': 'Təklifləri əlavə et', + 'packing.allSuggested': 'Bütün təkliflər əlavə edilib', + 'packing.allPacked': 'Hər şey yığılıb!', + + 'packing.addPlaceholder': 'Yeni element əlavə et...', + 'packing.categoryPlaceholder': 'Siyahı...', + 'packing.filterAll': 'Hamısı', + 'packing.filterOpen': 'Hazır deyil', + 'packing.filterDone': 'Hazırdır', + + 'packing.emptyTitle': 'Baqaj siyahısı boşdur', + 'packing.emptyHint': + 'Elementlər əlavə edin və ya təkliflərdən istifadə edin', + 'packing.emptyFiltered': + 'Bu filtrə uyğun heç bir element yoxdur', + + 'packing.menuRename': 'Adını dəyiş', + 'packing.menuCheckAll': 'Hamısını işarələ', + 'packing.menuUncheckAll': 'Bütün işarələri sil', + 'packing.menuDeleteCat': 'Siyahını sil', + + 'packing.noMembers': 'Səyahət üzvü yoxdur', + 'packing.addItem': 'Element əlavə et', + 'packing.addItemPlaceholder': 'Elementin adı...', + 'packing.addCategory': 'Siyahı əlavə et', + 'packing.newCategoryPlaceholder': + 'Siyahının adı (məs. Geyim)', + + 'packing.applyTemplate': 'Şablonu tətbiq et', + 'packing.template': 'Şablon', + 'packing.templateApplied': + 'Şablondan {count} element əlavə edildi', + 'packing.templateError': 'Şablonu tətbiq etmək mümkün olmadı', + 'packing.saveAsTemplate': 'Şablon kimi yadda saxla', + 'packing.templateName': 'Şablonun adı', + 'packing.templateSaved': + 'Baqaj siyahısı şablon kimi yadda saxlanıldı', + + 'packing.bags': 'Çantalar', + 'packing.noBag': 'Təyin edilməyib', + 'packing.totalWeight': 'Ümumi çəki', + 'packing.quantity': 'Say', + 'packing.bagName': 'Çantanın adı...', + 'packing.addBag': 'Çanta əlavə et', + 'packing.changeCategory': 'Siyahıya köçür', + + 'packing.makePrivate': 'Şəxsi et', + 'packing.makePublic': 'Paylaşılan et', + 'packing.privateHint': 'Şəxsi — yalnız sizə görünür', + 'packing.viewCommon': 'Paylaşılan', + 'packing.viewPersonal': 'Mənim siyahım', + 'packing.share': 'Paylaşım', + 'packing.tierCommonHint': + 'Ümumi siyahıdadır və hər kəsə görünür', + 'packing.tierPersonal': 'Şəxsi', + 'packing.tierPersonalHint': 'Şəxsi — yalnız siz görə bilərsiniz', + 'packing.tierShared': 'Paylaşılıb:', + 'packing.noOneToShare': + 'Bu səyahətdə hələ başqa üzv yoxdur', + + 'packing.takenCareOf': '{name} cavabdehdir', + 'packing.sharedWithCount': '{count} nəfərlə paylaşılıb', + 'packing.broughtBy': '{name} gətirir', + 'packing.alsoBring': 'Mən də bunu gətirə bilərəm', + 'packing.alsoBringingStop': 'Mən bunu gətirməyəcəyəm', + 'packing.cloneToMine': 'Mənim siyahıma köçür', + + 'packing.confirm.clearChecked': + 'İşarələnmiş {count} elementi silmək istədiyinizə əminsiniz?', + 'packing.confirm.deleteCat': + '“{name}” siyahısını daxilindəki {count} elementlə birlikdə silmək istədiyinizə əminsiniz?', + + 'packing.defaultCategory': 'Digər', + 'packing.toast.saveError': 'Yadda saxlamaq mümkün olmadı', + 'packing.toast.deleteError': 'Silmək mümkün olmadı', + 'packing.toast.renameError': 'Adını dəyişmək mümkün olmadı', + 'packing.toast.addError': 'Əlavə etmək mümkün olmadı', + + 'packing.suggestions.items': [ + { + name: 'Pasport', + category: 'Sənədlər', + }, + { + name: 'Şəxsiyyət vəsiqəsi', + category: 'Sənədlər', + }, + { + name: 'Səyahət sığortası', + category: 'Sənədlər', + }, + { + name: 'Uçuş biletləri', + category: 'Sənədlər', + }, + { + name: 'Kredit kartı', + category: 'Maliyyə', + }, + { + name: 'Nağd pul', + category: 'Maliyyə', + }, + { + name: 'Viza', + category: 'Sənədlər', + }, + { + name: 'Köynəklər', + category: 'Geyim', + }, + { + name: 'Şalvarlar', + category: 'Geyim', + }, + { + name: 'Alt paltarı', + category: 'Geyim', + }, + { + name: 'Corablar', + category: 'Geyim', + }, + { + name: 'Gödəkçə', + category: 'Geyim', + }, + { + name: 'Yuxu geyimi', + category: 'Geyim', + }, + { + name: 'Çimərlik geyimi', + category: 'Geyim', + }, + { + name: 'Yağış gödəkçəsi', + category: 'Geyim', + }, + { + name: 'Rahat ayaqqabı', + category: 'Geyim', + }, + { + name: 'Diş fırçası', + category: 'Gigiyena vasitələri', + }, + { + name: 'Diş məcunu', + category: 'Gigiyena vasitələri', + }, + { + name: 'Şampun', + category: 'Gigiyena vasitələri', + }, + { + name: 'Dezodorant', + category: 'Gigiyena vasitələri', + }, + { + name: 'Günəş kremi', + category: 'Gigiyena vasitələri', + }, + { + name: 'Ülgüc', + category: 'Gigiyena vasitələri', + }, + { + name: 'Şarj cihazı', + category: 'Elektronika', + }, + { + name: 'Powerbank', + category: 'Elektronika', + }, + { + name: 'Qulaqlıq', + category: 'Elektronika', + }, + { + name: 'Səyahət adapteri', + category: 'Elektronika', + }, + { + name: 'Kamera', + category: 'Elektronika', + }, + { + name: 'Ağrıkəsici', + category: 'Sağlamlıq', + }, + { + name: 'Yara plastırı', + category: 'Sağlamlıq', + }, + { + name: 'Dezinfeksiya vasitəsi', + category: 'Sağlamlıq', + }, + ], + + 'packing.bagLimit': 'Çəki limiti', + 'packing.setBagLimit': 'Limit təyin et', +}; + +export default packing; \ No newline at end of file diff --git a/shared/src/i18n/az/pdf.ts b/shared/src/i18n/az/pdf.ts new file mode 100644 index 000000000..17bb0a643 --- /dev/null +++ b/shared/src/i18n/az/pdf.ts @@ -0,0 +1,15 @@ +import type { TranslationStrings } from '../types'; + +const pdf: TranslationStrings = { + 'pdf.travelPlan': 'Səyahət planı', + 'pdf.planned': 'Planlaşdırılıb', + 'pdf.costLabel': 'Xərc', + 'pdf.preview': 'PDF önizləməsi', + 'pdf.saveAsPdf': 'PDF kimi yadda saxla', + 'pdf.pageBreakPerDay': 'Hər gün üçün yeni səhifə', + 'pdf.mapTitle': 'Marşrutun icmalı', + 'pdf.distanceLabel': 'Məsafə', + 'pdf.mapCredit': 'Ölkə sərhədləri: geoBoundaries (CC BY 4.0)', +}; + +export default pdf; \ No newline at end of file diff --git a/shared/src/i18n/az/perm.ts b/shared/src/i18n/az/perm.ts new file mode 100644 index 000000000..833c6bae1 --- /dev/null +++ b/shared/src/i18n/az/perm.ts @@ -0,0 +1,65 @@ +import type { TranslationStrings } from '../types'; + +const perm: TranslationStrings = { + 'perm.title': 'İcazə tənzimləmələri', + 'perm.subtitle': 'Tətbiq daxilində əməliyyatları kimin yerinə yetirə biləcəyini idarə edin', + 'perm.saved': 'İcazə tənzimləmələri yadda saxlanıldı', + 'perm.resetDefaults': 'Standart dəyərlərə sıfırla', + 'perm.customized': 'fərdiləşdirilib', + 'perm.level.admin': 'Yalnız administrator', + 'perm.level.tripOwner': 'Səyahətin sahibi', + 'perm.level.tripMember': 'Səyahət üzvləri', + 'perm.level.everybody': 'Hər kəs', + 'perm.cat.trip': 'Səyahət idarəetməsi', + 'perm.cat.members': 'Üzvlərin idarə edilməsi', + 'perm.cat.files': 'Fayllar', + 'perm.cat.content': 'Məzmun və cədvəl', + 'perm.cat.extras': 'Büdcə, baqaj və əməkdaşlıq', + 'perm.action.trip_create': 'Səyahətlər yaratmaq', + 'perm.action.trip_edit': 'Səyahət məlumatlarını redaktə etmək', + 'perm.action.trip_delete': 'Səyahətləri silmək', + 'perm.action.trip_archive': 'Səyahətləri arxivləşdirmək və arxivdən çıxarmaq', + 'perm.action.trip_cover_upload': 'Üzlük şəkli yükləmək', + 'perm.action.member_manage': 'Üzvləri əlavə etmək və silmək', + 'perm.action.file_upload': 'Fayllar yükləmək', + 'perm.action.file_edit': 'Fayl metaməlumatlarını redaktə etmək', + 'perm.action.file_delete': 'Faylları silmək', + 'perm.action.place_edit': 'Məkanları əlavə etmək, redaktə etmək və silmək', + 'perm.action.day_edit': 'Günləri, qeydləri və təyinatları redaktə etmək', + 'perm.action.reservation_edit': 'Rezervasiyaları idarə etmək', + 'perm.action.budget_edit': 'Büdcəni idarə etmək', + 'perm.action.packing_edit': 'Baqaj siyahılarını idarə etmək', + 'perm.action.collab_edit': 'Əməkdaşlıq (qeydlər, sorğular və çat)', + 'perm.action.share_manage': 'Paylaşma keçidlərini idarə etmək', + 'perm.actionHint.trip_create': 'Yeni səyahətləri kimin yarada biləcəyi', + 'perm.actionHint.trip_edit': + 'Səyahətin adını, tarixlərini, təsvirini və valyutasını kimin dəyişə biləcəyi', + 'perm.actionHint.trip_delete': 'Səyahəti kimin həmişəlik silə biləcəyi', + 'perm.actionHint.trip_archive': + 'Səyahəti kimin arxivləşdirə və ya arxivdən çıxara biləcəyi', + 'perm.actionHint.trip_cover_upload': + 'Üzlük şəklini kimin yükləyə və ya dəyişə biləcəyi', + 'perm.actionHint.member_manage': + 'Səyahət üzvlərini kimin dəvət edə və ya silə biləcəyi', + 'perm.actionHint.file_upload': 'Səyahətə faylları kimin yükləyə biləcəyi', + 'perm.actionHint.file_edit': + 'Fayl təsvirlərini və keçidlərini kimin redaktə edə biləcəyi', + 'perm.actionHint.file_delete': + 'Faylları kimin zibil qutusuna köçürə və ya həmişəlik silə biləcəyi', + 'perm.actionHint.place_edit': + 'Məkanları kimin əlavə edə, redaktə edə və ya silə biləcəyi', + 'perm.actionHint.day_edit': + 'Günləri, günlük qeydləri və məkan təyinatlarını kimin redaktə edə biləcəyi', + 'perm.actionHint.reservation_edit': + 'Rezervasiyaları kimin yarada, redaktə edə və ya silə biləcəyi', + 'perm.actionHint.budget_edit': + 'Büdcə elementlərini kimin yarada, redaktə edə və ya silə biləcəyi', + 'perm.actionHint.packing_edit': + 'Baqaj elementlərini və çantaları kimin idarə edə biləcəyi', + 'perm.actionHint.collab_edit': + 'Qeydləri və sorğuları kimin yarada və mesajları kimin göndərə biləcəyi', + 'perm.actionHint.share_manage': + 'Açıq paylaşma keçidlərini kimin yarada və ya silə biləcəyi', +}; + +export default perm; \ No newline at end of file diff --git a/shared/src/i18n/az/photos.ts b/shared/src/i18n/az/photos.ts new file mode 100644 index 000000000..452b79f54 --- /dev/null +++ b/shared/src/i18n/az/photos.ts @@ -0,0 +1,26 @@ +import type { TranslationStrings } from '../types'; + +const photos: TranslationStrings = { + 'photos.title': 'Fotolar', + 'photos.subtitle': '{trip} üçün {count} foto', + 'photos.dropHere': 'Fotoları buraya sürükləyib buraxın...', + 'photos.dropHereActive': 'Fotoları buraya buraxın', + 'photos.captionForAll': 'Başlıq (hamısı üçün)', + 'photos.captionPlaceholder': 'İstəyə bağlı başlıq...', + 'photos.addCaption': 'Başlıq əlavə edin...', + 'photos.allDays': 'Bütün günlər', + 'photos.noPhotos': 'Hələ foto yoxdur', + 'photos.uploadHint': 'Səyahət fotolarınızı yükləyin', + 'photos.clickToSelect': 'və ya seçmək üçün klikləyin', + 'photos.linkPlace': 'Məkanla əlaqələndir', + 'photos.noPlace': 'Məkan seçilməyib', + 'photos.uploadN': '{n} foto yüklə', + 'photos.linkDay': 'Günlə əlaqələndir', + 'photos.noDay': 'Gün seçilməyib', + 'photos.dayLabel': '{number}-ci gün', + 'photos.photoSelected': 'Foto seçildi', + 'photos.photosSelected': 'Fotolar seçildi', + 'photos.fileTypeHint': + 'JPG, PNG, WebP · maksimum 10 MB · 30 fotoyadək', +}; +export default photos; \ No newline at end of file diff --git a/shared/src/i18n/az/places.ts b/shared/src/i18n/az/places.ts new file mode 100644 index 000000000..0a9f74fde --- /dev/null +++ b/shared/src/i18n/az/places.ts @@ -0,0 +1,171 @@ +import type { TranslationStrings } from '../types'; + +const places: TranslationStrings = { + 'places.addPlace': 'Məkan/Fəaliyyət əlavə et', + 'places.addToSelectedDay': 'Açıq günə əlavə et', + 'places.addPlaceShort': 'Yeni məkan', + 'places.addToDayShort': 'Günə əlavə et', + 'places.importFile': 'Faylı idxal et', + 'places.trackIndicator': 'İz / marşrut', + 'places.sidebarDrop': 'İdxal etmək üçün buraya burax', + 'places.importFileHint': + 'Google My Maps, Google Earth və ya GPS izləyicisi kimi alətlərdən .gpx, .kml və ya .kmz fayllarını idxal edin.', + 'places.importFileDropHere': + 'Fayl seçmək üçün klikləyin və ya faylı buraya sürükləyib buraxın', + 'places.importFileDropActive': 'Seçmək üçün faylı buraya buraxın', + 'places.importFileUnsupported': + 'Dəstəklənməyən fayl növüdür. .gpx, .kml və ya .kmz istifadə edin.', + 'places.importFileTooLarge': + 'Fayl həddindən çox böyükdür. Maksimum yükləmə ölçüsü {maxMb} MB-dır.', + 'places.importFileError': 'İdxal uğursuz oldu', + 'places.importAllSkipped': 'Bütün məkanlar artıq bu səyahətdə mövcuddur.', + + 'places.gpxImported': 'GPX-dən {count} məkan idxal edildi', + 'places.gpxImportTypes': 'Nələri idxal etmək istəyirsiniz?', + 'places.gpxImportWaypoints': 'Yol nöqtələri', + 'places.gpxImportRoutes': 'Marşrutlar', + 'places.gpxImportTracks': 'İzlər (marşrut xətti ilə)', + 'places.gpxImportNoneSelected': + 'İdxal etmək üçün ən azı bir növ seçin.', + + 'places.kmlImportTypes': 'Nələri idxal etmək istəyirsiniz?', + 'places.kmlImportPoints': 'Nöqtələr (Placemarks)', + 'places.kmlImportPaths': 'Yollar (LineStrings)', + 'places.kmlImportNoneSelected': + 'İdxal etmək üçün ən azı bir növ seçin.', + + 'places.selectionCount': '{count} seçilib', + 'places.deleteSelected': 'Seçilənləri sil', + 'places.changeCategory': 'Kateqoriyanı dəyiş', + 'places.categoryChanged': '{count} məkan yeniləndi', + 'places.kmlKmzImported': 'KMZ/KML-dən {count} məkan idxal edildi', + 'places.urlResolved': 'Məkan URL-dən idxal edildi', + 'places.importList': 'Siyahı idxalı', + 'places.kmlKmzSummaryValues': + 'Məkan nişanları: {total} • İdxal edildi: {created} • Buraxıldı: {skipped}', + + 'places.importGoogleList': 'Google siyahısı', + 'places.importNaverList': 'Naver siyahısı', + 'places.googleListHint': + 'Bütün məkanları idxal etmək üçün paylaşılan Google Maps siyahısının linkini daxil edin.', + 'places.googleDirHint': + 'İstiqamət linki də istifadə edilə bilər: dayanacaqlar avtomobillə hərəkət sırasına uyğun məkanlara çevriləcək.', + 'places.googleListImported': + '“{list}” siyahısından {count} məkan idxal edildi', + 'places.googleListError': + 'Google Maps siyahısını idxal etmək mümkün olmadı', + 'places.naverListHint': + 'Bütün məkanları idxal etmək üçün paylaşılan Naver Maps siyahısının linkini daxil edin.', + 'places.naverListImported': + '“{list}” siyahısından {count} məkan idxal edildi', + 'places.naverListError': + 'Naver Maps siyahısını idxal etmək mümkün olmadı', + + 'places.viewDetails': 'Təfərrüatlara bax', + 'places.assignToDay': 'Hansı günə əlavə edilsin?', + 'places.all': 'Hamısı', + 'places.unplanned': 'Planlaşdırılmayıb', + 'places.planned': 'Planlaşdırılıb', + + /** Shown under the filter tabs while an open day narrows both the list and the map. */ + 'places.dayScoped': 'Yalnız açıq gün göstərilir', + 'places.dayScopedClear': 'Bütün səyahəti göstər', + + 'places.filterTracks': 'İzlər', + 'places.filterByRating': 'Reytinqə görə filtrlə', + 'places.yourRating': 'Sizin reytinqiniz', + 'places.notRated': 'Hələ qiymətləndirilməyib', + 'places.search': 'Məkanları axtarın...', + 'places.allCategories': 'Bütün kateqoriyalar', + 'places.categoriesSelected': 'kateqoriya', + 'places.clearFilter': 'Filtri təmizlə', + 'places.count': '{count} məkan', + 'places.countSingular': '1 məkan', + 'places.allPlanned': 'Bütün məkanlar planlaşdırılıb', + 'places.noneFound': 'Heç bir məkan tapılmadı', + + 'places.editPlace': 'Məkanı redaktə et', + 'places.formName': 'Ad', + 'places.formNamePlaceholder': 'məs. Eyfel qülləsi', + 'places.formDescription': 'Təsvir', + 'places.formDescriptionPlaceholder': 'Qısa təsvir...', + 'places.formAddress': 'Ünvan', + 'places.formAddressPlaceholder': 'Küçə, şəhər, ölkə', + 'places.formLat': 'Enlik (məs. 48.8566)', + 'places.formLng': 'Uzunluq (məs. 2.3522)', + 'places.formCategory': 'Kateqoriya', + 'places.noCategory': 'Kateqoriya yoxdur', + 'places.newCategory': 'Yeni kateqoriya', + 'places.categoryNamePlaceholder': 'Kateqoriyanın adı', + 'places.formTime': 'Vaxt', + 'places.startTime': 'Başlanğıc', + 'places.endTime': 'Son', + 'places.endTimeBeforeStart': + 'Bitmə vaxtı başlanğıc vaxtından əvvəldir', + 'places.timeCollision': 'Vaxt üst-üstə düşür:', + 'places.formWebsite': 'Veb-sayt', + 'places.formNotes': 'Qeydlər', + 'places.formNotesPlaceholder': 'Şəxsi qeydlər...', + 'places.assignmentNotes': 'Bu gün üçün qeydlər', + 'places.assignmentNotesPlaceholder': + 'Bu məkan haqqında yalnız bu günə aid qeydlər...', + 'places.formReservation': 'Rezervasiya', + 'places.reservationNotesPlaceholder': + 'Rezervasiya qeydləri, təsdiq nömrəsi...', + 'places.mapsSearchPlaceholder': 'Məkanları axtarın...', + 'places.mapsSearchError': 'Məkan axtarışı uğursuz oldu.', + 'places.searchGoogleInstead': + 'Axtardığınız məkan deyil? Əvəzində Google-da axtarın', + 'places.loadingDetails': 'Məkan təfərrüatları yüklənir…', + 'places.osmHint': + 'OpenStreetMap axtarışından istifadə edilir (fotolar, iş saatları və reytinqlər yoxdur). Tam təfərrüatlar üçün tənzimləmələrdə Google API açarı əlavə edin.', + + 'places.source.amap': 'Amap', + 'places.details.title': 'Məkan təfərrüatları', + 'places.details.empty': 'Ətraflı məlumat üçün bir nəticə seçin', + 'places.details.loading': 'Təfərrüatlar yüklənir...', + 'places.details.error': 'Təfərrüatları yükləmək mümkün olmadı.', + 'places.details.disabled': + 'Əlavə məlumatların əldə edilməsi administrator tərəfindən deaktiv edilib.', + 'places.details.noPhotos': 'Bu məkan üçün heç bir şəkil tapılmadı.', + 'places.details.pickImage': 'Şəkil seç', + 'places.details.description': 'Təsvir', + 'places.details.adopt': 'Bu mətndən istifadə et', + 'places.details.adoptBlocked': 'Əvvəlcə təsvir sahəsini təmizləyin', + 'places.details.facts': 'Faydalı məlumatlar', + 'places.details.nothing': 'Bu məkan haqqında məlumat tapılmadı.', + 'places.details.aboutBrand': 'Şəbəkə haqqında', + 'places.details.aboutBrandNote': + 'Bu məlumat həmin filialı deyil, ümumi şəbəkəni təsvir edir.', + 'places.details.fact.rating': 'Reytinq', + 'places.details.fact.cuisine': 'Mətbəx', + 'places.details.fact.openingHours': 'İş saatları', + 'places.details.fact.menu': 'Menyu', + 'places.details.fact.outdoorSeating': 'Açıq havada oturacaq yerləri', + 'places.details.fact.takeaway': 'Paket servis', + 'places.details.fact.delivery': 'Çatdırılma', + 'places.details.fact.wheelchair': 'Pilləsiz giriş', + 'places.details.fact.vegetarian': 'Vegetarian', + 'places.details.fact.vegan': 'Veqan', + 'places.details.fact.internetAccess': 'Wi-Fi', + + 'places.categoryCreateError': 'Kateqoriya yaratmaq mümkün olmadı', + 'places.nameRequired': 'Ad daxil edin', + 'places.saveError': 'Yadda saxlamaq mümkün olmadı', + 'places.createExpenseHint': + 'Məkanı yadda saxlayır, sonra Xərclər redaktorunu açır.', + 'places.duplicateExists': '“{name}” artıq bu səyahətdə mövcuddur.', + 'places.addAnyway': 'Yenə də əlavə et', + + 'places.enrichOnImport': 'Məkan məlumatlarını Google vasitəsilə tamamla', + 'places.enrichOnImportHint': + 'Foto, ünvan və əlaqə məlumatlarını əlavə etmək üçün idxal edilən hər məkanı axtarır. Google Maps açarınızdan istifadə edir.', + + 'places.uploadImage': 'Şəkil yüklə', + 'places.changeImage': 'Şəkli dəyiş', + 'places.removeImage': 'Şəkli sil', + 'places.imageUploadError': 'Şəkli yükləmək mümkün olmadı', + 'places.imageRemoveError': 'Şəkli silmək mümkün olmadı', +}; + +export default places; \ No newline at end of file diff --git a/shared/src/i18n/az/planner.ts b/shared/src/i18n/az/planner.ts new file mode 100644 index 000000000..a0953e5fb --- /dev/null +++ b/shared/src/i18n/az/planner.ts @@ -0,0 +1,87 @@ +import type { TranslationStrings } from '../types'; + +const planner: TranslationStrings = { + 'planner.places': 'Məkanlar', + 'planner.bookings': 'Rezervasiyalar', + 'planner.packingList': 'Baqaj siyahısı', + 'planner.documents': 'Sənədlər', + 'planner.dayPlan': 'Günlük plan', + 'planner.reservations': 'Rezervasiyalar', + + 'planner.minTwoPlaces': + 'Koordinatları olan ən azı 2 məkan tələb olunur', + 'planner.noGeoPlaces': + 'Koordinatları olan heç bir məkan mövcud deyil', + 'planner.routeCalculated': 'Marşrut hesablandı', + 'planner.routeCalcFailed': 'Marşrutu hesablamaq mümkün olmadı', + 'planner.routeError': 'Marşrut hesablanarkən xəta baş verdi', + 'planner.icsExportFailed': 'ICS ixracı uğursuz oldu', + 'planner.routeOptimized': 'Marşrut optimallaşdırıldı', + + 'planner.reservationUpdated': 'Rezervasiya yeniləndi', + 'planner.reservationAdded': 'Rezervasiya əlavə edildi', + 'planner.confirmDeleteReservation': 'Rezervasiya silinsin?', + 'planner.reservationDeleted': 'Rezervasiya silindi', + + 'planner.days': 'Günlər', + 'planner.allPlaces': 'Bütün məkanlar', + 'planner.totalPlaces': 'Ümumilikdə {n} məkan', + 'planner.noDaysPlanned': 'Hələ heç bir gün planlaşdırılmayıb', + 'planner.editTrip': 'Səyahəti redaktə et →', + 'planner.placeOne': '1 məkan', + 'planner.placeN': '{n} məkan', + + 'planner.addNote': 'Qeyd əlavə et', + 'planner.noEntries': 'Bu gün üçün heç bir qeyd yoxdur', + 'planner.addPlace': 'Məkan/fəaliyyət əlavə et', + 'planner.addPlaceShort': '+ Məkan/fəaliyyət əlavə et', + + 'planner.resPending': 'Rezervasiya gözləyir', + 'planner.resConfirmed': 'Rezervasiya təsdiqlənib', + + 'planner.notePlaceholder': 'Qeyd…', + 'planner.noteTimePlaceholder': 'Vaxt (istəyə bağlı)', + 'planner.noteExamplePlaceholder': + 'məs. saat 14:30-da mərkəzi stansiyadan S3, 7-ci körpüdən bərə, nahar fasiləsi…', + + 'planner.totalCost': 'Ümumi xərc', + 'planner.searchPlaces': 'Məkanları axtarın…', + 'planner.allCategories': 'Bütün kateqoriyalar', + 'planner.noPlacesFound': 'Heç bir məkan tapılmadı', + 'planner.addFirstPlace': 'İlk məkanı əlavə et', + + 'planner.noReservations': 'Rezervasiya yoxdur', + 'planner.addFirstReservation': 'İlk rezervasiyanı əlavə et', + + 'planner.new': 'Yeni', + 'planner.addToDay': '+ Gün', + 'planner.calculating': 'Hesablanır…', + 'planner.route': 'Marşrut', + 'planner.optimize': 'Optimallaşdır', + 'planner.openGoogleMaps': 'Google Maps-də aç', + 'planner.openCoMaps': 'CoMaps-də aç', + + 'planner.selectDayHint': + 'Günlük planı görmək üçün soldakı siyahıdan bir gün seçin', + 'planner.noPlacesForDay': 'Bu gün üçün hələ heç bir məkan yoxdur', + 'planner.addPlacesLink': 'Məkanlar əlavə et →', + + 'planner.minTotal': 'dəq. ümumi', + 'planner.noReservation': 'Rezervasiya yoxdur', + 'planner.removeFromDay': 'Gündən çıxar', + 'planner.addToThisDay': 'Günə əlavə et', + + 'planner.overview': 'İcmal', + 'planner.noDays': 'Hələ heç bir gün yoxdur', + 'planner.editTripToAddDays': + 'Günlər əlavə etmək üçün səyahəti redaktə edin', + 'planner.dayCount': '{n} gün', + + 'planner.clickToUnlock': 'Kilidi açmaq üçün klikləyin', + 'planner.keepPosition': + 'Marşrut optimallaşdırılarkən mövqeyi dəyişməz saxla', + 'planner.dayDetails': 'Günün təfərrüatları', + 'planner.dayN': '{n}-ci gün', +}; + +export default planner; \ No newline at end of file diff --git a/shared/src/i18n/az/register.ts b/shared/src/i18n/az/register.ts new file mode 100644 index 000000000..361c0e88d --- /dev/null +++ b/shared/src/i18n/az/register.ts @@ -0,0 +1,25 @@ +import type { TranslationStrings } from '../types'; + +const register: TranslationStrings = { + 'register.passwordMismatch': 'Parollar uyğun gəlmir', + 'register.passwordTooShort': 'Parol ən azı 8 simvoldan ibarət olmalıdır', + 'register.failed': 'Qeydiyyat uğursuz oldu', + 'register.getStarted': 'Başla', + 'register.subtitle': 'Hesab yaradın və arzuladığınız səyahətləri planlaşdırmağa başlayın.', + 'register.feature1': 'Məhdudiyyətsiz səyahət planları', + 'register.feature2': 'İnteraktiv xəritə görünüşü', + 'register.feature3': 'Məkanları və kateqoriyaları idarə edin', + 'register.feature4': 'Rezervasiyaları izləyin', + 'register.feature5': 'Çamadan siyahıları yaradın', + 'register.feature6': 'Fotoşəkilləri və faylları saxlayın', + 'register.createAccount': 'Hesab yarat', + 'register.startPlanning': 'Səyahətinizi planlaşdırmağa başlayın', + 'register.minChars': 'Ən azı 6 simvol', + 'register.confirmPassword': 'Parolu təsdiqlə', + 'register.repeatPassword': 'Parolu təkrar daxil et', + 'register.registering': 'Qeydiyyatdan keçirilir...', + 'register.register': 'Qeydiyyatdan keç', + 'register.hasAccount': 'Artıq hesabınız var?', + 'register.signIn': 'Daxil ol', +}; +export default register; diff --git a/shared/src/i18n/az/reservations.ts b/shared/src/i18n/az/reservations.ts new file mode 100644 index 000000000..c62abb29f --- /dev/null +++ b/shared/src/i18n/az/reservations.ts @@ -0,0 +1,251 @@ +import type { TranslationStrings } from '../types'; + +const reservations: TranslationStrings = { + 'reservations.title': 'Rezervasiyalar', + 'reservations.empty': 'Hələ rezervasiya yoxdur', + 'reservations.emptyHint': + 'Uçuşlar, otellər və digər xidmətlər üçün rezervasiyalar əlavə edin', + 'reservations.add': 'Rezervasiya əlavə et', + 'reservations.addManual': 'Əl ilə rezervasiya et', + 'reservations.placeHint': + 'İpucu: Rezervasiyanı günlük planınızla əlaqələndirmək üçün onu birbaşa məkandan yaratmaq daha məqsədəuyğundur.', + + 'reservations.confirmed': 'Təsdiqlənib', + 'reservations.pending': 'Gözləyir', + 'reservations.summary': + '{confirmed} təsdiqlənib, {pending} gözləyir', + 'reservations.fromPlan': 'Plandan', + 'reservations.showFiles': 'Faylları göstər', + + 'reservations.editTitle': 'Rezervasiyanı redaktə et', + 'reservations.status': 'Status', + 'reservations.datetime': 'Tarix və vaxt', + 'reservations.startTime': 'Başlanğıc vaxtı', + 'reservations.endTime': 'Bitmə vaxtı', + 'reservations.date': 'Tarix', + 'reservations.time': 'Vaxt', + 'reservations.timeAlt': 'Vaxt (alternativ, məsələn, 19:30)', + 'reservations.notes': 'Qeydlər', + 'reservations.notesPlaceholder': 'Əlavə qeydlər...', + 'reservations.urlLabel': 'Link', + 'reservations.urlPlaceholder': 'https://...', + + 'reservations.meta.airline': 'Aviaşirkət', + 'reservations.meta.flightNumber': 'Uçuş nömrəsi', + 'reservations.meta.from': 'Haradan', + 'reservations.meta.to': 'Haraya', + + 'reservations.layover.route': 'Marşrut', + 'reservations.layover.stop': 'Ara dayanacaq', + 'reservations.layover.addStop': 'Ara dayanacaq əlavə et', + 'reservations.layover.connection': 'Transfer', + 'reservations.layover.layover': 'Tranzit gözləmə', + + 'reservations.needsReview': 'Yoxlayın', + 'reservations.needsReviewHint': + 'Hava limanını avtomatik uyğunlaşdırmaq mümkün olmadı — məkanı təsdiqləyin.', + 'reservations.searchLocation': + 'Stansiya, liman və ya ünvan axtarın…', + + 'reservations.meta.trainNumber': 'Qatar nömrəsi', + 'reservations.meta.platform': 'Platforma', + 'reservations.meta.seat': 'Oturacaq', + 'reservations.meta.checkIn': 'Giriş', + 'reservations.meta.checkInUntil': 'Son giriş vaxtı', + 'reservations.meta.checkOut': 'Çıxış', + + 'reservations.meta.linkAccommodation': 'Yaşayış yeri', + 'reservations.meta.pickAccommodation': + 'Yaşayış yeri ilə əlaqələndir', + 'reservations.meta.noAccommodation': 'Heç biri', + 'reservations.meta.hotelPlace': 'Yaşayış yeri', + + 'reservations.meta.linkPlace': 'Məkan / Fəaliyyət', + 'reservations.meta.pickPlace': 'Məkan / fəaliyyət seç', + 'reservations.meta.pickHotel': 'Yaşayış yeri seç', + 'reservations.meta.fromDay': 'Başlanğıc günü', + 'reservations.meta.toDay': 'Son gün', + 'reservations.meta.selectDay': 'Gün seç', + + 'reservations.type.flight': 'Uçuş', + 'reservations.type.hotel': 'Yaşayış yeri', + 'reservations.type.restaurant': 'Restoran', + 'reservations.type.train': 'Qatar', + 'reservations.type.car': 'Avtomobil', + 'reservations.type.cruise': 'Kruiz', + 'reservations.type.event': 'Tədbir', + 'reservations.type.tour': 'Tur', + 'reservations.type.parking': 'Parkinq', + 'reservations.type.other': 'Digər', + 'reservations.type.bus': 'Avtobus', + 'reservations.type.ferry': 'Bərə', + 'reservations.type.bicycle': 'Velosiped', + 'reservations.type.taxi': 'Taksi', + 'reservations.type.transit': 'İctimai nəqliyyat', + 'reservations.type.transport_other': 'Digər', + + 'reservations.confirm.delete': + '“{name}” rezervasiyasını silmək istədiyinizə əminsiniz?', + 'reservations.confirm.deleteTitle': 'Rezervasiya silinsin?', + 'reservations.confirm.deleteBody': + '“{name}” həmişəlik silinəcək.', + + 'reservations.toast.updated': 'Rezervasiya yeniləndi', + 'reservations.toast.removed': 'Rezervasiya silindi', + 'reservations.toast.fileUploaded': 'Fayl yükləndi', + 'reservations.toast.uploadError': 'Faylı yükləmək mümkün olmadı', + + 'reservations.newTitle': 'Yeni rezervasiya', + 'reservations.bookingType': 'Rezervasiya növü', + 'reservations.titleLabel': 'Başlıq', + 'reservations.titlePlaceholder': + 'məs. Lufthansa LH123, Hotel Adlon...', + 'reservations.locationAddress': 'Məkan / Ünvan', + 'reservations.locationPlaceholder': + 'Ünvan, hava limanı, otel...', + 'reservations.confirmationCode': 'Rezervasiya kodu', + 'reservations.confirmationPlaceholder': 'məs. ABC12345', + 'reservations.day': 'Gün', + 'reservations.noDay': 'Gün seçilməyib', + 'reservations.place': 'Məkan', + 'reservations.noPlace': 'Məkan seçilməyib', + + 'reservations.pendingSave': 'yadda saxlanacaq…', + 'reservations.uploading': 'Yüklənir...', + 'reservations.attachFile': 'Fayl əlavə et', + 'reservations.linkExisting': 'Mövcud faylı əlaqələndir', + + 'reservations.toast.saveError': 'Yadda saxlamaq mümkün olmadı', + 'reservations.toast.updateError': 'Yeniləmək mümkün olmadı', + 'reservations.toast.deleteError': 'Silmək mümkün olmadı', + + 'reservations.confirm.remove': + '“{name}” üçün rezervasiya silinsin?', + + 'reservations.linkAssignment': 'Günlük planla əlaqələndir', + 'reservations.pickAssignment': + 'Planınızdan bir təyinat seçin...', + 'reservations.noAssignment': 'Əlaqə yoxdur (müstəqil)', + + 'reservations.price': 'Qiymət', + 'reservations.budgetCategory': 'Büdcə kateqoriyası', + 'reservations.budgetCategoryPlaceholder': + 'məs. Nəqliyyat, Yaşayış yeri', + 'reservations.budgetCategoryAuto': + 'Avtomatik (rezervasiya növünə əsasən)', + 'reservations.budgetHint': + 'Yadda saxlanarkən avtomatik olaraq büdcə qeydi yaradılacaq.', + + 'reservations.departureDate': 'Yola düşmə', + 'reservations.arrivalDate': 'Çatma', + 'reservations.departureTime': 'Yola düşmə vaxtı', + 'reservations.arrivalTime': 'Çatma vaxtı', + 'reservations.pickupDate': 'Götürmə', + 'reservations.returnDate': 'Qaytarma', + 'reservations.pickupTime': 'Götürmə vaxtı', + 'reservations.returnTime': 'Qaytarma vaxtı', + 'reservations.endDate': 'Bitmə tarixi', + + 'reservations.meta.departureTimezone': + 'Yola düşmə saat qurşağı', + 'reservations.meta.arrivalTimezone': + 'Çatma saat qurşağı', + + 'reservations.span.departure': 'Yola düşmə', + 'reservations.span.arrival': 'Çatma', + 'reservations.span.inTransit': 'Yoldadır', + + // span.pickup does double duty: the day a rental car is picked up, and the day a + // multi-day parking ends and you collect your own car again. Both read the same way + // in every locale, so parking only needs the drop-off wording of its own. + 'reservations.span.pickup': 'Götürmə', + 'reservations.span.dropOff': 'Təhvilvermə', + 'reservations.span.return': 'Qaytarma', + 'reservations.span.active': 'Aktiv', + 'reservations.span.start': 'Başlanğıc', + 'reservations.span.end': 'Son', + 'reservations.span.ongoing': 'Davam edir', + + 'reservations.validation.endBeforeStart': + 'Bitmə tarixi və vaxtı başlanğıc tarixi və vaxtından sonra olmalıdır', + + 'reservations.addBooking': 'Rezervasiya əlavə et', + + 'reservations.import.title': + 'Rezervasiya təsdiqlərini idxal et', + 'reservations.import.cta': 'Fayldan idxal et', + 'reservations.import.dropHere': + 'Rezervasiya təsdiqi fayllarını buraya sürükləyib buraxın və ya seçmək üçün klikləyin', + 'reservations.import.dropActive': + 'İdxal etmək üçün faylları buraya buraxın', + 'reservations.import.acceptedFormats': + 'Qəbul edilən formatlar: EML, PDF, PKPass, HTML, TXT (hər biri maksimum 10 MB, 5 fayladək)', + 'reservations.import.parsing': 'Fayllar təhlil edilir…', + 'reservations.import.previewHeading': + '{count} rezervasiya tapıldı', + 'reservations.import.previewEmpty': + 'Yüklənən fayllardan heç bir rezervasiya çıxarmaq mümkün olmadı.', + 'reservations.import.removeItem': 'Sil', + 'reservations.import.needsReview': 'Yoxlayın', + 'reservations.import.tryAi': 'AI ilə təhlil et', + 'reservations.import.aiParsing': 'AI ilə təhlil edilir…', + 'reservations.import.confirm': + '{count} rezervasiyanı idxal et', + 'reservations.import.back': 'Geri', + 'reservations.import.success': + '{count} rezervasiya idxal edildi', + 'reservations.import.partialFailure': + '{created} idxal edildi, {failed} uğursuz oldu', + 'reservations.import.error': + 'Təhlil uğursuz oldu. Faylın etibarlı rezervasiya təsdiqi olduğuna əmin olun.', + 'reservations.import.unavailable': + 'Rezervasiyaların idxalı bu serverdə əlçatan deyil.', + 'reservations.import.unsupportedFormat': + 'Dəstəklənməyən fayl formatıdır. EML, PDF, PKPass, HTML və ya TXT istifadə edin.', + 'reservations.import.fileTooLarge': + '“{name}” faylı 10 MB limitini keçir.', + + 'reservations.airtrail.title': 'AirTrail-dən idxal et', + 'reservations.airtrail.cta': 'AirTrail', + 'reservations.airtrail.synced': 'AirTrail', + 'reservations.airtrail.syncedHint': + 'AirTrail ilə sinxronlaşdırılıb — dəyişikliklər hər iki istiqamətdə sinxron qalır.', + 'reservations.airtrail.notSynced': 'Sinxronlaşdırılmayıb', + 'reservations.airtrail.notSyncedHint': + 'Bu uçuş AirTrail-dən silinib və artıq sinxronlaşdırılmır.', + 'reservations.airtrail.layoverHint': + 'AirTrail-dən idxal edilib. Tranzit gözləməsi olan çoxseqmentli uçuşun AirTrail-də sinxronlaşdırıla biləcək vahid uçuş qeydi olmadığından, bu birdəfəlik idxal kimi qalır.', + 'reservations.airtrail.loadError': + 'AirTrail uçuşlarınızı yükləmək mümkün olmadı.', + 'reservations.airtrail.imported': + '{count} uçuş idxal edildi', + 'reservations.airtrail.skippedDuplicate': + '{count} uçuş artıq bu səyahətdədir və buraxıldı', + 'reservations.airtrail.nothingImported': + 'İdxal ediləcək heç nə yoxdur.', + 'reservations.airtrail.importError': + 'İdxal uğursuz oldu. Yenidən cəhd edin.', + 'reservations.airtrail.undo': 'AirTrail-dən idxal et', + 'reservations.airtrail.alreadyImported': 'İdxal edilib', + 'reservations.airtrail.duringTrip': 'Bu səyahət zamanı', + 'reservations.airtrail.otherFlights': 'Digər uçuşlar', + 'reservations.airtrail.empty': + 'AirTrail hesabınızda heç bir uçuş tapılmadı.', + 'reservations.airtrail.importCta': '{count} uçuşu idxal et', + 'reservations.airtrail.joinConnection': + '{stops} dayanacağında tranzit gözləmə ilə bir uçuş kimi idxal et', + + 'reservations.costsLabel': 'Xərclər', + 'reservations.createExpense': 'Xərc yarat', + 'reservations.createExpenseHint': + 'Rezervasiyanı yadda saxlayır, sonra Xərclər redaktorunu açır.', + 'reservations.linkedExpense': 'Əlaqəli xərc', + 'reservations.removeExpense': 'Xərci sil', + + 'reservations.travelers.label': 'Səyahətçilər', + 'reservations.travelers.assign': 'Səyahətçiləri təyin et', + 'reservations.travelers.none': + 'Hələ səyahət üzvü yoxdur.', +}; + +export default reservations; \ No newline at end of file diff --git a/shared/src/i18n/az/roadtrip.ts b/shared/src/i18n/az/roadtrip.ts new file mode 100644 index 000000000..ed6524bd8 --- /dev/null +++ b/shared/src/i18n/az/roadtrip.ts @@ -0,0 +1,297 @@ +import type { TranslationStrings } from '../types'; + +const roadtrip: TranslationStrings = { + 'roadtrip.stay.portals': 'Yaşayış yeri tap', + 'roadtrip.stay.portalHint': 'Portalda təyinat yerini, tarixləri və qonaqları yoxlayın. CHECK24 əl ilə axtarış tələb edir.', + 'roadtrip.charging.available': 'əlçatandır', + 'roadtrip.charging.unknown': 'Etibarlı məlumat yoxdur', + 'roadtrip.charging.stale': 'Status köhnəlib', + 'roadtrip.charging.prices': 'Dərc edilmiş tariflər', + 'roadtrip.charging.note': + 'Dərc edilmiş tarifdir; vergilər, şərtlər və əlavə ödənişlər tətbiq oluna bilər. Şarj kartınızdakı qiymət fərqli ola bilər.', + 'roadtrip.charging.coverage': 'Açıq məlumatlardır; əhatə dairəsi region və operatora görə dəyişir.', + 'roadtrip.charging.availability': 'Əlçatanlıq və qiymətlər', + 'roadtrip.import.title': 'Google Maps marşrutunu idxal et', + 'roadtrip.import.note': 'Dayanacaqlar seçilmiş günün sonuna əlavə edilir. TREK marşrutu yenidən hesablayır.', + 'roadtrip.import.unresolved': 'Məkanı müəyyən etmək mümkün olmadı; bu dayanacaq buraxılacaq.', + 'roadtrip.import.day': 'Gün', + 'roadtrip.hazards.show': 'Təhlükəli əraziləri göstər', + 'roadtrip.hazards.current': 'Cari xəbərdarlıqlar', + 'roadtrip.hazards.note': 'Xəbərdarlıqlar yolun bağlanması demək deyil. Marşrutlar dəyişdirilmir.', + 'roadtrip.hazards.point': 'Yalnız məkan məlumdur; təsirə məruz qalan ərazi məlum deyil.', + 'roadtrip.hazards.loading': 'Xəbərdarlıqlar yüklənir…', + 'roadtrip.hazards.unavailable': 'Əlçatan deyil', + 'roadtrip.hazards.offline': 'Oflayn: canlı xəbərdarlıqlar əlçatan deyil', + 'roadtrip.hazards.partial': 'Məhdud əhatə', + 'roadtrip.stops.section': 'Xidmət dayanacaqları', + 'roadtrip.stops.inDays': 'Günlər bölməsində də göstər', + 'roadtrip.stops.daysHint': 'Deaktiv olduqda bütün xidmət dayanacaqları yalnız Avtomobil səyahəti bölməsində qalır.', + 'roadtrip.window.dragHint': + 'İnternetə qoşulu olarkən günün sonunu marşrut boyunca və ya məkanın üzərinə sürükləyin; avtomatik sonluğu bərpa etmək üçün üzərinə sağ klikləyin.', + 'roadtrip.window.resetBoundaries': 'Avtomatik gün sonlarını bərpa et', + 'roadtrip.window.endHere': 'Günü burada bitir', + 'roadtrip.window.endHereHint': + 'Avtomobil səyahəti rejimi və günlük yol vaxtları aktiv olduqda məkanın təfərrüatlarından günü konkret dayanacaqda bitirə bilərsiniz.', + 'roadtrip.window.endAt': 'Günü bitir', + 'roadtrip.window.onRoute': 'Marşrut boyunca', + 'roadtrip.window.atStop': 'Son məkanda', + 'roadtrip.window.routeHint': 'Bitmə vaxtında marşrut üzərində fasilə verin.', + 'roadtrip.window.stopHint': 'Növbəti məkana getmək bitmə vaxtını keçəcəksə, əvvəlki məkanda dayanın.', + 'roadtrip.window.legTooLong': + 'Yol hissələrindən biri günlük səyahət vaxtını keçir. Yol boyunca məkan əlavə edin və ya marşrut üzərində fasilə verməyi seçin.', + 'roadtrip.window.pointLabel': '{day}-ci günün sonu, saat {time}', + 'roadtrip.window.title': 'Günlük səyahət vaxtları', + 'roadtrip.window.start': 'Günün başlanma vaxtı', + 'roadtrip.window.end': 'Günün bitmə vaxtı', + 'roadtrip.window.hint': 'Aktivləşdirmək üçün hər iki vaxtı təyin edin. Əl ilə təyin edilmiş vaxtlar üstünlük təşkil edir.', + 'roadtrip.window.invalid': 'Bitmə vaxtı başlanğıc vaxtından sonra olmalıdır.', + 'roadtrip.window.stop': 'Günün sonu', + 'roadtrip.window.resume': 'Səyahətə davam et', + 'roadtrip.window.pointHint': 'Bu, gecələmə üçün təxmini fasilə nöqtənizdir.', + 'roadtrip.window.departure': 'Qalan ziyarətdən sonra saat {time}-da davam et', + 'roadtrip.window.showPoint': 'Xəritədə göstər', + 'roadtrip.window.incomplete': 'Bütün birləşdirici marşrutlar əlçatan olanadək günlük fasilələri hesablamaq mümkün deyil.', + 'roadtrip.window.conflict': + 'Sabit vaxt yol və günlük fasilələrlə ziddiyyət təşkil edir. Əl ilə təyin edilmiş vaxtlar dəyişdirilmir; avtomatik planlaşdırma dayandırılıb.', + 'roadtrip.window.tooLong': + 'Bu səyahət vaxtları {days} ədəddən çox əlavə gün tələb edəcək. Daha uzun günlük vaxt aralığı seçin.', + 'roadtrip.mode.roadtrip': 'Avtomobil səyahəti', + 'roadtrip.mode.days': 'Günlər', + 'roadtrip.mode.label': 'Plan görünüşü', + 'roadtrip.title': 'Avtomobil səyahəti', + 'roadtrip.subtitle': 'Bu səyahət üçün dayanacaqlar, yol və çatma vaxtları', + 'roadtrip.empty.title': 'Hələ marşrut yoxdur', + 'roadtrip.stops.label': 'Yolboyu dayanacaqlar', + 'roadtrip.stops.remove': 'Dayanacağı sil', + 'roadtrip.poi.title': 'Marşrut boyunca', + 'roadtrip.poi.scope': 'Gün', + 'roadtrip.poi.looking': 'Axtarılanlar', + 'roadtrip.poi.searchingHint': 'Marşrutda axtarılır…', + 'roadtrip.poi.found': 'Yolboyu {count} nəticə', + 'roadtrip.poi.fuel': 'Yanacaq', + 'roadtrip.poi.charging': 'Şarj', + 'roadtrip.stop.offRoad': 'Yoldan {distance} uzaqda', + 'roadtrip.via.plugin': 'Yolboyu dayanacaq', + 'roadtrip.limit.title': 'Sürmə tənzimləmələri', + 'roadtrip.limit.legLabel': 'Bir dəfəyə ən uzun sürmə', + 'roadtrip.limit.dayLabel': 'Günlük sürmə', + 'roadtrip.limit.rangeLabel': 'Bir çənlə məsafə', + 'roadtrip.limit.fillLabel': 'Doldurma səviyyəsi', + 'roadtrip.limit.fillFull': 'tam', + 'roadtrip.limit.fillBadge': '{percent}%-dək doldurur', + 'roadtrip.limit.wearNote': 'köhnəlməyə görə {percent}% itki', + 'roadtrip.limit.rangeLabelCharge': 'Bir şarjla məsafə', + 'roadtrip.limit.sectionTrip': 'Bu səyahət', + 'roadtrip.limit.sectionDriving': 'Sürmə', + 'roadtrip.limit.sectionVehicle': 'Nəqliyyat vasitəsi', + 'roadtrip.limit.tankLabel': 'Çənin həcmi', + 'roadtrip.limit.batteryLabel': 'Batareya', + 'roadtrip.limit.useLabel': 'Sərfiyyat', + 'roadtrip.limit.wearLabel': 'Batareyanın köhnəlməsi', + 'roadtrip.limit.computed': 'Nəqliyyat vasitəsinin göstəricilərindən hesablanıb', + 'roadtrip.limit.perFill': 'hər çən üçün', + 'roadtrip.limit.perCharge': 'hər şarj üçün', + 'roadtrip.limit.afterFill': '{percent}%-lik doldurma {distance} məsafə verir', + 'roadtrip.limit.fullNote': 'Dayanacaqda tam doldurulur', + 'roadtrip.limit.rangeEmpty': 'Məsafə təyin edilməyib', + 'roadtrip.limit.rangeEmptyHint': 'Məsafəni daxil edin və ya aşağıdakı göstəriciləri doldurun, TREK onu hesablasın.', + 'roadtrip.limit.specHint': 'Nəqliyyat vasitəsinin göstəriciləri məsafəni müəyyən edir.', + 'roadtrip.limit.vehicleHint': 'Məsafəni hesablamaq üçün nəqliyyat vasitəsi seçin.', + 'roadtrip.limit.minutes': 'dəq.', + 'roadtrip.limit.off': 'deaktiv', + 'roadtrip.limit.blockNote': 'Bir blok = {distance}', + 'roadtrip.limit.echoOver': '{days} gündən {over} günü limitinizi keçir.', + 'roadtrip.limit.echoNone': 'Bütün {days} gün limitləriniz daxilindədir.', + 'roadtrip.limit.echoDry': 'Çatmaq mümkün olan dayanacağı olmayan {count} marşrut hissəsi.', + 'roadtrip.limit.echoEmpty': 'Bu tənzimləmələrin təsirini görmək üçün avtomobil səyahəti açın.', + 'roadtrip.limit.specToggle': 'Avtomobil göstəricilərindən hesabla', + 'roadtrip.limit.hint': 'Yalnız sürmə vaxtıdır, qalma və gecələmə hissələri daxil deyil.', + 'roadtrip.limit.legOver': 'Ən uzun sürmə limitinizi {time} keçir', + 'roadtrip.limit.dayOver': '{time} artıq', + 'roadtrip.limit.range': 'Son doldurmadan bəri {distance}', + 'roadtrip.limit.none': 'Təyin edilməyib', + 'roadtrip.line.section': 'Marşrut xətti', + 'roadtrip.line.connect': 'Günləri birləşdir', + 'roadtrip.line.dayColors': 'Hər gün üçün ayrı rəng', + 'roadtrip.line.hint': 'Birləşdirici yollar çatma gününə daxil edilir.', + 'roadtrip.line.hotelBookends': 'Hər günü yaşayış yerinizdə başladın və bitirin', + 'roadtrip.line.hotelBookendsHint': + 'Rezervasiya edilmiş gecədən sonra gün həmin yaşayış yerində başlayır və gecələmədən əvvəl həmin gecə üçün rezervasiya edilmiş yaşayış yerində bitir.', + 'roadtrip.avoid.section': 'Mümkün olduqda yayın', + 'roadtrip.avoid.toll': 'Ödənişli yollar', + 'roadtrip.avoid.motorway': 'Avtomagistrallar', + 'roadtrip.avoid.ferry': 'Bərələr', + 'roadtrip.avoid.hint': 'Mümkün olduqda yayınır; istisnalar işarələnir.', + 'roadtrip.avoid.unavailable': 'Marşrut provayderiniz yayınma seçimlərini dəstəkləmir.', + 'roadtrip.avoid.badge': '{count} yayınma', + 'roadtrip.avoid.missed': '{classes} qaçılmazdır', + 'roadtrip.avoid.missedHint': + 'Bu gün üçün həmin yol növündən yayınan marşrut yoxdur, buna görə yol ondan istifadə edir. Digər günlər mümkün olan yollardan yayınmağa davam edir.', + 'roadtrip.refuel.dry': 'Yanacaq burada bitir', + 'roadtrip.refuel.after': '{distance} sonra', + 'roadtrip.limit.vehicleLabel': 'Nə sürürsünüz', + 'roadtrip.limit.vehicleAny': 'Fərqi yoxdur', + 'roadtrip.limit.vehicleCombustion': 'Benzin', + 'roadtrip.limit.vehicleElectric': 'Elektrik', + 'roadtrip.refuel.dryElectric': 'Batareya burada bitir', + 'roadtrip.refuel.findElectric': 'Şarj məntəqəsi tap', + 'roadtrip.refuel.find': 'Yanacaq məntəqəsi tap', + 'roadtrip.refuel.again': 'Yenidən cəhd et', + 'roadtrip.refuel.looking': 'Marşrut boyunca axtarılır…', + 'roadtrip.refuel.spare': '{distance} ehtiyat qalır', + 'roadtrip.refuel.add': '{name} yanacaq dayanacağı kimi əlavə edilsin', + 'roadtrip.refuel.addElectric': '{name} şarj dayanacağı kimi əlavə edilsin', + 'roadtrip.refuel.none': 'Çatmaq mümkün olan hissədə heç nə tapılmadı.', + 'roadtrip.refuel.incomplete': 'Axtarış vaxtından əvvəl dayandırıldı, buna görə bu hissə tam yoxlanılmadı.', + 'roadtrip.refuel.failed': 'Məkan axtarışı cavab vermədi.', + 'roadtrip.stop.none': 'Təyinat yeri', + 'roadtrip.stay.mode.pause': 'Fasilə', + 'roadtrip.stay.mode.night': 'Gecələmə', + 'roadtrip.stay.nightAdded': 'Gecələmə yeri kimi əlavə edildi', + 'roadtrip.stay.nightAction': 'Gecələmə yeri kimi əlavə et', + 'roadtrip.stop.makeService': 'Yolboyu dayanacağa çevir', + 'roadtrip.stop.changeKind': 'Dayanacağın növünü dəyiş', + 'roadtrip.stop.backToDestination': 'Yenidən təyinat yeri et', + 'roadtrip.poi.anySocket': 'İstənilən konnektor', + 'roadtrip.poi.anyPower': 'İstənilən güc', + 'roadtrip.poi.free': 'Pulsuz', + 'roadtrip.poi.wholeDay': 'Bütün gün', + 'roadtrip.poi.midLeg': 'Yolun yarısında, {from}–{to}', + 'roadtrip.track.title': '{number}-ci gün izi izləyir', + 'roadtrip.track.hint': 'Bu günü idxal edilmiş iz üzrə planlaşdırın', + 'roadtrip.track.badge': 'İz', + 'roadtrip.track.untitled': 'Adsız iz', + 'roadtrip.track.empty': 'Bu səyahətdə iz yoxdur', + 'roadtrip.track.emptyHint': 'GPX və ya KML faylı idxal edin və onun izləri burada görünsün.', + 'roadtrip.track.length': 'Uzunluq: {distance}', + 'roadtrip.track.gap': 'Bu gündən {distance} uzaqda', + 'roadtrip.track.onDay': 'bu gün boyunca', + 'roadtrip.track.explain': + 'Yol bir neçə ara nöqtə vasitəsilə izə uyğunlaşdırılır. Həmin hissələrdəki mövcud ara nöqtələr əvəz ediləcək.', + 'roadtrip.track.action': 'Bu izi izlə', + 'roadtrip.track.working': 'Yol izə uyğunlaşdırılır, {round}-ci mərhələ', + 'roadtrip.track.done': '{count} ara nöqtə yerləşdirildi. Yol izdən maksimum {distance} uzaqlaşır.', + 'roadtrip.track.capped': '{count} ara nöqtə yerləşdirildi. Ən böyük yayınma {distance} olaraq qalır.', + 'roadtrip.track.already': 'Yol artıq bu izi izləyir.', + 'roadtrip.track.errorRoute': 'Marşrut xidməti cavab vermədi.', + 'roadtrip.track.errorSave': 'Ara nöqtələri yadda saxlamaq mümkün olmadı.', + 'roadtrip.track.clear': '{count} ara nöqtəni sil', + 'roadtrip.track.current': 'Hazırda {name} izi izlənilir', + 'roadtrip.poi.rest': 'İstirahət zonası', + 'roadtrip.poi.campsite': 'Düşərgə', + 'roadtrip.poi.food': 'Yemək', + 'roadtrip.poi.sights': 'Görməli yerlər', + 'roadtrip.poi.within': 'Məsafə', + 'roadtrip.poi.filter': 'Ada görə filtrlə', + 'roadtrip.poi.noMatch': 'Yolboyu “{name}” ilə uyğun heç nə yoxdur.', + 'roadtrip.poi.noneMatchFilters': 'Yolboyu bu filtrlərə uyğun heç nə yoxdur.', + 'roadtrip.poi.foundFiltered': 'Yolboyu {total} nəticədən {count}', + 'roadtrip.poi.truncated': '{count} marşrut hissəsində bir cavaba sığmayacaq qədər nəticə var — qalanlarını görmək üçün axtarış dəhlizini daraldın.', + 'roadtrip.poi.search': 'Axtar', + 'roadtrip.poi.searching': '{total} hissədən {done} axtarılır', + 'roadtrip.poi.capped': 'Marşrut uzundur — yalnız ilk hissə axtarıldı.', + 'roadtrip.poi.partial': '{count} marşrut hissəsində axtarış aparmaq mümkün olmadı — məkan axtarışı cavab vermədi.', + 'roadtrip.poi.failed': 'Məkan axtarışı hazırda cavab vermir.', + 'roadtrip.poi.empty': 'Ehtiyacınız olan növləri seçib axtarın.', + 'roadtrip.poi.add': 'Əlavə et', + 'roadtrip.poi.offRoute': 'Marşrutdan {distance} uzaqda', + 'roadtrip.poi.atStart': 'başlanğıca yaxın', + 'roadtrip.poi.alongRoute': '{distance} sonra', + 'roadtrip.poi.clearResults': 'Nəticələri təmizlə', + 'roadtrip.poi.addManual': 'Əl ilə əlavə et', + 'roadtrip.poi.addManualShort': 'Əl ilə', + 'roadtrip.poi.manualHint': + 'Məkan axtarışı bütün şarj və yanacaq məntəqələrini tapmır. Məntəqəni adına görə axtarın və yolun hansı hissəsinə əlavə ediləcəyini seçin.', + 'roadtrip.poi.addBetween': 'Araya əlavə et', + 'roadtrip.poi.manualOffRoute': 'Marşrutdan {distance} uzaqdadır; hansı yol hissəsinə aid olduğunu yoxlayın.', + 'roadtrip.poi.manualAppend': 'Hələ marşrut hesablanmayıb, buna görə {number}-ci günün sonuna əlavə ediləcək.', + 'roadtrip.poi.manualNoResults': 'Heç bir məkan tapılmadı.', + 'roadtrip.poi.manualNoCoords': + 'Mövqeyi olmadığından bu məkan yola deyil, səyahətin məkanlarına əlavə ediləcək. Yuxarıdakı axtarışdan bir məkan seçin və ya koordinatları daxil edin.', + 'roadtrip.summary.distance': 'Məsafə', + 'roadtrip.summary.driving': 'Sürmə vaxtı', + 'roadtrip.alt.ask': 'Digər marşrutlar', + 'roadtrip.alt.title': 'Bu hissə üçün alternativ yollar', + 'roadtrip.alt.loading': 'Marşrut xidmətinə sorğu göndərilir…', + 'roadtrip.alt.onlyOne': 'Bu hissə üçün yalnız bir məntiqli yol var.', + 'roadtrip.alt.failed': 'Marşrut xidməti hazırda cavab vermir.', + 'roadtrip.alt.current': 'Cari', + 'roadtrip.alt.fastest': 'Ən sürətli', + 'roadtrip.alt.slower': '{time} daha yavaş', + 'roadtrip.alt.quicker': '{time} daha sürətli', + 'roadtrip.alt.otherEngine': 'Vaxt əsas marşrut mühərriki ilə deyil, yayınma marşrut mühərriki ilə hesablanıb.', + 'roadtrip.alt.notHeld': 'Avtomobil səyahətinin marşrut mühərriki bu yolu izləyə bilmədiyi üçün yol yadda saxlanılmadı.', + 'roadtrip.alt.ferryNotHeld': + 'Bu yol bərədən keçir. Bərəni nəqliyyat rezervasiyası kimi əlavə edin və yol onu izləsin. Bərə növbəti gün çatırsa, suyun digər tərəfindəki dayanacaqları həmin günə yerləşdirin.', + 'roadtrip.alt.legChanged': 'Yol yoxlanılarkən bu hissə dəyişdiyi üçün heç nə yadda saxlanılmadı.', + 'roadtrip.alt.offline': 'Alternativ yollar yalnız internetə qoşulu olduqda yadda saxlanılır. Bu yolu seçmək üçün yenidən qoşulun.', + 'roadtrip.alt.otherEngineStandard': 'Vaxt bu hissənin planlaşdırıldığı mühərriklə deyil, əsas marşrut mühərriki ilə hesablanıb.', + 'roadtrip.alt.avoidNotHeld': + 'Avtomobil səyahəti yalnız tənzimləmələrdə “{setting}” altında “{class}” seçildikdə bu yoldan istifadə edir.', + 'roadtrip.alt.checking': 'Bu yol avtomobil səyahətinin marşrut mühərriki ilə yoxlanılır…', + 'roadtrip.alt.standIn': + 'Yayınma marşrut mühərriki bu hissə üçün cavab vermədiyindən onu əsas mühərrik çəkdi. Yenidən sorğu göndərilir.', + 'roadtrip.day': '{number}-ci gün', + 'roadtrip.quietDay.empty': 'Hələ dayanacaq yoxdur — birini buraya əlavə edin', + 'roadtrip.quietDay.one': 'Hələlik yalnız {name} var — buraya dayanacaq əlavə edin', + 'roadtrip.leg.driveText': '{time} ərzində {distance}', + 'roadtrip.day.stopCount': '{count} dayanacaq', + 'roadtrip.day.fold': 'Yığ', + 'roadtrip.day.folded': 'Yığılıb', + 'roadtrip.stop.stayShort': 'Qalma', + 'roadtrip.stop.fillTitle': 'Doldurma səviyyəsi', + 'roadtrip.stop.fillGives': 'buradan təxminən {distance}', + 'roadtrip.stop.fillNoRange': 'Bu doldurmanın nə qədər məsafə verəcəyini görmək üçün məsafə təyin edin.', + 'roadtrip.stop.fillDefault': 'Standart seçimimdən istifadə et', + 'roadtrip.stop.fillSet': 'Bu dayanacaqda nə qədər doldurulacağını təyin et', + 'roadtrip.leg.pending': 'Marşrut yoxdur', + 'roadtrip.leg.arrivingFrom': '{name} məkanından', + 'roadtrip.stop.addTitle': 'Dayanacaq kimi əlavə et', + 'roadtrip.stop.kind': 'Dayanacağın növü', + 'roadtrip.stop.landsOn': '{day}-ci gün, {position}-ci dayanacaq', + 'roadtrip.stop.duplicate': '“{name}” artıq bu səyahətdədir.', + 'roadtrip.stop.moreDetails': 'Daha çox təfərrüat', + 'roadtrip.stop.stay': 'Bu dayanacaqda qalma müddəti', + 'roadtrip.stop.pinned': 'Təyin etdiyiniz vaxt', + 'roadtrip.stop.computed': 'Yoldan hesablanıb', + 'roadtrip.stop.endIsLeave': 'Avtomobil səyahətində yol bu vaxtda davam edir.', + 'roadtrip.via.hint': 'Marşrutu dəyişmək üçün sürükləyin, silmək üçün sağ klikləyin', + 'roadtrip.warn.late': 'Təyin etdiyiniz vaxtdan {minutes} dəq. sonra çatır', + 'roadtrip.warn.missedLeave': 'Təyin etdiyiniz çıxış vaxtından {minutes} dəq. sonra çatır', + 'roadtrip.warn.overnight': 'Növbəti gün', + 'roadtrip.spill.title': '{number}-ci gündən', + 'roadtrip.spill.departs': 'saat {time}-da yola düşür', + 'roadtrip.summary.stops': 'Dayanacaqlar', + 'roadtrip.stay.add': 'Qalma müddəti əlavə et', + 'roadtrip.stay.none': 'Qalma yoxdur', + 'roadtrip.stay.custom': 'Dəqiqə', + 'roadtrip.stay.arrive': 'Çatma', + 'roadtrip.stay.leave': 'Yola düşmə', + 'roadtrip.stay.until': 'saat {time}-dək', + 'roadtrip.stay.leavesAt': 'Bu ziyarətin bitmə vaxtı var, buna görə yol saat {time}-da davam edir.', + 'roadtrip.stay.dayEndsFirst': 'Səyahət günü saat {time}-dan əvvəl bitir, buna görə yol növbəti səhər davam edir.', + 'roadtrip.stay.clearLeave': 'Bitmə vaxtını sil', + 'roadtrip.alt.noMotorway': 'Avtomagistralsız', + 'roadtrip.alt.noToll': 'Ödənişli yolsuz', + 'roadtrip.alt.noFerry': 'Bərəsiz', + 'roadtrip.summary.partial': 'Yolun qalan hissəsi hələ hesablanır', + 'roadtrip.stay.releaseTitle': 'Gecələmə ləğv edilsin?', + 'roadtrip.stay.releaseBody': '“{name}” məkanındakı gecələmə silinəcək. Dayanacaq fasilə kimi yolda qalacaq.', + 'roadtrip.stay.releaseBookedBody': '“{name}” məkanındakı gecələmə, “{booking}” rezervasiyası və onunla əlaqəli bütün xərclərlə birlikdə silinəcək. Dayanacaq fasilə kimi yolda qalacaq.', + 'roadtrip.stay.releaseAction': 'Fasiləyə çevir', + 'roadtrip.ride.departure': 'Yola düşmə: {time}', + 'roadtrip.ride.arrival': 'Çatma: {time}', + 'roadtrip.ride.pickup': 'Götürmə: {time}', + 'roadtrip.ride.return': 'Qaytarma: {time}', + 'roadtrip.ride.open': 'Rezervasiyanı aç', + 'roadtrip.ride.undated': '{title} bu səyahətin heç bir gününə təyin edilmədiyi üçün yol ondan istifadə etmir.', + 'roadtrip.bookings.loose': 'Bu gün üçün digər rezervasiyalar', + 'roadtrip.bookend.checkOut': 'Çıxış · {name}', + 'roadtrip.bookend.from': '{name} məkanından', + 'roadtrip.bookend.back': '{name} məkanına qayıt', + 'roadtrip.bookend.checkIn': 'Giriş · {name}', + 'roadtrip.bookend.afterCheckOut': 'Çıxışdan sonra yola düşür', + 'roadtrip.bookend.noVia': 'Yaşayış yerinizə gedən və ya oradan gələn yolda ara nöqtə yoxdur. Əvəzində oraya dayanacaq əlavə edin.', +}; + +export default roadtrip; \ No newline at end of file diff --git a/shared/src/i18n/az/settings.ts b/shared/src/i18n/az/settings.ts new file mode 100644 index 000000000..64db7bda0 --- /dev/null +++ b/shared/src/i18n/az/settings.ts @@ -0,0 +1,735 @@ +import type { TranslationStrings } from '../types'; + +const settings: TranslationStrings = { + 'settings.title': 'Tənzimləmələr', + 'settings.subtitle': 'Şəxsi tənzimləmələrinizi konfiqurasiya edin', + 'settings.tabs.display': 'Ümumi', + 'settings.tabs.map': 'Xəritə', + 'settings.tabs.notifications': 'Bildirişlər', + 'settings.tabs.integrations': 'İnteqrasiyalar', + + 'settings.plugins.oauth.connected': 'Qoşulub', + 'settings.plugins.oauth.notConnected': 'Qoşulmayıb', + 'settings.plugins.oauth.connect': 'Qoş', + 'settings.plugins.oauth.disconnect': 'Bağlantını kəs', + 'settings.tabs.plugins': 'Plaginlər', + 'settings.plugins.title': 'Plagin tənzimləmələri', + 'settings.plugins.subtitle': + 'İstifadə etdiyiniz plaginlər üçün şəxsi tənzimləmələriniz (API açarları və seçimlər).', + 'settings.plugins.empty': 'Aktiv plagin yoxdur.', + 'settings.plugins.saved': 'Tənzimləmələr yadda saxlanıldı', + 'settings.plugins.requiredMissing': '“{field}” tələb olunur', + + 'settings.pluginActivity.title': 'Plagin fəaliyyəti', + 'settings.pluginActivity.description': + 'Plaginin sizin adınızdan etdiyi bütün əməliyyatlar, ən yenidən başlayaraq.', + 'settings.pluginActivity.empty': 'Hələ plagin fəaliyyəti yoxdur.', + 'settings.pluginActivity.refresh': 'Yenilə', + 'settings.pluginActivity.columns.plugin': 'Plagin', + 'settings.pluginActivity.columns.action': 'Əməliyyat', + 'settings.pluginActivity.columns.resource': 'Resurs', + 'settings.pluginActivity.columns.when': 'Vaxt', + 'settings.pluginActivity.columns.status': 'Nəticə', + + 'settings.tabs.account': 'Hesab', + 'settings.tabs.offline': 'Oflayn', + 'settings.tabs.about': 'Haqqında', + + 'settings.map': 'Xəritə', + 'settings.mapTemplate': 'Xəritə şablonu', + 'settings.mapTemplatePlaceholder.select': 'Şablon seçin...', + 'settings.mapDefaultHint': + 'OpenStreetMap üçün boş saxlayın (standart)', + 'settings.routingBase': 'Şəxsi marşrut mühərriki', + 'settings.routingBaseHint': + 'Öz OSRM instansiyanız. Sahə boş olduqda saniyədə təxminən bir sorğuya icazə verən ictimai serverlər istifadə edilir — bu, bir günlük plan üçün kifayətdir, avtomobil səyahəti üçün isə məhdud ola bilər. Server yenidən başladıldıqdan sonra qüvvəyə minir.', + 'settings.valhallaBase': 'Şəxsi Valhalla instansiyası', + 'settings.valhallaBaseHint': + 'TREK ödənişli yollardan, avtomagistrallardan və bərələrdən yayınmaq üçün standart olaraq ictimai FOSSGIS Valhalla xidmətindən istifadə edir. Əvəzində öz Valhalla URL-inizdən istifadə etmək üçün onu buraya daxil edin. Yalnız fərdi marşrut instansiyası konfiqurasiya edilərsə, ictimai Valhalla istifadə olunmur. Fərdi URL daxil etdikdən sonra serveri yenidən başladın və səhifəni yeniləyin.', + 'settings.mapHint': 'Xəritə plitələri üçün URL şablonu', + 'settings.mapProvider': 'Xəritə provayderi', + 'settings.mapProviderHint': + 'Səyahət planlayıcısı və Səyahət gündəliyi xəritələrinə təsir edir. Atlas həmişə Leaflet istifadə edir.', + 'settings.mapLeafletSubtitle': + 'Klassik 2D, istənilən rastr plitələri', + 'settings.mapMapboxSubtitle': + 'Vektor plitələri, 3D binalar və relyef', + 'settings.mapMapLibreSubtitle': + 'OpenFreeMap vektor plitələri, token tələb olunmur', + 'settings.mapExperimental': 'Eksperimental', + + 'settings.mapMapboxToken': 'Mapbox giriş tokeni', + 'settings.mapMapboxTokenHint': 'İctimai token (pk.*), mənbə:', + 'settings.mapMapboxTokenLink': 'mapbox.com → Access tokens', + + 'settings.mapCartoKey': 'CARTO API açarı', + 'settings.mapCartoKeyHint': + 'CARTO əsas xəritələri açar olmadan su nişanı göstərir. Pulsuzdur və hesab tələb etmir, mənbə:', + 'settings.mapCartoKeyLink': 'carto.com əsas xəritə API açarı', + 'settings.mapCartoKeyMissing': + 'Bu şablon CARTO əsas xəritəsidir. Açar olmadıqda CARTO hər plitənin üzərinə “API KEY REQUIRED” yazısı əlavə edir. Açar daxil edənədək TREK standart əsas xəritəni göstərəcək.', + + 'settings.mapStyle': 'Xəritə üslubu', + 'settings.mapStylePlaceholder': 'Mapbox üslubu seçin', + 'settings.mapStyleHint': + 'Hazır üslub və ya öz mapbox://styles/USER/ID URL-iniz', + 'settings.mapOpenFreeMapStylePlaceholder': + 'OpenFreeMap üslubu seçin', + 'settings.mapOpenFreeMapStyleHint': + 'Hazır üslub və ya OpenFreeMap üslub URL-i. OpenFreeMap üslubları tokensiz işləyir.', + + 'settings.map3dBuildings': '3D binalar və relyef', + 'settings.map3dHint': + 'Maililik və real 3D bina modelləri — peyk görünüşü daxil olmaqla bütün üslublarda işləyir.', + 'settings.mapHighQuality': 'Yüksək keyfiyyət rejimi', + 'settings.mapHighQualityHint': + 'Daha kəskin kənarlar və real dünya görünüşü üçün hamarlama və qlobus proyeksiyası.', + 'settings.mapHighQualityWarning': + 'Zəif cihazlarda performansa təsir edə bilər.', + 'settings.mapTipLabel': 'İpucu:', + 'settings.mapTip': + 'xəritəni fırlatmaq və əymək üçün sağ kliklə sürükləyin. Məkan əlavə etmək üçün orta düymə ilə klikləyin (sağ klik fırlatma üçün ayrılıb).', + 'settings.saveMap': 'Xəritəni yadda saxla', + + 'settings.apiKeys': 'API açarları', + 'settings.mapsKey': 'Google Maps API açarı', + 'settings.mapsKeyHint': + 'Məkan axtarışı üçün. Places API (New) tələb olunur. console.cloud.google.com ünvanından əldə edin', + 'settings.weatherKey': 'OpenWeatherMap API açarı', + 'settings.weatherKeyHint': + 'Hava məlumatları üçün. openweathermap.org/api ünvanında pulsuzdur', + 'settings.keyPlaceholder': 'Açarı daxil edin...', + 'settings.configured': 'Konfiqurasiya edilib', + 'settings.saveKeys': 'Açarları yadda saxla', + + 'settings.display': 'Görünüş', + 'settings.colorMode': 'Rəng rejimi', + 'settings.light': 'İşıqlı', + 'settings.dark': 'Tünd', + 'settings.auto': 'Avtomatik', + 'settings.language': 'Dil', + 'settings.temperature': 'Temperatur vahidi', + 'settings.distance': 'Məsafə vahidi', + 'settings.timeFormat': 'Vaxt formatı', + + 'settings.bookingLabels': 'Rezervasiya marşrutu etiketləri', + 'settings.bookingLabelsHint': + 'Stansiya və hava limanı adlarını xəritədə göstərin. Deaktiv olduqda yalnız ikon göstərilir.', + 'settings.mapPoiPill': 'Xəritədə məkanları kəşf et', + 'settings.mapPoiPillHint': + 'OpenStreetMap vasitəsilə yaxınlıqdakı restoranları, otelləri və digər məkanları tapmaq üçün səyahət xəritəsində kateqoriya düyməsi göstərin.', + 'settings.blurBookingCodes': 'Rezervasiya kodlarını bulanıqlaşdır', + 'settings.aiAlwaysRetry': + 'Rezervasiya idxalını həmişə AI ilə yenidən sına', + 'settings.aiAlwaysRetryHint': + 'Fayl standart təhlil vasitəsi ilə oxunmadıqda onu avtomatik olaraq AI ilə yenidən təhlil edin.', + + 'settings.optimizeFromAccommodation': + 'Marşrutu yaşayış yerindən başlayaraq optimallaşdır', + 'settings.optimizeFromAccommodationHint': + 'Günü optimallaşdırarkən marşrutu səhər oyandığınız oteldən başladın və həmin axşam giriş etdiyiniz oteldə bitirin.', + + 'settings.notifications': 'Bildirişlər', + 'settings.notifyTripInvite': 'Səyahət dəvətləri', + 'settings.notifyBookingChange': 'Rezervasiya dəyişiklikləri', + 'settings.notifyTripReminder': 'Səyahət xatırlatmaları', + 'settings.notifyTodoDue': 'Son tarixi yaxınlaşan tapşırıqlar', + 'settings.notifyVacayInvite': 'Vacay birləşdirmə dəvətləri', + 'settings.notifyVacayShare': 'Vacay təqvim paylaşımları', + 'settings.notifyCollectionInvite': 'Kolleksiya dəvətləri', + 'settings.notifySynologySessionCleared': 'Synology sessiyası təmizləndi', + 'settings.notifyPluginNotification': 'Plagin bildirişləri', + 'settings.notifyPhotosShared': 'Paylaşılan fotolar (Immich)', + 'settings.notifyCollabMessage': 'Çat mesajları (Collab)', + 'settings.notifyPackingTagged': 'Baqaj siyahısı: təyinatlar', + 'settings.notifyWebhook': 'Webhook bildirişləri', + 'settings.notifyVersionAvailable': 'Yeni versiya əlçatandır', + 'settings.notifyReplicaFailure': 'Yaddaş replikası xətası', + + 'settings.notificationPreferences.email': 'E-poçt', + 'settings.notificationPreferences.webhook': 'Webhook', + 'settings.notificationPreferences.inapp': 'Tətbiqdaxili', + 'settings.notificationPreferences.notConfigured': + 'Hələ konfiqurasiya edilməyib — plaginin tənzimləmələrində quraşdırın', + 'settings.plugins.actions': 'Əməliyyatlar', + 'settings.plugins.actions.confirm': 'Bu əməliyyat icra edilsin?', + 'settings.notificationPreferences.sendTest': 'Test göndər', + 'settings.notificationPreferences.configure': 'Konfiqurasiya et', + 'settings.notificationPreferences.testSuccess': + 'Test bildirişi göndərildi.', + 'settings.notificationPreferences.testFailed': 'Test uğursuz oldu.', + 'settings.notificationPreferences.pluginConfigured': + 'Konfiqurasiya edilib. Giriş məlumatlarını plaginin tənzimləmələr səhifəsindən idarə edin.', + 'settings.notificationPreferences.ntfy': 'Ntfy', + 'settings.notificationPreferences.noChannels': + 'Heç bir bildiriş kanalı konfiqurasiya edilməyib. Administratordan e-poçt və ya webhook bildirişlərini quraşdırmasını istəyin.', + + 'settings.webhookUrl.label': 'Webhook URL-i', + 'settings.webhookUrl.placeholder': + 'https://discord.com/api/webhooks/...', + 'settings.webhookUrl.hint': + 'Bildirişlər almaq üçün Discord, Slack və ya fərdi webhook URL-inizi daxil edin.', + 'settings.webhookUrl.saved': 'Webhook URL-i yadda saxlanıldı', + 'settings.webhookUrl.test': 'Yoxla', + 'settings.webhookUrl.testSuccess': + 'Test webhook-u uğurla göndərildi', + 'settings.webhookUrl.testFailed': 'Test webhook-u uğursuz oldu', + + 'settings.ntfyUrl.topicLabel': 'Ntfy mövzusu', + 'settings.ntfyUrl.topicPlaceholder': 'my-trek-alerts', + 'settings.ntfyUrl.serverLabel': + 'Ntfy server URL-i (istəyə bağlı)', + 'settings.ntfyUrl.serverPlaceholder': 'https://ntfy.sh', + 'settings.ntfyUrl.hint': + 'Push bildirişləri almaq üçün ntfy mövzusunu daxil edin. Administratorunuzun konfiqurasiya etdiyi standart serverdən istifadə etmək üçün server sahəsini boş saxlayın.', + 'settings.ntfyUrl.tokenLabel': 'Giriş tokeni (istəyə bağlı)', + 'settings.ntfyUrl.tokenHint': + 'Parolla qorunan mövzular üçün tələb olunur.', + 'settings.ntfyUrl.saved': 'Ntfy tənzimləmələri yadda saxlanıldı', + 'settings.ntfyUrl.test': 'Yoxla', + 'settings.ntfyUrl.testSuccess': + 'Test ntfy bildirişi uğurla göndərildi', + 'settings.ntfyUrl.testFailed': 'Test ntfy bildirişi uğursuz oldu', + 'settings.ntfyUrl.tokenCleared': 'Giriş tokeni təmizləndi', + + 'settings.notificationsDisabled': + 'Bildirişlər konfiqurasiya edilməyib. Administratordan e-poçt və ya webhook bildirişlərini aktivləşdirməsini istəyin.', + 'settings.notificationsActive': 'Aktiv kanal', + 'settings.notificationsManagedByAdmin': + 'Bildiriş hadisələri administratorunuz tərəfindən konfiqurasiya edilir.', + 'settings.on': 'Aktiv', + 'settings.off': 'Deaktiv', + + 'settings.mcp.title': 'MCP konfiqurasiyası', + 'settings.mcp.endpoint': 'MCP son nöqtəsi', + 'settings.mcp.clientConfig': 'Müştəri konfiqurasiyası', + 'settings.mcp.clientConfigHint': + 'Aşağıdakı siyahıdan API tokeni götürərək hissəsini onunla əvəz edin. npx yolu sisteminizə uyğun dəyişdirilə bilər (məsələn, Windows-da C:\\PROGRA~1\\nodejs\\npx.cmd).', + 'settings.mcp.clientConfigHintOAuth': + 'Yuxarıda yaratdığınız OAuth 2.1 müştərisində göstərilən məlumatlarla və hissələrini əvəz edin. İlk qoşulma zamanı mcp-remote avtorizasiyanı tamamlamaq üçün brauzerinizi açacaq. npx yolu sisteminizə uyğun dəyişdirilə bilər (məsələn, Windows-da C:\\PROGRA~1\\nodejs\\npx.cmd).', + 'settings.mcp.copy': 'Kopyala', + 'settings.mcp.copied': 'Kopyalandı!', + 'settings.mcp.apiTokens': 'API tokenləri', + 'settings.mcp.createToken': 'Yeni token yarat', + 'settings.mcp.noTokens': + 'Hələ token yoxdur. MCP müştərilərini qoşmaq üçün token yaradın.', + 'settings.mcp.tokenCreatedAt': 'Yaradılıb', + 'settings.mcp.tokenUsedAt': 'İstifadə edilib', + 'settings.mcp.deleteTokenTitle': 'Tokeni sil', + 'settings.mcp.deleteTokenMessage': + 'Bu token dərhal işləməyəcək. Ondan istifadə edən bütün MCP müştəriləri giriş icazəsini itirəcək.', + 'settings.mcp.modal.createTitle': 'API tokeni yarat', + 'settings.mcp.modal.tokenName': 'Tokenin adı', + 'settings.mcp.modal.tokenNamePlaceholder': + 'məs. Claude Desktop, İş noutbuku', + 'settings.mcp.modal.creating': 'Yaradılır…', + 'settings.mcp.modal.create': 'Token yarat', + 'settings.mcp.modal.createdTitle': 'Token yaradıldı', + 'settings.mcp.modal.createdWarning': + 'Bu token yalnız bir dəfə göstəriləcək. İndi kopyalayıb təhlükəsiz yerdə saxlayın — sonradan bərpa edilə bilməz.', + 'settings.mcp.modal.done': 'Hazır', + 'settings.mcp.toast.created': 'Token yaradıldı', + 'settings.mcp.toast.createError': 'Token yaratmaq mümkün olmadı', + 'settings.mcp.toast.deleted': 'Token silindi', + 'settings.mcp.toast.deleteError': 'Tokeni silmək mümkün olmadı', + 'settings.mcp.apiTokensDeprecated': + 'API tokenləri köhnəlmiş hesab olunur və gələcək versiyada silinəcək. Əvəzində OAuth 2.1 müştərilərindən istifadə edin.', + + 'settings.oauth.clients': 'OAuth 2.1 müştəriləri', + 'settings.oauth.clientsHint': + 'Üçüncü tərəf MCP tətbiqlərinin (Claude Web, Cursor və s.) statik tokenlər olmadan qoşulması üçün OAuth 2.1 müştəriləri qeydiyyatdan keçirin.', + 'settings.oauth.createClient': 'Yeni müştəri', + 'settings.oauth.noClients': 'Qeydiyyatdan keçmiş OAuth müştərisi yoxdur.', + 'settings.oauth.clientId': 'Müştəri ID-si', + 'settings.oauth.clientSecret': 'Müştəri sirri', + 'settings.oauth.deleteClient': 'Müştərini sil', + 'settings.oauth.deleteClientMessage': + 'Bu müştəri və bütün aktiv sessiyaları həmişəlik silinəcək. Ondan istifadə edən tətbiqlər giriş icazəsini dərhal itirəcək.', + 'settings.oauth.rotateSecret': 'Sirri yenilə', + 'settings.oauth.rotateSecretMessage': + 'Yeni müştəri sirri yaradılacaq və bütün mövcud sessiyalar dərhal etibarsız ediləcək. Bu pəncərəni bağlamazdan əvvəl tətbiqinizi yeniləyin.', + 'settings.oauth.rotateSecretConfirm': 'Yenilə', + 'settings.oauth.rotateSecretConfirming': 'Yenilənir…', + 'settings.oauth.rotateSecretDoneTitle': 'Yeni sirr yaradıldı', + 'settings.oauth.rotateSecretDoneWarning': + 'Bu sirr yalnız bir dəfə göstərilir. İndi kopyalayıb tətbiqinizi yeniləyin — bütün əvvəlki sessiyalar etibarsız edilib.', + + 'settings.oauth.activeSessions': 'Aktiv OAuth sessiyaları', + 'settings.oauth.sessionScopes': 'İcazə sahələri', + 'settings.oauth.sessionExpires': 'Bitmə vaxtı', + 'settings.oauth.revoke': 'Ləğv et', + 'settings.oauth.revokeSession': 'Sessiyanı ləğv et', + 'settings.oauth.revokeSessionMessage': + 'Bu OAuth sessiyasının giriş icazəsi dərhal ləğv ediləcək.', + + 'settings.oauth.modal.createTitle': 'OAuth müştərisini qeydiyyatdan keçir', + 'settings.oauth.modal.presets': 'Sürətli seçimlər', + 'settings.oauth.modal.clientName': 'Tətbiqin adı', + 'settings.oauth.modal.clientNamePlaceholder': + 'məs. Claude Web, Mənim MCP tətbiqim', + 'settings.oauth.modal.redirectUris': 'Yönləndirmə URI-ləri', + 'settings.oauth.modal.redirectUrisPlaceholder': + 'https://your-app.com/callback\nhttps://your-app.com/auth', + 'settings.oauth.modal.redirectUrisHint': + 'Hər sətirdə bir URI. HTTPS, geri dövrəli HTTP və ya şəxsi tətbiq sxemi (myapp://). Geri dövrəli URI-nin portu istisna olmaqla tam uyğunlaşdırılır.', + 'settings.oauth.modal.scopes': 'İcazə verilən sahələr', + 'settings.oauth.modal.scopesHint': + 'list_trips və get_trip_summary həmişə əlçatandır — əlavə icazə sahəsi tələb olunmur. Bunlar AI-a digər alətlər üçün lazım olan səyahət ID-lərini tapmağa imkan verir.', + 'settings.oauth.modal.selectAll': 'Hamısını seç', + 'settings.oauth.modal.deselectAll': 'Bütün seçimləri ləğv et', + 'settings.oauth.modal.creating': 'Qeydiyyatdan keçirilir…', + 'settings.oauth.modal.create': 'Müştərini qeydiyyatdan keçir', + 'settings.oauth.modal.createdTitle': 'Müştəri qeydiyyatdan keçirildi', + 'settings.oauth.modal.createdWarning': + 'Müştəri sirri yalnız bir dəfə göstərilir. İndi kopyalayın — sonradan bərpa edilə bilməz.', + + 'settings.oauth.toast.createError': + 'OAuth müştərisini qeydiyyatdan keçirmək mümkün olmadı', + 'settings.oauth.toast.deleted': 'OAuth müştərisi silindi', + 'settings.oauth.toast.deleteError': + 'OAuth müştərisini silmək mümkün olmadı', + 'settings.oauth.toast.revoked': 'Sessiya ləğv edildi', + 'settings.oauth.toast.revokeError': + 'Sessiyanı ləğv etmək mümkün olmadı', + 'settings.oauth.toast.rotateError': + 'Müştəri sirrini yeniləmək mümkün olmadı', + + 'settings.oauth.modal.machineClient': + 'Maşın müştərisi (brauzer girişi olmadan)', + 'settings.oauth.modal.machineClientHint': + 'client_credentials icazəsindən istifadə edin — yönləndirmə URI-ləri tələb olunmur. Token birbaşa client_id və client_secret vasitəsilə verilir və seçilmiş icazə sahələri daxilində sizin adınızdan işləyir.', + 'settings.oauth.modal.machineClientUsage': + 'Token əldə edin: grant_type=client_credentials, client_id və client_secret ilə POST /oauth/token sorğusu göndərin. Brauzer və yeniləmə tokeni tələb olunmur.', + 'settings.oauth.badge.machine': 'maşın', + + 'settings.account': 'Hesab', + 'settings.about': 'Haqqında', + 'settings.about.reportBug': 'Xəta bildir', + 'settings.about.reportBugHint': 'Problem tapmısınız? Bizə bildirin', + 'settings.about.featureRequest': 'Funksiya təklifi', + 'settings.about.featureRequestHint': 'Yeni funksiya təklif edin', + 'settings.about.wikiHint': 'Sənədlər və təlimatlar', + 'settings.about.descriptionManaged': + 'TREK səyahətlərinizi ilk ideyadan son xatirəyədək təşkil etməyə kömək edir. Günlük planlaşdırma, büdcə, baqaj siyahıları, fotolar və daha çoxu — hamısı bir yerdə.', + 'settings.about.sourceTitle': 'Mənbə kodu', + 'settings.about.sourceHint': + 'TREK AGPL-3.0 lisenziyalı açıq mənbəli layihədir', + + 'settings.about.supporters.badge': 'Aylıq dəstəkçilər', + 'settings.about.supporters.title': 'TREK-in səyahət yoldaşları', + 'settings.about.supporters.subtitle': + 'Siz növbəti marşrutunuzu planlaşdırarkən bu insanlar TREK-in gələcəyini planlaşdırmağa kömək edir. Onların aylıq töhfəsi birbaşa inkişaf işlərinə və sərf olunan real iş saatlarına yönəlir — beləliklə TREK açıq mənbəli qalır.', + 'settings.about.supporters.since': '{date} tarixindən dəstəkçi', + 'settings.about.supporters.tierEmpty': 'İlk dəstəkçi olun', + 'settings.about.supporter.tier.noReturnTicket': 'Dönüşsüz bilet', + 'settings.about.supporter.tier.lostLuggageVip': 'İtmiş baqaj VIP', + 'settings.about.supporter.tier.businessClassDreamer': + 'Biznes sinfi xəyalpərəsti', + 'settings.about.supporter.tier.budgetTraveller': 'Büdcəli səyahətçi', + 'settings.about.supporter.tier.hostelBunkmate': 'Hostel otaq yoldaşı', + + 'settings.about.description': + 'TREK səyahətlərinizi ilk ideyadan son xatirəyədək təşkil etməyə kömək edən, öz serverinizdə yerləşdirilən səyahət planlayıcısıdır. Günlük planlaşdırma, büdcə, baqaj siyahıları, fotolar və daha çoxu — hamısı bir yerdə, öz serverinizdə.', + 'settings.about.madeWith': 'Hazırlanıb:', + 'settings.about.madeBy': + 'Maurice və böyüyən açıq mənbə icması tərəfindən.', + + 'settings.username': 'İstifadəçi adı', + 'settings.email': 'E-poçt', + 'settings.role': 'Rol', + 'settings.roleAdmin': 'Administrator', + 'settings.oidcLinked': 'Əlaqələndirilib:', + 'settings.changePassword': 'Parolu dəyiş', + 'settings.currentPassword': 'Cari parol', + 'settings.currentPasswordRequired': 'Cari parol tələb olunur', + 'settings.newPassword': 'Yeni parol', + 'settings.confirmPassword': 'Yeni parolu təsdiqləyin', + 'settings.updatePassword': 'Parolu yenilə', + 'settings.passwordRequired': 'Cari və yeni parolu daxil edin', + 'settings.passwordTooShort': 'Parol ən azı 8 simvoldan ibarət olmalıdır', + 'settings.passwordMismatch': 'Parollar uyğun gəlmir', + 'settings.passwordWeak': + 'Parolda böyük hərf, kiçik hərf, rəqəm və xüsusi simvol olmalıdır', + 'settings.passwordChanged': 'Parol uğurla dəyişdirildi', + 'settings.mustChangePassword': + 'Davam etməzdən əvvəl parolunuzu dəyişməlisiniz. Aşağıda yeni parol təyin edin.', + + 'settings.deleteAccount': 'Hesabı sil', + 'settings.deleteAccountTitle': 'Hesabınız silinsin?', + 'settings.deleteAccountWarning': + 'Hesabınız və bütün səyahətləriniz, məkanlarınız və fayllarınız həmişəlik silinəcək. Bu əməliyyatı geri qaytarmaq mümkün deyil.', + 'settings.deleteAccountConfirm': 'Həmişəlik sil', + 'settings.deleteBlockedTitle': 'Silmək mümkün deyil', + 'settings.deleteBlockedMessage': + 'Siz yeganə administratorsunuz. Hesabınızı silməzdən əvvəl başqa istifadəçini administrator edin.', + 'settings.roleUser': 'İstifadəçi', + 'settings.saveProfile': 'Profili yadda saxla', + + 'settings.toast.mapSaved': 'Xəritə tənzimləmələri yadda saxlanıldı', + 'settings.toast.keysSaved': 'API açarları yadda saxlanıldı', + 'settings.toast.displaySaved': 'Görünüş tənzimləmələri yadda saxlanıldı', + 'settings.toast.profileSaved': 'Profil yadda saxlanıldı', + + 'settings.uploadAvatar': 'Profil şəkli yüklə', + 'settings.removeAvatar': 'Profil şəklini sil', + 'settings.avatarUploaded': 'Profil şəkli yeniləndi', + 'settings.avatarRemoved': 'Profil şəkli silindi', + 'settings.avatarError': 'Yükləmə uğursuz oldu', + 'settings.avatarRemoveError': 'Silmək mümkün olmadı', + + 'settings.mfa.title': 'İki mərhələli autentifikasiya (2FA)', + 'settings.mfa.description': + 'E-poçt və parolla daxil olarkən ikinci təhlükəsizlik mərhələsi əlavə edir. Autentifikator tətbiqindən istifadə edin (Google Authenticator, Authy və s.).', + 'settings.mfa.requiredByPolicy': + 'Administratorunuz iki mərhələli autentifikasiya tələb edir. Davam etməzdən əvvəl aşağıda autentifikator tətbiqini quraşdırın.', + 'settings.mfa.backupTitle': 'Ehtiyat kodları', + 'settings.mfa.backupDescription': + 'Autentifikator tətbiqinə girişinizi itirsəniz, bu birdəfəlik ehtiyat kodlarından istifadə edin.', + 'settings.mfa.backupWarning': + 'Bu kodları indi yadda saxlayın. Hər kod yalnız bir dəfə istifadə edilə bilər.', + 'settings.mfa.backupCopy': 'Kodları kopyala', + 'settings.mfa.backupDownload': 'TXT endir', + 'settings.mfa.backupPrint': 'Çap / PDF', + 'settings.mfa.backupCopied': 'Ehtiyat kodları kopyalandı', + 'settings.mfa.enabled': 'Hesabınızda 2FA aktivdir.', + 'settings.mfa.disabled': '2FA aktiv deyil.', + 'settings.mfa.setup': 'Autentifikatoru quraşdır', + 'settings.mfa.scanQr': + 'Bu QR kodu tətbiqinizlə skan edin və ya gizli açarı əl ilə daxil edin.', + 'settings.mfa.secretLabel': 'Gizli açar (əl ilə daxil etmə)', + 'settings.mfa.codePlaceholder': '6 rəqəmli kod', + 'settings.mfa.enable': '2FA-nı aktivləşdir', + 'settings.mfa.cancelSetup': 'Ləğv et', + 'settings.mfa.disableTitle': '2FA-nı deaktiv et', + 'settings.mfa.disableHint': + 'Hesab parolunuzu və autentifikatorunuzdakı cari kodu daxil edin.', + 'settings.mfa.disable': '2FA-nı deaktiv et', + 'settings.mfa.toastEnabled': + 'İki mərhələli autentifikasiya aktivləşdirildi', + 'settings.mfa.toastDisabled': + 'İki mərhələli autentifikasiya deaktiv edildi', + 'settings.mfa.demoBlocked': 'Demo rejimində əlçatan deyil', + + 'settings.currency': 'Göstərilən valyuta', + 'settings.currencyHint': + 'Xərclər bölməsindəki məbləğlər yalnız göstərilmək üçün bu valyutaya çevrilir — ilkin məbləğlər dəyişmir.', + 'settings.currencyTrip': 'Səyahət valyutası', + + 'settings.passkey.title': 'Keçid açarları', + 'settings.passkey.description': + 'Keçid açarı ilə daha sürətli və fişinqə davamlı şəkildə daxil olun — barmaq izi, üz, PIN və ya fiziki təhlükəsizlik açarından istifadə edin. Parolunuz ehtiyat giriş üsulu kimi qalır.', + 'settings.passkey.notConfigured': + 'Keçid açarları aktivdir, lakin bu serverdə hələ tam konfiqurasiya edilməyib. Administratorunuzdan WebAuthn domenini təyin etməsini istəyin.', + 'settings.passkey.add': 'Keçid açarı əlavə et', + 'settings.passkey.addTitle': 'Keçid açarı əlavə et', + 'settings.passkey.passwordPrompt': + 'Cari parolunuzu təsdiqləyin, sonra cihazınızdakı göstərişləri izləyin.', + 'settings.passkey.passwordRequired': 'Cari parolunuz tələb olunur.', + 'settings.passkey.namePlaceholder': + 'Ad (istəyə bağlı, məsələn, “iPhone”)', + 'settings.passkey.addedToast': 'Keçid açarı əlavə edildi', + 'settings.passkey.added': 'Əlavə edilib', + 'settings.passkey.addError': 'Keçid açarını əlavə etmək mümkün olmadı', + 'settings.passkey.cancelled': 'Keçid açarının quraşdırılması ləğv edildi', + 'settings.passkey.deleted': 'Keçid açarı silindi', + 'settings.passkey.deleteConfirm': + 'Bu keçid açarı silinsin? Parolunuzla təsdiqləyin.', + 'settings.passkey.rename': 'Adını dəyiş', + 'settings.passkey.defaultName': 'Keçid açarı', + 'settings.passkey.synced': 'Sinxronlaşdırılıb', + 'settings.passkey.deviceBound': 'Bu cihaz', + 'settings.passkey.lastUsed': 'Son istifadə', + 'settings.passkey.neverUsed': 'Heç vaxt istifadə edilməyib', + + 'settings.airtrail.title': 'AirTrail', + 'settings.airtrail.hint': + 'Uçuşları idxal və sinxronlaşdırmaq üçün AirTrail instansiyanızı qoşun. AirTrail-də Tənzimləmələr → Təhlükəsizlik bölməsindən API açarı yaradın.', + 'settings.airtrail.url': 'İnstansiya URL-i', + 'settings.airtrail.apiKey': 'API açarı', + 'settings.airtrail.apiKeyPlaceholder': 'Bearer API açarı', + 'settings.airtrail.apiKeyHint': + 'AirTrail-də Tənzimləmələr → Təhlükəsizlik bölməsindən yaradılır. Şifrələnmiş şəkildə saxlanılır.', + 'settings.airtrail.allowInsecureTls': + 'Öz-özünə imzalanmış sertifikatlara icazə ver', + 'settings.airtrail.allowInsecureTlsHint': + 'Yalnız öz şəbəkənizdəki etibarlı instansiya üçün aktivləşdirin.', + 'settings.airtrail.writeBack': 'Dəyişiklikləri AirTrail-ə geri yaz', + 'settings.airtrail.writeBackHint': + 'Standart olaraq deaktivdir: AirTrail əsas məlumat mənbəyidir və TREK ondan yalnız oxuyur. TREK-də edilən dəyişiklikləri AirTrail-ə göndərmək üçün aktivləşdirin.', + 'settings.airtrail.connected': 'Qoşulub', + 'settings.airtrail.notConnected': 'Qoşulmayıb', + 'settings.airtrail.toast.saved': 'AirTrail bağlantısı yadda saxlanıldı', + 'settings.airtrail.toast.saveError': + 'Bağlantını yadda saxlamaq mümkün olmadı', + 'settings.airtrail.test.button': 'Bağlantını yoxla', + 'settings.airtrail.test.success': + 'Qoşuldu — {count} uçuş tapıldı', + 'settings.airtrail.test.failed': 'Bağlantı uğursuz oldu', + + 'settings.aiParsing.title': 'AI ilə təhlil', + 'settings.aiParsing.hint': + 'Yüklənmiş fayllardan rezervasiyaları çıxarmaq üçün istifadə edilən AI modelini seçin. Bu, yalnız administratorunuz bütün instansiya üçün model konfiqurasiya etmədikdə tətbiq olunur.', + 'settings.aiParsing.provider': 'Provayder', + 'settings.aiParsing.providerLocal': 'Lokal (Ollama)', + 'settings.aiParsing.providerOpenai': 'OpenAI', + 'settings.aiParsing.providerAnthropic': 'Anthropic', + 'settings.aiParsing.localAdminOnly': + 'Lokal Ollama son nöqtəsi administrator tənzimləmələrində bütün instansiya üçün bir dəfə quraşdırılır. Burada öz OpenAI və ya Anthropic açarınızdan istifadə edə bilərsiniz.', + 'settings.aiParsing.model': 'Model', + 'settings.aiParsing.baseUrl': 'Əsas URL', + 'settings.aiParsing.baseUrlHint': + 'Modelin işlədiyi yer — lokal Ollama serveri və ya OpenAI ilə uyğun son nöqtə.', + 'settings.aiParsing.apiKey': 'API açarı', + 'settings.aiParsing.apiKeyHint': + 'Şifrələnmiş şəkildə saxlanılır. Cari açarı saxlamaq üçün boş buraxın.', + 'settings.aiParsing.multimodal': 'Sənədləri şəkil kimi göndər', + 'settings.aiParsing.multimodalHint': + 'Görmə qabiliyyətli modellər üçün — çıxarılmış mətn əvəzinə orijinal PDF-i göndərir.', + 'settings.aiParsing.toast.saved': 'AI tənzimləmələri yadda saxlanıldı', + 'settings.aiParsing.toast.saveError': + 'AI tənzimləmələrini yadda saxlamaq mümkün olmadı', + + 'settings.tabs.appearance': 'Görünüş', + 'settings.appearance.theme': 'Tema', + 'settings.appearance.scheme': 'Rəng sxemi', + 'settings.appearance.scheme.default': 'Standart', + 'settings.appearance.scheme.highContrast': 'Yüksək kontrast', + 'settings.appearance.scheme.indigo': 'İndiqo', + 'settings.appearance.scheme.teal': 'Mavi-yaşıl', + 'settings.appearance.scheme.rose': 'Qızılgül', + 'settings.appearance.scheme.amber': 'Kəhrəba', + 'settings.appearance.scheme.violet': 'Bənövşəyi', + 'settings.appearance.scheme.custom': 'Fərdi', + 'settings.appearance.customAccent': 'Fərdi vurğu rəngi', + 'settings.appearance.contrastOk': 'Yaxşı kontrast', + 'settings.appearance.contrastLow': 'Aşağı kontrast', + 'settings.appearance.readability': 'Oxunaqlılıq', + 'settings.appearance.transparency': 'Şəffaflıq', + 'settings.appearance.transparencyHint': + 'Şüşəyə bənzər yarımşəffaf səthlər. Bütöv və daha yüksək kontrastlı fonlar üçün deaktiv edin.', + 'settings.appearance.reduceMotion': 'Hərəkəti azalt', + 'settings.appearance.reduceMotionHint': + 'Animasiyaları və keçidləri minimuma endirin.', + 'settings.appearance.density': 'Sıxlıq', + 'settings.appearance.comfortable': 'Rahat', + 'settings.appearance.compact': 'Yığcam', + 'settings.appearance.textSize': 'Mətn ölçüsü', + 'settings.appearance.advancedTextSizes': 'Ətraflı mətn ölçüləri', + 'settings.appearance.hideAdvanced': 'Ətraflı seçimləri gizlət', + 'settings.appearance.tier.title': 'Başlıqlar', + 'settings.appearance.tier.subtitle': 'Altbaşlıqlar', + 'settings.appearance.tier.body': 'Əsas mətn', + 'settings.appearance.tier.caption': 'Kiçik yazılar', + + 'settings.appearance.dashboardWidgets': 'İdarə paneli vidcetləri', + 'settings.appearance.dashboardWidgetsHint': + 'İdarə paneli vidcetlərini kompüter və mobil cihazlarda ayrıca göstərin və ya gizlədin.', + 'settings.appearance.desktop': 'Kompüter', + 'settings.appearance.mobile': 'Mobil', + 'settings.appearance.widget.sidebar': 'Sağ yan panel', + 'settings.appearance.widget.currency': 'Valyuta', + 'settings.appearance.widget.collections': 'Kolleksiyalar', + 'settings.appearance.widget.timezones': 'Saat qurşaqları', + 'settings.appearance.widget.upcomingReservations': + 'Qarşıdan gələn rezervasiyalar', + 'settings.appearance.widget.atlas': 'Atlas / ölkələr', + 'settings.appearance.widget.tripsTotal': 'Ümumi səyahətlər', + 'settings.appearance.widget.daysTraveled': 'Səyahət edilən günlər', + 'settings.appearance.widget.distanceFlown': 'Uçuş məsafəsi', + 'settings.appearance.reset': 'Standartlara sıfırla', + 'settings.appearance.group.belowHero': 'Əsas blokun altında', + 'settings.appearance.group.bottomOfPage': 'Səhifənin aşağısında', + 'settings.appearance.sidebarHint': + 'Bütün sağ sütun. Deaktiv etdikdə idarə paneli mərkəzə çəkilir.', + 'settings.appearance.densityHint': + 'Yığcam rejim ekrana daha çox məlumat sığdırmaq üçün aralıqları və daxili boşluqları azaldır.', + 'settings.appearance.textSizeAll': 'Hər şey', + 'settings.appearance.perSize': 'Hər ölçünü ayrıca tənzimlə', + 'settings.appearance.size.large': 'Böyük', + 'settings.appearance.size.medium': 'Orta', + 'settings.appearance.size.normal': 'Normal', + 'settings.appearance.size.small': 'Kiçik', + + 'settings.appearance.preview.large': 'Böyük başlıq', + 'settings.appearance.preview.medium': 'Orta altbaşlıq', + 'settings.appearance.preview.normal': 'Normal əsas mətn', + 'settings.appearance.preview.small': 'Kiçik yazı / ünvan', + 'settings.appearance.example.large': 'Başlıqlar, böyük rəqəmlər', + 'settings.appearance.example.medium': 'Altbaşlıqlar', + 'settings.appearance.example.normal': 'Məkan adları, təsvirlər', + 'settings.appearance.example.small': 'Ünvanlar, etiketlər', + + 'settings.appearance.experimental': 'Eksperimental', + 'settings.appearance.mobileNav': 'Aşağı naviqasiya paneli', + 'settings.appearance.mobileNav.hint': + 'Paneldə hansı elementlərin görünəcəyini və hansılarının “Daha çox” altında yerləşəcəyini seçin. İdarə paneli həmişə birinci qalır.', + 'settings.appearance.mobileNav.inBar': 'Paneldə', + 'settings.appearance.mobileNav.underMore': '“Daha çox” altında', + 'settings.appearance.mobileNav.moreEmpty': + 'Burada hələ heç nə yoxdur — bütün elementlər panelə sığır.', + 'settings.appearance.mobileNav.pinned': 'Bərkidilib', + 'settings.appearance.mobileNav.toMore': '“Daha çox” altına daşı', + 'settings.appearance.mobileNav.toBar': 'Panelə daşı', + + 'settings.appearance.dashOrder': 'İdarə panelinin sırası', + 'settings.appearance.dashOrder.hint': + 'Telefonun idarə panelində səyahət siyahısı və vidcetlərin düzülüş sırasını dəyişin. Seçilmiş səyahət həmişə yuxarıda qalır.', + 'settings.appearance.dashOrder.trips': 'Səyahətlər', + 'settings.appearance.dashOrder.hidden': 'Gizlədilib', + + 'settings.general.languageRegion': 'Dil və region', + 'settings.general.travelMap': 'Səyahət və xəritə', + 'settings.general.startup': 'Başlanğıc', + 'settings.startPage': 'Başlanğıc səhifəsi', + 'settings.startPageDashboard': 'İdarə paneli', + 'settings.startPageActiveTrip': 'Aktiv səyahət', + 'settings.startPageHint': + 'TREK birbaşa bu gün davam edən və ya qarşıdan gələn növbəti səyahəti açır. Bu, idarə panelində önə çıxarılan səyahətlə eynidir.', + 'settings.startTripTab': 'Başlanğıc tabı', + 'settings.startTripTabHint': + 'Səyahət açıldıqda göstərilən tab. Deaktiv etdiyiniz əlavəyə aiddirsə, əvəzində plan görünüşü açılır.', + + // ── Offline (#1135) ──────────────────────────────────────────────────────── + 'settings.offline.cache.title': 'Oflayn keş', + 'settings.offline.mode.title': 'Oflayn rejim', + 'settings.offline.mode.force': 'Oflayn rejimi məcburi aktivləşdir', + 'settings.offline.mode.forceHint': + 'Yalnız keşlənmiş məlumatlarla işləyin və dəyişikliklərinizi növbəyə əlavə edin. Yenidən qoşulmaq və sinxronlaşdırmaq üçün deaktiv edin.', + 'settings.offline.mode.active': + 'Oflayn rejim aktivdir — dəyişiklikləriniz növbəyə əlavə edilib və rejimi deaktiv etdikdə sinxronlaşdırılacaq.', + + 'settings.offline.prepare.title': 'Oflayn istifadə üçün hazırla', + 'settings.offline.prepare.hint': + 'Bağlantını itirməzdən əvvəl lazım olan hər şeyi — səyahət məlumatlarını, sənədləri və xəritə plitələrini — endirin.', + 'settings.offline.prepare.button': 'Oflayn istifadə üçün endir', + 'settings.offline.prepare.running': 'Endirilir…', + 'settings.offline.prepare.done': 'Oflayn istifadə üçün hazırdır', + 'settings.offline.prepare.phase.trips': 'Səyahət məlumatları', + 'settings.offline.prepare.phase.files': 'Sənədlər', + 'settings.offline.prepare.phase.tiles': 'Xəritə plitələri', + + 'settings.offline.resync': 'İndi yenidən sinxronlaşdır', + 'settings.offline.resyncing': 'Sinxronlaşdırılır…', + 'settings.offline.storage.title': 'Oflayn saxlanılacaq məlumatlar', + 'settings.offline.storage.tiles': 'Xəritə plitələrini oflayn saxla', + 'settings.offline.storage.tilesHint': + 'Xəritə plitələri ən çox yaddaş istifadə edir. Yalnız səyahət məlumatları və sənədləri oflayn saxlamaq üçün bunu deaktiv edin.', + 'settings.offline.storage.tripsTitle': 'Səyahətlər', + 'settings.offline.storage.tripOn': 'Oflayn saxlanılır', + 'settings.offline.storage.tripOff': 'Saxlanılmır', + 'settings.offline.storage.tripFinished': + 'Bitib. Yalnız aktivləşdirsəniz oflayn saxlanılacaq.', + + 'settings.offline.notice.stored': + 'Bu cihazda {count} səyahət saxlanıldı', + 'settings.offline.notice.nothing': + 'Saxlanılacaq heç nə yoxdur. Saxlamaq istədiyiniz səyahətləri aktivləşdirin.', + 'settings.offline.notice.busy': + 'Sinxronlaşdırma artıq davam edir. Bir az sonra yenidən cəhd edin.', + 'settings.offline.notice.offline': + 'Bağlantı yoxdur. Səyahətləri oflayn istifadə üçün saxlamaq məqsədilə internetə qoşulun.', + 'settings.offline.notice.signedOut': + 'Sessiyanız başa çatıb. Sinxronlaşdırmaq üçün yenidən daxil olun.', + 'settings.offline.notice.failed': + 'Endirməni tamamlamaq mümkün olmadı. Bağlantınızı yoxlayıb yenidən cəhd edin.', + 'settings.offline.notice.loadFailed': + 'Bu cihazın oflayn yaddaşını oxumaq mümkün olmadı. Keşi təmizləmək adətən problemi həll edir.', + + 'settings.offline.clear': 'Keşi təmizlə', + 'settings.offline.clearConfirm': + 'Bütün oflayn səyahət məlumatları təmizlənsin? İnternetə qoşulduqda istənilən vaxt yenidən sinxronlaşdıra bilərsiniz.', + 'settings.offline.stats.trips': 'Keşlənmiş səyahətlər', + 'settings.offline.stats.pending': 'Gözləyən dəyişikliklər', + 'settings.offline.stats.failed': 'Uğursuz dəyişikliklər', + 'settings.offline.stats.conflicts': 'Ziddiyyətlər', + 'settings.offline.empty': + 'Hələ heç bir səyahət keşlənməyib. Sinxronlaşdırmaq üçün internetə qoşulun.', + 'settings.offline.loading': 'Yüklənir…', + + 'settings.offline.conflicts.title': 'Sinxronlaşdırma ziddiyyətləri', + 'settings.offline.conflicts.hint': + 'Oflayn etdiyiniz dəyişikliklər serverdəki daha yeni dəyişikliklərlə ziddiyyət təşkil edir. Saxlanılacaq versiyanı seçin.', + 'settings.offline.conflicts.keepMine': 'Mənim versiyamı saxla', + 'settings.offline.conflicts.keepServer': 'Server versiyasını saxla', + 'settings.offline.conflicts.mine': 'Sizin versiyanız', + 'settings.offline.conflicts.server': 'Server versiyası', + 'settings.offline.conflicts.item': '“{name}” üçün dəyişiklik', + 'settings.offline.conflicts.strategyTitle': 'Ziddiyyət yarandıqda', + 'settings.offline.conflicts.strategy.ask': 'Hər dəfə məndən soruş', + 'settings.offline.conflicts.strategy.mine': + 'Həmişə mənim versiyamı saxla', + 'settings.offline.conflicts.strategy.server': + 'Həmişə server versiyasını saxla', + + 'settings.offline.banner.offline': 'Oflayn', + 'settings.offline.banner.forced': 'Oflayn rejim', + 'settings.offline.banner.queued': 'Oflayn · növbədə {count}', + 'settings.offline.banner.syncing': '{count} sinxronlaşdırılır…', + 'settings.offline.banner.failed': + 'Sinxronlaşdırmaq mümkün olmadı: {count}', + 'settings.offline.banner.conflicts': 'Ziddiyyətlər: {count}', + + 'settings.alwaysShowRoutes': + 'Rezervasiya marşrutlarını həmişə göstər', + 'settings.alwaysShowRoutesHint': + 'Hər uçuş, qatar və digər rezervasiyanın marşrutunu xəritədə avtomatik göstərin — hər biri üçün ayrıca aktivləşdirməyə ehtiyac yoxdur.', + + // Public API keys (Settings -> Integrations) + // ── API keys: what a key may read ───────────────────────────────────────── + 'settings.apiScopes.title': 'Bu açarın oxuya biləcəyi məlumatlar', + 'settings.apiScopes.hint': + 'Bütün məlumatları görməli olan açar üçün hər şeyi aktiv saxlayın. Deaktiv etdiyiniz məlumat sadəcə cavabdan çıxarılmır, bu açar üçün tamamilə qadağan edilir.', + 'settings.apiScopes.all': 'Hər şey', + 'settings.apiScopes.noneSelected': + 'Ən azı bir sahə seçin, əks halda açar heç bir məlumatı oxuya bilməyəcək.', + 'settings.apiScopes.limited': '{total} sahədən {count}', + 'settings.apiScopes.trips': 'Səyahətlər', + 'settings.apiScopes.days': 'Günlər', + 'settings.apiScopes.places': 'Məkanlar', + 'settings.apiScopes.notes': 'Günlük qeydlər', + 'settings.apiScopes.reservations': 'Rezervasiyalar', + 'settings.apiScopes.accommodations': 'Yaşayış yerləri', + 'settings.apiScopes.travellers': 'İştirak edənlər', + 'settings.apiScopes.bucket-list': 'Arzular siyahısı', + 'settings.apiScopes.stats': 'Ümumi göstəricilər', + + 'settings.apiKeys.title': 'API açarları', + 'settings.apiKeys.description': + 'Digər proqramların səyahətlərinizi oxuya bilməsi üçün ictimai API açarları. Yalnız oxuma: açar heç nəyi dəyişdirə və ya silə bilməz.', + 'settings.apiKeys.create': 'Açar yarat', + 'settings.apiKeys.empty': + 'Hələ açar yoxdur. Digər proqramı qoşmaq üçün açar yaradın.', + 'settings.apiKeys.createdAt': 'yaradılıb', + 'settings.apiKeys.usedAt': 'son istifadə', + 'settings.apiKeys.deleteTitle': 'Açarı sil', + 'settings.apiKeys.deleteMessage': + 'Bu açardan istifadə edən hər şey dərhal işləməyi dayandıracaq. Bu əməliyyatı geri qaytarmaq mümkün deyil.', + 'settings.apiKeys.deleted': 'Açar silindi', + 'settings.apiKeys.deleteFailed': 'Açarı silmək mümkün olmadı', + 'settings.apiKeys.createFailed': 'Açar yaratmaq mümkün olmadı', + 'settings.apiKeys.copy': 'Kopyala', + 'settings.apiKeys.docsHint': + 'Açarı /api/v1 ünvanına “Authorization: Bearer ...” və ya “X-API-Key: ...” kimi göndərin.', + 'settings.apiKeys.endpoint': 'Son nöqtə', + 'settings.apiKeys.neverUsed': 'heç vaxt istifadə edilməyib', + 'settings.apiKeys.loadFailed': + 'Açarlarınızı yükləmək mümkün olmadı. Yenidən sınamaq üçün səhifəni yeniləyin.', + 'settings.apiKeys.limitReached': + 'Hesab üçün maksimum say olan {max} açarınız var. Yeni açar yaratmaq üçün artıq istifadə etmədiyiniz açarlardan birini silin.', + 'settings.apiKeys.copyFailed': + 'Kopyalamaq mümkün olmadı. Mətni seçərək əl ilə kopyalayın.', + + 'settings.apiKeys.modal.createTitle': 'API açarı yarat', + 'settings.apiKeys.modal.name': 'Ad', + 'settings.apiKeys.modal.namePlaceholder': 'məs. Dawarich', + 'settings.apiKeys.modal.nameHint': + 'Açarı daha sonra tanımağınız üçün yalnız sizə görünən ad.', + 'settings.apiKeys.modal.creating': 'Yaradılır...', + 'settings.apiKeys.modal.create': 'Yarat', + 'settings.apiKeys.modal.createdTitle': 'API açarı yaradıldı', + 'settings.apiKeys.modal.createdWarning': + 'Açarı indi kopyalayın. O, yalnız bir dəfə göstərilir və sonradan bərpa edilə bilməz.', + 'settings.apiKeys.modal.done': 'Hazır', +}; + +export default settings; \ No newline at end of file diff --git a/shared/src/i18n/az/share.ts b/shared/src/i18n/az/share.ts new file mode 100644 index 000000000..da0759a68 --- /dev/null +++ b/shared/src/i18n/az/share.ts @@ -0,0 +1,15 @@ +import type { TranslationStrings } from '../types'; +const share: TranslationStrings = { + 'share.linkTitle': 'İctimai link', + 'share.linkHint': + 'Hər kəsin daxil olmadan bu səyahətə baxa bilməsi üçün link yaradın. Yalnız oxuma rejimidir — redaktə etmək mümkün deyil.', + 'share.createLink': 'Link yarat', + 'share.deleteLink': 'Linki sil', + 'share.createError': 'Link yaratmaq mümkün olmadı', + 'share.permMap': 'Xəritə və plan', + 'share.permBookings': 'Rezervasiyalar', + 'share.permPacking': 'Baqaj', + 'share.permBudget': 'Xərclər', + 'share.permCollab': 'Çat', +}; +export default share; \ No newline at end of file diff --git a/shared/src/i18n/az/shared.ts b/shared/src/i18n/az/shared.ts new file mode 100644 index 000000000..a81d07f1c --- /dev/null +++ b/shared/src/i18n/az/shared.ts @@ -0,0 +1,20 @@ +import type { TranslationStrings } from '../types'; +const shared: TranslationStrings = { + 'shared.expired': 'Linkin vaxtı bitib və ya link etibarsızdır', + 'shared.expiredHint': 'Bu paylaşılan səyahət linki artıq aktiv deyil.', + 'shared.readOnly': 'Yalnız oxuma üçün paylaşılan görünüş', + 'shared.tabPlan': 'Plan', + 'shared.tabBookings': 'Rezervasiyalar', + 'shared.tabPacking': 'Baqaj', + 'shared.tabBudget': 'Xərclər', + 'shared.tabChat': 'Çat', + 'shared.days': 'gün', + 'shared.places': 'məkan', + 'shared.other': 'Digər', + 'shared.totalBudget': 'Ümumi xərclər', + 'shared.messages': 'mesaj', + 'shared.sharedVia': 'Paylaşım vasitəsi:', + 'shared.confirmed': 'Təsdiqlənib', + 'shared.pending': 'Gözləyir', +}; +export default shared; \ No newline at end of file diff --git a/shared/src/i18n/az/stats.ts b/shared/src/i18n/az/stats.ts new file mode 100644 index 000000000..07da068ce --- /dev/null +++ b/shared/src/i18n/az/stats.ts @@ -0,0 +1,14 @@ +import type { TranslationStrings } from '../types'; + +const stats: TranslationStrings = { + 'stats.countries': 'Ölkələr', + 'stats.cities': 'Şəhərlər', + 'stats.trips': 'Səyahətlər', + 'stats.places': 'Məkanlar', + 'stats.worldProgress': 'Dünya üzrə irəliləyiş', + 'stats.visited': 'ziyarət edilib', + 'stats.remaining': 'qalıb', + 'stats.visitedCountries': 'Ziyarət edilmiş ölkələr', +}; + +export default stats; \ No newline at end of file diff --git a/shared/src/i18n/az/storage.ts b/shared/src/i18n/az/storage.ts new file mode 100644 index 000000000..499b588e6 --- /dev/null +++ b/shared/src/i18n/az/storage.ts @@ -0,0 +1,160 @@ +import type { TranslationStrings } from '../types'; + +const storage: TranslationStrings = { + // Field labels/help — these keys are pinned by STORAGE_BACKEND_TYPES in + // @trek/shared (labelKey/helpKey); renaming one breaks the admin form. + 'storage.field.root': 'Kök qovluq', + 'storage.help.root': 'Bu saxlama sisteminin obyektləri saxladığı serverdəki mütləq yol.', + 'storage.field.endpoint': 'Son nöqtə URL-si', + 'storage.help.endpoint': + 'S3 uyğun xidmətin əsas URL-si, məsələn, https://s3.example.com və ya http://127.0.0.1:9000.', + 'storage.field.bucket': 'Bucket', + 'storage.field.accessKeyId': 'Giriş açarı ID-si', + 'storage.field.secretAccessKey': 'Gizli giriş açarı', + 'storage.field.region': 'Region', + 'storage.help.region': 'Provayderiniz xüsusi region tələb etmirsə, standart dəyəri saxlayın.', + 'storage.field.keyPrefix': 'Açar prefiksi', + 'storage.help.keyPrefix': 'Hər obyekt açarına əlavə edilən istəyə bağlı prefiks, məsələn, trek/prod.', + 'storage.field.retries': 'Təkrar cəhdlər', + 'storage.field.timeoutMs': 'Vaxt limiti (ms)', + 'storage.field.primary': 'Əsas saxlama sistemi', + 'storage.field.replicas': 'Replikalar', + // Panel chrome + 'storage.title': 'Saxlama', + 'storage.description': + 'TREK-in yüklənmiş faylları, fotoları və ehtiyat nüsxələri saxladığı yer. Yadda saxlamayana qədər heç nə dəyişmir.', + 'storage.loading': 'Yüklənir…', + 'storage.saved': 'Saxlama konfiqurasiyası yadda saxlanıldı', + 'storage.save': 'Dəyişiklikləri yadda saxla', + 'storage.unsaved': 'Yadda saxlanılmamış dəyişikliklər', + 'storage.saveConflict': + 'Saxlama tənzimləmələri siz onları yüklədikdən sonra dəyişdirilib, buna görə dəyişiklikləriniz yadda saxlanılmadı. Yenidən başlamaq üçün dəyişikliklərinizi ləğv edin və yadda saxlanılmış tənzimləmələri yenidən yükləyin.', + 'storage.discardAndReload': 'Dəyişikliklərimi ləğv et və yenidən yüklə', + 'storage.configError.banner': + 'Yadda saxlanılmış saxlama tənzimləmələrini yükləmək mümkün olmadı — yadda saxlamaq onları əvəz edəcək: {error}', + // Backends list + 'storage.backends.title': 'Saxlama sistemləri', + 'storage.backends.add': 'Saxlama sistemi əlavə et', + 'storage.backends.usedBy': 'İstifadə edənlər: {categories}', + 'storage.backends.unused': 'Heç bir kateqoriyaya təyin edilməyib', + 'storage.backends.envReadOnly': 'Mühit dəyişəni ilə müəyyən edilib — yalnız oxumaq mümkündür', + 'storage.source.built-in': 'Daxili', + 'storage.source.env': 'Mühit', + 'storage.source.settings': 'Tənzimləmələr', + 'storage.type.local': 'Yerli', + 'storage.type.s3': 'S3', + 'storage.type.mirror': 'Güzgü', + 'storage.actions.test': 'Sına', + 'storage.actions.edit': 'Redaktə et', + 'storage.actions.remove': 'Sil', + // Test-connection results + 'storage.test.running': 'Sınaqdan keçirilir…', + 'storage.test.ok': 'Bağlantı qaydasındadır', + 'storage.test.failed': 'Sınaq uğursuz oldu', + // Remove pre-check (friendly message; the server stays authoritative) + 'storage.remove.title': 'Saxlama sistemini sil', + 'storage.remove.body': + '{name} konfiqurasiyadan silinsin? Hələ də ondan asılı olan nəsə varsa, server yadda saxlama əməliyyatını rədd edəcək.', + 'storage.remove.stillAssigned': 'Hələ də bunlara təyin edilib: {categories}', + // Backend form + 'storage.form.addTitle': 'Saxlama sistemi əlavə et', + 'storage.form.editTitle': 'Saxlama sistemini redaktə et', + 'storage.form.name': 'Ad', + 'storage.form.type': 'Növ', + 'storage.form.apply': 'Tətbiq et', + 'storage.form.cancel': 'Ləğv et', + 'storage.form.duplicateName': '{name} adlı saxlama sistemi artıq mövcuddur', + // Category map + 'storage.categories.title': 'Kateqoriyalar', + 'storage.categories.default': 'standart', + 'storage.categories.reassignWarning': + 'Mövcud obyektlər köçürülmür: yeni obyektlər yeni təyin edilmiş saxlama sisteminə göndərilir, köhnələr isə olduqları yerdə qalır.', + 'storage.category.files': 'Səyahət sənədləri', + 'storage.category.journey': 'Səyahət gündəliyinin fotoları', + 'storage.category.covers': 'Üzlük şəkilləri', + 'storage.category.avatars': 'Profil şəkilləri', + 'storage.category.places': 'Məkan şəkilləri', + 'storage.category.photos-google': 'Google foto keşi', + 'storage.category.photos-trek': 'TREK foto keşi', + 'storage.category.backups': 'Ehtiyat nüsxələr', + // What each category stores — rendered under the label in the category map. + 'storage.categoryDesc.files': + 'Səyahətlərə yüklənən fayl əlavələri — biletlər, PDF-lər, rezervasiya təsdiqləri və səyahət çatında paylaşılan fayllar.', + 'storage.categoryDesc.journey': + 'Səyahət gündəliyi qeydlərinə əlavə edilmiş fotolar və kiçik təsvirlər.', + 'storage.categoryDesc.covers': + 'Unsplash-dan əldə edilən üzlüklər daxil olmaqla, səyahət və kolleksiya üzlük şəkilləri.', + 'storage.categoryDesc.avatars': 'İstifadəçi hesablarının profil şəkilləri.', + 'storage.categoryDesc.places': + 'Məkanlara və kolleksiya məkanlarına əlavə edilmiş şəkillər — yüklənmiş və ya idxal edilmiş.', + 'storage.categoryDesc.photos-google': + 'Google Places fotolarının keşlənmiş nüsxələri — yenidən əldə edilə bilər, itirilməsi təhlükəsizdir.', + 'storage.categoryDesc.photos-trek': + 'Xatirələr bölməsində istifadə edilən TREK foto xidmətindən keşlənmiş fotolar — yenidən əldə edilə bilər, itirilməsi təhlükəsizdir.', + 'storage.categoryDesc.backups': + 'Ehtiyat nüsxə paneli və ya cədvəl vasitəsilə yaradılmış server ehtiyat nüsxəsi arxivləri.', + // Health strip + 'storage.health.title': 'Vəziyyət', + 'storage.health.allClear': 'Heç bir replika xətası qeydə alınmayıb.', + 'storage.health.seedFile': + 'storage-config.json başlanğıc faylı mövcuddur, lakin nəzərə alınmır — konfiqurasiya qeydləri artıq mövcuddur. Saxlamanı buradan idarə edin.', + 'storage.health.failureLine': '{backend} üzərində {key} üçün {op} uğursuz oldu: {error}', + // Replicas-on-primary mirror UX (2026-08-20 spec) + 'storage.mirror.targets': 'Güzgü hədəfləri', + 'storage.mirror.targetsHelp': + 'Bu saxlama sisteminə edilən hər yazma əməliyyatı seçilmiş hər hədəfə də kopyalanır.', + 'storage.mirror.latencyNote': + 'Hər yükləmə zamanı replikalar bir-birinin ardınca yazılır — yavaş və ya əlçatmaz hədəf bu saxlama sistemindəki bütün kateqoriyaların hər yükləməsini ləngidir.', + 'storage.mirror.mirroredTo': 'Güzgüləndiyi hədəflər: {targets}', + 'storage.mirror.replicaOf': 'Bunların replikasıdır: {primaries}', + 'storage.mirror.cacheWarning': + 'Tövsiyə edilmir: bu kateqoriya yenidən əldə edilə bilən məzmun saxlayır — onun replikasını yaratmaq adətən lazımsızdır.', + 'storage.mirror.degenerate.duplicate-mirror': + 'İkinci güzgü {primary} sistemini əhatə edir — panel yalnız birincini idarə edir; güzgüləməni {primary} üzərindən idarə etmək üçün bunu silin.', + 'storage.mirror.degenerate.env-primary': + 'Mühit dəyişəni ilə müəyyən edilmiş saxlama sistemini əhatə edir — burada redaktə edilə bilməz.', + 'storage.mirror.degenerate.missing-primary': + 'Artıq mövcud olmayan saxlama sisteminə istinad edir.', + 'storage.remove.usedAsReplicaBy': 'Bunlar tərəfindən replika kimi istifadə edilir: {primaries}', + // Backfill + usage (backfill/stats/notifications spec) + 'storage.sync.now': 'İndi sinxronlaşdır', + 'storage.sync.running': 'Sinxronlaşdırılır… {done}/{total}', + 'storage.sync.counts': '{copied} kopyalandı · {skipped} ötürüldü · {failed} uğursuz oldu', + 'storage.sync.cancel': 'Sinxronlaşdırmanı ləğv et', + 'storage.sync.done': + 'Sinxronlaşdırma tamamlandı: {copied} kopyalandı, {deleted} silindi, {failed} uğursuz oldu', + 'storage.sync.cancelled': 'Sinxronlaşdırma ləğv edildi', + 'storage.sync.error': 'Sinxronlaşdırma uğursuz oldu: {error}', + 'storage.sync.prompt': 'Mövcud obyektlərin replikası hələ yaradılmayıb — indi sinxronlaşdırılsın?', + 'storage.sync.dismiss': 'Bağla', + 'storage.usage.line': '{objects} obyekt · {size}', + 'storage.usage.computed': 'İstifadə {age} hesablanıb', + 'storage.usage.never': 'İstifadə hələ hesablanmayıb', + 'storage.usage.refresh': 'Yenilə', + 'storage.usage.compute': 'İndi hesabla', + 'storage.usage.legacyNote': 'köhnə foto kitabxanası daxildir', + // Category migration (copy → flip → delta sweep) + 'storage.migrate.promptTitle': 'Mövcud obyektlər yeni saxlama sisteminə köçürülsün?', + 'storage.migrate.promptLine': + '{category}: {from} sistemindən {to} sisteminə {objects} obyekt ({size})', + 'storage.migrate.promptLineUnknown': + '{category}: {from} sistemindən {to} sisteminə naməlum ölçü (istifadə hələ skan edilməyib)', + 'storage.migrate.move': 'Mövcud obyektləri köçür', + 'storage.migrate.routeOnly': 'Yalnız yeni yazmaları yönləndir', + 'storage.migrate.running': '{category} köçürülür… {done}/{total}', + 'storage.migrate.done': 'Köçürmə tamamlandı: {copied} kopyalandı, {skipped} ötürüldü', + 'storage.migrate.doneFailures': + '{failed} uğursuz oldu — həmin obyektlər yeni saxlama sisteminə kopyalanmadı', + 'storage.migrate.failed': + 'Köçürmə uğursuz oldu: {error} — kateqoriya dəyişdirilmədi', + 'storage.migrate.cancelled': 'Köçürmə ləğv edildi — heç nə dəyişdirilmədi', + 'storage.migrate.reclaimable': + '{objects} obyekt ({size}) {from} üzərində qalıb — əl ilə geri qazanın', + 'storage.migrate.cancel': 'Köçürməni ləğv et', + 'storage.migrate.promptCancel': 'Ləğv et', + 'storage.migrate.queued': 'Növbədədir: {categories}', + 'storage.migrate.queueDropped': + 'Növbəti köçürməni başlatmaq mümkün olmadı — qalan növbə təmizləndi: {categories}', +}; + +export default storage; \ No newline at end of file diff --git a/shared/src/i18n/az/system_notice.ts b/shared/src/i18n/az/system_notice.ts new file mode 100644 index 000000000..f6153f1fe --- /dev/null +++ b/shared/src/i18n/az/system_notice.ts @@ -0,0 +1,108 @@ +import type { TranslationStrings } from '../types'; + +const system_notice: TranslationStrings = { + 'system_notice.v3_photos.title': '3.0 versiyasında fotoların yeri dəyişib', + 'system_notice.v3_photos.body': + '**Fotolar** bölməsi Səyahət planlayıcısından silinib. Fotolarınız təhlükəsizdir — TREK Immich və ya Synology kitabxananızı heç vaxt dəyişdirməyib.\n\nFotolar indi **Səyahət gündəliyi** əlavəsində yerləşir. Səyahət gündəliyi istəyə bağlıdır — hələ mövcud deyilsə, administratorunuzdan onu İdarəetmə → Əlavələr bölməsində aktivləşdirməsini istəyin.', + 'system_notice.v3_journey.title': 'Səyahət gündəliyi ilə tanış olun', + 'system_notice.v3_journey.body': + 'Səyahətlərinizi zaman xətləri, foto qalereyaları və interaktiv xəritələrlə zəngin səyahət hekayələri kimi sənədləşdirin.', + 'system_notice.v3_journey.cta_label': 'Səyahət gündəliyini aç', + 'system_notice.v3_journey.highlight_timeline': 'Günbəgün zaman xətti və qalereya', + 'system_notice.v3_journey.highlight_photos': 'Immich və ya Synology-dən idxal', + 'system_notice.v3_journey.highlight_share': 'Açıq paylaşın — giriş tələb olunmur', + 'system_notice.v3_journey.highlight_export': 'PDF foto kitabı kimi ixrac edin', + 'system_notice.v3_features.title': '3.0 versiyasındakı digər yeniliklər', + 'system_notice.v3_features.body': 'Bu buraxılış haqqında bilməyə dəyər daha bir neçə yenilik.', + 'system_notice.v3_features.highlight_dashboard': + 'Mobil cihazlara üstünlük verən yenilənmiş idarə paneli', + 'system_notice.v3_features.highlight_offline': 'PWA kimi tam oflayn rejim', + 'system_notice.v3_features.highlight_search': + 'Real vaxt rejimində məkan axtarışının avtomatik tamamlanması', + 'system_notice.v3_features.highlight_import': 'KMZ/KML fayllarından məkan idxalı', + 'system_notice.v3_mcp.title': 'MCP: OAuth 2.1 yeniləməsi', + 'system_notice.v3_mcp.body': + 'MCP inteqrasiyası tamamilə yenilənib. OAuth 2.1 indi tövsiyə edilən doğrulama üsuludur. Köhnə statik tokenlər (trek_…) artıq tövsiyə edilmir və gələcək buraxılışda silinəcək.', + 'system_notice.v3_mcp.highlight_oauth': 'OAuth 2.1 tövsiyə edilir (mcp-remote)', + 'system_notice.v3_mcp.highlight_scopes': '24 dəqiq tənzimlənən icazə sahəsi', + 'system_notice.v3_mcp.highlight_deprecated': 'Statik trek_ tokenləri artıq tövsiyə edilmir', + 'system_notice.v3_mcp.highlight_tools': 'Genişləndirilmiş alətlər və sorğular', + 'system_notice.v3_thankyou.title': 'Məndən şəxsi bir qeyd', + 'system_notice.v3_thankyou.body': + 'Getməzdən əvvəl bir anlıq dayanmaq istəyirəm.\n\nTREK öz səyahətlərim üçün hazırladığım kiçik əlavə layihə kimi başladı. Onun böyüyərək macəralarını planlaşdırmaq üçün indi 4 000 nəfərin etibar etdiyi bir layihəyə çevriləcəyini heç vaxt təsəvvür etməzdim. Hər ulduzu, hər problem bildirişini və hər funksiya təklifini oxuyuram. Onlar tam iş günü və universitet arasında gecə saatlarında işləməyə davam etməyimə kömək edir.\n\nBunu bilməyinizi istəyirəm: TREK həmişə açıq mənbəli, həmişə şəxsi serverinizdə işləyən və həmişə sizə məxsus olacaq. İzləmə, abunəlik və gizli şərt yoxdur. Sadəcə səyahəti sizin qədər sevən birinin hazırladığı alətdir.\n\n[jubnl](https://github.com/jubnl) üçün xüsusi təşəkkür — inanılmaz əməkdaş oldunuz. 3.0 versiyasını möhtəşəm edən xüsusiyyətlərin çoxunda sizin iziniz var. Layihə hələ tam hazır olmadığı vaxtda ona inandığınız üçün təşəkkür edirəm.\n\nXəta bildirən, bir sətri tərcümə edən, TREK-i dostu ilə paylaşan və ya sadəcə səyahət planlaşdırmaq üçün istifadə edən hər birinizə — **təşəkkür edirəm**. Bunun mövcud olmasının səbəbi sizsiniz.\n\nBirlikdə daha çox macəralara.\n\n— Maurice\n\n---\n\n[Discord icmasına qoşulun](https://discord.gg/7Q6M6jDwzf)\n\nTREK səyahətlərinizi yaxşılaşdırırsa, [kiçik bir qəhvə](https://ko-fi.com/mauriceboe) layihənin davam etməsinə həmişə kömək edir.', + 'system_notice.v3014_whitespace_collision.title': + 'Əməliyyat tələb olunur: istifadəçi hesabı ziddiyyəti', + 'system_notice.v3014_whitespace_collision.body': + '3.0.14 yeniləməsi saxlanılan hesablardakı adların əvvəlində və ya sonunda olan boşluqların yaratdığı bir və ya daha çox istifadəçi adı və ya e-poçt ziddiyyəti aşkarladı. Təsirlənmiş hesabların adları avtomatik dəyişdirildi. Hansı hesabların yoxlanılmalı olduğunu müəyyən etmək üçün server jurnallarında **[migration] WHITESPACE COLLISION** ilə başlayan sətirləri yoxlayın.', + 'system_notice.welcome_v1.title': 'TREK-ə xoş gəlmisiniz', + 'system_notice.welcome_v1.body': + 'Hamısı birində səyahət planlayıcınız. Marşrutlar yaradın, səyahətləri dostlarınızla paylaşın və onlayn və ya oflayn rejimdə planlı qalın.', + 'system_notice.welcome_v1.cta_label': 'Səyahət planlaşdır', + 'system_notice.welcome_v1.hero_alt': + 'TREK planlaşdırma interfeysinin göstərildiyi mənzərəli səyahət məkanı', + 'system_notice.welcome_v1.highlight_plan': 'İstənilən səyahət üçün günbəgün marşrutlar', + 'system_notice.welcome_v1.highlight_share': 'Səyahət yoldaşlarınızla əməkdaşlıq edin', + 'system_notice.welcome_v1.highlight_offline': 'Mobil cihazlarda oflayn işləyir', + 'system_notice.dev_test_modal.title': '[Tərtibat] Sınaq bildirişi', + 'system_notice.dev_test_modal.body': 'Bu, yalnız tərtibat üçün olan sınaq bildirişidir.', + + // Thank-you + support the project (shown once per install and once per upgrade) + 'system_notice.thank_you_support.title': 'TREK-dən istifadə etdiyiniz üçün təşəkkür edirik', + 'system_notice.thank_you_support.body': + 'TREK-i quraşdırdığınız üçün sizə qısa təşəkkür etmək istəyirəm — bu, mənim üçün həqiqətən çox şey ifadə edir.\n\nMən tək çalışan tərtibatçıyam və TREK-i boş vaxtlarımda hazırlayıram. O, əvvəlcə yalnız öz səyahətlərim üçün kiçik alət kimi başladı. O vaxtdan bəri icmanın göstərdiyi dəstək və maraq məni həqiqətən heyrətləndirib. TREK mənim tərəfimdən böyük həvəslə hazırlanır, lakin onun formalaşmasına kömək edən çoxsaylı möhtəşəm xarici iştirakçıların da əməyi var.\n\n**TREK açıq mənbəlidir və tamamilə pulsuzdur — həmişə də belə qalacaq. Ödənişli səviyyələr, abunəliklər və gizli şərtlər yoxdur. Söz verirəm.**\n\nTREK sizin üçün faydalıdırsa və inkişafını dəstəkləmək istəyirsinizsə, kiçik bir qəhvə layihəni davam etdirməyimə həqiqətən kömək edir — heç bir məcburiyyət yoxdur, lakin hər fincan gecə işlərinin davam etməsinə dəstək olur.\n\nBurada olduğunuz üçün təşəkkür edirəm.\n\n— Maurice', + 'system_notice.thank_you_support.highlight_opensource': 'GitHub-da 100% açıq mənbəlidir', + 'system_notice.thank_you_support.highlight_free': + 'Həmişə pulsuzdur — heç vaxt ödənişli səviyyə olmayacaq', + 'system_notice.thank_you_support.highlight_community': 'İcma ilə birlikdə hazırlanır', + 'system_notice.thank_you_support.cta_bmc': 'Mənə qəhvə al', + 'system_notice.thank_you_support.cta_kofi': 'Ko-fi-da dəstəklə', + + // The release modal. One stable set of keys: each big release swaps the copy in place. + 'system_notice.release_notes.eyebrow': 'Yeniləmə quraşdırıldı', + 'system_notice.release_notes.headline': 'TREK-in indi özü gördüyü dörd iş.', + 'system_notice.release_notes.intro': + 'Öz məkan API-si, başlanğıcdan sona qədər planlaşdırılan avtomobil səyahətləri, məkan tarixçənizin yenidən sizin nəzarətinizdə olması və sənədlərinizin sinxronlaşdırılması.', + 'system_notice.release_notes.features_label': 'Əsas yeniliklər', + 'system_notice.release_notes.features_aside': 'Bundan əlavə', + 'system_notice.release_notes.feature_places_title': 'TREK Places API', + 'system_notice.release_notes.feature_places_body': + 'Öz məkan API-sinə malik ilk açıq mənbəli səyahət planlayıcısı. 73,6 milyon məkan, açar və kvota yoxdur.', + 'system_notice.release_notes.feature_roadtrip_title': 'Avtomobil səyahəti əlavəsi', + 'system_notice.release_notes.feature_roadtrip_body': + 'Sürüşü özü planlaşdırır: marşrut, məsafə, müddət və dayanacaqlar. Administrator aktivləşdirənə qədər deaktivdir.', + 'system_notice.release_notes.feature_dawarich_title': 'Dawarich inteqrasiyası', + 'system_notice.release_notes.feature_dawarich_body': + 'Google Timeline xidmətinin şəxsi serverdə işləyən alternativini indi TREK daxilində oxumaq mümkündür. TREK məlumatları yalnız oxuyur.', + 'system_notice.release_notes.footnote': + 'Bundan əlavə, TREK-in digər bölmələrində çoxsaylı kiçik dəyişikliklər var.', + 'system_notice.release_notes.notes_label': 'Buraxılış qeydləri', + 'system_notice.release_notes.note_eyebrow': 'Layihə rəhbərindən qeyd', + 'system_notice.release_notes.note_title': + 'TREK-i inkişaf etdirməyə davam etməyimin səbəbi sizsiniz.', + 'system_notice.release_notes.note_body': + 'TREK öz səyahətlərim üçün işdən sonra hazırladığım kiçik alət kimi başladı, çünki onları planlaşdırmaq üçün daha yaxşı üsul istəyirdim. O, böyüməyi heç vaxt dayandırmadı. İstifadə etdiyiniz demək olar ki, hər şey gecə saatlarında, həftə sonlarında, qatarlarda və tam iş günü ilə yanaşı hazırlanıb. Sakitcə düşünüb bunları kimsənin nə vaxtsa açıb istifadə edib-etməyəcəyini sorğuladığım çoxlu axşamlar olub.', + 'system_notice.release_notes.promise_label': 'Vəd', + 'system_notice.release_notes.promise_lead': 'TREK həmişə pulsuz qalacaq.', + 'system_notice.release_notes.promise_text': + 'Hər funksiya və hər yeniləmə hər kəs üçün olacaq. Ödənişli səviyyələr, abunəliklər və gizli şərtlər yoxdur.', + 'system_notice.release_notes.note_body_after': + 'Sonra siz gəldiniz. Bir neçə ay ərzində minlərlə oldunuz: ulduzlar, xəta bildirişləri, bilmədiyim dillərə tərcümələr və heç vaxt görüşmədiyim insanlardan pull request-lər. Mən hələ də hər səhər ilk olaraq reyestri yoxlayıram və bunlar hələ də tamamilə real görünmür.', + 'system_notice.release_notes.note_closing': + 'Burada olduğunuz üçün təşəkkür edirəm. — Maurice', + 'system_notice.release_notes.support_lead': + 'TREK pulsuzdur və həmişə belə qalacaq, lakin serverlər, domenlər və çoxsaylı gecə işləri pulsuz deyil.', + 'system_notice.release_notes.support_text': + 'TREK səyahətlərinizdə öz yerini qazanıbsa, mənə qəhvə alın və növbəti buraxılışın hazırlanmasına kömək edin.', + 'system_notice.release_notes.cta_bmc': 'Mənə qəhvə al', + 'system_notice.release_notes.cta_kofi': 'Ko-fi-da dəstəklə', + 'system_notice.pager.prev': 'Əvvəlki bildiriş', + 'system_notice.pager.next': 'Növbəti bildiriş', + 'system_notice.pager.counter': '{current} / {total}', + 'system_notice.pager.goto': '{n}-ci bildirişə keç', + 'system_notice.pager.position': '{total} bildirişdən {current}-cisi', + 'system_notice.release_notes.feature_docsync_title': 'Sənəd sinxronizasiyası', + 'system_notice.release_notes.feature_docsync_body': + 'Paperless-ngx, Papra, Nextcloud, OpenCloud və Synology Drive. Səyahət sənədləri artıq istifadə etdiyiniz saxlama xidməti ilə hər iki istiqamətdə ötürülür.', +}; + +export default system_notice; \ No newline at end of file diff --git a/shared/src/i18n/az/todo.ts b/shared/src/i18n/az/todo.ts new file mode 100644 index 000000000..8aed3cf20 --- /dev/null +++ b/shared/src/i18n/az/todo.ts @@ -0,0 +1,41 @@ +import type { TranslationStrings } from '../types'; + +const todo: TranslationStrings = { + 'todo.emptyFiltered': 'Bu filtrə uyğun tapşırıq yoxdur', + 'todo.subtab.packing': 'Baqaj siyahısı', + 'todo.subtab.todo': 'Tapşırıqlar', + 'todo.completed': 'tamamlanıb', + 'todo.filter.all': 'Hamısı', + 'todo.filter.open': 'Açıq', + 'todo.filter.done': 'Tamamlanıb', + 'todo.uncategorized': 'Siyahısız', + 'todo.namePlaceholder': 'Tapşırığın adı', + 'todo.descriptionPlaceholder': 'Təsvir (istəyə bağlı)', + 'todo.unassigned': 'Təyin edilməyib', + 'todo.noCategory': 'Siyahı yoxdur', + 'todo.hasDescription': 'Təsviri var', + 'todo.addItem': 'Yeni tapşırıq əlavə et', + 'todo.sidebar.sortBy': 'Sırala', + 'todo.priority': 'Prioritet', + 'todo.newCategoryLabel': 'yeni', + 'todo.newCategory': 'Siyahının adı', + 'todo.addCategory': 'Siyahı əlavə et', + 'todo.newItem': 'Yeni tapşırıq', + 'todo.empty': 'Hələ tapşırıq yoxdur. Başlamaq üçün tapşırıq əlavə edin!', + 'todo.filter.my': 'Mənim tapşırıqlarım', + 'todo.filter.overdue': 'Vaxtı keçmiş', + 'todo.sidebar.tasks': 'Tapşırıqlar', + 'todo.sidebar.categories': 'Siyahılar', + 'todo.detail.title': 'Tapşırıq', + 'todo.detail.description': 'Təsvir', + 'todo.detail.category': 'Siyahı', + 'todo.detail.dueDate': 'Son tarix', + 'todo.detail.assignedTo': 'Təyin edilən şəxslər', + 'todo.detail.delete': 'Sil', + 'todo.detail.save': 'Dəyişiklikləri yadda saxla', + 'todo.sortByPrio': 'Prioritet', + 'todo.detail.priority': 'Prioritet', + 'todo.detail.noPriority': 'Heç biri', + 'todo.detail.create': 'Tapşırıq yarat', +}; +export default todo; \ No newline at end of file diff --git a/shared/src/i18n/az/transport.ts b/shared/src/i18n/az/transport.ts new file mode 100644 index 000000000..1ea3d8ec1 --- /dev/null +++ b/shared/src/i18n/az/transport.ts @@ -0,0 +1,10 @@ +import type { TranslationStrings } from '../types'; + +const transport: TranslationStrings = { + 'transport.addTransport': 'Nəqliyyat əlavə et', + 'transport.modalTitle.create': 'Nəqliyyat əlavə et', + 'transport.modalTitle.edit': 'Nəqliyyatı redaktə et', + 'transport.title': 'Nəqliyyat', + 'transport.addManual': 'Nəqliyyat', +}; +export default transport; \ No newline at end of file diff --git a/shared/src/i18n/az/trip.ts b/shared/src/i18n/az/trip.ts new file mode 100644 index 000000000..fc17e5248 --- /dev/null +++ b/shared/src/i18n/az/trip.ts @@ -0,0 +1,112 @@ +import type { TranslationStrings } from '../types'; + +const trip: TranslationStrings = { + 'trip.tabs.plan': 'Plan', + 'trip.tabs.transports': 'Nəqliyyat', + 'trip.tabs.reservations': 'Rezervasiyalar', + 'trip.tabs.reservationsShort': 'Rezervasiya', + 'trip.tabs.packing': 'Baqaj siyahısı', + 'trip.tabs.packingShort': 'Baqaj', + 'trip.tabs.lists': 'Siyahılar', + 'trip.tabs.listsShort': 'Siyahılar', + 'trip.tabs.budget': 'Xərclər', + 'trip.tabs.files': 'Fayllar', + + 'trip.loading': 'Səyahət yüklənir...', + 'trip.loadingPhotos': 'Məkan fotoları yüklənir...', + 'trip.loadingSteps.pack': 'Çantalarınız hazırlanır...', + 'trip.loadingSteps.road': 'Yola çıxırıq...', + 'trip.loadingSteps.arrive': 'Az qaldı...', + + 'trip.mobilePlan': 'Plan', + 'trip.mobilePlaces': 'Məkanlar', + + 'trip.toast.placeUpdated': 'Məkan yeniləndi', + 'trip.toast.tripUpdated': 'Səyahət yeniləndi', + 'trip.toast.placeAdded': 'Məkan əlavə edildi', + 'trip.toast.placeDeleted': 'Məkan silindi', + 'trip.toast.selectDay': 'Əvvəlcə bir gün seçin', + 'trip.toast.assignedToDay': 'Məkan günə təyin edildi', + 'trip.toast.loadError': 'Səyahəti yükləmək mümkün olmadı', + 'trip.toast.reorderError': 'Sıralamanı dəyişmək mümkün olmadı', + 'trip.toast.reservationUpdated': 'Rezervasiya yeniləndi', + 'trip.toast.reservationAdded': 'Rezervasiya əlavə edildi', + 'trip.toast.deleted': 'Silindi', + + 'trip.confirm.deletePlace': 'Bu məkanı silmək istədiyinizə əminsiniz?', + 'trip.confirm.deletePlaces': '{count} məkan silinsin?', + 'trip.toast.placesDeleted': '{count} məkan silindi', + + 'trip.invite.linkTitle': 'Səyahət dəvət linki', + 'trip.invite.linkHint': + 'Bu linki açan istənilən TREK istifadəçisi səyahətə üzv kimi qoşulacaq. Köhnə linki etibarsız etmək üçün yenisini yaradın.', + 'trip.invite.create': 'Dəvət linki yarat', + 'trip.invite.regenerate': 'Yenidən yarat', + 'trip.invite.disable': 'Deaktiv et', + 'trip.invite.joinHeading': 'Bu səyahətə qoşulun', + 'trip.invite.joinPrompt': 'Siz “{title}” səyahətinə dəvət edilmisiniz.', + 'trip.invite.joinCta': 'Səyahətə qoşul', + 'trip.invite.joining': 'Qoşulur…', + 'trip.invite.invalidTitle': 'Dəvət əlçatan deyil', + 'trip.invite.invalid': 'Bu dəvət linki etibarsızdır və ya vaxtı bitib.', + 'trip.invite.backToDashboard': 'İdarə panelinə qayıt', + + 'transit.title': 'İctimai nəqliyyat', + 'transit.from': 'Haradan', + 'transit.to': 'Haraya', + 'transit.searchStop': 'Dayanacaq və ya stansiya axtarın…', + 'transit.swap': 'Yerlərini dəyiş', + 'transit.depart': 'Yola düşmə', + 'transit.arrive': 'Çatma', + 'transit.mode.rail': 'Qatar', + 'transit.mode.subway': 'Metro', + 'transit.mode.tram': 'Tramvay', + 'transit.mode.bus': 'Avtobus', + 'transit.mode.ferry': 'Bərə', + 'transit.mode.cable': 'Kanat yolu', + 'transit.pref.best': 'Ən yaxşı marşrut', + 'transit.pref.transfers': 'Daha az dəyişmə', + 'transit.pref.walking': 'Daha az piyada yol', + 'transit.search': 'Axtar', + 'transit.searching': 'Axtarılır…', + 'transit.searchError': 'Marşrut axtarışı uğursuz oldu. Yenidən cəhd edin.', + 'transit.noResultsVia': + '{provider} vasitəsilə uyğun bağlantı tapılmadı. Başqa vaxt və ya filtrlər seçin.', + 'transit.noResults': + 'Uyğun bağlantı tapılmadı. Başqa vaxt və ya filtrlər seçin.', + 'transit.direct': 'Birbaşa', + 'transit.transfers': '{count} dəyişmə', + 'transit.min': '{count} dəq.', + 'transit.stops': '{count} dayanacaq', + 'transit.walkTo': '{name} istiqamətinə piyada gedin', + 'transit.platform': 'Platforma {track}', + 'transit.adding': 'Əlavə edilir…', + 'transit.addToDay': 'Günə əlavə et', + 'transit.itinerary': 'Marşrut planı', + 'transit.attribution': 'Marşrut məlumatlarının mənbəyi:', + + 'transport.modeManual': 'Əl ilə', + 'transport.modeAutomated': 'Avtomatik', + + 'transit.sectionTitle': 'Avtomatik ictimai nəqliyyat', + 'transit.changeRoute': 'Marşrutu dəyiş', + 'transit.editDetails': 'Təfərrüatları redaktə et', + 'transit.journey': 'İctimai nəqliyyatla səfər', + 'transit.pickDay': 'Bağlantıları axtarmaq üçün bir gün seçin.', + 'transit.noItinerary': + 'Bu qeyddə saxlanılmış marşrut yoxdur — marşrut axtarmaq üçün “Marşrutu dəyiş” seçimindən istifadə edin.', + 'transit.durationLabel': 'Müddət', + 'transit.transfersLabel': 'Dəyişmələr', + 'transit.walkLabel': 'Piyada', + 'transit.searchHint': + 'Real bağlantıları axtarın və birbaşa günə əlavə edin — məlumatlar Transitous tərəfindən təmin edilir.', + + 'trip.confirm.deletePlaceNight': + 'Bu, həmçinin “{name}” məkanında rezervasiya edilmiş qalmanı silir.', + 'trip.confirm.deletePlaceBooked': + 'Bu, həmçinin “{name}” məkanında rezervasiya edilmiş qalmanı, “{booking}” rezervasiyasını və onunla əlaqəli bütün xərcləri silir.', + 'trip.confirm.deletePlaceBookedSame': + 'Bu, həmçinin “{name}” məkanında rezervasiya edilmiş qalmanı, onun rezervasiyasını və əlaqəli bütün xərcləri silir.', +}; + +export default trip; \ No newline at end of file diff --git a/shared/src/i18n/az/trips.ts b/shared/src/i18n/az/trips.ts new file mode 100644 index 000000000..4d1615816 --- /dev/null +++ b/shared/src/i18n/az/trips.ts @@ -0,0 +1,16 @@ +import type { TranslationStrings } from '../types'; + +const trips: TranslationStrings = { + 'trips.memberRemoved': '{username} çıxarıldı', + 'trips.memberRemoveError': 'Üzvü çıxarmaq mümkün olmadı', + 'trips.memberAdded': '{username} əlavə edildi', + 'trips.memberAddError': 'Üzvü əlavə etmək mümkün olmadı', + 'trips.reminder': 'Xatırlatma', + 'trips.reminderNone': 'Heç biri', + 'trips.reminderDay': 'gün', + 'trips.reminderDays': 'gün', + 'trips.reminderCustom': 'Fərdi', + 'trips.reminderDaysBefore': 'gün əvvəl xatırlat', + 'trips.reminderDisabledHint': 'Səyahət xatırlatmaları deaktiv edilib. Onları Admin > Tənzimləmələr > Bildirişlər bölməsində aktivləşdirin.', +}; +export default trips; diff --git a/shared/src/i18n/az/undo.ts b/shared/src/i18n/az/undo.ts new file mode 100644 index 000000000..2bd8b2f6c --- /dev/null +++ b/shared/src/i18n/az/undo.ts @@ -0,0 +1,26 @@ +import type { TranslationStrings } from '../types'; + +const undo: TranslationStrings = { + 'undo.button': 'Geri qaytar', + 'undo.tooltip': 'Geri qaytar: {action}', + 'undo.assignPlace': 'Məkan günə təyin edildi', + 'undo.removeAssignment': 'Məkan gündən çıxarıldı', + 'undo.reorder': 'Məkanlar yenidən sıralandı', + 'undo.optimize': 'Marşrut optimallaşdırıldı', + 'undo.deletePlace': 'Məkan silindi', + 'undo.deletePlaces': 'Məkanlar silindi', + 'undo.changeCategory': 'Kateqoriya dəyişdirildi', + 'undo.moveDay': 'Məkan başqa günə köçürüldü', + 'undo.lock': 'Məkan kilidinin vəziyyəti dəyişdirildi', + 'undo.importGpx': 'GPX idxalı', + 'undo.importKeyholeMarkup': 'KMZ/KML idxalı', + 'undo.importFiles': 'Fayl idxalı', + 'undo.importGoogleList': 'Google Maps idxalı', + 'undo.importNaverList': 'Naver Maps idxalı', + 'undo.importBooking': 'Rezervasiya təsdiqinin idxalı', + 'undo.addPlace': 'Məkan əlavə edildi', + 'undo.done': 'Geri qaytarıldı: {action}', + 'undo.failed': 'Geri qaytarmaq mümkün olmadı: {action}', +}; + +export default undo; \ No newline at end of file diff --git a/shared/src/i18n/az/vacay.ts b/shared/src/i18n/az/vacay.ts new file mode 100644 index 000000000..07e39ecae --- /dev/null +++ b/shared/src/i18n/az/vacay.ts @@ -0,0 +1,150 @@ +import type { TranslationStrings } from '../types'; + +const vacay: TranslationStrings = { + 'schoolCatalog.refreshError': 'Dəyişiklik yadda saxlanıldı, lakin siyahını yeniləmək mümkün olmadı. Siyahını yenidən yükləyin.', + 'schoolCatalog.title': 'Məktəb tətilləri', + 'schoolCatalog.hint': 'Paylaşılan məktəb tətili regionlarını idarə edin. Hər kəs onları məzuniyyət tənzimləmələrində seçə bilər.', + 'schoolCatalog.periodHint': 'Başlanğıc və bitmə tarixləri daxildir. Hər tədris ili üçün tətil dövrləri əlavə edin.', + 'schoolCatalog.region': 'Region və ya məktəb dairəsi', + 'schoolCatalog.name': 'Tətilin adı', + 'schoolCatalog.start': 'Başlanğıc tarixi', + 'schoolCatalog.end': 'Bitmə tarixi', + 'schoolCatalog.addPeriod': 'Tətil dövrü əlavə et', + 'schoolCatalog.invalid': 'Adları və tarixləri yoxlayın.', + 'schoolCatalog.discard': 'Yadda saxlanılmamış dəyişikliklərdən imtina edilsin?', + 'schoolCatalog.country': 'Ölkə', + 'schoolCatalog.deleteHint': 'Əvvəlcə regionları silin. Təqvimlərdə istifadə olunan regionlar silinə bilməz.', + 'schoolCatalog.deleteCountry': 'Ölkəni sil', + 'schoolCatalog.addCountry': 'Ölkə əlavə et', + 'schoolCatalog.code': 'Ölkə kodu (məs. US)', + 'schoolCatalog.empty': 'Hələ region yoxdur.', + 'schoolCatalog.addRegion': 'Region əlavə et', + 'schoolCatalog.offline': 'Məktəb tətillərini idarə etmək üçün internetə qoşulun.', + 'schoolCatalog.loadError': 'Məktəb tətili regionlarını yükləmək mümkün olmadı. Yenidən sınamaq üçün tənzimləmələri təkrar açın.', + 'schoolCatalog.retry': 'Yenidən cəhd et', + 'vacay.subtitle': 'Məzuniyyət günlərini planlaşdırın və idarə edin', + 'vacay.settings': 'Tənzimləmələr', + 'vacay.year': 'İl', + 'vacay.addYear': 'Növbəti ili əlavə et', + 'vacay.addPrevYear': 'Əvvəlki ili əlavə et', + 'vacay.removeYear': 'İli sil', + 'vacay.removeYearConfirm': '{year} silinsin?', + 'vacay.removeYearHint': 'Bu ilə aid bütün məzuniyyət qeydləri və şirkət tətil günləri həmişəlik silinəcək.', + 'vacay.remove': 'Sil', + 'vacay.persons': 'Şəxslər', + 'vacay.noPersons': 'Heç bir şəxs əlavə edilməyib', + 'vacay.addPerson': 'Şəxs əlavə et', + 'vacay.editPerson': 'Şəxsi redaktə et', + 'vacay.removePerson': 'Şəxsi sil', + 'vacay.removePersonConfirm': '{name} silinsin?', + 'vacay.removePersonHint': 'Bu şəxsin bütün məzuniyyət qeydləri həmişəlik silinəcək.', + 'vacay.personName': 'Ad', + 'vacay.personNamePlaceholder': 'Adı daxil edin', + 'vacay.color': 'Rəng', + 'vacay.add': 'Əlavə et', + 'vacay.legend': 'İşarələr', + 'vacay.publicHoliday': 'Rəsmi bayram', + 'vacay.companyHoliday': 'Şirkət tətili', + 'vacay.weekend': 'Həftəsonu', + 'vacay.modeVacation': 'Məzuniyyət', + 'vacay.modeCompany': 'Şirkət tətili', + 'vacay.modeHalf': 'Yarım gün', + 'vacay.modeHalfHint': 'Yarım məzuniyyət günlərini qeyd edin', + 'vacay.fullDay': 'Tam gün', + 'vacay.modeComp': 'Kompensasiya / çevik gün', + 'vacay.modeCompHint': 'Kompensasiya və ya çevik günləri qeyd edin (pulsuzdur — məzuniyyət günündən istifadə edilmir)', + 'vacay.compHalf': 'Yarım kompensasiya günü', + 'vacay.entitlement': 'Məzuniyyət limiti', + 'vacay.entitlementDays': 'Gün', + 'vacay.used': 'İstifadə edilib', + 'vacay.remaining': 'Qalıb', + 'vacay.carriedOver': '{year} ilindən', + 'vacay.blockWeekends': 'Həftəsonlarını blokla', + 'vacay.blockWeekendsHint': 'Həftəsonu günlərinə məzuniyyət qeydi əlavə edilməsinin qarşısını alın', + 'vacay.weekendDays': 'Həftəsonu günləri', + 'vacay.mon': 'B.e.', + 'vacay.tue': 'Ç.a.', + 'vacay.wed': 'Ç.', + 'vacay.thu': 'C.a.', + 'vacay.fri': 'C.', + 'vacay.sat': 'Ş.', + 'vacay.sun': 'B.', + 'vacay.publicHolidays': 'Rəsmi bayramlar', + 'vacay.publicHolidaysHint': 'Rəsmi bayramları təqvimdə işarələyin', + 'vacay.schoolHolidays': 'Məktəb tətilləri', + 'vacay.schoolHolidaysHint': 'Məktəb tətillərini təqvimdə ayrıca vizual lay kimi göstərin', + 'vacay.selectCountry': 'Ölkə seçin', + 'vacay.selectRegion': 'Region seçin (tələb olunur)', + 'vacay.addCalendar': 'Təqvim əlavə et', + 'vacay.calendarLabel': 'Etiket (istəyə bağlı)', + 'vacay.calendarColor': 'Rəng', + 'vacay.noCalendars': 'Hələ bayram təqvimi əlavə edilməyib', + 'vacay.noSchoolCalendars': 'Hələ məktəb tətili təqvimi əlavə edilməyib', + 'vacay.companyHolidays': 'Şirkət tətilləri', + 'vacay.companyHolidaysHint': 'Şirkətin ümumi tətil günlərini işarələməyə icazə verin', + 'vacay.companyHolidaysNoDeduct': 'Şirkət tətilləri məzuniyyət günlərindən çıxılmır.', + 'vacay.weekStart': 'Həftənin başlanğıcı', + 'vacay.weekStartHint': 'Təqvim həftəsinin bazar ertəsi və ya bazar günü başlayacağını seçin', + 'vacay.carryOver': 'Növbəti ilə keçir', + 'vacay.carryOverHint': 'Qalan məzuniyyət günlərini avtomatik olaraq növbəti ilə keçirin', + 'vacay.carriedOverPrevPeriod': 'əvvəlki dövrdən', + 'vacay.compUsedCount': '{count} kompensasiya / çevik gün', + 'vacay.yearType': 'Məzuniyyət ili', + 'vacay.yearTypeHint': 'Məzuniyyət ilinin nə vaxt başladığını seçin — limit, istifadə və növbəti dövrə keçirmə buna əsaslanır', + 'vacay.yearTypeCalendar': 'Təqvim ili', + 'vacay.yearTypeFiscal': 'Maliyyə ili', + 'vacay.yearTypeAnniversary': 'İşə qəbul tarixi', + 'vacay.yearStartMonth': 'Başlanğıc ayı', + 'vacay.yearStartDay': 'Gün', + 'vacay.hireDate': 'İşə qəbul tarixi', + 'vacay.hireDateHint': 'İşə qəbul tarixinizi seçin — məzuniyyət ili hər il həmin gündə başlayacaq.', + 'vacay.yearWindow': '{year}: {window}', + 'vacay.sharing': 'Paylaşım', + 'vacay.sharingHint': 'Məzuniyyət planınızı digər TREK istifadəçiləri ilə paylaşın', + 'vacay.owner': 'Sahib', + 'vacay.shareEmailPlaceholder': 'TREK istifadəçisinin e-poçtu', + 'vacay.shareSuccess': 'Plan uğurla paylaşıldı', + 'vacay.shareError': 'Planı paylaşmaq mümkün olmadı', + 'vacay.dissolve': 'Birləşdirməni ləğv et', + 'vacay.dissolveHint': 'Təqvimləri yenidən ayırın. Qeydləriniz saxlanılacaq.', + 'vacay.dissolveAction': 'Ayır', + 'vacay.dissolved': 'Təqvim ayrıldı', + 'vacay.fusedWith': 'Birləşdirilib:', + 'vacay.you': 'siz', + 'vacay.noData': 'Məlumat yoxdur', + 'vacay.changeColor': 'Rəngi dəyiş', + 'vacay.inviteUser': 'İstifadəçi dəvət et', + 'vacay.inviteHint': 'Birləşdirilmiş məzuniyyət təqvimini paylaşmaq üçün başqa TREK istifadəçisini dəvət edin.', + 'vacay.selectUser': 'İstifadəçi seçin', + 'vacay.sendInvite': 'Dəvət göndər', + 'vacay.inviteSent': 'Dəvət göndərildi', + 'vacay.inviteError': 'Dəvəti göndərmək mümkün olmadı', + 'vacay.pending': 'gözləyir', + 'vacay.noUsersAvailable': 'Əlçatan istifadəçi yoxdur', + 'vacay.accept': 'Qəbul et', + 'vacay.decline': 'Rədd et', + 'vacay.acceptFusion': 'Qəbul et və birləşdir', + 'vacay.inviteTitle': 'Birləşdirmə sorğusu', + 'vacay.inviteWantsToFuse': 'sizinlə məzuniyyət təqvimini paylaşaraq birləşdirmək istəyir.', + 'vacay.fuseInfo1': 'Hər ikiniz bütün məzuniyyət qeydlərini bir paylaşılan təqvimdə görəcəksiniz.', + 'vacay.fuseInfo2': 'Hər iki tərəf bir-biri üçün qeydlər yarada və onları redaktə edə bilər.', + 'vacay.fuseInfo3': 'Hər iki tərəf qeydləri silə və məzuniyyət limitlərini dəyişə bilər.', + 'vacay.fuseInfo4': 'Rəsmi bayramlar və şirkət tətilləri kimi tənzimləmələr paylaşılır.', + 'vacay.fuseInfo5': 'Birləşdirmə istənilən vaxt tərəflərdən biri tərəfindən ləğv edilə bilər. Qeydləriniz qorunacaq.', + 'vacay.sharedCalendars': 'Paylaşılan təqvimlər', + 'vacay.shareCalendar': 'Təqvimi paylaş', + 'vacay.shareCalendarHint': 'Başqa TREK istifadəçisinə məzuniyyət təqviminizi görməyə icazə verin. Yalnız baxış — birləşdirmə və redaktə yoxdur.', + 'vacay.sharedWithYou': 'Sizinlə paylaşılan', + 'vacay.youShareWith': 'Paylaşdığınız şəxslər', + 'vacay.viewOnly': 'yalnız baxış', + 'vacay.share': 'Paylaş', + 'vacay.shareSent': 'Təqvim paylaşıldı', + 'vacay.shareFailed': 'Təqvimi paylaşmaq mümkün olmadı', + 'vacay.stopSharing': 'Paylaşımı dayandır', + 'vacay.showInCalendar': 'Təqvimdə göstər', + 'vacay.hideFromCalendar': 'Təqvimdə gizlət', + 'vacay.sharedEmpty': 'Təqvimləri birləşdirmədən bir-birinizə göstərin.', + 'vacay.sharedLegend': 'Paylaşılan (yalnız baxış)', +}; + +export default vacay; \ No newline at end of file diff --git a/shared/src/i18n/externalNotifications/index.ts b/shared/src/i18n/externalNotifications/index.ts index b3396e166..5911b9da6 100644 --- a/shared/src/i18n/externalNotifications/index.ts +++ b/shared/src/i18n/externalNotifications/index.ts @@ -1,4 +1,5 @@ import ar from '../ar/externalNotifications'; +import az from '../az/externalNotifications'; import br from '../br/externalNotifications'; import cs from '../cs/externalNotifications'; import de from '../de/externalNotifications'; @@ -45,6 +46,7 @@ const LOCALES = { it, tr, ar, + az, id, ja, ko, diff --git a/shared/src/i18n/languages.ts b/shared/src/i18n/languages.ts index df961fae6..8720e221a 100644 --- a/shared/src/i18n/languages.ts +++ b/shared/src/i18n/languages.ts @@ -14,6 +14,7 @@ export const SUPPORTED_LANGUAGES = [ { value: 'it', label: 'Italiano', locale: 'it-IT' }, { value: 'tr', label: 'Türkçe', locale: 'tr-TR' }, { value: 'ar', label: 'العربية', locale: 'ar-SA' }, + { value: 'az', label: 'Azərbaycanca', locale: 'az-AZ' }, { value: 'id', label: 'Bahasa Indonesia', locale: 'id-ID' }, { value: 'ja', label: '日本語', locale: 'ja-JP' }, { value: 'ko', label: '한국어', locale: 'ko-KR' },