From d7a836e558f4fd806c7a471dec16c5cc692b5226 Mon Sep 17 00:00:00 2001 From: SkateSpots Date: Thu, 8 Oct 2026 17:21:03 +0700 Subject: [PATCH] i18n(uk): complete Ukrainian (100%) + add to picker --- src/components/LanguageToggle.tsx | 1 + src/i18n/uk/batch1.ts | 310 ++++- src/i18n/uk/batch2.ts | 1653 +++++++++++++++++++++++- src/i18n/uk/batch3.ts | 1294 ++++++++++++++++++- src/i18n/uk/batch4.ts | 1115 ++++++++++++++++- src/i18n/uk/batch5.ts | 1598 ++++++++++++++++++++++- src/i18n/uk/batch6.ts | 1948 ++++++++++++++++++++++++++++- src/i18n/uk/batch7.ts | 908 +++++++++++++- src/i18n/uk/batch8.ts | 629 +++++++++- src/pages/CreateTourPage.tsx | 1 + 10 files changed, 9441 insertions(+), 16 deletions(-) diff --git a/src/components/LanguageToggle.tsx b/src/components/LanguageToggle.tsx index d43b9b1..add2b1d 100644 --- a/src/components/LanguageToggle.tsx +++ b/src/components/LanguageToggle.tsx @@ -32,6 +32,7 @@ const languages: LanguageOption[] = [ { code: 'ja', name: 'Japanese', nativeName: '日本語', flag: '🇯🇵' }, { code: 'zh-CN', name: 'Chinese (Simplified)', nativeName: '简体中文', flag: '🇨🇳' }, { code: 'zh-TW', name: 'Chinese (Traditional)', nativeName: '繁體中文', flag: '🇹🇼' }, + { code: 'uk', name: 'Ukrainian', nativeName: 'Українська', flag: '🇺🇦' }, { code: 'id', name: 'Indonesian', nativeName: 'Bahasa Indonesia', flag: '🇮🇩' }, { code: 'cs', name: 'Czech', nativeName: 'Čeština', flag: '🇨🇿' }, { code: 'ro', name: 'Romanian', nativeName: 'Română', flag: '🇷🇴' }, diff --git a/src/i18n/uk/batch1.ts b/src/i18n/uk/batch1.ts index 825bb7e..373f61b 100644 --- a/src/i18n/uk/batch1.ts +++ b/src/i18n/uk/batch1.ts @@ -1,4 +1,310 @@ -/** uk — batch 1. Filled by the translation pass; empty until then. */ -const ukBatch1 = {}; +/** uk — batch 1. Filled by the Ukrainian translation pass. */ +const ukBatch1 = { + common: { + loading: "Завантаження…", + error: "Помилка", + save: "Зберегти", + cancel: "Скасувати", + delete: "Видалити", + edit: "Редагувати", + add: "Додати", + remove: "Прибрати", + create: "Створити", + submit: "Надіслати", + close: "Закрити", + back: "Назад", + next: "Далі", + done: "Готово", + search: "Пошук", + filter: "Фільтр", + sort: "Сортувати", + share: "Поділитися", + more: "Більше", + copy: "Копіювати", + copied: "Скопійовано!", + viewAll: "Переглянути все", + seeMore: "Дивитися більше", + showMore: "Показати більше", + showLess: "Показати менше", + noResults: "Нічого не знайдено", + tryAgain: "Спробувати знову", + learnMore: "Дізнатися більше", + getStarted: "Почати", + yes: "Так", + no: "Ні", + or: "або", + and: "і", + free: "Безкоштовно", + new: "Нове", + popular: "Популярне", + featured: "Рекомендоване", + verified: "Підтверджено", + sats: "sats", + clear: "Очистити", + clearFilters: "Очистити фільтри", + clearAll: "Очистити все", + hide: "Сховати", + undo: "Відмінити", + }, + nav: { + home: "Головна", + map: "Spots", + lab: "The Lab", + events: "Події", + crews: "Crews", + wallet: "Гаманець", + settings: "Налаштування", + more: "Більше", + rewards: "Винагороди", + stats: "Статистика спільноти", + about: "Про застосунок", + food: "Їжа", + marketplace: "Маркетплейс", + mints: "Mints", + appShop: "Магазин застосунку", + diy: "DIY", + trades: "Маркетплейс", + stash: "Stash", + collections: "Колекції", + contacts: "Контакти", + messages: "Повідомлення", + skaters: "Скейтери", + glossary: "Глосарій", + riderCard: "Rider Card", + supporters: "Прихильники ⚡", + newsletter: "Розсилка", + viewProfile: "Переглянути профіль", + leaderboards: "Рейтинги", + }, + chromeUi: { + skipToContent: "Перейти до вмісту", + menu: "Меню", + inBadge: "У", + loggedIn: "Ви увійшли", + profile: "Профіль", + logIn: "Увійти", + logOut: "Вийти", + notLoggedIn: "Ви не увійшли", + loggedOutPrompt: + "Увійдіть, щоб додавати Spots, відправляти Zap скейтерам і зберігати обране", + accounts: "Акаунти", + addAnotherAccount: "Додати ще один акаунт", + setStatus: "Встановити статус", + setYourStatus: "Встановіть свій статус", + status: "Статус", + addSpot: "Додати Spot", + myData: "Мої дані", + myStash: "Мій Stash", + myCollections: "Мої колекції", + viewMyProfile: "Переглянути мій профіль", + customizeNavBar: "Налаштувати панель навігації", + ecash: "Ecash", + madeWith: "Зроблено з", + forSkateCommunity: "для скейт-спільноти", + beta: "Бета", + license: "Ліцензія", + privacy: "Приватність", + collaborators: "Співробітники та друзі", + notSponsoredBy: "Не спонсорується", + errorTitle: "Не вдалося завантажити", + errorDescription: + "Мережевий запит не вдався. Перевірте з'єднання та спробуйте знову.", + tryAgain: "Спробувати знову", + weatherOn: "Погода увімк.", + weatherOff: "Погода вимк.", + trustFilter: "Фільтр довіри", + filterByTrustLevel: "Фільтрувати за рівнем довіри", + trust: { + all: "Усі користувачі", + allDesc: "Показувати контент від усіх", + verified: "Підтверджені", + verifiedDesc: "Ви стежите за ними або вони підтверджені (довіра ≥90)", + trusted: "Довірені", + trustedDesc: "Друзі друзів або NIP-05 підтверджені (довіра ≥60)", + following: "Лише ті, за ким стежу", + followingDesc: "Показувати контент лише від людей, за якими ви стежите", + followingShort: "Стежу", + }, + sort: { + recent: "Найновіші", + recentDesc: "Спочатку нові", + trust: "Найвища довіра", + trustDesc: "Найбільш довірені автори", + proximity: "Найближчі до мене", + proximityDesc: "Найближчі локації", + popular: "Найпопулярніші", + popularDesc: "Найбільше коментарів/реакцій", + zaps: "Найбільше Zap", + zapsDesc: "Найвища отримана сума", + }, + spotType: { + street: "Street", + transition: "Transition", + park: "Park", + plaza: "Plaza", + diy: "DIY", + bowl: "Bowl", + vert: "Vert", + indoor: "У приміщенні", + skatepark: "Скейт-парк", + miniramp: "Міні-рамп", + }, + }, + desktopNav: { + title: "Навігація на комп'ютері", + desc: "Виберіть, які вкладки показувати у верхній панелі та в якому порядку. Приховані вкладки залишаються в меню «Більше».", + fixed: "Закріплено", + shownInTopBar: "Показано у верхній панелі ({{count}})", + noExtraTabs: + "Додаткових вкладок не показано — усе в меню «Більше». Додайте кілька нижче.", + inMoreMenu: "У меню «Більше» ({{count}})", + moveUp: "Перемістити {{name}} вгору", + moveDown: "Перемістити {{name}} вниз", + hide: "Сховати {{name}}", + moveToMore: "Перемістити в меню «Більше»", + show: "Показати", + showInTopBar: "Показати {{name}} у верхній панелі", + showInTopBarTitle: "Показати у верхній панелі", + reset: "Скинути до стандартних", + }, + navSheet: { + title: "Налаштуйте свою панель", + desc: "Виберіть {{count}} вкладок, які використовуєте найбільше. Усе інше залишиться в меню.", + preview: "Попередній перегляд", + empty: "Порожньо", + order: "Порядок ({{done}}/{{total}})", + available: "Доступні вкладки", + full: "Панель заповнена — приберіть одну, щоб замінити", + moveUp: "Перемістити {{name}} вгору", + moveDown: "Перемістити {{name}} вниз", + login: "Увійти", + profile: "Профіль", + reset: "Скинути", + done: "Готово", + }, + pwa: { + installTitle: "Встановити SkateSpots", + installSubtitle: "Отримайте повноцінний досвід застосунку", + addToHomeScreen: "Додати на головний екран", + installApp: "Встановити застосунок", + maybeLater: "Можливо, пізніше", + gotIt: "Зрозуміло!", + benefits: { + fast: "Блискавична швидкість", + offline: "Працює офлайн", + fullAccess: "Повний доступ", + }, + iosStep1: "Торкніться кнопки «Поділитися»", + iosStep1Hint: "внизу Safari", + iosStep2: "Прокрутіть і торкніться «Додати на головний екран»", + iosStep2Hint: "у меню «Поділитися»", + iosStep3: "Торкніться «Додати», щоб встановити", + iosStep3Hint: "Застосунок з'явиться на вашому головному екрані", + androidStep1: "Торкніться кнопки меню", + androidStep1Hint: "(три крапки) у вашому браузері", + androidStep2: "Виберіть «Додати на головний екран»", + androidStep2Hint: "або «Встановити застосунок»", + androidStep3: "Підтвердьте встановлення", + androidStep3Hint: "Застосунок з'явиться на вашому головному екрані", + tagline: "Безкоштовно • Працює офлайн • Швидко й надійно", + }, + home: { + tagline: "Силами спільноти • На основі Relay", + title: "SKATE SPOTS", + subtitle: "Знаходь Spots • Зустрічайся • Вчи трюки • Підтримуй місцевих", + description: + "Справжній скейтбординг відбувається офлайн — цей інструмент допомагає його знайти.", + betaWarning: "БЕТА — У РОЗРОБЦІ • Використовуйте на власний ризик", + pwaHint: "Прогресивний вебзастосунок — встановіть на свій пристрій", + exploreMap: "Дослідити карту", + addSpot: "Додати Spot", + globalSpots: "Глобальні Spots", + openCommunity: "Відкрита спільнота", + lightningZaps: "Lightning Zap", + featuredSpots: "Рекомендовані Spots", + featuredSpotsDesc: "Перевірені спільнотою скейт-Spots з усього світу", + upcomingEvents: "Майбутні події", + upcomingEventsDesc: "Контести, зустрічі та сесії, що відбудуться незабаром", + noSpotsYet: "Поки не знайдено жодного Spot", + noSpotsHint: "Станьте першим, хто додасть скейт-Spot!", + noEventsYet: "Немає майбутніх подій", + noEventsHint: "Загляньте пізніше або створіть подію!", + theLab: "The Lab", + theLabDesc: + "Вивчайте трюки, знаходьте тренерів і підвищуйте свій рівень катання", + coaches: "Тренери", + coachesDesc: "Вчіться у досвідчених скейтерів, які допоможуть вам прогресувати", + filmers: "Оператори", + filmersDesc: "Зв'язуйтеся з операторами, щоб зняти найкращі кліпи", + findCoach: "Знайти тренера", + becomeCoach: "Стати тренером", + findFilmer: "Знайти оператора", + becomeFilmer: "Стати оператором", + viewAllSpots: "Переглянути всі Spots", + viewAllEvents: "Переглянути всі події", + createEvent: "Створити подію", + readyToShare: "Готові поділитися?", + readyToShareDesc: + "Допоможіть скейт-спільноті зростати, додаючи улюблені Spots. Кожна локація, якою ви поділитеся, допомагає іншим скейтерам знаходити нові місця для катання.", + }, + about: { + title: "Про SkateSpots", + subtitle: "Децентралізована скейтборд-спільнота", + whatIs: "Що таке SkateSpots?", + whatIsDesc: + "SkateSpots — це платформа, керована спільнотою, для пошуку місць для скейтбордингу в усьому світі. Побудована на Nostr, вона дає скейтерам справжню власність над своїми даними.", + features: "Можливості", + featuresDesc: + "Знаходьте Spots, створюйте події, зв'язуйтеся з тренерами та підтримуйте місцеві скейт-магазини — усе в одному місці.", + nostr: "Побудовано на Nostr", + nostrDesc: + "Nostr — це простий, відкритий протокол, що забезпечує справді стійку до цензури глобальну комунікацію. Ваш акаунт і дані належать вам.", + openSource: "Відкритий код", + openSourceDesc: + "SkateSpots повністю відкритий. Долучайтеся, форкайте або запускайте власний примірник.", + lightning: "Lightning-платежі", + lightningDesc: + "Відправляйте Zap улюбленим скейтерам, тренерам і творцям контенту через платежі Bitcoin Lightning.", + }, + faq: { + title: "Часті запитання", + subtitle: "Усе, що потрібно знати про SkateSpots", + whatIsNostr: "Що таке Nostr?", + whatIsNostrAnswer: + "Nostr — це відкритий протокол для децентралізованих соцмереж. На відміну від традиційних платформ, ви володієте своїми даними та ідентичністю.", + howToStart: "Як почати?", + howToStartAnswer: + "Натисніть «Зареєструватися», щоб створити новий акаунт Nostr, або «Увійти», якщо він у вас уже є. Ви можете використовувати розширення браузера, мобільний застосунок або секретний ключ.", + whatAreZaps: "Що таке Zap?", + whatAreZapsAnswer: + "Zap — це чайові в Bitcoin Lightning, які ви можете надсилати іншим користувачам. Це спосіб подякувати за чудовий контент або підтримати творців.", + howToAddSpot: "Як додати Spot?", + howToAddSpotAnswer: + "Увійдіть у свій акаунт, натисніть «Додати Spot» і заповніть деталі, включно з локацією, фото та описом.", + isItFree: "SkateSpots безкоштовний?", + isItFreeAnswer: + "Так! SkateSpots повністю безкоштовний у використанні. За бажанням ви можете надсилати Zap (чайові в Bitcoin) іншим користувачам.", + canIEditSpot: "Чи можу я редагувати або видаляти свої Spots?", + canIEditSpotAnswer: + "Так, ви можете редагувати створені вами Spots. Через децентралізовану природу Nostr запити на видалення надсилаються, але деякі Relay можуть зберігати дані.", + }, + onboarding: { + welcome: "Ласкаво просимо до SkateSpots!", + welcomeDesc: "Налаштуємо вас лише за кілька кроків.", + step1Title: "Створіть свій акаунт", + step1Desc: + "Ваші ключі Nostr генеруються. Це як пароль, яким керуєте ви.", + step2Title: "Зробіть резервну копію ключів", + step2Desc: + "Збережіть свою фразу відновлення в безпечному місці. Це єдиний спосіб відновити свій акаунт!", + step3Title: "Налаштуйте свій профіль", + step3Desc: "Розкажіть спільноті про себе.", + step4Title: "Ви готові!", + step4Desc: + "Починайте досліджувати Spots, події та спілкуватися зі скейтерами.", + skipForNow: "Пропустити поки що", + continueToApp: "Перейти до застосунку", + }, +}; export default ukBatch1; diff --git a/src/i18n/uk/batch2.ts b/src/i18n/uk/batch2.ts index 02f75bd..4f58c87 100644 --- a/src/i18n/uk/batch2.ts +++ b/src/i18n/uk/batch2.ts @@ -1,4 +1,1653 @@ -/** uk — batch 2. Filled by the translation pass; empty until then. */ -const ukBatch2 = {}; +/** uk — batch 2. Filled by the Ukrainian translation pass. */ +const ukBatch2 = { + mapUi: { + mapFooter: { + links: "Посилання", + hide: "Сховати панель посилань карти", + }, + findingSpots: "Шукаємо Spots", + loadingSpots: "Завантажуємо Spots", + loadingMap: "Завантаження карти...", + mapViewAria: "Вигляд карти", + listViewAria: "Вигляд списку", + layers: "Шари", + mapLayers: "Шари карти", + showOnMap: "Показати на карті", + showResults: "Показати результати", + quickActions: "Швидкі дії", + spots: "Spots", + shops: "Магазини", + gear: "Спорядження", + tours: "Тури", + events: "Події", + crews: "Crews", + spotType: "Тип Spot", + sortBy: "Сортувати за", + trustLevel: "Рівень довіри", + weather: "Погода", + buySellGear: "Купити/Продати спорядження", + stash: "Stash", + more: "Більше", + newHere: "Вперше тут?", + welcomeDesc: "Відкривай скейт-Spots, події та спільноту.", + getOnZapstore: "Завантажити в Zapstore", + dismiss: "Закрити", + addedBy: "Додано", + directions: "Маршрут", + viewDetails: "Детальніше", + viewDetailsArrow: "Детальніше →", + spotDetails: "Деталі Spot", + skateShop: "Скейт-магазин", + skateSpot: "Скейт-Spot", + youAreHere: "Ви тут", + conditions: "Умови", + weatherScoreSuffix: "{{score}}/100 погода", + wind: "Вітер", + humidity: "Вологість", + airQuality: "Якість повітря", + threeDayForecast: "Прогноз на 3 дні", + gearForSale: "Спорядження на продаж ({{count}})", + viewItems: "Переглянути товари →", + viewAllItems: "Переглянути всі {{count}} товарів →", + viewGear: "Переглянути спорядження →", + localTour: "Локальний тур", + meetAt: "Зустріч: {{place}}", + hours: "{{count}} годин", + level: "рівень {{level}}", + viewTour: "Переглянути тур →", + upcomingEvent: "Найближча подія", + viewEvent: "Переглянути подію →", + skateCrew: "Скейт-Crew", + members: "{{count}} учасників", + since: "З {{year}}", + viewCrew: "Переглянути Crew →", + acceptsBitcoin: "Приймає Bitcoin", + boosted: "Просунуто", + website: "Вебсайт", + offlineSavedSpots: "Офлайн · показано збережені Spots", + cantReachRelays: "Не вдається зв'язатися з Relay", + relayOnlineNoAnswer: "Ви онлайн, але спільнотний Relay зараз не відповідає.", + youreOffline: "Ви офлайн.", + savedOnDevice: "Spots, які ви вже бачили, збережені на цьому пристрої й з'являться тут.", + noSpotsMatchTitle: "Немає відповідних Spots", + noSpotsMatchDesc: "Спробуйте інший запит або скиньте фільтри.", + noSpotsMappedYet: "Ще немає Spots на карті", + noSpotsMappedDesc: "Будьте першим, хто нанесе свій Park на карту — це займе хвилину, він ваш, і наступний скейтер, який проїде повз, подякує вам.", + addFirstSpot: "Додати перший Spot", + findSpotsNearMe: "Знайти Spots поблизу", + locating: "Визначаємо місце…", + refiningLocation: "Уточнюємо ваше місце…", + refiningLocationDesc: "Центровано на вашому останньому Spot — отримуємо свіжі дані GPS.", + locatingYou: "Визначаємо ваше місце…", + locatingDesc: "Отримуємо дані GPS. Уперше це може зайняти до хвилини.", + foundYou: "Вас знайдено", + foundYouDesc: "Карту центровано на вашому місці.", + locationPermissionNeeded: "Потрібен дозвіл на місцезнаходження", + permissionNeededDesc: "Дозвольте доступ до місцезнаходження для SkateSpots у Налаштуваннях пристрою → Застосунки → SkateSpots → Дозволи, потім знову натисніть «Поблизу».", + locationTimedOut: "Час очікування місцезнаходження минув", + timeoutNativeDesc: "Не вдалося вчасно визначити місце. Якщо ви в приміщенні, GPS не бачить супутники — увімкніть мережеве визначення місцезнаходження (Налаштування → Місцезнаходження) або вийдіть надвір і спробуйте знову.", + timeoutWebDesc: "Не вдалося вчасно визначити ваше місце. Перевірте сигнал і спробуйте знову.", + noLocationProvider: "Немає постачальника геоданих", + noProviderNativeDesc: "Ваш телефон не надає геодані. На ROM із фокусом на приватність (напр. GrapheneOS) увімкніть мережеве визначення місцезнаходження в Налаштуваннях → Місцезнаходження, або переконайтеся, що GPS увімкнено, і спробуйте надворі.", + noProviderWebDesc: "Постачальник геоданих недоступний. Увімкніть служби геолокації та спробуйте знову.", + locationUnavailable: "Місцезнаходження недоступне", + unavailableNativeDesc: "Увімкніть геолокацію/GPS у налаштуваннях телефону, дозвольте SkateSpots доступ до місцезнаходження (Налаштування → Застосунки → SkateSpots → Дозволи) і спробуйте знову.", + unavailableWebDesc: "Не вдалося визначити ваше місце. Переконайтеся, що служби геолокації увімкнено.", + locationBlocked: "Місцезнаходження заблоковано", + locationBlockedDesc: "Ваш браузер заблокував доступ до місцезнаходження для цього сайту. Ось як його повернути:", + locationPlatformAndroid: "Android Chrome", + locationPlatformIos: "iOS Safari", + locationPlatformDesktop: "Desktop Chrome", + locationPlatformFirefox: "Firefox", + locationStepsAndroid: "Натисніть значок замка в адресному рядку → Налаштування сайту → Місцезнаходження → Дозволити", + locationStepsIos: "Застосунок Налаштування → Safari → Місцезнаходження → Дозволити (або натисніть кнопку «AA» в адресному рядку Safari)", + locationStepsDesktop: "Натисніть значок замка → Налаштування сайту → Місцезнаходження → Дозволити", + locationStepsFirefox: "Натисніть значок замка → З'єднання захищено → Докладніше → Дозволи → Доступ до вашого місцезнаходження → Дозволити", + gotIt: "Зрозуміло", + addSpot: "Додати Spot", + addShop: "Додати магазин", + addEvent: "Додати подію", + addSpotHereTitle: "Додати Spot тут?", + addSpotHereDesc: "Поставте мітку там, де натиснули", + sellGear: "Продати спорядження", + offerTour: "Запропонувати тур", + closeAddMenu: "Закрити меню додавання", + addMenuAria: "Додати Spot, магазин, подію, спорядження або тур", + localChat: "Локальний чат", + localChatDesc: "Живий чат для місця, на якому центрована карта. Оберіть, наскільки широко сягає канал.", + btcMapShowing: "Показано {{count}} місць, де ви можете витратити свої sats поблизу", + btcMapShow: "Показати місця, де можна витратити свої sats (через BTC Map)", + yourPrivateStash: "Ваш приватний Stash", + stashIntro: "Відстежуйте своє спорядження, призначайте ціни й знаходьте обміни з іншими скейтерами.", + encryptionRequired: "Потрібне шифрування", + encryptionRequiredDesc: "Використовуйте підписувач із підтримкою NIP-44 (Alby, nos2x, Amber).", + myStash: "Мій Stash", + encrypted: "Зашифровано", + itemsCount: "{{count}} предметів", + items: "Предмети", + wishlist: "Список бажань", + types: "Типи", + stashEmpty: "Ваш Stash порожній", + addFirstItem: "Додати перший предмет", + wishlistCount: "Список бажань ({{count}})", + myGearCount: "Моє спорядження ({{count}})", + openFullStash: "Відкрити повний Stash", + addItem: "Додати предмет", + searchSpotsPlaceholder: "Пошук Spots...", + selected: "Обрано", + noSpotsFound: "Spots не знайдено. Спробуйте інший запит.", + addingSpotsHint: "Додавання Spots допомагає користувачам знаходити вас під час перегляду конкретних локацій", + report: "Скарга", + spotSingular: "1 Spot", + spotPlural: "{{count}} Spots", + view: "Переглянути", + myCollections: "Мої колекції", + collectionsSubtitle: "Упорядковуйте улюблені Spots у персоналізовані списки", + newCollection: "Нова колекція", + loginToCreate: "Увійдіть, щоб створювати колекції", + loginToCreateDesc: "Зберігайте улюблені Spots у персоналізовані списки, як-от «Поїздка до Барселони 2024» чи «Найкращі Rails у Лос-Анджелесі»", + noCollections: "Ще немає колекцій", + noCollectionsDesc: "Створіть першу колекцію, щоб упорядковувати Spots", + createFirstCollection: "Створіть першу колекцію", + createNewCollection: "Створити нову колекцію", + createCollectionDesc: "Дайте колекції назву та необов'язковий опис", + collectionName: "Назва колекції", + collectionNamePlaceholder: "Поїздка до Барселони 2024", + descriptionOptional: "Опис (необов'язково)", + descriptionPlaceholder: "Мої улюблені Spots з поїздки до Барселони...", + creating: "Створення...", + createCollection: "Створити колекцію", + editCollection: "Редагувати колекцію", + saving: "Збереження...", + saveChanges: "Зберегти зміни", + deleteCollectionTitle: "Видалити колекцію?", + deleteCollectionDesc: "Це назавжди видалить «{{title}}». Самі Spots не постраждають.", + deleting: "Видалення...", + collectionCreated: "Колекцію створено!", + collectionCreatedDesc: "«{{title}}» готовий для Spots", + collectionCreateFailed: "Не вдалося створити колекцію", + collectionUpdated: "Колекцію оновлено!", + changesSaved: "Ваші зміни збережено", + collectionUpdateFailed: "Не вдалося оновити колекцію", + collectionDeleted: "Колекцію видалено", + collectionDeletedDesc: "«{{title}}» видалено", + collectionDeleteFailed: "Не вдалося видалити колекцію", + somethingWentWrong: "Щось пішло не так" + }, + mapPage: { + title: "Магазини та Spots", + spots: "Spots", + shops: "Магазини", + filters: "Фільтри", + listView: "Список", + mapView: "Карта", + nearMe: "Поблизу", + searchPlaceholder: "Пошук Spots...", + noSpotsInArea: "У цій області немає Spots", + zoomIn: "Збільшити", + zoomOut: "Зменшити", + myLocation: "Моє місце", + locationsFound: "Знайдено {{count}} локацій", + spotsOnly: "Лише Spots", + shopsOnly: "Лише магазини", + spotsAndShops: "Spots і магазини", + noSpotsMatch: "Жоден Spot не відповідає вашим фільтрам.", + noSpotsYet: "Ще не додано жодного Spot.", + addFirstSpot: "Додати перший Spot" + }, + spotUi: { + claim: { + areYouOwner: "Це ваш Spot?", + privateDesc: "Цей Spot позначено як приватний. Якщо він належить вам або ви ним керуєте, заявіть на нього — модератор SkateSpots підтвердить право власності, і ви візьмете оголошення під контроль.", + claimSpot: "Заявити на цей Spot", + nip05Required: "Щоб заявити на приватний Spot, потрібен підтверджений NIP-05 (доказ, що ви контролюєте ідентичність Nostr). Додайте його у профілі та поверніться.", + addNip05: "Додати NIP-05 у налаштуваннях", + pendingTitle: "Заявка на розгляді", + pendingDesc: "Вашу заявку подано. Модератор SkateSpots її розгляне — ви зможете завершити заявлення Spot, щойно її схвалять.", + approvedTitle: "Заявку схвалено", + approvedDesc: "Модератор схвалив вашу заявку. Завершіть, щоб стати власником цього Spot.", + complete: "Завершити заявлення", + submitted: "Заявку подано", + submittedDesc: "Модератор розгляне вашу заявку. Ви візьмете Spot під контроль, коли її схвалять.", + submitFailed: "Не вдалося подати заявку", + submit: "Подати заявку", + submitting: "Надсилання…", + confirmTitle: "Заявити на «{{title}}»?", + confirmIntro: "Ви просите стати власником цього приватного Spot.", + confirmBullet1: "Модератор SkateSpots розглядає запит (ми не можемо перевірити право власності, лише ключі Nostr)", + confirmBullet2: "Якщо схвалять, ви завершите заявлення, станете власником і зможете редагувати Spot", + confirmBullet3: "Початковий Spot залишається в Nostr — мережа децентралізована", + adminTitle: "Заявки на право власності в очікуванні", + adminApprove: "Схвалити", + adminApproved: "Схвалено", + adminApprovedDesc: "Тепер вони можуть завершити заявлення Spot.", + adminApproveFailed: "Не вдалося схвалити заявку", + loginRequired: "Увійдіть, щоб заявити на цей приватний Spot або подати запит на право власності." + }, + abandonedDesc: "Востаннє оновлено {{time}}. Якщо початковий власник неактивний, ви можете заявити на цей Spot, щоб підтримувати й покращувати його.", + claimedNotice: "Заявлене оголошення", + claimedNoticeDesc: "Цей Spot було повторно опубліковано новим власником після заявлення. Початкове оголошення може досі існувати окремо.", + abandonedLoginDesc: "Востаннє оновлено {{time}}. Увійдіть, щоб заявити на цей Spot і підтримувати його.", + accessDeniedDesc: "Ви можете редагувати лише Spots, які створили самі.", + accessDeniedTitle: "Доступ заборонено", + addAtLeastOneTag: "Будь ласка, додайте хоча б один тег.", + additionalDetails: "Додаткові деталі (необов'язково)", + additionalDetailsPlaceholder: "Додайте будь-який контекст, який може допомогти...", + addNewTags: "Додати нові теги:", + addNip05InSettings: "Додати NIP-05 у налаштуваннях", + addPhoto: "Додати фото", + addPhotoDesc: "Додайте фото, щоб допомогти іншим відкрити цей Spot.", + addPhotoOrDescription: "Додайте фото або опис", + addPhotoOrDescriptionDesc: "Дайте скейтерам за що зачепитися — знімок або рядок про це місце.", + addPhotos: "Додати фото", + addPhotoToSpot: "Додати фото до Spot", + adminDeleteDialogDesc: "Як адміністратор SkateSpots ви прибираєте «{{title}}». Його буде приховано в усьому застосунку для всіх, і запит на видалення надійде на Relay.", + adminDeleteReason: "Адміністратор SkateSpots видалив Spot «{{title}}»", + airQuality: "Якість повітря", + altSkateSpot: "Скейт-Spot: {{title}}", + areYouShopOwner: "Ви власник магазину?", + askBeforeSkating: "Спитайте перед катанням", + backToSpot: "Назад до Spot", + beFirstToListGear: "Будьте першим, хто виставить спорядження на цьому Spot!", + beFirstToSay: "Будьте першим, хто щось скаже.", + byAuthor: "від {{name}}", + captionPlaceholder: "Додайте підпис (необов'язково) — опишіть, що на фото, коли його знято тощо.", + chatPublicNote: "Будь-хто може це читати — повідомлення публічні й ефемерні. Для приватних розмов використовуйте Direct Messages.", + checkPinBelow: "Перевірте мітку нижче, перш ніж додавати дублікат.", + claimBullet1: "Ви стаєте власником і можете редагувати Spot", + claimBullet2: "Початковий Spot залишається (Nostr децентралізований)", + claimBullet3: "Ваша версія може з'явитися поряд з оригіналом", + claimFailed: "Не вдалося заявити", + claiming: "Заявлення...", + claimIntro: "Ви збираєтеся заявити право власності на цей Spot. Це створить вашу власну версію Spot, яку ви зможете редагувати й підтримувати.", + claimSpot: "Заявити Spot", + claimThisSpot: "Заявити на цей Spot", + claimTitle: "Заявити на «{{title}}»?", + claimWhatHappens: "Що відбувається, коли ви заявляєте:", + coachesAndFilmersAvailable: "Тренери та оператори доступні на цьому Spot", + coachesCount: "Тренери ({{count}})", + coachHere: "Тренер тут", + community: "Спільнота", + communityVerified: "Підтверджено спільнотою", + communityVerifiedTitle: "Інший скейтер зробив внесок тут (фото або звіт про стан).", + conditions: "Умови", + contactForPermission: "Зв'язатися для дозволу", + contactInfo: "Контактна інформація", + contributePhoto: "Додати фото", + contributing: "Додавання...", + couldNotSendMessage: "Не вдалося надіслати повідомлення.", + couldNotSubmit: "Не вдалося надіслати", + couldNotUploadPhoto: "Не вдалося завантажити фото. Ви можете додати його нижче.", + crewsThatSkateHere: "Crews, які катаються тут", + current: "Поточні:", + currentTags: "Поточні теги цього Spot:", + daysAgo: "{{count}} день тому", + daysAgoPlural: "{{count}} днів тому", + deleteDialogDesc: "Це назавжди видалить «{{title}}» з усіх Relay. Цю дію не можна скасувати.", + deletedSpotReason: "Видалений Spot", + deleteFailed: "Не вдалося видалити", + deleteSpot: "Видалити Spot", + deleteSpotTitle: "Видалити Spot?", + differentSpotPublishAnyway: "Це інший Spot — усе одно опублікувати", + dragDropOrClick: "Перетягніть або натисніть", + dropPhotos: "Перетягніть фото", + duplicateOne: "Є Spot у межах 60 м від вашої мітки. Якщо це те саме місце, додайте туди своє фото або звіт про стан замість створення дубліката.", + duplicateOther: "Є Spots у межах 60 м від вашої мітки. Якщо це те саме місце, додайте туди своє фото або звіт про стан замість створення дубліката.", + editSpotSeoDesc: "Редагуйте свій скейт-Spot.", + failedToContribute: "Не вдалося додати", + failedToPublish: "Не вдалося опублікувати", + failedToPublishDesc: "Щось пішло не так. Перевірте консоль для деталей.", + failedToSubmitReport: "Не вдалося надіслати звіт", + failedToSuggestTags: "Не вдалося запропонувати теги", + failedToUpdate: "Не вдалося оновити", + failedToUploadImage: "Не вдалося завантажити зображення", + failedToUploadPhoto: "Не вдалося завантажити фото", + feelsLikeTemp: "Відчувається як {{temp}}°C", + filmersCount: "Оператори ({{count}})", + filmHere: "Знімати тут", + gearSwap: "Обмін спорядженням", + geolocationNotSupported: "Геолокація не підтримується", + geolocationNotSupportedDesc: "Ваш браузер не підтримує геолокацію.", + getDirections: "Прокласти маршрут", + hangTight: "Зачекайте", + hangTightDesc: "Ваше фото ще завантажується. Воно прикріпиться за секунду.", + helpImproveSpot: "Допоможіть покращити цей Spot, додавши фото або запропонувавши теги", + hiddenByModerator: "Приховано модератором", + hiddenByModeratorDesc: "Цей Spot не показується на карті чи в пошуку. Ви все ще бачите його, бо він ваш. Редагування не поверне його — він залишається прихованим, доки модератор не скасує рішення.", + humidity: "Вологість", + imageUploaded: "Зображення завантажено", + imageUploadedDesc: "Ваше зображення успішно завантажено.", + imHere: "Я тут", + invalidCoordinates: "Недійсні координати", + invalidCoordinatesDesc: "Будь ласка, введіть дійсну широту (-90 до 90) і довготу (-180 до 180).", + invalidNpub: "Недійсний npub", + invalidNpubDesc: "Будь ласка, введіть дійсну адресу npub.", + lastReported: "востаннє {{time}}", + listGear: "Виставити спорядження", + listYourGearHere: "Виставте своє спорядження тут", + loadingChat: "Завантаження чату…", + locationError: "Помилка місцезнаходження", + locationFound: "Місцезнаходження знайдено", + locationFoundDesc: "Ваше поточне місце встановлено.", + locationRequired: "Потрібне місцезнаходження", + locationRequiredDesc: "Будь ласка, введіть координати або скористайтеся поточним місцем.", + loginRequiredTitle: "Потрібен вхід", + logInToChat: "Увійдіть, щоб приєднатися до локального чату.", + logInToContributePhotos: "Увійдіть, щоб додавати фото", + loginToEditSpot: "Вам потрібно увійти, щоб редагувати цей Spot.", + logInToReport: "Вам потрібно увійти, щоб поскаржитися на вміст.", + logInToReportStatus: "Увійдіть, щоб повідомити стан цього Spot.", + logInToSuggestTags: "Увійдіть, щоб пропонувати теги", + manageNip05ToClaim: "Керувати NIP-05 для заявлення", + meetAtSpotForPickup: "💡 Зустрічайтеся на цьому Spot для безпечної передачі", + memberOne: "{{count}} учасник", + memberOther: "{{count}} учасників", + messageFailed: "Не вдалося надіслати повідомлення", + messageMapper: "Картограф повідомлень", + messagePlaceholder: "Повідомлення цьому Spot… (спробуйте /me або /who)", + messagesHiddenOne: "{{count}} повідомлення приховано вашим фільтром довіри. Знизьте фільтр, щоб побачити більше.", + messagesHiddenOther: "{{count}} повідомлень приховано вашим фільтром довіри. Знизьте фільтр, щоб побачити більше.", + messagesHiddenShortOne: "{{count}} повідомлення приховано вашим фільтром довіри", + messagesHiddenShortOther: "{{count}} повідомлень приховано вашим фільтром довіри", + metresAway: "{{distance}} м звідси", + moderatorVouchedDesc: "Модератор переглянув цей Spot і поручився за нього. Молодець.", + monthsAgo: "{{count}} місяць тому", + monthsAgoPlural: "{{count}} місяців тому", + newOwnerNpub: "npub нового власника", + newOwnerNpubHint: "Введіть npub користувача, якому хочете передати цей Spot.", + nip05RequiredToClaim: "⚠️ Для заявлення магазинів потрібна верифікація NIP-05", + noCommunitySignalTitle: "Ще немає фото чи звіту про стан від спільноти — ніхто не підтвердив це місце.", + breakdownPhotos: "{{count}} фото", + breakdownStatus: "{{count}} звіт(ів) про стан", + breakdownComments: "{{count}} коментар(ів)", + breakdownReactions: "{{count}} реакція(й)", + breakdownCollections: "{{count}} збереження(нь)", + breakdownZaps: "{{count}} Zap(ів)", + breakdownTags: "{{count}} пропозиція(й) тегів", + breakdownCrews: "{{count}} Crew", + breakdownLab: "{{count}} профільних посилань", + verifyNudgeTitle: "Будьте першим, хто підтвердить цей Spot", + verifyNudgeBody: "Фото або «Я катався тут» — так Spot отримує підтвердження — допоможіть наступному скейтеру.", + verifyNudgeStatus: "Я катався тут", + communityChip: "Спільнота", + seenChip: "Переглянуто", + noGearListedYet: "Спорядження ще не виставлено", + noMessagesYet: "У цьому локальному каналі ще немає повідомлень. Привітайтеся — «хтось катається сьогодні ввечері?»", + noPhoto: "Без фото", + noReportsYet: "Ще немає звітів", + noTags: "Без тегів", + notASkateSpot: "Не скейт-Spot", + offerServicesHere: "💡 Запропонуйте свої послуги на цьому Spot", + photoCaptured: "Фото зроблено!", + photoCapturedDesc: "Ваше фото успішно завантажено.", + photoContributed: "Фото додано!", + photoContributedDesc: "Ваше фото додано до цього Spot.", + photosAdded: "Ваші фото додано.", + photosRecommended: "настійно рекомендується — Spots без фото залишаються позначеними як Неперевірені", + photosUploaded: "Завантажено {{count}} фото", + photoUploaded: "Фото завантажено", + photoUploadedDesc: "Додайте підпис і надішліть, щоб зробити внесок!", + photoUploadFailed: "Не вдалося завантажити фото", + pleaseTryAgain: "Будь ласка, спробуйте знову", + public: "Публічний", + publicChatTitle: "Будь-хто може читати повідомлення в цьому каналі — він публічний і незашифрований.", + recentReports: "Останні звіти", + recipientRequired: "Потрібен отримувач", + recipientRequiredDesc: "Будь ласка, введіть npub нового власника.", + removeAdmin: "Видалити (адмін)", + removeSpot: "Прибрати Spot", + removeSpotAdminTitle: "Прибрати цей Spot? (адмін)", + reportOne: "скарга", + reportContent: "Поскаржитися на вміст", + reportContentDesc: "Допоможіть зберегти спільноту безпечною, повідомляючи про неприйнятний вміст.", + reportedBySkaters: " від {{count}} скейтерів — на розгляді. Якщо це справжній Spot, додайте фото або звіт про стан, щоб підтвердити його.", + reportedNotASpot: "Поскаржилися, що це не скейт-Spot", + reportingType: "Скарга на {{type}}", + reports: "скарги", + reportShop: "Поскаржитися на магазин", + reportSpot: "Поскаржитися на Spot", + reportStatus: "Повідомити стан", + reportSubmitted: "Скаргу надіслано", + reportSubmittedDesc: "Дякуємо, що допомагаєте зберігати SkateSpots у безпеці.", + reportSubmittedLong: "Дякуємо, що допомагаєте зберігати SkateSpots у безпеці й точним. Вашу скаргу розглянуть довірені учасники спільноти.", + reportSubmittedTitle: "Скаргу надіслано", + report: { + notASkateSpot: { + label: "Не скейт-Spot", + description: "Тестовий запис або місце, зовсім не призначене для катання" + }, + fakeSpot: { + label: "Фальшивий/неіснуючий Spot", + description: "Цей Spot не існує або місце вказано неправильно" + }, + stolenPhotos: { + label: "Вкрадені/фальшиві фото", + description: "Фото — це стокові зображення або вкрадені з іншого місця" + }, + spamAd: { + label: "Спам або реклама", + description: "Промо-вміст або дубльовані оголошення" + }, + dangerousLocation: { + label: "Небезпечне місце", + description: "Приватна власність, небезпечно або незаконно для доступу" + }, + inappropriateContent: { + label: "Неприйнятний вміст", + description: "Містить образливий або дорослий вміст" + }, + impersonation: { + label: "Видача себе за іншого", + description: "Хтось видає себе за когось іншого" + }, + other: { + label: "Інше", + description: "Щось інше, не зазначене вище" + } + }, + targetType: { + spot: "Spot", + event: "Подія", + tour: "Тур", + shop: "Магазин", + user: "Користувач", + listing: "Оголошення", + coach: "Тренер", + filmer: "Оператор" + }, + sameOwner: "Той самий власник", + sameOwnerDesc: "Не можна передати поточному власнику.", + saveChanges: "Зберегти зміни", + saving: "Збереження...", + services: "Послуги", + shareSpotText: "Глянь на цей скейт-Spot: {{title}}", + shelter: "Укриття", + shelterHint: "Чи відкритий цей Spot впливу погоди? Допомагає скейтерам знайти сухі місця, коли йде дощ.", + shopClaimDesc: "Якщо він належить вам або ви ним керуєте, ви можете заявити на цей магазин, щоб підтвердити право власності та керувати оголошенням.", + shopClaimNip05Hint: "Щоб заявити на цей магазин, додайте ідентифікатор NIP-05, що відповідає домену сайту магазину.", + skatersActiveDesc: "Люди, які писали в цьому каналі за останні 24 год.", + skatersActiveOne: "{{count}} скейтер активний тут", + skatersActiveOther: "{{count}} скейтерів активні тут", + skatersSellingGear: "Скейтери на цьому Spot продають спорядження", + skateSpot: "Скейт-Spot", + somethingWentWrong: "Щось пішло не так", + spot: "Spot", + spotAdded: "Spot додано!", + spotAddedDesc: "Ваш скейт-Spot опубліковано в мережі.", + spotAddedNoPhoto: "Опубліковано — і позначено як Неперевірений, доки хтось не додасть фото. Фото Spot багато важить.", + spotChat: "Чат Spot", + spotClaimed: "Spot заявлено!", + spotClaimedDesc: "Тепер ви власник цього Spot. Ви можете редагувати його зі свого профілю.", + spotDeleted: "Spot видалено", + spotDeletedDesc: "Запит на видалення надіслано на Relay. Більшість Relay приберуть цей вміст.", + spotMayAlreadyBeOnMap: "Цей Spot, можливо, вже на карті", + spotMayAlreadyExist: "Цей Spot, можливо, вже існує", + spotMayBeAbandoned: "Spot може бути закинутий", + spotPhotoAlt: "Spot", + spotRemoved: "Spot прибрано", + spotRemovedDesc: "Цей Spot було прибрано, і його буде приховано в усьому SkateSpots.", + spotSeoDesc: "Перегляньте цей скейт-Spot на SkateSpots.", + spotStatus: "Стан Spot", + spotStatusDesc: "Чи «{{title}}» все ще катабельний? Повідомте спільноті про його поточний стан.", + spotTypeRequired: "Потрібен тип Spot", + spotTypeRequiredDesc: "Будь ласка, оберіть тип Spot, щоб скейтери знали, до чого вони під'їжджають.", + spotUpdated: "Spot оновлено!", + spotUpdatedDesc: "Ваші зміни опубліковано в мережі.", + staffVerifiedTitle: "Адміністратор SkateSpots переглянув і поручився за цей Spot.", + statusNotePlaceholder: "Необов'язково: додайте деталі (напр. «нові кноби на Ledge», «охорона виганяє після 18:00»)", + statusReported: "Стан повідомлено", + statusReportedDesc: "Дякуємо, що підтримуєте карту свіжою. Ваш звіт опубліковано.", + submitReport: "Надіслати звіт", + submitting: "Надсилання...", + suggestedByUser: "Запропоновано {{count}} користувачем", + suggestedByUsers: "Запропоновано {{count}} користувачами", + suggestedTagsContent: "Запропоновані теги для {{title}}: {{tags}}", + suggestNTags: "Запропонувати {{count}} тегів", + suggestOneTag: "Запропонувати 1 тег", + suggestTags: "Запропонувати теги", + suggestTagsDesc: "Допоможіть категоризувати цей Spot, пропонуючи відповідні теги.", + tags: "Теги", + tagsHint: "Додайте теги для особливостей, покриттів, вайбу (макс. {{max}})", + tagsSuggested: "Теги запропоновано!", + tagsSuggestedDesc: "Ваші пропозиції тегів надіслано.", + takePhoto: "Зробити фото", + threeDayForecast: "Прогноз на 3 дні", + tipTheMapper: "Подякувати картографу", + tipTheMapperDesc: "Цей Spot був корисним? Надішліть Zap, щоб подякувати картографу!", + titleRequired: "Потрібна назва", + titleRequiredDesc: "Будь ласка, введіть назву цього Spot.", + today: "Сьогодні", + tomorrow: "Завтра", + transferDesc: "Передати «{{title}}» іншому користувачу. Цю дію не можна скасувати.", + transferFailed: "Не вдалося передати", + transferOwnership: "Передати право власності", + transferRequestContent: "Запит на передачу права власності на Spot «{{title}}»", + transferRequested: "Передачу запитано", + transferRequestedDesc: "Новому власнику потрібно заявити на Spot, щоб завершити передачу.", + transferring: "Передача...", + transferSpotOwnership: "Передати право власності на Spot", + transferWarningDesc: "Після передачі ви більше не зможете редагувати чи видаляти цей Spot.", + typeToSearchTags: "Введіть для пошуку або додавання тегів...", + underReview: " — на розгляді. Якщо це справжній Spot, додайте фото або звіт про стан, щоб підтвердити його.", + untitledSpot: "Spot без назви", + unverified: "Неперевірений", + updateDetailsFor: "Оновіть деталі для {{title}}", + updateSpotDesc: "Оновіть інформацію про цей Spot. Усі поля з * обов'язкові.", + uploadAPhoto: "Завантажити фото", + uploadAPhotoHint: "Перетягніть або натисніть · JPG, PNG, WebP", + uploadedAlt: "Завантажено", + uploadFailed: "Не вдалося завантажити", + uploadingPhoto: "Завантаження фото…", + uploadPhotoFirst: "Будь ласка, спершу завантажте фото.", + uvIndex: "УФ-індекс", + verifiedBySkateSpots: "Перевірено SkateSpots", + viewPhotoFullScreen: "Переглянути фото на весь екран", + viewPhotoOf: "Фото {{n}} з {{total}}", + warning: "Попередження", + weatherConditions: "Погодні умови", + weatherOnly: "лише погода", + weatherOnlyUnconfirmed: "Лише погода. Ніхто ще не підтвердив, що це скейт-Spot, тож оцінки умов немає — додайте фото або звіт про стан, щоб підтвердити його.", + whyReporting: "Чому ви скаржитеся?", + wind: "Вітер", + yearsAgo: "{{count}} рік тому", + yearsAgoPlural: "{{count}} років тому" + }, + diyUi: { + title: "DIY — Зроби сам", + tagline: "Посібники, відкриті інструменти та креслення, щоб зробити власні Deck, рампи й бетонні Spots — а тоді знайти людей, місця й ринок до них.", + doItWithPeople: "Роби це з людьми", + backToDiy: "Назад до DIY", + calc: { + title: "Калькулятор вартості Deck", + intro: "Скільки коштує зробити Deck — праця, обладнання, матеріали, час процесу, пакування й маржа — і справедлива ціна продажу. Збережено на цьому пристрої." + }, + designer: { + title: "Конструктор Deck", + intro: "Сформуйте контур скейтборду чи лонгборду, а тоді експортуйте друкований шаблон 1:1, SVG або DXF для CNC. Збережено на цьому пристрої.", + presets: "Пресети", + dimensions: "Розміри", + shape: "Форма", + kicks: "Kicks", + hardware: "Отвори для Trucks", + width: "Макс. ширина", + wheelbase: "Wheelbase", + nose: "Довжина носа", + tail: "Довжина хвоста", + length: "Загальна довжина", + waist: "Талія", + endRound: "Округлість країв", + concave: "Concave", + thickness: "Товщина", + tailKick: "Kick хвоста", + noseKick: "Kick носа", + holeNew: "New school (2.125″)", + holeOld: "Old school (2.5″)", + holeSpacing: "New school — 2.125″ × 1.625″ (54 × 41 мм); old school — 2.5″ × 1.625″. Монтажні отвори 3/16″.", + topView: "Вигляд зверху", + sideView: "Бічний профіль", + concaveSection: "Переріз Concave", + export: "Експорт", + pdfA4: "PDF 1:1 · A4", + pdfLetter: "PDF 1:1 · Letter", + printNote: "Друкуйте PDF на 100% (без «вписати в сторінку»), а тоді склейте аркуші за хрестиками в кутах. SVG теж у натуральну величину.", + note: "Це 2D-контур, який ви обводите й вирізаєте. Для повних 3D-форм і проєктування прес-форм усе ще варто взяти справжній CAD." + }, + source: "Джерело", + comingSoon: "Незабаром", + footer: "Покрокові посібники вже в дорозі. Поки що: знайдіть людей, які будують, у The Lab, нанесіть свій Spot на карту та купуйте чи продавайте на Маркетплейсі. Працюйте безпечно — захист, рукавички та окуляри.", + categories: { + boards: "Deck", + ramps: "Рампи та дерев'яні перешкоди", + concrete: "Бетон і DIY Spots", + repairs: "Ремонт і налаштування", + tools: "Інструменти та креслення" + }, + cards: { + ossBuild: { + title: "Зібрати скейтборд", + blurb: "Покрокове виготовлення Deck — шпон, форми, преси й оздоблення." + }, + sk8cad: { + title: "SK8CAD", + blurb: "Відкритий CAD для форм Deck, Concave та проєктування прес-форм." + }, + deckCost: { + title: "Вартість і ціна Deck", + blurb: "Порахуйте матеріали, працю та справедливу ціну продажу ще до того, як почнете." + }, + deckDesigner: { + title: "Конструктор Deck", + blurb: "Сформуйте контур і надрукуйте шаблон 1:1 — або експортуйте SVG/DXF для CNC." + }, + ledgeBox: { + title: "Збудувати Ledge або бокс", + blurb: "Дерев'яна перешкода для початківців, яку можна зробити за вихідні." + }, + quarterpipe: { + title: "Збудувати quarterpipe", + blurb: "Креслення рампи, перехід і коупінг для домашнього міні." + }, + flatbar: { + title: "Збудувати flatbar", + blurb: "Дешево, портативно й найкращий спосіб вчити Rails." + }, + concreteBasics: { + title: "Основи бетону", + blurb: "Замішування, опалубка та оздоблення Ledge чи банки, що протримається." + }, + coping: { + title: "Коупінг і краї", + blurb: "Як виставити коупінг і оздобити перехід для гладкого грінду." + }, + buyParts: { + title: "Купити деталі та спорядження", + blurb: "Беріть Deck, кріплення й інструменти в продавців на Маркетплейсі." + }, + mapSpot: { + title: "Нанести DIY Spot на карту", + blurb: "Щось збудували? Додайте на карту, щоб інші могли знайти й покататися." + }, + regrip: { + title: "Переклеїти Griptape", + blurb: "Зніміть старий гріп і акуратно наклейте новий Griptape." + }, + tune: { + title: "Налаштувати Bearings і Trucks", + blurb: "Почистіть Bearings, замініть бушинги й налаштуйте геометрію Trucks." + }, + printMolds: { + title: "3D-друковані форми", + blurb: "Файли друкованих прес-форм і вирівнювальних основ від спільноти." + }, + sk8cadTools: { + title: "Інструменти для форм і вирівнювання", + blurb: "Проєктуйте форми з вбудованими вирівнювальними основами." + } + }, + actions: { + findBuilder: { + title: "Знайти будівельника", + blurb: "Будівельники рамп і DIY у The Lab, які можуть спроєктувати чи залити це для вас." + }, + findCrew: { + title: "Знайти DIY Crew", + blurb: "Crews, зосереджені на будівництві — приєднуйтеся до тих, хто втілює Spots у життя." + }, + mapSpot: { + title: "Нанести DIY Spot на карту", + blurb: "Додайте Spot, який збудували, щоб він жив на карті." + }, + sellBuilds: { + title: "Продавати свої вироби", + blurb: "Виставляйте Deck, рампи чи деталі, які робите, на Маркетплейсі." + }, + findCoach: { + title: "Знайти тренера", + blurb: "Тренери, які навчають DIY-модулів зі скейтингу та будівництва Spots." + } + } + }, + labelsUi: { + spotCategory: { + street: { + label: "Street", + description: "Випадкові знайдені місця, міський рельєф" + }, + transition: { + label: "Transition", + description: "Вигнуті/похилі поверхні" + }, + park: { + label: "Park", + description: "Побудовані скейт-Park" + }, + plaza: { + label: "Plaza", + description: "Міські площі (як MACBA, Love Park)" + } + }, + spotFeature: { + wallrides: "Wallrides", + stairs: "Сходи та поручні", + rails: "Rails", + ledges: "Ledges та бордюри", + gaps: "Gaps", + flatground: "Flatground", + "manual-pads": "Manual Pads", + "half-pipes": "Half Pipes", + "quarter-pipes": "Quarter Pipes", + "mini-ramps": "Mini Ramps", + bowls: "Bowls", + vert: "Vert Ramps", + "mega-ramps": "Mega Ramps", + hubbas: "Hubbas", + "euro-gaps": "Euro Gaps", + banks: "Banks", + "spine-ramps": "Spine Ramps", + "roll-ins": "Roll-ins", + hips: "Hips", + volcano: "Volcano", + pyramids: "Pyramids / Funboxes", + "snake-runs": "Snake Runs", + "pump-track": "Pump Track Rollers", + "flat-bars": "Flat Bars" + }, + spotType: { + street: "Street", + transition: "Transition", + park: "Park", + plaza: "Plaza", + wallrides: "Wallrides", + stairs: "Сходи та поручні", + rails: "Rails", + ledges: "Ledges та бордюри", + gaps: "Gaps", + flatground: "Flatground", + "manual-pads": "Manual Pads", + "half-pipes": "Half Pipes", + "quarter-pipes": "Quarter Pipes", + "mini-ramps": "Mini Ramps", + bowls: "Bowls", + vert: "Vert Ramps", + "mega-ramps": "Mega Ramps", + hubbas: "Hubbas", + "euro-gaps": "Euro Gaps", + banks: "Banks", + "spine-ramps": "Spine Ramps", + "roll-ins": "Roll-ins", + hips: "Hips", + volcano: "Volcano", + pyramids: "Pyramids / Funboxes", + "snake-runs": "Snake Runs", + "pump-track": "Pump Track Rollers", + "flat-bars": "Flat Bars", + diy: "DIY", + rail: "Rail", + ledge: "Ledge", + gap: "Gap", + bowl: "Bowl", + stall: "Stall", + slappy: "Slappy" + }, + access: { + public: { + label: "Публічне — відкрите для всіх" + }, + private: { + label: "Приватна власність — потрібен дозвіл" + }, + locals: { + label: "Спершу спитайте місцевих" + } + }, + shelter: { + outdoor: { + label: "Відкрите", + short: "Відкрите", + description: "Повністю під відкритим небом — дощ зупиняє катання" + }, + partial: { + label: "Частково накрите", + short: "Частково накрите", + description: "Деякі перешкоди залишаються сухими" + }, + covered: { + label: "Накрите / під дахом", + short: "Накрите", + description: "Надворі, але під дахом" + }, + indoor: { + label: "У приміщенні", + short: "У приміщенні", + description: "Повністю закрите — катання у будь-яку погоду" + } + }, + eventType: { + contest: "Contest", + demo: "Demo", + session: "Session", + workshop: "Майстерня", + premiere: "Прем'єра", + tradeshow: "Виставка", + gameskate: "Game of Skate", + concert: "🎸 Концерт", + jam: "🎵 Jam", + festival: "🎪 Фестиваль", + popup: "🎯 Pop-up" + }, + gearCategory: { + deck: "Deck", + trucks: "Trucks", + wheels: "Wheels", + bearings: "Bearings", + shoes: "Скейт-взуття", + clothing: "Одяг", + protective: "Захисне спорядження", + stickers: "Стікери", + wax: "Wax", + tools: "Інструменти", + griptape: "Griptape", + rubbrick: "Rub Brick" + }, + gearCondition: { + new: { + label: "Нове", + description: "Ніколи не використовувалося, ще в упаковці" + }, + like_new: { + label: "Як нове", + description: "Майже не використовувалося, відмінний стан" + }, + good: { + label: "Добре", + description: "Звичайне зношення, працює бездоганно" + }, + well_used: { + label: "Добре вживане", + description: "Має сліди зносу, але ще працює" + } + }, + priceType: { + fixed: { + label: "Фіксована ціна", + description: "Ціна встановлена в USD або sats" + }, + free: { + label: "Безкоштовно", + description: "Віддаю" + }, + trade: { + label: "Обмін", + description: "Хочу обмінятися" + }, + offer: { + label: "Зробити пропозицію", + description: "Ціна договірна" + } + }, + listingType: { + selling: { + label: "Продаж", + description: "Спорядження виставлено на продаж" + }, + wtb: { + label: "Хочу купити", + description: "Шукаю конкретне спорядження" + } + }, + tour: { + spotType: { + street: "Street", + park: "Park", + diy: "DIY", + transition: "Transition", + hidden: "Приховані перлини" + }, + category: { + local: { + label: "Локальний тур", + description: "Покажіть приховані Spots у вашому місті" + }, + national: { + label: "Національний тур", + description: "Багатоміські поїздки країною" + }, + international: { + label: "Міжнародний тур", + description: "Пригоди за кордоном у кількох країнах" + }, + destruction: { + label: "World Destruction", + description: "Глобальне командне змагання у стилі KOTR" + } + } + }, + crew: { + vibe: { + street: "Street", + transition: "Transition / Vert", + park: "Park", + diy: "DIY", + cruising: "Cruising / Зйомка", + oldschool: "Old School", + allterrain: "All Terrain", + girls: "Дівчата / Жінки", + youth: "Юнь / Ґроми", + adaptive: "Адаптивний", + punk: "Punk", + hiphop: "Rap / Hip-Hop" + }, + focus: { + mixed: "Змішаний / Загальний", + builder: "DIY та будівельники", + photo: "Фото та відео", + coaching: "Тренерство", + art: "Мистецтво та дизайн", + music: "Гурт і музика", + wellness: "Тренування та фізіо" + }, + focusDescription: { + mixed: "Звичайний скейт-Crew — показується лише на сторінці Crews.", + builder: "Crew з DIY / будівництва Park — також показується в The Lab у розділі Будівельники.", + photo: "Crew зі зйомки, фотографії чи монтажу — також показується в The Lab у розділі Фото та відео.", + coaching: "Crew з тренерства / уроків — також показується в The Lab у розділі Тренерство.", + art: "Колектив з мистецтва, дизайну, графіті чи татуювань — також показується в The Lab у розділі Мистецтво та дизайн.", + music: "Гурт або музичний колектив — також показується в The Lab у розділі Музика.", + wellness: "Crew з тренувань, фітнесу чи фізіо — також показується в The Lab у розділі Тренування." + }, + lookingFor: { + filmer: "Оператор", + photographer: "Фотограф", + editor: "Відеомонтажер", + coach: "Тренер", + builder: "Будівельник рамп", + artist: "Художник / Дизайнер", + musician: "Музикант / Гурт", + members: "Нові учасники" + }, + role: { + filmer: "Оператор", + photographer: "Фотограф", + editor: "Монтажер", + coach: "Тренер", + builder: "Будівельник", + artist: "Художник", + graffiti: "Графіті", + tattoo: "Тату", + trainer: "Тренер", + musician: "Музикант", + judge: "Суддя", + manager: "Менеджер команди", + og: "OG" + } + }, + memberVisibility: { + public: { + label: "Публічно", + description: "Будь-хто бачить вас у цьому Crew — на публічній сторінці Crew і в пошуку товаришів по Crew." + }, + crew: { + label: "Лише Crew", + description: "Лише підтверджені товариші по Crew і засновник бачать вас тут. Для всіх інших ви — анонімний «прихований учасник». Зауважте: це приватність на рівні застосунку — ваш тег членства все одно публічно існує на Relay, просто ніколи не показується стороннім." + } + }, + tagCategory: { + features: { + name: "Особливості", + description: "Перешкоди та рельєф" + }, + surfaces: { + name: "Покриття", + description: "Матеріали та текстури" + }, + sizes: { + name: "Розміри", + description: "Габарити та масштаб" + }, + stairs: { + name: "Кількість сходинок", + description: "Кількість сходинок" + }, + vibes: { + name: "Вайб", + description: "Атмосфера та стан" + }, + location: { + name: "Локація", + description: "Контекст розташування" + }, + tricks: { + name: "Трюки", + description: "Гарно для конкретних трюків" + } + }, + spotTagCategory: { + street: { + label: "Street", + description: "Вуличні Spots — сходи, Rails, Ledges" + }, + park: { + label: "Park", + description: "Скейт-Park — публічні чи приватні" + }, + diy: { + label: "DIY", + description: "DIY/саморобні Spots" + }, + plaza: { + label: "Plaza", + description: "Публічні площі зі скейт-дружньою архітектурою" + } + }, + status: { + active: { + label: "Активний", + description: "Усе гаразд — катай." + }, + bust: { + label: "Bust", + description: "Високий ризик, що виженуть — охорона чи копи." + }, + skate_stopped: { + label: "Закатаний", + description: "Кноби / заглушки, але частково катабельний." + }, + closed: { + label: "Закрито", + description: "Тимчасово закрито — будівництво або подія." + }, + gone: { + label: "Зник", + description: "Знесено, заасфальтовано чи назавжди огороджено." + } + }, + price: { + free: "FREE", + trade: "Обмін", + makeOffer: "Зробити пропозицію", + offer: "Пропозиція" + } + }, + feesUi: { + feeFeaturedEventLabel: "Подія в рекомендаціях", + feeFeaturedEventDesc: "Просувайте свою подію на SkateSpots", + feeFeaturedEventBenefit: "Ваша подія з'являється вгорі сторінки подій", + feeLabProfileLabel: "Профіль Lab Pro", + feeLabProfileDesc: "Просувайте свої послуги в The Lab", + feeLabProfileBenefit: "Значок Pro + рекомендоване розміщення, коли скейтери переглядають The Lab", + feeFeaturedShopLabel: "Магазин у рекомендаціях", + feeFeaturedShopDesc: "Просувайте свій скейт-магазин на карті та в каталозі", + feeFeaturedShopBenefit: "Значок «Перевірено» + рекомендована мітка на карті", + feeFeaturedTourLabel: "Тур у рекомендаціях", + feeFeaturedTourDesc: "Просувайте свій тур на SkateSpots", + feeFeaturedTourBenefit: "Значок Pro + розміщення вгорі, коли скейтери переглядають тури", + duration7d: "7 днів", + duration30d: "1 місяць", + duration90d: "3 місяці", + duration365d: "12 місяців", + metaActive: "{{label}} — активний", + daysRemainingOne: "залишився {{count}} день", + daysRemainingMany: "залишилося {{count}} днів", + zapRequestContent: "SkateSpots {{label}} ({{tier}})", + errGenerate: "Не вдалося створити рахунок", + paymentReceived: "⚡ Платіж отримано!", + paymentReceivedDesc: "{{amount}} sats — {{label}} тепер активний.", + autoPayFailed: "Автооплата не вдалася", + autoPayFailedDesc: "Оплатіть вручну за допомогою QR або рахунку нижче.", + payStatusUnknown: "Статус платежу невідомий — можливо, платіж пройшов. Перевірте гаманець, перш ніж платити знову.", + invoiceCopied: "Рахунок скопійовано!", + activeBang: "{{label}} активний!", + chooseDuration: "Оберіть тривалість", + bestValue: "Найвигідніше", + perDay: "{{price}}/день", + validFor: "Дійсний протягом", + amountLine: "~${{usd}} USD · до {{name}} · {{tier}}", + payToContinue: "Сплатіть {{amount}} sats, щоб продовжити", + generating: "Створення рахунку…", + processing: "Обробка платежу…", + invoiceQrAlt: "QR-код рахунку Lightning", + copyInvoice: "Скопіювати рахунок", + openWallet: "Відкрити гаманець", + payConnected: "Сплатити з під'єднаного гаманця", + scanAny: "Скануйте будь-яким Lightning-гаманцем", + tryAgain: "Спробувати знову", + proReceiptTitle: "🦧⚡ Sasquatch Pro — ви в грі!", + proReceiptPass: "Перепустка: {{pass}} ({{sats}} sats)", + proReceiptActiveUntil: "Активна до: {{until}}", + proReceiptUnlocked: "Що ви відкрили:", + proReceiptBullet1: "• Персональний асистент — я читаю ваш Stash, Crews, Spots та оголошення", + proReceiptBullet2: "• Чернетки дій — виставити спорядження, опублікувати стан Spot, планувати поїздки (ви підтверджуєте)", + proReceiptBullet3: "• Відповіді, що використовують ваш особистий контекст, а не лише публічні дані", + proReceiptBullet4: "• ⚡ Ви напряму підтримуєте SkateSpots і зберігаєте його безкоштовним та без реклами", + proReceiptThanks: "Дякуємо, що зберігаєте SkateSpots безкоштовним та без реклами. А тепер — катати. 🛹", + proReceiptSubject: "Квитанція Sasquatch Pro", + receiptContent: "Sasquatch Pro — перепустка прихильника {{tier}} 🦧⚡", + receiptAlt: "Перепустка прихильника Sasquatch Pro ({{tier}}), дійсна до {{until}}", + purchaseComment: "Sasquatch Pro — {{tier}} 🦧", + errLogin: "Увійдіть, щоб перейти на Pro.", + errStart: "Не вдалося розпочати покупку.", + errRecord: "Не вдалося записати вашу перепустку." + }, + cardUi: { + save: "Зберегти картку в Nostr", + saved: "Картку збережено", + savedDesc: "Ваша картка тепер підписана й перевірна.", + saveFailed: "Не вдалося зберегти картку", + notPublished: "Не опубліковано", + titleNeon: "Rider", + titleRest: "Card", + saveFrontPng: "Зберегти лицьовий бік (PNG)", + expired: "ПРОСТРОЧЕНО", + logoUploaded: "Логотип завантажено", + logoUploadFailed: "Не вдалося завантажити логотип", + venue: "Прив'язане місце (необов'язково)", + venueNone: "Без місця", + venueHint: "Оберіть один зі своїх Spots, щоб прив'язати цю перепустку до місця. Верифікатор підтвердить, що він ваш.", + venuePick: "Оберіть своє місце", + parkNoVenue: "Перепустку Park може видавати лише власник місця — спершу нанесіть Spot, яким володієте, на карту.", + parkAddVenue: "Додати Spot", + parkNeedsVenue: "Оберіть місце, яким володієте", + parkIssued: "Видані перепустки", + parkRevoke: "Відкликати", + parkRevoked: "Відкликано", + parkRevokeFailed: "Не вдалося відкликати", + v: { + valid: "Дійсна", + validDesc: "Підпис дійсний і виданий місцем.", + expired: "Прострочена", + expiredDesc: "Минула дата дійсності.", + revoked: "Відкликана", + revokedDesc: "Видавець скасував цю перепустку — не приймайте її.", + invalid: "Недійсна", + invalidDesc: "Підпис не перевіряється. Не довіряйте їй.", + notFound: "Не знайдено", + notFoundDesc: "Немає відповідного запису на Relay.", + unverifiedIssuer: "Неперевірений видавець", + unverifiedIssuerDesc: "Ця перепустка вказує місце, яким не володіє ключ видавця.", + notBound: "Не прив'язана", + notBoundDesc: "Не прив'язана до місця — нічого не доводить про доступ.", + noRsvp: "Немає RSVP", + noRsvpDesc: "У власника немає зареєстрованого RSVP на цю подію.", + admitted: "Допущено", + admittedDesc: "Подія організатора + власник підтвердив RSVP.", + noHolder: "У посиланні немає власника", + noHolderDesc: "У цьому QR немає власника квитка (`?h=`), тож власника не можна перевірити." + }, + passes: { + tab: "Мої перепустки", + pass: "Перепустка доступу", + none: "Ще немає перепусток. Коли місце чи організатор видасть вам одну, вона з'явиться тут." + }, + facets: { + title: "Показати грані ідентичності", + crews: "Crews", + local: "Локальні", + roles: "Ролі Lab" + }, + roles: { + coach: "Тренер", + filmer: "Оператор", + editor: "Монтажер", + photographer: "Фотограф", + builder: "Будівельник", + artist: "Художник", + graffiti: "Графіті", + tattoo: "Тату", + trainer: "Тренер", + musician: "Музикант", + judge: "Суддя", + organizer: "Організатор", + barber: "Барбер" + }, + crew: { + crewCard: "CREW CARD", + crewSub: "Ваш Crew на картці", + pick: "Оберіть Crew", + none: "Ви ще не в жодному Crew — спершу приєднайтеся чи створіть.", + hint: "Картка будується з власних підписаних даних Crew. Редагуйте Crew на його сторінці, щоб змінити її.", + members: "УЧАСНИКИ", + spots: "SPOTS", + est: "Засн. {{year}}", + openCall: "Відкритий набір", + verifiedCrew: "Перевірений Crew", + viewCrew: "Переглянути Crew" + }, + event: { + pass: "EVENT PASS", + passSub: "Перепустка на подію, яку ви відвідуєте", + pick: "Оберіть подію", + none: "Ще немає подій — спершу створіть одну або підтвердьте RSVP.", + hint: "Перепустка будується з власних підписаних даних події. Лише організатор може її змінити.", + admits: "ДОПУСКАЄ", + going: "{{count}} йдуть", + verifiedEvent: "Перевірена подія", + viewEvent: "Переглянути подію", + issuePass: "Видати перепустку для реєстрації", + issuePassBtn: "Видати перепустку", + issuePassHint: "Підписана перепустка для конкретного відвідувача — він показує її на вході.", + notOrganiser: "Лише організатор може видавати перепустки", + passIssued: "Перепустку видано", + issueFailed: "Не вдалося видати перепустку", + issuedPasses: "Видані перепустки для реєстрації" + }, + studio: { + unsaved: "Незбережені зміни", + saved: "Збережено", + saveChanges: "Зберегти зміни", + allSaved: "Збережено — усе актуально", + showOnCard: "Показати на картці", + derived: "З вашого профілю скейтера", + noSkaterProfile: "Ще немає профілю скейтера —", + editSkaterProfile: "додайте свої стилі та рівень", + noPhoto: "Ще немає фото профілю —", + addPhoto: "додайте його у профілі", + finishTitle: "Завершіть свою картку", + finishDesc: "Фото та профіль скейтера зроблять її справжньою.", + checkPhoto: "Фото профілю", + checkName: "Відображуване ім'я", + checkProfile: "Стилі та рівень", + checkCrew: "Приєднайтеся до Crew", + moreTypes: "Більше типів карток відкривається, коли ви наносите Spots, якими володієте, приєднуєтеся до Crews або підтверджуєте RSVP на події.", + accent: "Акцентний колір", + accentHint: "Перевизначає акцент теми", + accentClear: "Використати колір теми", + logo: "Власний логотип / герб", + logoAdd: "Завантажити", + logoChange: "Змінити", + logoClear: "Прибрати" + }, + back: { + title: "Друкований зворотний бік", + desc: "Crews, ролі, спонсори та посилання на звороті", + showBack: "Показати зворот", + showFront: "Показати лицьовий бік", + empty: "Тут ще нічого немає — додайте Crews, ролі чи спонсорів." + }, + verify: { + checking: "Перевіряємо картку…", + notFound: "Картку не знайдено", + notFoundDesc: "На Relay не знайдено відповідної події. Можливо, її видалено або посилання неправильне.", + invalid: "Підпис недійсний", + invalidDesc: "Ця подія існує, але її підпис не перевіряється. Не довіряйте їй.", + authentic: "Справжня", + authenticDesc: "Підпис видавця дійсний.", + kind: "Тип", + kindPark: "Park Access Card", + kindRider: "Rider Card", + kindCrew: "Crew Card", + kindEvent: "Event pass", + organiser: "Організатор", + expired: "Прострочена", + valid: "Дійсна", + holder: "Власник", + ticketHolder: "Власник квитка", + rsvp: "RSVP", + rsvpGoing: "Йду", + rsvpInterested: "Цікавить", + rsvpNone: "RSVP не знайдено", + revoked: "Перепустку відкликано", + revokedDesc: "Видавець скасував цю перепустку — не приймайте її.", + issuedBy: "Видано", + accessLevel: "Рівень доступу", + validThru: "Дійсна до", + selfIssued: "Статус", + selfIssuedDesc: "Самовидана картка ідентичності", + venue: "Місце", + venueVerified: "Перевірено — ключ власника цього місця збігається з видавцем.", + venueMismatch: "Ця перепустка вказує місце, яким не володіє ключ видавця.", + venueNone: "Не прив'язана до місця.", + viewCard: "Переглянути картку", + disclaimer: "Дійсний підпис доводить, хто підписав цю картку, — це не доказ навичок чи прав доступу понад те, що видало місце.", + details: "Деталі", + invalidLink: "Недійсне посилання", + invalidLinkDesc: "Це не схоже на дійсне посилання на картку." + }, + public: { + invalid: "Це не схоже на дійсне посилання на картку.", + createYourOwn: "Створіть власну картку", + editYourCard: "Редагуйте свою картку", + backToEditor: "Назад до редактора", + backHome: "На головну", + notCustomised: "Цей скейтер ще не налаштував свою картку — це стандартний вигляд.", + verifyNote: "Скануйте QR-код на картці, щоб перевірити її." + } + }, + routeUi: { + destination: "Пункт призначення", + routeTo: "Маршрут до {{label}}", + routeToLabel: "Маршрут до", + search: "Пошук", + description: "Варіанти маршруту та навігація в застосунку.", + routeMapAria: "Карта маршруту", + findingLocation: "Визначаємо ваше місце…", + plottingRoute: "Прокладаємо маршрут…", + refiningLocation: "Уточнюємо місце…", + offlineSavedRoute: "Офлайн · збережений маршрут {{age}}", + tapMapStart: "Натисніть на карту, щоб задати початкову точку", + fitRouteAria: "Показати весь маршрут на карті", + wholeRoute: "Увесь маршрут", + next: "Далі", + nextStep: "Далі · крок {{n}}", + followTheLine: "Рухайтеся по лінії", + toTheTurn: "до повороту", + toGo: "залишилось", + tryAgain: "Спробувати знову", + mode: { + foot: "Skate / Пішки", + bike: "Велосипед", + moto: "Мото", + car: "Авто", + transit: "Транспорт" + }, + from: "Звідки", + myLocation: "Моє місце", + tapTheMap: "Натисніть на карту…", + chooseOnMap: "Обрати на карті", + direct: "прямий", + transferOne: "1 пересадка", + transfers: "{{count}} пересадок", + options: "{{count}} варіантів", + ride: "їхати", + arrive: "прибуття", + speedAvg: "{{speed}} км/год у сер.", + stepsCount: "{{count}} кроків", + onABoard: "на дошці", + usesDrivingRoads: "використовує автомобільні дороги", + drivingEstimate: "оцінка для авто", + updating: "оновлення…", + pickMode: "Оберіть режим, щоб побачити маршрут.", + waitingLocation: "Чекаємо на ваше місце…", + routeSteps: "Кроки маршруту", + walkingRoute: "пішохідний маршрут — швидше на дошці", + planningView: "Режим планування — натисніть «Старт», щоб рухатися з живими поворотами, голосом і прибуттям.", + leaveNow: "Вирушити зараз", + departAt: "Виїхати о", + arriveBy: "Прибути до", + departureTime: "Час відправлення", + arrivalTime: "Час прибуття", + only: "Лише", + clear: "очистити", + itinerary: "Маршрут", + group: { + bus: "Автобус", + tram: "Трамвай", + metro: "Метро", + train: "Потяг", + ferry: "Пором" + }, + walk: "Пішки", + rideVerb: "Їхати", + walkLower: "йти", + rideLower: "їхати", + toStop: "до", + track: "колія {{track}}", + stopOne: "1 зупинка", + stopsCount: "{{count}} зупинок", + tickets: "квитки ↗", + done: "Готово", + stop: "Зупинити", + start: "Старт", + arrived: "Ви прибули. 🛹", + voiceOnNote: "Екран залишається увімкненим · голос увімкнено — повороти та прибуття озвучуються.", + voiceOffNote: "Екран залишається увімкненим · голос вимкнено.", + followNote: "Повороти, голос і прибуття під час руху. Тримає екран увімкненим.", + voiceOffAria: "Вимкнути голосові підказки", + voiceOnAria: "Увімкнути голосові підказки", + voiceStart: "Початок навігації", + voiceArrived: "Ви прибули", + voiceIn: "Через {{metres}} метрів, {{instruction}}", + voiceContinue: "продовжуйте", + voiceContinueCaps: "Продовжуйте", + errPermissionDenied: "Доступ до місцезнаходження заборонено.", + errWaitingGps: "Чекаємо на GPS…", + errPermissionDeniedLong: "Доступ до місцезнаходження заборонено. Увімкніть геолокацію, щоб прокласти маршрут звідси.", + errNoLocation: "Не вдалося визначити ваше місце. Спробуйте знову.", + errNoLocationShort: "Не вдалося визначити ваше місце.", + errTransitNoRouteFiltered: "Немає маршруту на цей час чи вид транспорту — спробуйте інший час або додайте більше видів.", + errTransitNoRoute: "Тут не знайдено маршруту громадським транспортом — можливо, цей регіон не публікує відкриті розклади.", + errTransitUnreachable: "Не вдалося зв'язатися зі службою транспорту. Перевірте з'єднання та спробуйте знову.", + errRoutingBusy: "Служба маршрутизації зараз зайнята — спробуйте за мить.", + errNoRouteMode: "Немає маршруту для цього режиму — можливо, пункт призначення поза дорожньою мережею. Спробуйте інший режим.", + errRoutingUnreachable: "Не вдалося зв'язатися зі службою маршрутизації. Перевірте з'єднання та спробуйте знову.", + departures: "Відправлення", + upcomingFrom: "Найближчі відправлення від {{stop}}", + loadingDepartures: "Завантаження відправлень…", + noDepartures: "На цій зупинці не знайдено найближчих відправлень.", + live: "наживо", + cancelled: "скасовано", + refresh: "Оновити", + tripLoginTitle: "Увійдіть, щоб зберегти", + tripLoginDesc: "Увійдіть, щоб зберегти цю подорож як Колекцію.", + tripCollectionTitle: "Скейт-подорож до {{destination}} 🛹", + tripCollectionDesc: "План подорожі від The Sasquatch — {{count}} днів у {{destination}}.", + tripCollectionDescOne: "План подорожі від The Sasquatch — {{count}} день у {{destination}}.", + tripSavedTitle: "Збережено в Колекції 🦧", + tripSavedDesc: "Вашу подорож до {{destination}} додано в закладки.", + tripSaveFailed: "Не вдалося зберегти", + tripSaveFailedDesc: "Спробуйте за секунду.", + daysInDestinationOne: "{{count}} день у {{destination}}", + daysInDestination: "{{count}} днів у {{destination}}", + wetForecast: "Дощовий прогноз — знайдіть локальний Crew для накритих/внутрішніх варіантів.", + dayLabel: "День {{n}}", + freeSkate: "Вільне катання — досліджуйте та знімайте. 🎥", + tapToBook: "торкніться, щоб забронювати / Zap ⚡", + localCrews: "Локальні Crews", + saving: "Збереження…", + savedToCollections: "Збережено в Колекції", + saveSpotOne: "Зберегти {{count}} Spot у Колекцію", + saveSpots: "Зберегти {{count}} Spots у Колекцію", + flights: "Рейси", + stays: "Проживання", + gettingAround: "Пересування", + noMiddleman: "Я планую катання — рейси та проживання відкриваються на справжніх сайтах (без KYC, без посередників).", + ageJustNow: "щойно", + ageMinAgo: "{{count}} хв тому", + ageHourAgo: "{{count}} год тому", + ageDayAgo: "{{count}} дн тому", + skateRightHere: "просто тут", + skateMin: "~{{count}} хв їзди", + skateHours: "~{{hours}} год їзди", + maneuver: { + headOut: "Вирушайте", + arrive: "Прибуття на Spot", + continueStraight: "Продовжуйте", + bearLeft: "Тримайтесь лівіше", + bearRight: "Тримайтесь правіше", + turnLeft: "Поверніть ліворуч", + turnRight: "Поверніть праворуч", + sharpLeft: "Різко ліворуч", + sharpRight: "Різко праворуч", + turn: "Поверніть", + keepLeft: "Тримайтесь ліворуч", + keepRight: "Тримайтесь праворуч", + takeFork: "Тримайтесь розгалуження", + merge: "Влийтеся в потік", + roundabout: "Проїдьте кругове", + takeRamp: "З'їзд на рампу", + takeExit: "Скористайтеся з'їздом" + }, + maneuverOnto: "{{instruction}} на {{road}}" + }, + sasquatchUi: { + live: "наживо", + offline: "офлайн", + genericTitle: "Помічник SkateSpots 🦧", + genericGreeting: "Йо! Я The Sasquatch. Питай мене будь-що про Spots, події, тренерів, спорядження чи те, як працює застосунок. У мене живі дані з Relay SkateSpots!", + q1: "Сплануй мені 3 дні в Лісабоні", + q2: "Знайди Spots поблизу", + q3: "Є найближчі події?", + q4: "Що таке Crews?", + q5: "Як працюють zaps?", + q6: "Що таке Nostr?", + q7: "Що таке Мій Stash?", + q8: "Це безкоштовно?", + bubbleTitle: "Натисніть і перетягніть, щоб перемістити · Торкніться, щоб відкрити", + openGuideAria: "Відкрити путівник Sasquatch", + hideAria: "Сховати помічника Sasquatch", + hide: "Сховати помічника", + showAria: "Показати помічника Sasquatch", + activeUntil: "Активний до {{date}}", + platformOwner: "Власник платформи", + upgradeTitle: "Перейти на Sasquatch Pro", + goPro: "Go Pro", + goProBlurb: "Персональний ШІ · від 2k sats", + aiBalanceTitle: "Баланс кредиту ШІ Sasquatch (лише для власника) — поповніть на {{provider}}", + aiChip: "⚡ ШІ {{balance}}", + minimizeToBubbleAria: "Згорнути в бульбашку", + minimize: "Згорнути", + closePanelAria: "Закрити панель", + close: "Закрити", + askLab: "Спитати про Coaching та Filming", + askMap: "Спитати про Spots, магазини та спорядження", + askAnything: "Питай мене будь-що 🛹", + quickQuestions: "Швидкі запитання:", + you: "🧑 Ви", + thinking: "думаю...", + inputPlaceholder: "Питайте про Spots, події, тренерів...", + liveDataFrom: "Живі дані з", + nostrRelays: "Nostr Relay", + clear: "очистити", + gettingLocation: "📍 Визначаємо ваше місце…", + findingClosest: "🔍 Шукаємо найближчі Spots…", + checkingLive: "🔍 Перевіряємо живі дані…", + planningTrip: "🗺️ Плануємо вашу подорож до {{destination}}...", + searchingRelays: "🔍 Шукаємо в Relay: {{tool}}...", + perk1: "Персональний асистент — Sasquatch читає ваш власний Stash, Crews, Spots та оголошення", + perk2: "Чернетки дій: виставити спорядження, опублікувати скейт-статус, спланувати подорож — ви підтверджуєте, перш ніж щось публікується", + perk3: "Відповіді використовують ваш особистий контекст, а не лише публічні дані", + perk4: "⚡ Прямо підтримуйте SkateSpots і зберігайте його безкоштовним та без реклами", + welcomeTitle: "Дякуємо за підтримку Sasquatch Pro! 🦧⚡", + welcomeDesc: "Платіж надіслано — ваша перепустка активується, щойно провайдер підтвердить її (зазвичай протягом хвилини). Дякуємо, що зберігаєте вулиці вільними.", + invoiceCopied: "Рахунок скопійовано", + dialogDesc: "Підсильте свій ШІ-скейт-путівник. 100% коштів фінансує безкоштовний застосунок без реклами.", + proSupporter: "Ви прихильник Pro ⚡", + extendPrompt: "Хочете продовжити? Оберіть тариф нижче, щоб додати часу.", + scanToPayPre: "Скануйте, щоб сплатити", + scanToPayAmount: "{{sats}} sats", + scanToPayPost: "за {{label}} Pro", + invoiceQrAlt: "QR-код рахунку Lightning", + copyInvoice: "Скопіювати рахунок", + ivePaid: "Я сплатив", + ivePaidHint: "Натисніть «Я сплатив» після підтвердження гаманцем — це запише вашу перепустку на вашу ідентичність Nostr.", + freeStaysPre: "Безкоштовний Sasquatch залишається безкоштовним — публічний пошук Spots/подій/тренерів, планування подорожей + повний глосарій трюків. Pro додає ", + freeStaysEmphasis: "персональний + дійовий", + freeStaysPost: " шар.", + loginFirst: "Спершу увійдіть, щоб перейти на Pro.", + paysTo: "Платить на", + overLightning: "через Lightning. Прив'язано до вашого npub.", + popular: "Популярне", + sats: "sats", + extend: "Продовжити", + done: "Готово!", + cancelledNothing: "Скасовано — нічого не опубліковано.", + draftReview: "Чернетка — перегляньте й підтвердьте", + statusTextPlaceholder: "Текст статусу", + titlePlaceholder: "Заголовок", + priceSatsPlaceholder: "Ціна (sats)", + conditionPlaceholder: "Стан", + cancel: "Скасувати", + aiTitle: "Sasquatch AI", + owner: "Власник", + notConfigured: "не налаштовано", + unavailable: "недоступно", + satsValue: "{{balance}} sats", + theNode: "вузол", + lowBalance: "Баланс закінчується — поповніть на {{provider}}, інакше ШІ перейде на провайдера без ключа.", + aiDesc: "ШІ з оплатою за запит, що фінансується в sats через Routstr. Поповнюється, коли баланс низький.", + tier7d: "7 днів", + tier1m: "1 місяць", + tier3m: "3 місяці", + tier1y: "1 рік", + badgeTry: "Спробувати", + badgeOff20: "знижка 20%", + badgeBest: "Найвигідніше · знижка 40%", + draftPostStatusTitle: "Опублікувати скейт-статус", + draftAutoExpires: "Автоматично спливає через {{count}} хв", + draftPostStatusCta: "Опублікувати статус", + draftCategory: "Категорія: {{value}}", + draftSize: "Розмір: {{value}}", + draftCondition: "Стан: {{value}}", + draftMaxPrice: "Макс. ціна: {{price}} {{currency}}", + draftPriceOpen: "Ціна: відкрита", + draftLookingForTitle: "Шукаю «{{title}}»", + draftWantedCta: "Опублікувати оголошення «шукаю»", + draftPrice: "Ціна: {{price}} {{currency}}", + draftPriceOffer: "Ціна: зробіть пропозицію", + draftListTitle: "Виставити «{{title}}» на продаж", + draftPublishCta: "Опублікувати оголошення", + statusPosted: "Статус опубліковано 🛹", + wantedPublished: "Оголошення «шукаю» опубліковано 🔎", + listingPublished: "Оголошення опубліковано 💸", + mustBeLoggedIn: "Ви маєте увійти." + }, + sasquatchChat: { + faq: { + hi: "Привіт! Я The Sasquatch 🦧 Твій ШІ-скейт-путівник. Питай мене про Spots, події, тренерів, спорядження — чи будь-що про застосунок. Що тобі потрібно?", + hello: "Дарова! 🛹 Я The Sasquatch. Питай мене про скейт-Spots, події, тренерів чи те, як працює застосунок. Як справи?", + hey: "Гей, скейтере! 🤙 Питай мене про Spots поблизу, найближчі події, тренерів чи будь-що про SkateSpots.", + whoAreYou: "Я The Sasquatch 🦧 — ШІ-путівник SkateSpots. Я вмію знаходити скейт-Spots по всьому світу, шукати події, тренерів, операторів та оголошення спорядження. Усе працює на живих даних Nostr. Питай!", + whatCanYouDo: "Я вмію знаходити скейт-Spots за містом чи країною, шукати найближчі події, знаходити тренерів та операторів у The Lab, шукати оголошення спорядження й відповідати на запитання про те, як працює застосунок. Спробуй: «Spots у Бангкоку» або «знайди тренера»! 🛹", + whatIsNostr: "Nostr — це простий відкритий протокол для децентралізованих соцмереж. Уявіть Twitter, але жодна компанія ним не керує — ви використовуєте криптографічні ключі замість імен користувачів, обираєте, які Relay зберігають ваші дані (або запускаєте власний), і один акаунт працює в усіх застосунках Nostr! 🔑", + isThisPrivate: "Ось чесний розклад 🛡️\n\n• Ваше **місцезнаходження GPS залишається на вашому пристрої** — «Поблизу» лише центрує карту. Воно ніколи не надсилається нам і не публікується.\n• **Spots, які ви додаєте, публічні** (у цьому сенс спільної карти) — тож не ставте мітку на своїх вхідних дверях.\n• **Особисті повідомлення та чати Crew зашифровані від кінця до кінця** — їх можуть читати лише учасники.\n• Як і будь-який сайт, сервери, до яких ви підключаєтеся (тайли карт, Relay), бачать ваш **IP**. Хочете приховати й це? Використовуйте VPN або Tor.\n\nПовні деталі на [сторінці приватності](/privacy). 🛹", + privacy: "Коротко 🛡️: ваш GPS ніколи не покидає пристрій, Spots, які ви публікуєте, публічні за задумом, а особисті повідомлення й чати Crew зашифровані від кінця до кінця. Сервери все одно бачать ваш IP (нормально для будь-якого сайту) — VPN або Tor це приховає, якщо хочете. Повний розбір на [сторінці приватності](/privacy).", + amITracked: "SkateSpots вас не відстежує — без реклами, без профілювання аналітикою, без продажу даних, і немає сервера SkateSpots, що збирає ваше місцезнаходження. Ваш GPS залишається на пристрої. Єдине, що бачать сервери (тайли карт, Relay), — ваш **IP** — як і на будь-якому сайті. Використовуйте VPN або Tor, щоб це приховати. Більше на [сторінці приватності](/privacy). 🛡️", + doYouTrack: "Ні — без відстеження, без реклами, без збирання даних. Ваш GPS залишається на пристрої, і немає центрального сервера, що вас логує. Сервери, до яких ви підключаєтеся, можуть бачити ваш IP (як будь-який сайт); VPN/Tor це приховає. Дивіться [сторінку приватності](/privacy). 🛹", + vpn: "Цілком необов'язково, але слушно, якщо хочете додаткової приватності 🛡️. VPN приховує ваш **IP** (приблизне місце) від серверів, з якими спілкується SkateSpots — тайлів карт, Relay тощо. Оберіть провайдера без логів, якому довіряєте (напр. Mullvad); уникайте сумнівних безкоштовних.\n\nЗауваження: VPN **не** приховує Spots, які ви публікуєте (вони публічні), і не вмикайте GPS браузера, якщо хочете лишатися анонімним. Повні деталі на [сторінці приватності](/privacy).", + tor: "Tor Browser дає найсильнішу приватність IP — він маршрутизує вас через кілька Relay, тож сервери не бачать ваш справжній IP 🧅. Компроміс: повільніше, а карти й деякі Relay Nostr можуть гальмувати чи блокувати виходи Tor. Чудово для надобережних.\n\nПам'ятайте: Tor приховує ваш IP, а не Spots, які ви публікуєте, і не вмикайте GPS браузера, якщо мета — анонімність. Більше на [сторінці приватності](/privacy).", + hideMyIp: "Два безкоштовні варіанти 🛡️: **надійний VPN** (просто, швидко — приховує ваш IP за їхніми серверами) або **Tor Browser** (максимум приватності, повільніше). Будь-який із них заважає серверам, до яких підключається SkateSpots, бачити ваш справжній IP. Зауважте, вони не приховують Spots, які ви публікуєте. Дивіться [сторінку приватності](/privacy).", + isMyLocation: "Ваше місце в безпеці 📍 — «Поблизу» зчитує ваш GPS лише на пристрої, щоб центрувати карту й сортувати найближчі Spots. Воно ніколи не публікується в Nostr, не надсилається нам, не передається. Публічні лише Spots, які ви свідомо додаєте. Деталі на [сторінці приватності](/privacy).", + whatAreZaps: "Zaps — це миттєві чайові в Bitcoin Lightning, надіслані через Nostr! Натисніть ⚡ на будь-якому вмісті, надішліть sats напряму в гаманець автора. Як «лайк», але зі справжніми грошима. Миттєво, напряму між людьми, без посередників. ⚡", + howToLogin: "Два способи:\n1. **Розширення браузера** (комп'ютер): встановіть Alby або nos2x, тоді натисніть «Увійти»\n2. **Новий користувач**: натисніть «Зареєструватися», щоб згенерувати ключі. Завантажте свій nsec (секретний ключ) і ЗБЕРЕЖІТЬ ЙОГО — це ваш акаунт назавжди!", + whatIsCashu: "Вбудований Bitcoin-гаманець! Токени Cashu ecash, забезпечені Lightning — працюють офлайн на скейт-Spots, з фокусом на приватність (мінти не можуть відстежувати платежі). Перейдіть до Гаманця в Налаштуваннях, щоб скористатися. 🥜", + whatIsNwc: "Nostr Wallet Connect — як USB-C для Lightning-гаманців. Підключіть Alby, Minibits, Zeus або Coinos один раз — і надсилайте Zap одним кліком назавжди. Зашифровано, ви контролюєте ліміти витрат. 🔌⚡", + isItFree: "100% безкоштовно. Без реклами, без підписок, без корпоративного лайна. Створено скейтерами для скейтерів. Фінансується спільнотою через Angor — перегляньте сторінку Прихильників. Ви також можете заробляти Bitcoin через чайові спільноти за якісні Spots. 🛹", + whatCanIDo: "Відкривайте Spots по всьому світу на карті, наймайте професіоналів у The Lab (тренери, оператори, фотографи, монтажери, будівельники рамп), катайтеся з Crew, приєднуйтеся до подій, беріть тури, купуйте/продавайте спорядження, ведіть свій приватний Stash, надсилайте Zap авторам, перевіряйте погоду на Spot і будуйте децентралізовану скейт-спільноту!", + whatIsTheLab: "The Lab — це місце, де ви наймаєте професіоналів скейт-сцени: тренерів, операторів, фотографів, відеомонтажерів та будівельників рамп/Park/DIY. Кожен може бути окремою людиною або колективом (Crew/студія) — учасники підтверджують власними ключами, тож усе легітимно. Усе на Nostr, без фейкових акаунтів. 🎓", + whatIsACrew: "Crews — це ваша скейт-сім'я, прив'язана до карти — ті, з ким ви катаєтеся РАЗОМ, а не кого наймаєте. Кожен Crew має домашню територію на карті (бірюзові мітки), домашні Spots, учасників, вайб і маніфест. Учасники підтверджують власним ключем. Створіть свій у Crews → «Створити Crew». 🤘", + whatAreCrews: "Crews — це ваша скейт-сім'я, прив'язана до карти — ті, з ким ви катаєтеся РАЗОМ, а не кого наймаєте. Кожен Crew має домашню територію на карті (бірюзові мітки), домашні Spots, учасників і маніфест. Учасники підтверджують власним ключем. Перейдіть на вкладку Crews, щоб створити чи приєднатися! 🤘", + howToStartACrew: "Перейдіть на вкладку Crews → «Створити Crew». Назвіть його, позначте домашню територію на карті, додайте вайб (або власний #хештег), прив'яжіть домашні Spots і додайте учасників за npub. Кожен учасник підтверджує власним ключем, тож склад легітимний. 🤘", + whatIsMyStash: "Мій Stash — це ваш ПРИВАТНИЙ зашифрований сховок для спорядження (шифрування NIP-44). Відстежуйте свої Deck, Trucks, Wheels, взуття — із місцем зберігання, станом, рідкістю та ціною. Лише ВИ можете це читати, якщо не позначите предмети публічними. Чудово для страховки чи планування обміну. 🎒", + whatIsStash: "Мій Stash — це ваш ПРИВАТНИЙ зашифрований інвентар спорядження. Записуйте все, що маєте — стан, де зберігається, вартість — усе зашифровано, тож бачите лише ви. Позначайте предмети публічними, якщо хочете продати чи похвалитися. 🎒", + whatIsABuilder: "Будівельники — це Crew з рамп/Park/DIY у The Lab, яких можна найняти, щоб збудувати переходи, Bowls, Rails чи цілий Park. Вони вказують, що будують, матеріали, масштаб проєкту й можуть мати ліцензію/страховку. Часто це колективи — і вони можуть прив'язувати збудовані Spots до карти. 🏗️", + whatIsANutzap: "Nutzaps (NIP-61) — це чайові ecash, надіслані через Nostr — приватні токени Cashu, надіслані Zap напряму комусь. Ви можете налаштувати ОТРИМАННЯ nutzap у Гаманці. (Надсилання повних nutzap впроваджується — поки що використовуйте Lightning zaps.) 🥜⚡", + whatIsClink: "CLINK — це рідний для Nostr платіжний код («noffer»). Магазини, Crews і фахівці The Lab можуть додати його, щоб ви могли їм платити без Lightning-адреси — ви побачите кнопку «Pay via CLINK» із QR-кодом. Скануйте його гаманцем CLINK, як-от ShockWallet. 🔗⚡ [специфікації](https://clinkme.dev/specs.html) [застосунки](https://clinkme.dev/apps.html)", + whatIsNoffer: "Noffer — це платіжний код CLINK — багаторазовий, рідний для Nostr спосіб отримувати оплату без вебсервера чи Lightning-адреси. Додайте свій у профілі магазину/Crew/Lab, і люди зможуть платити вам напряму. 🔗", + whatAreTours: "Тури — це організовані скейт-подорожі — локальні сесії, національні роуд-тріпи чи світові destruction-тури. Знаходьте їх на карті чи в розділі Турів, зустрічайтеся й катайте новий рельєф разом з місцевими. 🗺️🛹", + whatIsAShop: "Скейт-магазини — це місцеві магазини, позначені на карті. Відкривайте й підтримуйте справжні офлайн- (чи онлайн-) скейт-магазини у своєму районі — деякі навіть приймають Bitcoin. 🏪", + howToSellGear: "Перейдіть до Gear Swap / Маркетплейсу й створіть оголошення (NIP-99). Додайте фото, ціну в sats, стан і за бажанням прив'яжіть до Spot, щоб воно з'явилося на карті. Покупці надсилають Zap або пишуть вам напряму. 🛹💸", + supporters: "SkateSpots фінансується спільнотою через Angor (децентралізований краудфандинг на Bitcoin) — без реклами, без інвесторів, без продажу даних. Перегляньте сторінку Прихильників, щоб підтримати проєкт і зберегти вулиці вільними. ❤️⚡", + trustScore: "Оцінки довіри (0–100) на базі Relatr. Аналізує вашу мережу Nostr: підписників, активність, залучення, Zaps. Вище = більше довіри. Допомагає фільтрувати ботів і спам. Перегляньте будь-який профіль, щоб побачити оцінку. 🛡️", + whatRelay: "SkateSpots використовує: 🛹 goskatespots.nostr1.com (основний, у списку дозволених для якості) + relay.ditto.pub (глобальний) + purplepag.es (агрегатор профілів). Ваші дані реплікуються на всіх них для надійності.", + tripPlanner: "Назвіть місто, і я збудую скейт-подорож день за днем 🗺️ — Spots, події, тренери та локальні Crews, з урахуванням погоди (дощовий день = порада від Crew щодо накритих Spots). Спробуйте «сплануй мені 3 дні в Лісабоні». Я можу зберегти все в Колекцію й передати вас до рейсів/проживання на справжніх сайтах (без KYC, без посередників). 🛹", + planATrip: "Просто скажіть «сплануй мені 3 дні в Барселоні» (чи будь-якому місті), і я розпишу Spots, сесії, тренерів та локальні Crews на кожен день. Збережіть як Колекцію — і гайда катати. 🗺️🛹", + sasquatchPro: "**Sasquatch Pro** 🦧⚡ — це Lightning-перепустка прихильника, що відкриває мою персональну сторону:\n\n• 🧠 **Персональний асистент** — я читаю ваш власний Stash, Crews, Spots та оголошення\n• ✨ **Чернетки дій** — виставити спорядження, опублікувати ваш скейт-статус, спланувати подорожі (ви завжди підтверджуєте, перш ніж щось публікується)\n• 💬 **Особистий контекст** — мої відповіді використовують ваші дані, а не лише публічні результати\n• ⚡ **Підтримка проєкту** — ви зберігаєте SkateSpots безкоштовним та без реклами\n\nБезкоштовний Sasquatch залишається безкоштовним: публічний пошук Spots/подій/тренерів/Crew, глосарій і планування подорожей працюють без Pro. Pro лише додає *персональні* речі. Натисніть **⚡ Go Pro** вгорі. Тарифи: 7 днів ~2k sats, 1 місяць ~5k, 3 місяці ~12k, 1 рік ~36k.", + proPerks: "Переваги Pro 🦧⚡: персональний асистент (читає ваш Stash/Crews/Spots/оголошення), чернетки дій (виставити спорядження, опублікувати статус, спланувати подорожі — ви підтверджуєте) та відповіді, що використовують ваш особистий контекст. До того ж ви напряму підтримуєте SkateSpots і зберігаєте його безкоштовним та без реклами. Безкоштовне залишається безкоштовним — Pro додає персональний шар. Натисніть **⚡ Go Pro** вгорі.", + proVersion: "Pro-версія мене 🦧⚡ додає **персонального асистента**: я можу читати ваш власний Stash, Crews, Spots та оголошення, готувати чернетки дій (виставити спорядження, опублікувати статус, спланувати подорож — ви завжди підтверджуєте першими) й використовувати ваш особистий контекст у відповідях. Це також напряму підтримує проєкт. Безкоштовний Sasquatch (пошук Spots/подій/тренерів/Crew, глосарій, планувальник подорожей) залишається безкоштовним. Натисніть **⚡ Go Pro** вгорі.", + perks: "Переваги Pro 🦧⚡: персональний асистент (ваш Stash/Crews/Spots/оголошення), чернетки дій, які ви підтверджуєте, та відповіді, що використовують ваш власний контекст — до того ж ви зберігаєте застосунок безкоштовним та без реклами. Натисніть **⚡ Go Pro** вгорі.", + goPro: "Натисніть кнопку **⚡ Go Pro** вгорі, щоб відкрити вікно оновлення. Pro відкриває мого персонального асистента (Stash/Crews/Spots/оголошення) та чернетки дій, а також напряму підтримує проєкт. Платіть Lightning — від 7 днів ~2k sats до 1 року ~36k sats. Безкоштовні функції залишаються безкоштовними. 🦧", + proPricing: "Тарифи Pro (платіть Lightning ⚡): **7 днів** ~2 000 sats (~$1.20), **1 місяць** ~5 000 sats (~$3), **3 місяці** ~12 000 sats (~$7, знижка 20%), **1 рік** ~36 000 sats (~$21, найвигідніше). Натисніть **⚡ Go Pro** вгорі.", + howMuchIsPro: "Тарифи Pro: 7 днів ~2 000 sats, 1 місяць ~5 000 sats, 3 місяці ~12 000 sats (знижка 20%), 1 рік ~36 000 sats (найвигідніше). Платіть Lightning ⚡. Натисніть **⚡ Go Pro** вгорі.", + upgrade: "Щоб перейти на Sasquatch Pro, натисніть кнопку **⚡ Go Pro** вгорі. Платіть Lightning (від 7 днів ~2k sats до 1 року ~36k). Pro відкриває мого персонального асистента та чернетки дій, а також напряму підтримує проєкт. 🦧⚡" + }, + statsTitle: "📊 **SkateSpots у цифрах**", + weatherTemp: "• {{temp}}°C (відчувається {{feels}}°C)", + weatherSkateability: "• Катабельність: **{{label}}** ({{score}}/100)", + weatherError: "Не вдалося прочитати погоду зараз. Спробуйте за секунду. 🌧️", + labelSpots: "Spots", + labelEvents: "події", + labelLabPros: "фахівці Lab", + labelCrews: "Crews", + labelShops: "скейт-магазини", + labelTours: "тури", + labelGear: "оголошення спорядження", + unnamed: "Без назви", + emptyWhere: " у **{{place}}**", + emptyResult: "Зараз не знайдено жодного {{label}}{{where}} 🦧\n\nМожливо, їх ще не додали — або Relay повільно відповіли. Спробуйте за мить, перевірте написання або [додайте перший на карту](https://skate-spots.org/map). 🛹", + foundTitle: "{{emoji}} Знайдено **{{count}}** {{label}}:\n{{lines}}{{more}}", + moreResults: "\n\n…і ще **{{count}}** — [побачити всі на карті](https://skate-spots.org/map) 🗺️", + locationDenied: "Я не бачу вашого місцезнаходження — нічого ніколи не покидає ваш пристрій; я читаю його локально лише коли ви просите, а браузер щойно відмовив. Натисніть 🎯 **Поблизу** на карті або назвіть місто: «Spots у Бангкоку». 🛹", + noNearbySpots: "Поблизу ще немає нанесених Spots 🦧 — [будьте першим, хто додасть](https://skate-spots.org/create-spot). 🛹", + closestTitle: "Найближчі до вас зараз:", + closestFooter: "_Обчислено на вашому пристрої — ваше місцезнаходження його не покидало._", + proNudge: "Це річ **Sasquatch Pro** 🦧⚡ — з Pro я можу читати ваш Stash, Crews, Spots та оголошення, готувати чернетки оголошень спорядження, «шукаю» та скейт-статусів і планувати ваші подорожі. Це Lightning-перепустка прихильника, що зберігає SkateSpots безкоштовним та без реклами. Натисніть кнопку **⚡ Go Pro** вгорі, щоб відкрити. 🛹", + draftingProPerk: "Готувати чернетки дій (публікація статусу, виставлення спорядження) — це перевага **Sasquatch Pro** 🦧⚡ — натисніть **⚡ Go Pro** вгорі, щоб відкрити.", + draftIntro: "Ось чернетка — перегляньте її й натисніть, щоб опублікувати. Нічого не публікується, доки ви не підтвердите. 🛹", + draftFailed: "Мені не вдалося до кінця зібрати ту чернетку — спробуйте знову розповісти деталі (напр. «вистав мої Wheels Spitfire за 8000 sats»).", + tripAskCity: "Куди? Назвіть місто (напр. «сплануй мені 3 дні в Лісабоні»), і я збудую подорож. 🗺️", + tripEmptyMap: "На карті ще нічого немає для **{{destination}}** 🦧 — будьте першим, хто додасть Spots на [skate-spots.org](https://skate-spots.org). Щойно місцеві додадуть Spots, Crews та події, я збудую вам повну подорож.", + tripLocked: "Зафіксовано місію **{{destination}}** для вас 🛹 — Spots, сесії та місцеві нижче. Змініть або збережіть.", + tripFailed: "Не вдалося отримати живі дані, щоб спланувати це зараз. Спробуйте за мить! 🛹", + tripEmptyMapLocal: "На карті ще нічого немає для **{{destination}}** 🦧 — будьте першим на [skate-spots.org](https://skate-spots.org).", + tripMissionLocal: "Ось місія **{{destination}}** 🛹 — Spots, сесії та місцеві нижче.", + relayFailed: "Relay зараз не відповіли вчасно 🛰️ — зазвичай це повільне з'єднання, а не відсутній Spot. Спробуйте ще раз за мить. 🛹", + couldNotProcess: "Хм, не вдалося це обробити. Спробуйте перефразувати!", + freeTierFallback: "Це потребує ШІ-міркування — функція **Sasquatch Pro** ⚡🦧\n\nЯ все ще можу знайти **Spots, події, тренерів, Crews, магазини, тури й спорядження** напряму з Relay — спитайте, напр. «Spots у Барселоні» — а [Глосарій](/glossary) охоплює 150+ трюків і термінів. Натисніть **⚡ Go Pro** вгорі, щоб відкрити ШІ-відповіді.", + aiDownFallback: "Мій ШІ-мозок зараз бере паузу 🦧 — але я все ще поруч:\n\n• 🗺️ [Карта](/) — Spots, магазини, події поблизу\n• 🧪 [The Lab](/lab) — тренери, оператори, монтажери\n• 📖 [Глосарій](/glossary) — 150+ трюків і термінів\n• 👥 [Crews](/crews) — знайдіть своїх\n\nАбо просто назвіть **місто** («Spots у Барселоні») чи **трюк** («що таке nollie») — і я відповім одразу. 🛹", + wentWrong: "Щось пішло не так на моєму боці. Спробуйте за секунду! 🦧", + publishError: "Не вдалося опублікувати: {{error}}. Спробуйте за секунду.", + unknownError: "невідома помилка" + } +}; +export { ukBatch2 }; export default ukBatch2; diff --git a/src/i18n/uk/batch3.ts b/src/i18n/uk/batch3.ts index f1bee88..e287eb5 100644 --- a/src/i18n/uk/batch3.ts +++ b/src/i18n/uk/batch3.ts @@ -1,4 +1,1294 @@ -/** uk — batch 3. Filled by the translation pass; empty until then. */ -const ukBatch3 = {}; +/** uk — batch 3. */ +const ukBatch3 = { + settingsUi: { + proSupport: { + title: "Pro та підтримка", + subtitle: "Необов'язкові додатки, що тримають SkateSpots безкоштовним", + prepaidTitle: "Передоплата, а не підписка", + prepaidBody: "Кожна покупка — разовий платіж у Bitcoin/Lightning: без акаунта, без регулярних списань, без зберігання коштів у нас. Повторна оплата продовжує ваш термін.", + sasquatchTitle: "Sasquatch Pro", + sasquatchBenefit: "Відкриває персонального AI-асистента — він може читати ваш власний Stash, Crew та оголошення — і допомагає фінансувати проєкт.", + active: "Активний", + activeUntil: "Активний до {{date}}", + daysLeft: "Залишилось {{count}} дн.", + notActive: "Неактивний", + goPro: "Перейти на Pro", + extend: "Продовжити Pro", + day: "день", + featuredTitle: "Рекламне розміщення", + featuredBenefit: "Підніміть оголошення вгору з бейджем Pro — для профілів The Lab, подій, Shop-ів і турів.", + featuredHow: "Рівні тривалості застосовуються до кожного типу; триваліші зобов'язання коштують дешевше за день. Ви додаєте розміщення, коли створюєте або редагуєте оголошення.", + featuredUntil: "До {{date}}", + yourFeatured: "Ваші рекламні оголошення", + noneFeatured: "Немає активних рекламних розміщень.", + freeTitle: "Безкоштовні шляхи", + freeBody: "AI FAQ і локальний пошук завжди безкоштовні, і ви можете опублікувати оголошення на маркетплейсі за допомогою безкоштовного proof-of-work замість плати в sats." + }, + notFound: { + seoTitle: "404 – Сторінку не знайдено", + seoDescription: "Сторінку, яку ви шукаєте, не знайдено. Поверніться на головну, щоб продовжити перегляд.", + message: "Ой! Сторінку не знайдено", + returnHome: "Повернутися на головну" + }, + loginArea: { + signUp: "Реєстрація", + logIn: "Увійти" + }, + accountSwitcher: { + switchAccount: "Змінити акаунт", + walletSettings: "Налаштування гаманця", + addAccount: "Додати ще один акаунт", + logout: "Вийти" + }, + amberHint: { + defaultAction: "надіслати", + multiBefore: "Ваш підписувач попросить вас підтвердити", + multiTimes: "{{approvals}} разів", + multiAfter: "щоб {{action}} — це нормально для зашифрованих повідомлень (одне підтвердження на отримувача). Підтвердьте кожне.", + single: "Ваш підписувач попросить вас підтвердити, щоб {{action}}." + }, + amberCallback: { + processing: "Обробка входу через Amber...", + gotResult: "Отримано результат: {{result}}", + noResultDebug: "Немає результату від Amber", + noResultToast: "Результат від Amber не отримано. Можливо, операцію скасовано.", + validPubkey: "Дійсний pubkey! Виконується вхід...", + loginSuccessful: "Вхід успішний!", + loginErrorDebug: "Помилка входу: {{error}}", + invalidResultDebug: "Невірний формат результату: {{result}}", + loggedInTitle: "Ви увійшли", + amberLoginDesc: "Успішний вхід через Amber!", + loginFailedTitle: "Не вдалося увійти", + loginFailedDesc: "Не вдалося завершити вхід через Amber. Спробуйте ще раз.", + invalidPubkeyDesc: "Від Amber отримано недійсний pubkey.", + sessionLostToast: "Дані сесії втрачено. Спробуйте ще раз.", + eventSignedTitle: "Подію підписано", + eventSignedDesc: "Вашу подію підписано через Amber.", + signingFailedTitle: "Не вдалося підписати", + signingFailedDesc: "Не вдалося обробити підписану подію від Amber.", + operationCompleteTitle: "Операцію завершено", + operationCompleteDesc: "{{op}} завершено." + }, + loginDialog: { + loginWithAmber: "Вхід через Amber (Android)", + welcomeTitle: "Ласкаво просимо до SkateSpots", + welcomeSubtitle: "Зареєструйтесь або увійдіть, щоб продовжити", + newHere: "Вперше тут?", + createFree: "Створіть безкоштовний акаунт. Електронна пошта не потрібна.", + createAccount: "Створити акаунт", + orLogIn: "Або увійдіть", + loggedInTitle: "🛹 Ви увійшли!", + loggedIn: "Ви увійшли!", + connectedAmber: "Підключено через Amber!", + amberLoginFailed: "Не вдалося увійти через Amber", + amberCancelled: "Вхід скасовано. Торкніться «Відкрити Amber», щоб спробувати ще раз.", + amberNotFound: "Amber не знайдено. Переконайтеся, що Amber встановлено із ZapStore.", + loginFailed: "Не вдалося увійти", + pubkeyError: "Вставте свій hex pubkey (64 символи) або npub з Amber", + pairedSigner: "З'єднано з вашим підписувачем.", + connectFailed: "Не вдалося підключитися до вашого підписувача.", + openedEncrypted: "Ваш зашифрований ключ відкрито.", + openKeyFailed: "Не вдалося відкрити цей ключ.", + bunkerPrefix: "Має починатися з bunker://", + connectedBunker: "Підключено через bunker!", + bunkerFailed: "Помилка: {{error}}", + checkBunkerUri: "Перевірте свій bunker URI", + nsecPrefix: "Має починатися з nsec1", + invalidNsec: "Недійсний nsec: {{error}}", + checkKey: "Перевірте свій ключ", + noExtensionTitle: "Розширення не знайдено", + noExtensionDesc: "Встановіть Alby або інше розширення NIP-07.", + amberIdleDesc: "Ваш ключ залишається всередині Amber. Одне торкання — підтвердьте в Amber, і ви повернетесь сюди вже з входом. Нічого копіювати не потрібно.", + continueWithAmber: "Продовжити з Amber", + noAmberGetIt: "Немає Amber? Отримайте його →", + waitingAmberTitle: "Очікування Amber…", + waitingAmberDesc: "Підтвердьте запит в Amber. Ви увійдете автоматично, щойно повернетесь.", + openAmberAgain: "Відкрити Amber знову", + havingTrouble: "Виникли труднощі? Введіть ключ вручну", + enterPublicKey: "Введіть свій публічний ключ", + enterPublicKeyDescBefore: "Лише якщо автоматичний процес не спрацював. В Amber: торкніться свого профілю →", + copyPublicKey: "Копіювати публічний ключ", + enterPublicKeyDescAfter: "потім вставте його сюди.", + connect: "Підключити", + back: "← Назад", + signInWithPhone: "Увійдіть за допомогою телефону", + signInWithPhoneDesc: "Скануйте за допомогою застосунку-підписувача (Amber, nsec.app). Ваш ключ ніколи не залишає телефон.", + showPairingCode: "Показати код з'єднання", + waitingSigner: "Очікування вашого підписувача…", + copyLink: "Копіювати посилання", + orPasteBunker: "або вставте bunker URL", + bunkerTitle: "Bunker (NIP-46)", + bunkerPasteBefore: "Вставте свій", + bunkerPasteAfter: "URI.", + amberInstructions: "Налаштування → NIP-46 Bunker → Створити → Копіювати", + nsecAppInstructions: "Підключити застосунок → Копіювати bunker URI", + secretKeyTitle: "Секретний ключ", + secretKeyRawDesc: "Вставте свій секретний ключ Nostr безпосередньо.", + secretKeyEncDesc: "Відкрийте резервну копію ключа, захищену паролем.", + rawNsec: "Необроблений nsec", + encryptedNip49: "Зашифрований (NIP-49)", + nsecWarning: "⚠️ Використовуйте це лише на довіреному пристрої. Ніколи нікому не передавайте свій nsec.", + login: "Увійти", + encSaferDesc: "Безпечніше: ключ залишається зашифрованим, доки ви не введете пароль, тож резервну копію можна безпечно зберігати в хмарі чи менеджері паролів.", + password: "Пароль", + openEncryptedKey: "Відкрити зашифрований ключ", + browserExtensionTitle: "Розширення браузера (NIP-07)", + browserExtensionDesc: "Найкраще для комп'ютера. Працює з Alby, nos2x, Flamingo.", + loginWithExtension: "Увійти через розширення" + }, + signupDialog: { + download: "Завантажити", + stepChoose: "Вибір", + stepProfile: "Профіль", + stepSaveKey: "Зберегти ключ", + somethingWrong: "Щось пішло не так", + createFailed: "Не вдалося створити ваш акаунт. Спробуйте ще раз.", + keySavedTitle: "Секретний ключ збережено!", + keySavedDesc: "Ваш ключ безпечно збережено.", + downloadFailedTitle: "Не вдалося завантажити", + downloadFailedDesc: "Не вдалося завантажити файл ключа. Скопіюйте його вручну.", + encSavedTitle: "Зашифровану резервну копію збережено 🔐", + encSavedDesc: "Збережіть і файл, і пароль — для повторного входу потрібні обидва.", + encFailed: "Не вдалося зашифрувати цей ключ.", + invalidFileTitle: "Недійсний тип файлу", + invalidFileDesc: "Виберіть файл зображення для вашого аватара.", + fileTooLargeTitle: "Файл завеликий", + fileTooLargeDesc: "Зображення аватара має бути меншим за 5 МБ.", + avatarUploadedTitle: "Аватар завантажено!", + avatarUploadedDesc: "Ваш аватар успішно завантажено.", + uploadFailedTitle: "Не вдалося завантажити", + uploadFailedDesc: "Не вдалося завантажити аватар. Спробуйте ще раз.", + nameRequiredTitle: "Потрібне відображуване ім'я", + nameRequiredDesc: "Виберіть відображуване ім'я, щоб інші скейтери знали, хто ви. Ви можете змінити його будь-коли.", + reserveFailedTitle: "Не вдалося зарезервувати це ім'я", + reserveFailedDesc: "{{error}} Ви можете зайняти його пізніше в налаштуваннях.", + profileCreatedTitle: "Профіль створено!", + profileCreatedDesc: "Ваш профіль налаштовано.", + profileFailedTitle: "Не вдалося налаштувати профіль", + profileFailedDesc: "Ваш акаунт створено, але налаштування профілю не вдалося. Ви можете оновити його пізніше.", + welcomeToastTitle: "Ласкаво просимо!", + welcomeToastDesc: "Ваш акаунт готовий.", + titleWelcome: "Приєднуйтесь до SkateSpots", + titleProfile: "Налаштуйте свій профіль", + titleDone: "Ласкаво просимо!", + createFreeAccount: "Створіть свій безкоштовний акаунт", + createFreeAccountDesc: "Без пошти, без телефону, без пароля. Ваш акаунт — це ключ Nostr; виберіть, де він зберігається.", + recommended: "Рекомендовано", + signUpWithAmber: "Зареєструватися через Amber", + signUpWithAmberDesc: "Ваш ключ створюється й зберігається всередині застосунку Amber — SkateSpots ніколи до нього не торкається. Найбезпечніше. Одне торкання для підтвердження.", + continueWithAmber: "Продовжити з Amber", + orQuickWay: "або швидкий спосіб", + quickAccount: "Швидкий акаунт на цьому пристрої", + quickAccountDesc: "Ми генеруємо ключ, який живе на цьому пристрої. Найшвидший старт — одразу після цього ми допоможемо зберегти резервну копію.", + createQuickAccount: "Створити швидкий акаунт", + quickReassurance: "Забирає 5 секунд · живе на цьому пристрої · невдовзі допоможемо зробити резервну копію", + preferAnotherSigner: "Віддаєте перевагу іншому підписувачу?", + iosDesktopNudge: "На iOS чи комп'ютері? Застосунок-підписувач або розширення браузера — найбезпечніший варіант —", + seeAllOptions: "Побачити всі варіанти", + youreInPickName: "Ви в грі! 🛹 Виберіть відображуване ім'я, щоб скейтери знали, хто ви", + changeAnytime: "Ви можете змінити його будь-коли. Біо й аватар — необов'язкові.", + publishingProfile: "Публікація вашого профілю...", + displayName: "Відображуване ім'я", + displayNamePlaceholder: "напр. Tony, gnarlyGrind або назва вашого Crew", + displayNameHint: "Обов'язково — як вас бачитимуть у всьому SkateSpots. Змініть будь-коли.", + skateName: "Ваше ім'я в SkateSpots", + skateNameHint: "Безкоштовно й необов'язково — перевірений нікнейм, що показує ✓ у вашому профілі.", + bio: "Біо", + bioPlaceholder: "Розкажіть іншим про себе...", + avatar: "Аватар", + uploadAvatar: "Завантажити зображення аватара", + saving: "Збереження...", + saveAndStart: "Зберегти й почати катати", + addNameToContinue: "Додайте відображуване ім'я, щоб продовжити.", + savingPublishesNote: "Збереження публікує ваш профіль у Nostr — ваш підписувач може попросити підтвердити один раз.", + youreIn: "Ви в грі! 🛹", + oneQuickThing: "Одна швидка річ, перш ніж ви почнете…", + saveLoginKey: "Збережіть свій ключ входу", + saveLoginKeyBefore: "Це", + only: "єдиний", + saveLoginKeyAfter: "спосіб повернутися до свого акаунта — без пошти, без скидання пароля. Збережіть його зараз, і ви зможете увійти на будь-якому пристрої, будь-де, де катаєтесь.", + revealSaveKey: "Показати й зберегти мій ключ", + recoveryCopied: "Код відновлення скопійовано. Зберігайте його в надійному місці.", + saved: "Збережено", + treatLikeBoardKeys: "Ставтеся до нього як до ключів від своєї дошки — будь-хто з цим кодом керує вашим акаунтом. Ніколи нікому його не передавайте.", + hideEncBackup: "Сховати зашифровану копію", + saveEncBackup: "Зберегти зашифровану резервну копію", + encBackupBefore: "Копія, захищена паролем — безпечна для зберігання в хмарі чи менеджері паролів. Вам знадобиться файл", + and: "і", + encBackupAfter: "пароль.", + choosePassword: "Виберіть пароль", + saveEncBackupCta: "Зберегти зашифровану копію", + savedCodeAria: "Я зберіг свій код відновлення", + savedCodeLabel: "Я зберіг свій код відновлення в надійному місці — менеджері паролів або записав офлайн.", + letsSkate: "Погнали", + saveLater: "Я збережу пізніше в налаштуваннях", + advancedSigner: "Для досвідчених: скористайтеся застосунком-підписувачем" + }, + mnemonic: { + generatedTitle: "Фразу відновлення згенеровано! 🎉", + generatedDesc: "Запишіть ці 12 слів по порядку. Вони — ключ до вашого акаунта!", + savedTitle: "Фразу відновлення збережено!", + savedDesc: "Зберігайте цей файл у надійному місці.", + downloadFailedTitle: "Не вдалося завантажити", + downloadFailedDesc: "Не вдалося завантажити файл. Скопіюйте вручну.", + copiedTitle: "Скопійовано в буфер обміну!", + copiedDesc: "Вашу фразу відновлення скопійовано.", + qrWindowTitle: "QR-код фрази відновлення", + qrHeading: "QR-код вашої фрази відновлення", + qrAlt: "QR-код фрази відновлення", + qrWarning: "Тримайте цей QR-код у таємниці та безпеці!", + qrPrint: "Друкувати QR-код", + qrFailedTitle: "Помилка QR-коду", + qrFailedDesc: "Не вдалося згенерувати QR-код.", + accountCreatedTitle: "Акаунт створено! 🎉", + accountCreatedDesc: "Усе готово! Ваша фраза відновлення в безпеці.", + loginFailedTitle: "Не вдалося увійти", + loginFailedDesc: "Не вдалося створити акаунт. Спробуйте ще раз.", + verifyFailedTitle: "Перевірка не вдалася", + verifyFailedDesc: "Слова не збігаються. Перевірте й спробуйте ще раз.", + titlePrefix: "Створити акаунт за допомогою", + titleSuffix: "фрази відновлення", + twelveWordTitle: "Фраза відновлення з 12 слів", + twelveWordDesc: "Ваша фраза відновлення схожа на майстер-пароль. Запишіть її на папері й зберігайте в безпеці. Вона знадобиться, щоб отримати доступ до акаунта з інших пристроїв або якщо ви очистите дані браузера.", + generate: "Згенерувати фразу відновлення", + useNsecInstead: "Натомість використати розширений nsec-ключ", + yourPhrase: "Ваша фраза відновлення", + copy: "Копіювати", + download: "Завантажити", + qrCode: "QR-код", + criticalWarning: "Критичне попередження про безпеку", + warnWriteStrong: "Запишіть її", + warnWrite: "на папері та зберігайте в безпеці", + warnNeverShareStrong: "Ніколи не передавайте", + warnNeverShare: "свою фразу відновлення нікому", + warnBackupsStrong: "Тримайте кілька резервних копій", + warnBackups: "у різних надійних місцях", + warnAnyoneStrong: "Будь-хто з цією фразою", + warnAnyone: "назавжди контролює ваш акаунт", + warnLoseStrong: "Якщо ви її втратите", + warnLose: "ви назавжди втратите свій акаунт", + savedSecurely: "Я зберіг її надійно", + verifyTitle: "Підтвердьте свою фразу відновлення", + verifyDesc: "Щоб переконатися, що ви зберегли її правильно, введіть ці слова:", + wordLabel: "Слово №{{n}}", + wordPlaceholder: "Введіть слово №{{n}}", + goBack: "Назад", + verifyCreate: "Підтвердити й створити акаунт", + completeTitle: "Акаунт створено!", + completeDesc: "Ваш акаунт Nostr готовий!", + signerTitle: "Рекомендовано: налаштуйте застосунок-підписувач", + signerSubtitle: "Тримайте свої ключі в додатковій безпеці", + signerDesc: "Для кращої безпеки використовуйте спеціальний застосунок-підписувач, а не вставляйте свою фразу відновлення всюди. Застосунки-підписувачі зберігають ваші ключі в безпеці, дозволяючи користуватися будь-яким застосунком Nostr.", + signerCta: "Дізнатися про застосунки-підписувачі", + skip: "Поки що пропустити" + }, + signupMethod: { + titlePrefix: "Виберіть свій", + titleSuffix: "спосіб реєстрації", + subtitle: "Обидва способи безпечні. Виберіть той, що вам найзручніший!", + recommended: "Рекомендовано", + mnemonicTitle: "Фраза відновлення", + mnemonicDesc: "12 легких для запам'ятовування слів. Галузевий стандарт, який використовують Bitcoin, Ethereum та більшість криптогаманців.", + mnemonicF1: "Легко записати на папері", + mnemonicF2: "Працює з іншими застосунками Nostr (NIP-06)", + mnemonicF3: "Може генерувати кілька акаунтів", + mnemonicF4: "Звична для користувачів криптовалют", + useMnemonic: "Використати фразу відновлення", + advanced: "Для досвідчених", + nsecTitle: "Секретний ключ (nsec)", + nsecDesc: "Необроблений криптографічний ключ. Технічніший, але дає прямий доступ до вашої ідентичності Nostr.", + nsecF1: "Прямий криптографічний контроль", + nsecF2: "Сумісний з усіма застосунками Nostr", + nsecF3: "Один рядок для резервної копії", + nsecF4: "Без шару виведення", + useNsec: "Використати секретний ключ", + footer: "🔒 Обидва способи однаково безпечні. Виберіть за своїми вподобаннями!" + }, + skateNip05: { + placeholder: "вашеім'я", + claimedSuffix: "— ваше — збережіть профіль, щоб опублікувати його.", + checking: "Перевірка доступності…", + available: "{{name}}@{{domain}} доступний", + claim: "Зайняти його", + hint: "Літери, цифри, дефіси. Безкоштовно й показується як значок ✓ у вашому профілі." + }, + nip05Required: { + getFree: "Отримати безкоштовний / дешевий NIP-05", + paid: "Платно", + requiredTitle: "Потрібна верифікація NIP-05", + bannerReason: "Щоб запобігти спаму й зміцнити довіру, {{role}} потрібна перевірена адреса Nostr (NIP-05).", + gateReason: "Щоб запобігти спаму й зміцнити довіру, {{role}} мусить мати верифікацію NIP-05.", + addInSettings: "Додати NIP-05 у налаштуваннях", + explainer: "NIP-05 доводить вашу особу, прив'язуючи ваш профіль Nostr до домену — як", + updateProfile: "Оновити свій профіль" + }, + editProfile: { + uploadSuccessTitle: "Успіх", + uploadSuccessDesc: "{{field}} успішно завантажено", + uploadErrorDesc: "Не вдалося завантажити {{field}}. Спробуйте ще раз.", + mustBeLoggedIn: "Ви маєте увійти, щоб оновити свій профіль", + invalidClinkTitle: "Недійсний код CLINK", + invalidClinkDesc: "Це не схоже на дійсний код noffer1… Очистіть його або вставте дійсний.", + invalidLightningTitle: "Недійсна адреса Lightning", + invalidLightningDesc: "Використовуйте адресу у форматі електронної пошти, наприклад you@walletofsatoshi.com.", + invalidSpTitle: "Недійсна адреса Silent Payment", + invalidSpDesc: "Адреса Silent Payment починається з «sp1» і досить довга. Очистіть її або вставте дійсну.", + invalidCordnTitle: "Недійсне посилання Cordn", + invalidCordnDesc: "Вставте повне контактне посилання Cordn https://…", + updateSuccessTitle: "Успіх", + updateSuccessDesc: "Ваш профіль оновлено", + updateErrorDesc: "Не вдалося опублікувати профіль. Перевірте підключення до Relay у Налаштуваннях > Relay", + identityTitle: "Ідентичність", + identityDesc: "Як вас бачать у всьому SkateSpots.", + displayName: "Відображуване ім'я", + displayNamePlaceholder: "Ваше ім'я", + bio: "Біо", + bioPlaceholder: "Кілька слів про вас і ваше катання…", + profilePicture: "Фото профілю", + pictureDesc: "Завантажте або вставте квадратне зображення.", + bannerImage: "Банер", + bannerDesc: "Широке зображення для верхньої частини вашого профілю.", + website: "Вебсайт", + bitcoinTitle: "Bitcoin і платежі", + bitcoinDesc: "Дозвольте людям надсилати вам Zap, чайові та платити напряму — без посередників.", + lightningAddress: "Адреса Lightning", + lud16Invalid: "Використовуйте адресу у форматі електронної пошти, напр. you@yourdomain.com.", + lud16Ok: "Живить кнопку «Zap» у вашому профілі.", + lud16Hint: "Миттєві чайові в Bitcoin. Живить кнопку «Zap» у вашому профілі.", + silentPaymentAddress: "Адреса Silent Payment", + spInvalid: "Має починатися з «sp1» і бути досить довгою.", + spOk: "Дійсна — багаторазова приватна адреса в мережі.", + spHint: "Повторно використовувана статична адреса в мережі (BIP-352). Поділіться нею один раз; кожен платіж неможливо пов'язати.", + clinkTipCode: "Код чайових CLINK", + nofferInvalid: "Це не схоже на дійсний код noffer1…", + nofferOk: "Дійсний — кнопка «Чайові в Bitcoin» з'явиться у вашому профілі.", + nofferHint: "Код CLINK із самостійним зберіганням, щоб будь-хто міг надіслати вам чайові через Nostr — без посередників.", + skateProfileTitle: "Профіль скейтера", + skateProfileDesc: "Показуйте своїх спонсорів і як Crew може з вами зв'язатися.", + badges: "Значки", + badgesHint: "(напис + необов'язкове посилання)", + badgeExample: "напр. Independent Trucks", + badgeLabelPlaceholder: "Напис значка…", + badgeUrlPlaceholder: "https://… (необов'язково)", + removeBadge: "Видалити значок", + addBadge: "Додати значок", + badgesDescBefore: "Спонсори, Shop-и чи люди, які підтримують ваше катання — і будь-що інше, чим хочете похвалитися. Кожен стає клікабельним чипом у вашому профілі. Ваш", + badgesDescAfter: "значок учасника додається автоматично.", + coordinator: "Координатор", + cordnInvalid: "Це не схоже на координатора. Вставте nprofile, посилання cordn.net або URL https://.", + cordnOk: "Показується у вашому профілі — інші можуть додати його одним торканням.", + cordnHint: "Координатор Cordn, який інші використовують, щоб писати вам. Приватний, зашифрований, ваш.", + useMyCoordinator: "Використати мій координатор", + accountTitle: "Акаунт", + accountDesc: "Додаткові налаштування акаунта.", + botAccount: "Акаунт-бот", + botAccountDesc: "Позначити цей акаунт як автоматизований або бота.", + saving: "Збереження…", + saveProfile: "Зберегти профіль", + nip05VerifiedHandle: "Перевірений нікнейм NIP-05", + nip05How: "Як?", + extraHandles: "Додаткові нікнейми", + extraHandlesHint: "необов'язково — додайте до 5", + nip05HintEmpty: "Перевірений нікнейм на кшталт you@yourdomain.com — версія синьої галочки від Nostr. Показує значок ✓ у вашому профілі та відкриває фільтр «Перевірені» в довіднику скейтерів.", + nip05Invalid: "Використовуйте нікнейм у форматі електронної пошти, напр. you@yourdomain.com — без «https://» і пробілів.", + nip05Checking: "Перевірка вашого домену…", + nip05Verified: "Перевірено — ваш домен підтверджує, що цей нікнейм належить вам. ✓", + nip05Mismatch: "Ваш домен прив'язує цей нікнейм до ІНШОГО ключа. Виправте свій .well-known/nostr.json, щоб він указував на цей акаунт.", + nip05Unreachable: "Поки що не вдалося достукатися до /.well-known/nostr.json вашого домену. Збережені нікнейми все одно працюватимуть, щойно домен налаштовано правильно.", + nip05Enter: "Введіть свій нікнейм NIP-05.", + freeHandleBefore: "Немає власного домену? Займіть безкоштовний", + freeHandleAfter: "нікнейм від SkateSpots.", + uploadLabel: "Завантажити {{label}}", + previewLabel: "Попередній перегляд {{label}}" + }, + security: { + recoveryCopied: "Код відновлення скопійовано. Зберігайте його в надійному місці.", + savedTitle: "Збережено!", + recoveryDownloaded: "Код відновлення завантажено. Зберігайте його в надійному місці.", + downloadFailedTitle: "Не вдалося завантажити", + downloadFailedDesc: "Скопіюйте його вручну.", + loginRequired: "Потрібен вхід", + loginRequiredDesc: "Увійдіть, щоб отримати доступ до налаштувань безпеки.", + backupConfirmedTitle: "Резервну копію підтверджено! ✅", + backupConfirmedDesc: "Чудово! Ваші ключі в безпеці.", + yourRecoveryCode: "Ваш код відновлення", + recoveryCodeDesc: "Не зберегли його під час реєстрації? Ви можете взяти його тут будь-коли.", + recoveryCodeBefore: "Цей код —", + only: "єдиний", + recoveryCodeAfter: "спосіб знову увійти на новому пристрої чи в браузері. Збережіть його в надійному місці (менеджер паролів або записаний на папері). Будь-хто, хто його має, контролює ваш акаунт — ніколи не передавайте його.", + revealRecovery: "Показати мій код відновлення", + qrHint: "Скануйте іншим застосунком Nostr для входу. Тримайте цей екран у таємниці.", + neverShareHide: "⚠️ Ніколи не передавайте це. Сховайте, коли закінчите.", + hide: "Сховати", + amberNoteBefore: "Ви увійшли через", + amberNoteAfter: ". Ваш код відновлення зберігається всередині Amber — відкрийте застосунок Amber, щоб зробити його копію. SkateSpots ніколи не бачить ваш ключ.", + bunkerNoteBefore: "Ви увійшли через", + remoteSigner: "віддалений підписувач (bunker)", + bunkerNoteAfter: ". Ваш код відновлення зберігається у службі-підписувачі, а не в SkateSpots. Зробіть його копію там.", + extensionNoteBefore: "Ви увійшли через", + browserExtension: "розширення браузера", + extensionNoteAfter: ". Ваш код відновлення зберігається в розширенні — скористайтеся його власним варіантом резервного копіювання/експорту. SkateSpots ніколи не бачить ваш ключ.", + otherNote: "Вашим кодом відновлення керує застосунок-підписувач, а не SkateSpots. Зробіть його копію там.", + backupWarningTitle: "⚠️ Ви зробили резервну копію своєї фрази відновлення чи секретного ключа?", + backupWarningBody: "Ваші ключі — ЄДИНИЙ спосіб отримати доступ до акаунта. Якщо ви їх втратите, ви втратите все — скидання пароля не існує!", + iveBackedUp: "Я зробив резервну копію своїх ключів", + backupConfirmed: "✅ Резервну копію підтверджено", + backupNotConfirmed: "⚠️ Резервну копію не підтверджено", + backupConfirmedStatusDesc: "Ви підтвердили, що ваші ключі надійно збережено.", + backupNotConfirmedDesc: "Обов'язково зробіть резервну копію фрази відновлення або секретного ключа!", + notSavedYetBefore: "Ще не зберегли свій код відновлення? Не проблема — візьміть його з", + notSavedYetAfter: "розділу вище, збережіть у надійному місці, а потім підтвердьте нижче.", + yesBackedUp: "Так, я зробив резервну копію своїх ключів", + bestPracticesTitle: "Найкращі практики захисту ключів", + bestPracticesDesc: "Як зберегти свій акаунт Nostr у безпеці", + bp1Title: "Запишіть його на папері", + bp1Desc: "Фізична резервна копія — найбезпечніша. Зберігайте в надійному місці, як-от сейф.", + bp2Title: "Кілька резервних копій", + bp2Desc: "Тримайте копії в різних надійних місцях (домашній сейф, банківська комірка тощо)", + bp3Title: "Ніколи не передавайте свої ключі", + bp3Desc: "Справжні застосунки Nostr НІКОЛИ не запитують ваш nsec чи фразу відновлення після початкового входу", + bp4Title: "Не зберігайте в хмарі без шифрування", + bp4Desc: "Уникайте Google Docs, чернеток електронної пошти чи хмарних сховищ зі звичайним текстом", + bp5Title: "Подумайте про використання розширення браузера", + bp5Desc: "Alby, nos2x або Flamingo зберігають ваші ключі в безпеці й ніколи не розкривають їх вебсайтам", + importantReminders: "⚠️ Важливі нагадування", + rem1: "Якщо ви втратите ключі, ви назавжди втратите акаунт", + rem2: "Жодна компанія чи людина не може скинути ваш пароль — навіть ми", + rem3: "Будь-хто з вашими ключами має повний контроль над вашим акаунтом", + rem4: "Ваші ключі керують усіма вашими даними Nostr у ВСІХ застосунках", + recommendedSigners: "🔌 Рекомендовані підписувачі Nostr", + recommendedSignersDesc: "Використовуйте підписувач Nostr для кращої безпеки та зручності", + recommended: "Рекомендовано", + amberDesc: "Безпечний підписувач Nostr для Android. Зберігає ваші ключі в безпеці на телефоні та підписує події, не розкриваючи їх.", + albyDesc: "Повнофункціональне розширення з гаманцем Lightning, підтримкою WebLN і NWC.", + flamingoDesc: "Простий, чистий інтерфейс. Зосереджений на підписуванні Nostr без функцій гаманця.", + nos2xDesc: "Мінімальне, легке розширення для досвідчених користувачів.", + nostrConnectTitle: "☁️ Nostr Connect (віддалені підписувачі)", + nostrConnectDesc: "Використовуйте віддалений підписувач, щоб отримати доступ до акаунта з будь-якого пристрою", + nostrConnectBody: "Nostr Connect (також званий «bunker») дозволяє зберігати ключі на захищеному сервері та входити з будь-якого пристрою. Ваші ключі ніколи не залишають сервер, але ви можете користуватися акаунтом будь-де!", + nsecAppDesc: "Безкоштовний, безпечний віддалений підписувач. Створіть bunker:// URI і вставте його під час входу.", + nostrumDesc: "Ще один варіант віддаленого підписувача з підтримкою мобільних пристроїв.", + howToUse: "💡 Як користуватися:", + howToUseDesc: "Створіть акаунт на одному з цих сервісів, отримайте свій рядок підключення bunker://, а потім вставте його на вкладці «Nostr Connect» під час входу." + }, + relayList: { + connected: "Підключено", + connecting: "Підключення…", + offline: "Офлайн", + removeUrl: "Видалити {{url}}", + add: "Додати", + publishedTitle: "Список Relay опубліковано", + publishedDesc: "Синхронізовано з Nostr (kind 10002).", + publishFailedTitle: "Не вдалося опублікувати список Relay", + invalidUrlTitle: "Недійсний URL Relay", + invalidUrlDesc: "Спробуйте щось на кшталт wss://relay.example.com", + alreadyInList: "Relay уже у вашому списку", + keepReadWriteTitle: "Залиште читання або запис увімкненим", + keepReadWriteDesc: "Relay потребує принаймні одного з: читання/запис.", + alreadyInThisList: "Relay уже в цьому списку", + dmPublishedTitle: "DM Relay опубліковано", + dmPublishedDesc: "Вхідні NIP-17 оновлено.", + dmPublishFailedTitle: "Не вдалося опублікувати DM Relay", + nip65Title: "Relay (NIP-65)", + nip65DescUser: "Торкніться «Читання» / «Запис», щоб перемкнути. Публікується в Nostr як ваш список kind 10002.", + nip65DescLoggedOut: "Торкніться «Читання» / «Запис», щоб перемкнути. Увійдіть, щоб опублікувати свій список у Nostr.", + noRelays: "Relay поки немає — додайте нижче.", + local: "Локальний", + read: "Читання", + readHint: "Отримувати контент із цього Relay", + write: "Запис", + writeHint: "Публікувати свої події на цей Relay", + dmTitle: "Relay вхідних DM", + dmDesc: "Де ви отримуєте прямі повідомлення NIP-17 (kind 10050). Якщо порожньо, використовуються ваші Relay для запису.", + localTitle: "Локальні Relay", + localDesc: "Лише для застосунку (напр. вузол у локальній мережі). Використовується для читання й запису; ніколи не публікується.", + blockedTitle: "Заблоковані Relay", + blockedDesc: "Ніколи не підключатися до них — виключені з кожного читання й запису." + }, + relatr: { + searchingTitle: "Пошук служби Relatr...", + searchingDesc: "Запит до Nostr про профілі Relatr", + foundTitle: "Службу Relatr знайдено!", + foundDesc: "Служба: {{name}}", + unknown: "Невідомо", + notFoundTitle: "Службу Relatr не знайдено", + notFoundDesc: "Спробуйте ввести pubkey вручну або перевірте https://www.relatr.xyz/", + searchFailedTitle: "Пошук не вдався", + searchFailedDesc: "Не вдалося запитати Nostr про профілі Relatr", + invalidPubkeyTitle: "Недійсний pubkey", + invalidPubkeyDesc: "Введіть дійсний hex pubkey з 64 символів", + enabledTitle: "Relatr увімкнено!", + enabledDesc: "Глобальні оцінки довіри тепер активні.", + disabledTitle: "Relatr вимкнено", + disabledDesc: "Оцінки довіри більше не завантажуються.", + title: "Оцінки довіри Relatr", + desc: "Глобальні оцінки довіри допомагають визначати надійних користувачів і зменшувати спам", + status: "Статус", + active: "Активно", + disabled: "Вимкнено", + activeStrong: "Relatr активний.", + activeDesc: "Оцінки довіри з глобального аналізу мережі ContextVM допомагають визначати надійних скейтерів і зменшувати спам.", + disabledStrong: "Relatr вимкнено.", + disabledHint: "Увімкніть його, щоб отримувати оцінки довіри з глобальної мережі Nostr.", + disable: "Вимкнути Relatr", + enable: "Увімкнути Relatr", + advancedSettings: "Розширені налаштування", + servicePubkey: "Pubkey служби Relatr", + pubkeyPlaceholder: "Введіть hex pubkey з 64 символів...", + searching: "Пошук...", + autoDiscover: "Автовиявлення", + pubkeyDefault: "За замовчуванням: офіційна служба Relatr від ContextVM (npub1dvmc...)", + relayLabel: "Relay (де Relatr публікує оцінки)", + relayDefault: "За замовчуванням: wss://relay.contextvm.org (офіційний Relay ContextVM)", + applyChanges: "Застосувати зміни", + learnMore: "Дізнатися більше:", + website: "Вебсайт Relatr", + github: "GitHub Relatr", + nip85Spec: "Специфікація NIP-85" + }, + followList: { + unfollow: "Відписатися", + title: "Ваша мережа Nostr", + desc: "Керуйте тими, на кого підписані. Підписка на користувачів допомагає будувати вашу Мережу довіри та визначає, які Spot показують значки довіри.", + following: "Підписки ({{count}})", + followers: "Підписники ({{count}})", + follow: "Підписатися", + followHint: "💡 Вставте pubkey Nostr (npub1...), адресу NIP-05 (user@domain.com) або hex pubkey", + notFollowing: "Ви ще ні на кого не підписані", + notFollowingHint: "Підписуйтесь на скейтерів, щоб бачити їхні Spot із значками ✅ ПЕРЕВІРЕНО", + trustActiveStrong: "✅ Значки довіри активні:", + trustActive: "Spot, створені людьми, на яких ви підписані, тепер показуватимуть значки ПЕРЕВІРЕНО. Spot від їхніх друзів показуватимуть значки ДОВІРЕНО.", + noFollowers: "Підписників поки немає", + noFollowersHint: "Поділіться своїм профілем Nostr, щоб отримати підписників!", + howTitle: "💡 Як підписки впливають на значки довіри", + verifiedStrong: "✅ ПЕРЕВІРЕНО (зелений):", + verifiedDesc: "Spot, створені людьми, на яких ви підписані напряму", + trustedStrong: "🟡 ДОВІРЕНО (жовтий):", + trustedDesc: "Spot, створені людьми, на яких підписані ваші друзі (2 кроки)", + unverifiedStrong: "⚪ Неперевірено:", + unverifiedDesc: "Spot від користувачів без зв'язку з вашою мережею", + tip: "💡 Порада: підписуйтесь на активних скейтбордистів, щоб бачити більше перевірених Spot і будувати свою мережу довіри!" + }, + notify: { + enableTitle: "Увімкнути сповіщення", + enableDesc: "Подавайте сигнал на цей пристрій, коли щось потребує вашої уваги.", + checkingPermission: "Перевірка дозволу…", + unsupported: "Цей пристрій тут не підтримує сповіщення. Перебудуйте застосунок Android, щоб увімкнути їх на телефоні.", + denied: "Сповіщення заблоковано для цього сайту. Дозвольте їх у налаштуваннях браузера/ОС, потім спробуйте ще раз.", + backgroundTitle: "Фонові сповіщення", + backgroundDesc: "Отримуйте сигнали про повідомлення й угоди, навіть коли SkateSpots закрито.", + pushUnsupported: "Цей браузер не підтримує фоновий push. На мобільному додайте SkateSpots на головний екран.", + pushPrivacy: "Щоб досягти вас, коли застосунок закрито, сервер сповіщень SkateSpots отримує сигнал від вашого Relay, коли для вашого ключа щось надходить, і передає його в службу push вашого телефону. Він бачить лише те, що для вашого ключа щось є — ніколи не те, хто надіслав чи що там написано, і не може розшифрувати ваші повідомлення. Згода на кожен пристрій окремо.", + bgDeliveryTitle: "Фонова доставка (Android)", + bgDeliveryDesc: "Перевіряйте нові повідомлення, пропозиції та угоди, поки застосунок закрито — без сервісів Google.", + off: "Вимкнено", + standard: "Стандартно (~15 хв)", + fast: "Швидко (~5 хв)", + bgDeliveryNote: "Стандартно — за можливості; Android може відкласти це під час Doze. Швидко показує постійне сповіщення й витрачає більше батареї. Нічого не розшифровується на нашому сервері.", + notifyMeAbout: "Сповіщати мене про", + couldNotEnable: "Не вдалося увімкнути", + sendTest: "Надіслати тестове сповіщення", + testTitle: "Сповіщення SkateSpots увімкнено 🛹", + testBody: "Ось як виглядатиме DM, Zap чи запрошення до Crew.", + footerBefore: "Сповіщення створюються на вашому пристрої з даних, які застосунок уже має, а сповіщення про прямі повідомлення ніколи не розшифровують ваші повідомлення — тож Amber ніколи не просять відкрити якесь із них. Якщо", + footerAfter: "вимкнено, до повністю закритого застосунку не достукатися, тож сповіщення надійдуть наступного разу, коли ви відкриєте SkateSpots.", + cat_dms_label: "Прямі повідомлення", + cat_dms_hint: "Хтось надсилає вам приватне повідомлення", + cat_crew_label: "Crew", + cat_crew_hint: "Запрошення, запити на приєднання та підтвердження членства", + cat_social_label: "Zap, відповіді та згадки", + cat_social_hint: "Реакції, репости, Zap, відповіді та оновлення подій", + cat_newsletter_label: "Розсилка", + cat_newsletter_hint: "Нові випуски SkateSpots (лише для підписників)", + cat_trades_label: "Пропозиції та угоди", + cat_trades_hint: "Пропозиції, зустрічні пропозиції та підтвердження угод", + cat_reminders_label: "Нагадування про події", + cat_reminders_hint: "Нагадування за годину до подій, на які ви йдете (застосунок Android)" + }, + regionBackfill: { + taggedTitle: "Позначено {{count}} місце{{s}}", + taggedSkipped: "{{count}} пропущено (немає координат або збігу в геокодері).", + taggedOk: "Теги регіонів записано на громадський Relay.", + nothingTitle: "Нічого позначати", + nothingDesc: "Жодну мітку не вдалося геокодувати. Спробуйте пізніше.", + failedTitle: "Заповнення не вдалося", + title: "Заповнити теги регіонів", + admin: "Адмін", + descBefore: "Мітки, створені до появи геокодування, мають координати, але без тегу міста/країни, тож мапа малює їх, а статистика спільноти може лише сказати «Без категорії». Це повторно виводить теги з кожної мітки та повторно публікує", + descStrong: "ваші власні", + descAfter: "Spot і Shop без тегів.", + scanning: "Сканування ваших Spot…", + allTagged: "Кожен ваш Spot і Shop уже має тег регіону. 🎉 Будь-які решта міток «Без категорії» належать іншим картографам — лише їхні власні ключі можуть їх позначити.", + countLine: "{{count}} ваших Spot{{s}}/Shop не мають тегу регіону. Ваш підписувач може попросити підтвердити кожен.", + tagging: "Позначення {{done}}/{{total}}…", + run: "Заповнити теги регіонів", + summary: "{{updated}} оновлено · {{skipped}} пропущено · {{failed}} з помилками" + }, + adminReview: { + title: "Черга перевірки", + flagged: "{{count}} Spot{{s}} подають сигнали сміття — сховайте або відхиліть.", + clean: "Spot, схожі на тестові записи чи офтопні мітки." + }, + grantPro: { + invalidNpub: "Введіть дійсний npub (або hex pubkey)", + invalidDays: "Кількість днів має бути додатним числом", + grantedTitle: "Pro надано ⚡", + grantedDesc: "{{npub}} до {{date}}", + failedTitle: "Не вдалося надати", + title: "Надати Sasquatch Pro", + owner: "Власник", + desc: "Ручний варіант на випадок підтвердженого платежу, який пропустив Zap-квитанцію. Публікує надання, підписане власником; користувач не може його підробити.", + targetPlaceholder: "npub1… (або hex)", + grant: "Надати" + }, + myData: { + reactionTitle: "Реакція {{emoji}}", + deleting: "Видалення...", + requestDeletion: "Запросити видалення", + selectContentTitle: "Виберіть контент для видалення", + selectContentDesc: "Виберіть конкретні елементи, для яких хочете запросити видалення.", + all: "Усе", + spots: "Spot", + events: "Події", + shops: "Shop", + listings: "Оголошення", + collections: "Колекції", + lab: "Lab", + posts: "Дописи", + reactions: "Реакції", + selectAll: "Вибрати все", + selectAllVisible: "Вибрати все видиме", + selectedCount: "{{count}} вибрано", + noItemsCategory: "У цій категорії немає елементів", + decentralizedStrong: "Важливо:", + decentralizedNote: "Nostr децентралізований. Relay мають виконувати запити на видалення, але деякі можуть цього не робити. Це не гарантоване остаточне видалення.", + deleteCount: "Видалити {{count}} елемент{{s}}", + noDataTitle: "Немає даних для експорту", + noDataDesc: "Ви ще не опублікували жодної події.", + exportedTitle: "Дані експортовано!", + exportedDesc: "Завантажено {{count}} подій у форматі JSON.", + deletionRequestedTitle: "Видалення запитано", + deletionRequestedDesc: "Запит на видалення опубліковано на Relay.", + deletionRequestedMany: "Запрошено видалення {{count}} елементів. Зауважте: деякі Relay можуть не виконати цей запит.", + deletionFailedTitle: "Видалення не вдалося", + deletionFailedDesc: "Не вдалося опублікувати запит на видалення. Спробуйте ще раз.", + loginRequired: "Потрібен вхід", + loginRequiredDesc: "Увійдіть, щоб переглядати свої дані та керувати ними.", + title: "Мої дані", + desc: "Ваш контент у мережі Nostr. Ви володієте цими даними — експортуйте будь-коли або запросіть видалення.", + coachFilmer: "Тренер/Оператор", + zaps: "Zap", + received: "Отримано", + exportAll: "Експортувати всі дані", + recentActivity: "Остання активність", + viewAll: "Переглянути все ({{count}})", + noDataPublished: "Даних ще не опубліковано", + startBy: "Почніть із", + addingASpot: "додавання Spot", + aboutYourData: "Про ваші дані", + ownDataStrong: "Ви володієте своїми даними.", + ownData: "Увесь контент підписано вашими криптографічними ключами та збережено на Relay Nostr. Жодна компанія ним не керує.", + exportAnytimeStrong: "Експортуйте будь-коли", + exportAnytime: "- Завантажте всі свої події у форматі JSON", + portableStrong: "Портативність", + portable: "- Використовуйте свої ключі в будь-якому застосунку Nostr", + selectiveStrong: "Вибіркове видалення", + selective: "- Виберіть, що саме видалити", + caveatStrong: "Застереження щодо децентралізації", + caveat: "- Деякі Relay можуть зберігати дані попри запити на видалення" + }, + settingsPage: { + seoTitle: "Налаштування - SkateSpots", + seoDescription: "Керуйте налаштуваннями свого акаунта SkateSpots.", + heading: "НАЛАШТУВАННЯ", + subtitle: "Налаштування акаунта й застосунку", + editProfile: "Редагувати профіль", + profileRefreshed: "Профіль оновлено!", + found: "Знайдено: {{name}}", + unnamed: "без імені", + profileNotFound: "Профіль не знайдено", + notFoundOnRelay: "Не знайдено на жодному Relay.", + refreshFailed: "Оновлення не вдалося", + refreshFailedDesc: "Не вдалося підключитися до Relay.", + loginToEdit: "Увійдіть, щоб редагувати свій профіль", + noProfileRelays: "Нам не вдалося знайти профіль на Relay. Якщо ви вже його налаштовували, спробуйте оновити.", + checkDisplayName: "відображуване ім'я", + checkPhoto: "фото профілю", + checkBio: "коротке біо", + checkLightning: "адресу Lightning, щоб люди могли надсилати вам Zap", + checkHandle: "безкоштовний нікнейм @skate-spots.org", + finishProfile: "Завершіть свій профіль", + addItem: "Додати {{item}}", + nip05Title: "Верифікація NIP-05", + nip05Desc: "Отримайте перевірену адресу Nostr (як name@domain.com), щоб зміцнити довіру. Потрібна для створення подій, профілів тренерів і Shop-ів.", + freeFromSkateSpots: "Безкоштовно від SkateSpots", + claimHandleBefore: "Займіть нікнейм на кшталт", + claimHandleAfter: "— без реєстрації, без витрат, без домену для обслуговування. Займіть його на вкладці «Профіль», потім збережіть.", + claimInProfile: "Зайняти в профілі", + nip05Footer: "Отримавши свій NIP-05, додайте його в поле профілю та збережіть.", + localRelayOn: "Локальний Relay увімкнено", + localRelayOff: "Локальний Relay вимкнено", + lookingForCitrine: "Пошук Citrine на цьому пристрої…", + noLongerUsing: "Більше не використовується локальний Relay.", + localRelay: "Локальний Relay", + citrineOff: "Швидше читання й офлайн-резервна копія на цьому пристрої", + citrineSearching: "Пошук Citrine на цьому пристрої…", + citrineLive: "Підключено — читання й резервне копіювання локально", + citrineWaiting: "Увімкнено — запустіть Citrine для підключення", + toggleCitrine: "Перемкнути локальний Relay Citrine", + citrineDetected: "Relay Citrine виявлено", + citrineLooking: "Пошук Citrine…", + citrineNotDetected: "Citrine не виявлено", + recheckCitrine: "Перевірити Relay Citrine ще раз", + checking: "Перевірка", + recheck: "Перевірити ще раз", + chipInstantReads: "Миттєве читання", + chipWorksOffline: "Працює офлайн", + chipOnDeviceBackup: "Резервна копія на пристрої", + cantReachStrong: "Не вдається достукатися до Citrine.", + cantReachBefore: "Переконайтеся, що безкоштовний застосунок Citrine встановлено, а його Relay", + started: "запущено", + cantReachAfter: ", потім торкніться «Перевірити ще раз». Він запускає приватний Relay Nostr на вашому телефоні для миттєвого читання й офлайн-резервної копії.", + citrineStep1Before: "Відкрийте Citrine → торкніться", + start: "Запустити", + citrineStep2Before: "Поверніться сюди → торкніться", + getCitrine: "Отримати Citrine", + citrinePrivacy: "Ваш Stash і повідомлення залишаються тут із наскрізним шифруванням, точно як будь-де інше. Локальний Relay лише прискорює роботу й зберігає копію на вашому пристрої — він ніколи не замінює шифрування.", + communityRelayDisabled: "Громадський Relay вимкнено", + communityRelayEnabled: "Громадський Relay увімкнено", + usingOnlyPersonal: "Використовуються лише ваші налаштовані Relay.", + skateRelayIncluded: "Relay SkateSpots включено.", + relays: "Relay", + relayPrivacyBefore: "Relay бачать вашу", + ipAddress: "IP-адресу", + relayPrivacyAfter: "коли ви підключаєтесь. Tor її приховує — а до «безкоштовного» VPN ставтеся як до попередження; зазвичай вони монетизують ваш трафік.", + communityRelay: "Громадський Relay", + syncingGlobal: "Синхронізація з глобальною скейт-спільнотою", + usingOnlyPersonalShort: "Використовуються лише особисті Relay", + appearance: "Вигляд", + language: "Мова", + darkModeOnly: "Лише темна тема", + darkModeDesc: "SkateSpots використовує темну неонову естетику, натхненну скейт-культурою. Чорний фон, неоново-рожевий, лаймовий і оранжевий.", + navigation: "Навігація", + sasquatchExpanded: "Sasquatch розширено! 🦧 Оновіть сторінку, щоб побачити його.", + advanced: "Додатково", + sasquatchGuide: "🦧 Посібник Sasquatch", + sasquatchResetDesc: "Скинути посібник із початкового налаштування до розширеного вигляду", + expandSasquatch: "Розгорнути The Sasquatch", + wallet: "Гаманець", + loginToWallet: "Увійдіть, щоб керувати своїм гаманцем", + openWallet: "Відкрити гаманець", + balanceSendReceive: "Баланс, надсилання, отримання", + connectNwc: "Підключити гаманець NWC", + account: "Акаунт", + security: "Безпека", + securitySub: "Ключі, підписування, Amber", + nip05Sub: "Отримайте перевірену адресу Nostr", + app: "Застосунок", + myStash: "Мій Stash", + myStashSub: "Приватний інвентар Gear", + relaysSub: "Підключення до Relay Nostr", + appearanceSub: "Мова й тема", + assistant: "Асистент", + showSasquatch: "Показувати асистента Sasquatch", + showSasquatchDesc: "Показувати плаваючу кнопку Sasquatch на мапі та інших екранах.", + showMapFooter: "Показувати панель посилань мапи", + showMapFooterDesc: "Показувати тонкий рядок посилань унизу мапи.", + notifications: "Сповіщення", + notificationsSub: "Сповіщення про DM, Crew і Zap", + coordinator: "Координатор", + coordinatorSub: "Ваш груповий сервер Cordn", + data: "Дані", + myData: "Мої дані", + myDataSub: "Експорт, імпорт, керування", + advancedSub: "Relatr, Sasquatch, інструменти", + notLoaded: "Не завантажено", + notLoggedIn: "Ви не увійшли" + }, + onboarding: { + seoTitle: "Почніть — SkateSpots", + seoDescription: "Приєднуйтесь до децентралізованої скейтбординг-спільноти. Знаходьте Spot, зв'язуйтесь із тренерами, надсилайте Zap. Безкоштовно назавжди.", + homeSetTitle: "Дім встановлено 🛹", + homeSetDesc: "Тепер мапа відкриватиметься на вашій місцевості.", + locationFailedTitle: "Не вдалося отримати вашу локацію", + locationFailedDesc: "Перевірте дозволи на локацію або виберіть свою місцевість на мапі.", + niceTitle: "🎉 Чудово!", + niceDesc: "Тепер ви розумієте, як працює Nostr. Погнали катати!", + npubCopied: "npub скопійовано в буфер обміну.", + saveLoginNow: "Збережіть свій вхід — зробіть це зараз", + saveLoginNowDesc: "Ваш код відновлення — єдиний спосіб повернутися до акаунта. Без пошти, без скидання пароля.", + betaBadge: "Бета — відкрито для скейтерів у всьому світі", + headline1: "КАТАЙ", + headline2: "СВІЙ СВІТ", + heroBefore: "Це", + decentralized: "децентралізована", + heroAfter: "скейт-спільнота. Нею не володіє жодна компанія. Жоден алгоритм не ховає ваші Spot. Жодного бан-молота. Лише скейтери.", + pillMap: "Мапа Spot", + pillCoaches: "Тренери й оператори", + pillEvents: "Події", + pillGear: "Купити/продати Gear", + pillZaps: "Bitcoin Zap", + pillStash: "Stash Gear", + pillCrews: "Crew", + createFreeAccount: "Створіть свій безкоштовний акаунт", + noEmailNoPassword: "Без пошти. Без пароля. Володійте своєю ідентичністю назавжди.", + findSpots: "Знайдіть Spot поруч із вами", + addFirstSpot: "Додайте свій перший Spot", + accountCreated: "Ви в грі! Акаунт створено ✓", + identityYours: "Ваша ідентичність належить вам — вона зберігається у вашому ключі, а не на наших серверах.", + whereSkate: "Де ви катаєтесь?", + whereSkateDesc: "Встановіть свою домашню місцевість один раз, і мапа щоразу відкриватиметься на ваших Spot. Ваш GPS ніколи не залишає пристрій.", + useMyLocation: "Використати мою локацію", + pickOnMap: "Вибрати на мапі", + loginSaved: "Вхід збережено — ваш акаунт можна безпечно відновити.", + whyBother: "Навіщо це?", + why1Title: "Кожен Spot — на одній мапі", + why1Body: "Парапети, поручні, DIY, парки — нанесені скейтерами, які справді на них катаються. Перевірте статус, перш ніж вирушати, щоб не витратити сесію на невдачу.", + why2Title: "Створено скейтерами, а не костюмами", + why2Body: "Без реклами, без алгоритму, що пхає непотріб вам в обличчя, без збору даних. Відкритий код. Мапа належить спільноті — включно з вами.", + why3Title: "Отримуйте гроші за катання", + why3Body: "Нанесіть на мапу знахідку, зніміть класний трюк, проведіть сесію — і отримайте справжній Bitcoin Zap прямо у свій гаманець. Без комісії платформи, без посередників.", + why4Title: "Ваш акаунт справді ваш", + why4Body: "Один ключ входить у будь-який застосунок Nostr. Жодна компанія не може вас заблокувати чи видалити акаунт за забаганкою. Беріть свою ідентичність будь-куди.", + everythingFree: "Усе, що ви можете робити — безкоштовно", + featSpots: "Знаходьте Spot", + featSpotsDesc: "Інтерактивна мапа з тисячами Spot по всьому світу", + featLab: "The Lab", + featLabDesc: "Знаходьте тренерів, операторів і відеомонтажерів поруч", + featEvents: "Події", + featEventsDesc: "Змагання, сесії, зустрічі", + featGear: "Купити / продати Gear", + featGearDesc: "Одноранговий маркетплейс уживаного скейт-Gear", + featStash: "Мій Stash", + featStashDesc: "Приватний зашифрований інвентар усього, чим ви володієте", + featCrews: "Crew", + featCrewsDesc: "Катайте зі своїм Crew — спільні Spot, чат і сесії", + whatIsNostr: "Що таке Nostr?", + whatIsNostrSub: "Протокол, на якому працює SkateSpots", + nostrBefore: "Nostr — це відкритий протокол, як електронна пошта, але для соціальних застосунків. Ваш акаунт — це", + cryptoKeyPair: "криптографічна пара ключів", + nostrAfter: ", якою володієте ви. Жодна окрема компанія не контролює ваш акаунт чи дані — ви вибираєте, які Relay їх зберігають, і навіть можете запустити власний. Ваша ідентичність працює в кожному застосунку Nostr.", + nostrPoint1: "Ви володієте своїми даними й ключами", + nostrPoint2: "Жодна компанія не може вас забанити", + nostrPoint3: "Ідентичність працює всюди", + nostrPoint4: "Прямі чайові в Bitcoin", + deepDive: "Глибоке занурення: як працює Nostr", + privacyTip: "Порада щодо приватності: ваш GPS ніколи не залишає пристрій. Сервери, до яких ви підключаєтесь (як тайли мапи), усе одно бачать вашу IP — якщо хочете приховати й це, підійде VPN або Tor. Цілком необов'язково.", + readPrivacy: "Прочитайте нашу сторінку приватності", + zapsWallet: "⚡ Zap і гаманець", + optional: "Необов'язково", + walletDesc: "Zap — це чайові в Bitcoin, які ви надсилаєте напряму скейтеру, що знайшов крутий Spot, зняв класний кліп чи провів чудову сесію. Без комісії платформи. Без посередників. 100% іде їм.", + builtInWallet: "Вбудований гаманець Cashu", + builtInWalletDesc: "Отримуйте платежі Lightning прямо в застосунку. Без налаштування.", + balance: "Баланс", + connectExternal: "Підключити зовнішній гаманець", + connectExternalDesc: "Маєте Alby, Mutiny чи інший гаманець? Підключіть його через NWC.", + connectViaNwc: "Підключити через NWC", + loginToConnect: "Увійдіть, щоб підключити власний гаманець.", + fiveDollars: "💡 $5 у Bitcoin = сотні Zap, які можна роздати спільноті", + commonQuestions: "Поширені запитання", + faq1Q: "SkateSpots безкоштовний?", + faq1A: "100% безкоштовний. Переглядайте Spot, додавайте локації, знаходьте тренерів, створюйте події, приєднуйтесь до сесій — усе безкоштовно, назавжди. Bitcoin (Zap) необов'язковий, якщо хочете віддячити творцям.", + faq2Q: "Що таке Nostr і чому SkateSpots його використовує?", + faq2Before: "Nostr — це відкритий протокол для децентралізованих застосунків — уявіть його як сам інтернет, яким не володіє жодна компанія. Ваш акаунт SkateSpots — це криптографічна пара ключів, якою", + faq2Strong: "володієте ви", + faq2After: ". Жодна окрема компанія не може забанити ваш акаунт чи взяти ваші дані в заручники — ви вибираєте, які Relay зберігають ваші дані, і навіть можете запустити власний. Ваша ідентичність також працює в інших застосунках Nostr, як-от Primal, Damus чи Amethyst.", + faq3Q: "Що таке nsec і чому це важливо?", + faq3Before: "Ваш", + faq3Mid: "— це ваш приватний ключ — єдиний доказ, що акаунт належить вам. На відміну від паролів, тут", + faq3Strong: "немає «забув пароль»", + faq3After: ". Якщо ви втратите свій nsec, акаунт зникне назавжди. Створюючи акаунт, одразу завантажте резервну копію та зберігайте її в надійному місці (менеджер паролів, записана офлайн).", + faq4Q: "Які підписувачі / застосунки працюють зі SkateSpots?", + faq4Desktop: "На комп'ютері:", + faq4Extensions: "розширення браузера.", + faq4Android: "На Android:", + faq4AndroidAfter: "(найкращий досвід із нативним застосунком).", + faq4Ios: "На iOS:", + faq4IosAfter: "або вставте свій nsec безпосередньо (менш безпечно).", + faq4Note: "Ви також можете увійти, вставивши свій nsec безпосередньо — але використання розширення-підписувача безпечніше.", + faq5Q: "Чи можу я користуватися SkateSpots на телефоні?", + faq5Before: "Так! SkateSpots — це PWA (прогресивний вебзастосунок). Відвідайте", + faq5Mid: "у браузері телефона й торкніться", + faq5Em: "«Додати на головний екран»", + faq5After: "для повноцінного досвіду застосунку. Або завантажте його з", + faq5End: "— децентралізованого магазину застосунків.", + faq6Q: "Що таке Zap?", + faq6A: "Zap — це миттєві чайові в Bitcoin, надіслані через мережу Lightning. Коли ви надсилаєте Zap скейтеру, sats потрапляють у його гаманець за секунди — без PayPal, без Venmo, без комісії. Людина, яка зняла той 4-східцевий трюк, отримує оплату напряму від фанатів.", + faq7Q: "Чи будуть мої Spot видалені, якщо SkateSpots закриється?", + faq7A: "Ні. Ваші Spot публікуються на Relay Nostr — розподілених серверах, які може запустити будь-хто. Навіть якби продукт SkateSpots зник завтра, ваші дані все одно існували б на Relay, і будь-який клієнт Nostr міг би їх показати.", + faq8Q: "Чи можу я додати Spot на приватній території?", + faq8A: "Можете, але будьте розсудливі. Spot на приватній території слід позначати відповідно, щоб скейтери знали ситуацію. SkateSpots не несе відповідальності за проникнення на чужу територію — завжди поважайте власників і місцевих.", + faq9Q: "Як повідомити про помилку чи залишити відгук?", + faq9Before: "Напишіть команді SkateSpots напряму в Nostr або зв'яжіться з нашим бета-координатором:", + faq9Link: "Відгук про бету → cordn.net", + readyToShred: "ГОТОВІ КАТАТИ?", + stopScrolling: "Припиніть гортати. Встановіть застосунок. Знайдіть Spot. Катайте його.", + exploreSpots: "Досліджувати Spot", + betaFeedbackTitle: "Бета — нам потрібен ваш відгук", + betaFeedbackDesc: "SkateSpots активно розробляється. Ви можете натрапити на шорсткі кути — це наша провина, не ваша. Повідомляйте про помилки, пропонуйте функції, кажіть, що не так.", + betaCoordinator: "Бета-координатор", + betaCoordinatorDesc: "cordn.net → напишіть нам", + dmOnNostr: "DM у Nostr", + fixSameDay: "Знайшли помилку? Ми виправляємо того ж дня. Ваші звіти роблять застосунок кращим для кожного скейтера.", + relaySetup: "Налаштування Relay" + }, + relayEdu: { + understandingNostr: "Розуміння Nostr", + stepOf: "Крок {{current}} з {{total}}", + step1Title: "Розуміння Relay", + step1Desc: "Уявіть Relay як скейт-магазини, що діляться новинами про Spot", + you: "Ви", + relays: "Relay", + skaters: "Скейтери", + s1Good1: "Жодна компанія не володіє вашим акаунтом", + s1Good1Desc: "Ваша ідентичність живе на кількох серверах Relay", + s1Good2: "Ви контролюєте, де живуть ваші дані", + s1Good2Desc: "Ваші дописи синхронізуються між обраними вами Relay — виберіть власні або запустіть один самостійно", + s1Warn: "Оператори Relay бачать публічні дописи", + s1WarnDesc: "Уявіть це як допис на дошці оголошень", + step2Title: "Публічне проти приватного", + step2Desc: "Знайте, що видно, а що зашифровано", + publicTitle: "Публічне (бачить будь-хто)", + pub1: "Spot, які ви додаєте на мапу", + pub2: "Відгуки та коментарі", + pub3: "Інформація вашого профілю (ім'я, фото)", + pub4: "На кого ви підписані", + privateTitle: "Приватне (зашифроване)", + priv1: "Прямі повідомлення", + priv2: "Комунікація з гаманцем", + noteStrong: "Зауваження:", + note: "Дописи можуть зберігатися на Relay назавжди. Подумайте, перш ніж публікувати — як у реальному житті!", + step3Title: "Ваші ключі = ваш акаунт", + step3Desc: "Це найважливіше, що слід зрозуміти", + secretKeyTitle: "Ваш секретний ключ (nsec)", + secretKeyDesc: "Ставтеся до нього як до своєї дошки — ніколи нікому не позичайте. Він доводить, що акаунт належить вам.", + s3Bad1: "Якщо втратити, акаунт не відновити", + s3Bad2: "Немає «забув пароль» — ніхто не може його скинути", + s3Good: "Зробіть резервну копію та зберігайте надійно", + publicKeyTitle: "Ваш публічний ключ (npub)", + publicKeyDesc: "Це як ваше ім'я користувача — вільно ним діліться, щоб інші могли вас знайти!", + inControl: "🔐 Ви все контролюєте — жодна компанія не може вас заблокувати!", + skip: "Пропустити", + gotIt: "Зрозуміло!" + }, + about: { + seoTitle: "Про проєкт - SkateSpots", + seoDescription: "Дізнайтеся про SkateSpots і нашу місію побудувати децентралізовану скейтбординг-спільноту.", + npubCopied: "npub скопійовано в буфер обміну. Вставте його у свій улюблений клієнт Nostr, щоб надіслати DM.", + bugReport: "🐛 Звіт про помилку", + bugWhatHappened: "Що сталося:", + bugExpected: "Що я очікував:", + bugSteps: "Кроки для відтворення:", + aboutWord: "ПРО ПРОЄКТ", + heroBefore: "Зв'язуйтеся з місцевими скейт-сценами по всьому світу.", + skaterOwned: "Дані, якими володіють скейтери", + heroAfter: ", Relay, якими керує спільнота.", + viewStats: "Переглянути статистику спільноти", + missionTitle: "Наша місія", + mission1: "SkateSpots допомагає скейтбордистам знаходити Spot, зв'язуватися з професіоналами в The Lab і організовувати сесії — і все це без корпоративного контролю. Справжнє катання відбувається офлайн, цей інструмент лише зв'язує вас із ним.", + mission2: "Знання про скейтбординг мають жити зі спільнотою, а не бути замкненими в корпоративних застосунках. Саме тому SkateSpots працює на Nostr — системі на основі Relay, де скейтери контролюють власні дані, вибирають, які Relay їх зберігають, і навіть можуть запустити власні. Жодна окрема компанія не володіє мапою.", + whyNostr: "Чому Nostr?", + why1Title: "Контроль спільноти", + why1Desc: "Ваші Spot живуть на громадських Relay. Сервери запускають скейтери, а не корпорації.", + why2Title: "Ви володієте своїми даними", + why2Desc: "Ваша ідентичність Nostr належить вам. Переносьте її в будь-який застосунок Nostr — без прив'язки.", + why3Title: "Інтеграція з Bitcoin", + why3Desc: "Надсилайте творцям Zap у Bitcoin напряму. Без платформи, що забирає 30%.", + why4Title: "Відкритий код", + why4Desc: "Створено відкрито. Будь-хто може долучитися або форкнути код.", + getInvolved: "Долучайтеся", + getInvolvedDesc: "SkateSpots має відкритий код і керується спільнотою. Долучайтеся кодом, діліться Spot або допомагайте іншим почати.", + betaTitle: "Бета-тестування", + betaDesc: "Шановний користувачу! Дякуємо за бета-тестування SkateSpots. Зауважте, що застосунок усе ще в беті, і можуть бути помилки чи проблеми з безпекою. Якщо зіткнетеся з проблемами або захочете повідомити про помилку, зв'яжіться з нами!", + giveFeedback: "Залиште нам відгук:", + copyNpub: "Копіювати npub", + reportBug: "Повідомити про помилку", + viewProfile: "Переглянути профіль", + downloadApp: "Завантажте застосунок", + downloadAppDesc: "Встановіть SkateSpots на Android через Zapstore — відкритий магазин застосунків, орієнтований на Bitcoin.", + getOnZapstore: "Отримати в Zapstore", + credits: "Подяки", + creditPoweredBy: "Працює на", + creditNostr: "Децентралізований протокол", + creditCrewChat: "Чат Crew через", + creditCordn: "Груповий чат із наскрізним шифруванням", + creditEcash: "Ecash через", + creditCashu: "Chaumian ecash для Lightning", + creditWalletConnect: "Підключення гаманця через", + creditNwc: "Nostr Wallet Connect (NIP-47)", + creditSigning: "Підписування на Android через", + creditAmber: "Підписувач Nostr для Android", + creditMapData: "Дані мапи Bitcoin від", + creditBtcmap: "Місця, що приймають Bitcoin", + creditCrowdfunding: "Краудфандинг", + creditAngor: "Децентралізований краудфандинг у Bitcoin", + creditDistributed: "Розповсюджується через", + creditZapstore: "Магазин застосунків з відкритим кодом", + creditTrust: "Довіра й чат Crew через", + creditContextvm: "Оцінки довіри Relatr і координація зашифрованого чату Crew", + stillQuestions: "Залишилися питання?", + stillQuestionsDesc: "Sasquatch — наш AI-гід, що працює на живих даних SkateSpots. Запитайте його про Spot, події, тренерів, Gear чи як усе працює.", + askSasquatch: "Запитати The Sasquatch", + poweredBy: "Працює на", + decentralized: "Децентралізовано", + communityOwned: "Належить спільноті" + }, + faq: { + seoTitle: "FAQ - SkateSpots", + seoDescription: "Запитайте The Sasquatch будь-що про SkateSpots.", + greeting: "Привіт! Я The Sasquatch 🦧 — запитуйте мене будь-що про SkateSpots. Spot, події, Gear, гаманці, приватність, Nostr — я допоможу. Що хочете знати?", + gotQuestions: "Є питання?", + heroDesc: "Запитайте The Sasquatch — він знає все про SkateSpots, Nostr, Bitcoin і скейтбординг.", + askTitle: "Запитати The Sasquatch", + askDesc: "Sasquatch відкритий у лівому нижньому куті екрана — просто натисніть на нього й надрукуйте своє питання. Він має живий доступ до Spot, подій, тренерів і погоди.", + askQuestion: "Чим ти можеш допомогти мені у SkateSpots?", + openSasquatch: "Відкрити The Sasquatch", + commonQuestions: "Поширені запитання — торкніться, щоб запитати", + quickAnswers: "Швидкі відповіді", + footerHint: "Sasquatch використовує живі дані Nostr з Relay SkateSpots + AI, щоб відповідати на ваші запитання. 🛹", + chip1Label: "Що таке SkateSpots?", + chip1Q: "Що таке SkateSpots і як це працює?", + chip2Label: "Як додати Spot?", + chip2Q: "Як додати скейт-Spot на мапу?", + chip3Label: "Що таке Zap?", + chip3Q: "Що таке Zap?", + chip4Label: "Це безкоштовно?", + chip4Q: "Чи безкоштовний SkateSpots?", + chip5Label: "Що таке Мій Stash?", + chip5Q: "Що таке Мій Stash?", + chip6Label: "Як увійти?", + chip6Q: "Як увійти чи створити акаунт?", + chip7Label: "Що таке Nostr?", + chip7Q: "Що таке Nostr?", + chip8Label: "Приватність і дані", + chip8Q: "Які дані публічні, а які приватні у SkateSpots?", + chip9Label: "Як продати Gear?", + chip9Q: "Як продати Gear на SkateSpots?", + chip10Label: "Що таке The Lab?", + chip10Q: "Що таке The Lab?", + fact1Label: "Скейт-Spot по всьому світу", + fact1Value: "Знаходьте й додавайте", + fact2Label: "Bitcoin Lightning Zap", + fact2Value: "100% безкоштовно", + fact3Label: "Децентралізовано на Nostr", + fact3Value: "Ви володієте своїми даними", + fact4Label: "Приватний інвентар Gear", + fact4Value: "Зашифрований Stash", + s1Q: "Що таке SkateSpots?", + s1A: "Децентралізована мапа та спільнота для скейтбордингу, побудована на Nostr. Знаходьте Spot, тренерів і операторів, приєднуйтесь до Crew, публікуйте події та купуйте/продавайте Gear — без компанії посередині.", + s2Q: "Як додати Spot?", + s2A: "Торкніться мапи або скористайтеся кнопкою + / «Додати Spot», потім поставте мітку й заповніть деталі. Вам потрібен безкоштовний акаунт Nostr (торкніться «Увійти» → «Створити акаунт» — пошта не потрібна).", + s3Q: "Що таке Zap?", + s3A: "Zap — це чайові в Bitcoin Lightning. Ви можете надсилати Zap за Spot, події, Crew і людей, яких цінуєте. Вони йдуть напряму отримувачу через Lightning — SkateSpots ніколи не тримає ваші кошти.", + s4Q: "Це безкоштовно?", + s4A: "Так. Створення акаунта, додавання Spot і перегляд — безкоштовні. Необов'язкові платні додатки (як-от рекламні оголошення) і чайові (Zap) сплачуються напряму між людьми.", + s5Q: "Які дані публічні?", + s5A: "Усе, що ви публікуєте — Spot, події, ваш профіль — публічне на Relay Nostr. Ваші приватні повідомлення та Stash зашифровані наскрізно. Дивіться сторінку приватності для деталей.", + s6Q: "Що таке The Lab?", + s6A: "The Lab — це місце, де ви знаходите людей, щоб найняти чи в кого повчитися: тренери, інструктори, оператори, відеомонтажери, фотографи, будівники, митці та інші." + }, + privacy: { + seoTitle: "Приватність — SkateSpots", + seoDescription: "Як SkateSpots поводиться з вашими даними: ваш GPS залишається на пристрої, опубліковані Spot публічні, і як приховати IP за допомогою VPN чи Tor, якщо хочете.", + heroBefore: "Ваша", + heroHighlight: "Приватність", + heroDesc: "Без відстеження, без реклами, без продажу даних. Ось що саме залишається на вашому пристрої, що публічне та як захиститися ще більше, якщо хочете.", + locationTitle: "Ваша локація залишається на пристрої", + locationBefore: "Коли ви торкаєтесь", + nearMe: "«Поруч зі мною»,", + locationAfter: "ваша GPS-локація зчитується на пристрої й використовується лише для центрування мапи та сортування найближчих Spot.", + locationGood1: "Вона ніколи не публікується в Nostr.", + locationGood2: "Вона ніколи не надсилається до SkateSpots — немає сервера SkateSpots, який би її збирав.", + locationGood3: "Вона ніколи не передається третім особам.", + locationGood4: "У нативному застосунку ми використовуємо власну систему локації телефона напряму й обходимо Google Play Services — тож це працює на де-Googled телефонах (GrapheneOS, /e/OS), і Google її ніколи не бачить.", + weatherBefore: "Погода вимкнена за замовчуванням. Коли ви її вмикаєте, вона шукає умови для", + weatherEm: "публічної", + weatherAfter: "локації Spot — не вашої.", + publicTitle: "Що публічне за задумом", + publicDesc: "SkateSpots — це спільна мапа, тож деякі речі призначені для того, щоб їх бачили всі. Коли ви вирішуєте їх опублікувати, вони стають публічними в мережі Nostr:", + public1Strong: "Spot, які ви додаєте", + public1: "— включно з їхніми координатами. Якщо ви додаєте Spot у своїй точній локації, ця локація стає публічною. Подумайте, перш ніж ставити мітку на власному подвір'ї.", + public2Strong: "Відгуки, коментарі та ваш публічний профіль", + public2: "(ім'я, фото).", + public3: "На кого ви підписані та публічні реакції.", + public4Strong: "Zap", + public4: "публічні за замовчуванням: Zap пов'язує ваш акаунт — часто вашу адресу Lightning — з дописом, за який ви заплатили, і з самими чайовими. Ваш гаманець може надіслати його анонімно, якщо ви не хочете цього.", + publicNoteBefore: "VPN чи Tor", + notWord: "не", + publicNoteAfter: "приховує зміст того, що ви публікуєте — координати Spot публічні незалежно від цього. Інструменти приватності приховують вашу мережеву ідентичність (IP), а не те, що ви вирішили опублікувати.", + encryptedTitle: "Що приватне й зашифроване", + enc1Strong: "Прямі повідомлення", + enc1Mid: "та", + enc1Strong2: "чати Crew", + enc1: "мають наскрізне шифрування (NIP-17). Їх можуть читати лише учасники.", + enc2Strong: "Мій Stash", + enc2: "— ваш приватний інвентар Gear — зашифрований вашим власним ключем.", + enc3Strong: "Учасники лише свого Crew", + enc3: "можуть вибрати бути видимими тільки для своїх побратимів із Crew.", + ipTitle: "Що залишає ваш пристрій: ваша IP", + ipBefore: "Як і кожен вебсайт, сервери, з якими спілкується SkateSpots, бачать вашу", + ipAddress: "IP-адресу", + ipAfter: "(приблизний показник вашого регіону). Це нормально для будь-якого веб- чи мап-застосунку й не є чимось унікальним для нас. Ці сервери:", + ipTileStrong: "Тайли мапи", + ipTile: "(OpenStreetMap) — бачать вашу IP і яку ділянку мапи ви переглядаєте.", + ipGeoStrong: "Геокодування Spot/Shop", + ipGeo: "— коли ви створюєте чи редагуєте Spot або Shop, його координати йдуть до OpenStreetMap Nominatim, щоб заповнити тег міста/країни. Коли ви відкриваєте статистику спільноти, координати міток без тегу локації йдуть до BigDataCloud, щоб їх згрупувати за регіоном (кешується на вашому пристрої — щонайбільше раз на мітку). Обидва бачать вашу IP. Це мітка, яку ви поставили / публічні координати мітки, а не живий GPS вашого пристрою.", + ipPushStrong: "Фонові сповіщення", + ipPush: "(за згодою) — якщо ви їх увімкнете, сервер push SkateSpots бачить, що для вашого ключа щось надійшло і коли (ніколи — хто надіслав чи що там написано; повідомлення залишаються зашифрованими), а служба push вашої ОС (Google/Mozilla/Apple) доставляє сповіщення.", + ipBtcStrong: "Місця Bitcoin", + ipBtc: "(BTCMap, коли ви вмикаєте цей шар) — бачать вашу IP і ділянку, яку ви переглядаєте.", + ipRelayStrong: "Relay Nostr", + ipRelay: "— бачать вашу IP, коли застосунок читає чи публікує.", + ipMintStrong: "Mint Cashu", + ipMint: "— бачать вашу IP, коли ваш гаманець надсилає, отримує чи обмінює.", + ipRouteStrong: "Маршрути", + ipRoute: "(OSRM і Transitous для транспорту) — отримують початок і кінець будь-якого маршруту, який ви запитали, а не лише вашу IP. Маршрутизація залишається в застосунку: ваш початок і пункт призначення ніколи не передаються Google чи Apple Maps.", + ipWeatherStrong: "Погода", + ipWeatherMid: "(Open-Meteo, за згодою) та", + ipUploadStrong: "завантаження зображень", + ipWeather: "(Blossom), коли ви ними користуєтесь.", + ipAiStrong: "Sasquatch AI", + ipAi: "— ваше повідомлення йде на наш власний сервер, а потім до постачальника моделі.", + ipLink1: "Оскільки ви надсилаєте свій публічний ключ (npub) у тому ж з'єднанні, Relay може пов'язати вашу IP з вами — не просто «хтось підключився», а «ця людина, з цієї адреси».", + ipShieldBefore: "Одне, що ми справді захищаємо:", + ipMintsStrong: "каталог mint", + ipShieldAfter: "завантажується через наш сервер, тож MintRadar ніколи не бачить вашу IP.", + vpnTitle: "Хочете більше приватності? VPN чи Tor (необов'язково)", + vpnDesc: "Більшості скейтерів це не потрібно — але якщо хочете приховати свою IP і приблизну локацію від серверів вище, у вас є два безкоштовні варіанти:", + vpnReputable: "🛡️ Надійний VPN", + vpnReputableDesc: "Приховує вашу IP за серверами VPN. Просто й швидко. Використовуйте той, за який платите й довіряєте; безкоштовні VPN зазвичай монетизують ваш трафік, тож ставтеся до «безкоштовного» як до попередження.", + torBrowser: "🧅 Браузер Tor", + torDesc: "Безкоштовно, максимальна приватність IP, маршрутизація через кілька Relay. Повільніше — мапи й деякі Relay Nostr можуть гальмувати чи блокувати вузли виходу Tor. Чудово для надобережних.", + readThis: "Прочитайте це, щоб вас не обманули", + caveat1Before: "VPN/Tor приховує вашу", + ipWord: "IP", + caveat1: "— не Spot, які ви публікуєте. Мітка біля вашого дому публічна незалежно від того, чи користуєтесь ви VPN.", + caveat2Before: "Не вмикайте", + nearMeGps: "«Поруч зі мною» / GPS браузера", + caveat2: "якщо ваша мета — залишатися анонімним — точний GPS перекриває будь-яке приховування IP.", + caveat3: "Жоден інструмент не робить вас повністю «анонімним». Вони лише зменшують те, що сервери можуть дізнатися про вашу мережеву локацію — і все.", + keysTitle: "Ваші ключі, ваш акаунт", + keysBefore: "Ваш акаунт — це криптографічна пара ключів, якою ви володієте. Найбезпечніший спосіб увійти —", + signer: "підписувач", + keysAfter: "(Alby, nos2x або Amber на Android), щоб ваш секретний ключ ніколи не вставлявся в застосунок.", + keysCaveatBefore: "Якщо ви вставите свій", + keysCaveatAfter: "безпосередньо, він зберігається у вашому браузері. Натомість використовуйте розширення-підписувач, коли можете, і тримайте резервну копію nsec у надійному місці офлайн.", + footerBefore: "Питання? Запитайте", + sasquatchName: "The Sasquatch", + footerMid: "у застосунку або прочитайте", + gettingStarted: "посібник із початку роботи", + about: "Про проєкт" + }, + license: { + seoTitle: "Ліцензія - SkateSpots", + seoDescription: "Ліцензія SkateSpots. Ви вільні кататися на скейтборді.", + tagline: "Катайте, заробляйте, розважайтеся й витрачайте Sats, де б ви не були.", + copyright: "Учасники SkateSpots і спільнота", + licenseLabel: "Ліцензія", + freeLine1: "ВИ ВІЛЬНІ", + freeLine2: "КАТАТИСЯ НА СКЕЙТБОРДІ", + body: "Цей проєкт відкритий. Діліться ним, форкайте, будуйте на ньому, катайте його. Вулиці належать усім. Цей код — теж. Продовжуйте кататися, розважайтеся, вчіть трюки, підтримуйте творців і знову катайтесь.", + builtBefore: "Створено з ❤️ на", + builtMid: "· Працює на", + lightning: "Bitcoin Lightning ⚡", + viewSource: "Переглянути код", + aboutSkateSpots: "Про SkateSpots", + supporters: "Прихильники" + }, + glossary: { + seoTitle: "Глосарій трюків · SkateSpots", + seoDescription: "Повний глосарій скейтбордингу — {{count}} записів про flips, grinds, slides, grabs, airs, lip tricks, handplants, freestyle, терміни transition, стійки та обладнання, з альтернативними назвами.", + heading: "ГЛОСАРІЙ ТРЮКІВ", + subheading: "{{count}} записів · tricks, transition, freestyle, стійки та обладнання", + searchPlaceholder: "Шукайте трюки чи прізвиська — tre flip, crooks, method…", + clearSearch: "Очистити пошук", + all: "Усі", + results: "{{count}} результат{{s}} для", + noMatch: "Жоден трюк не збігається. Спробуйте прізвисько на кшталт «tre flip», «crooks» чи «melon».", + tricksCount: "{{count}} трюків", + footerBefore: "Знаєте трюк чи прізвисько, які ми пропустили? Трюки отримують різні назви в кожній сцені — напишіть", + sasquatch: "The Sasquatch 🦧", + footerAfter: "і дайте нам знати." + }, + signers: { + seoTitle: "Застосунки-підписувачі - Захистіть свої ключі Nostr | SkateSpots", + seoDescription: "Дізнайтеся про застосунки-підписувачі, які зберігають ваші ключі Nostr у безпеці. Знайдіть найкращий варіант для Android, iOS чи браузерів на комп'ютері.", + securityGuide: "Посібник із безпеки", + protect: "Захистіть свої", + nostrKeys: "ключі Nostr", + heroDesc: "Застосунки-підписувачі зберігають ваші приватні ключі в безпеці, підписуючи події без їх розкриття. Замість вставляти свій ключ у кожен застосунок, дозвольте підписувачу зробити це безпечно.", + whySignerStrong: "Навіщо використовувати підписувач?", + whySigner: "Ваш приватний ключ Nostr — це як пароль, який ніколи не можна змінити. Застосунок-підписувач зберігає його в безпеці, дозволяючи користуватися будь-яким застосунком Nostr.", + androidTitle: "Підписувачі для Android", + androidDesc: "Нативні застосунки-підписувачі для пристроїв Android, включно з GrapheneOS.", + iosTitle: "Підписувачі для iOS", + iosDesc: "Варіанти підписувачів для користувачів iPhone та iPad.", + browserTitle: "Розширення браузера", + browserDesc: "Розширення для браузерів на комп'ютері для підписування у вебзастосунках.", + recommended: "Рекомендовано", + yourPlatform: "Ваша платформа", + get: "Отримати {{name}}", + protocolsTitle: "Розуміння протоколів", + nip07Desc: "Стандарт розширення браузера. Розширення вбудовує можливості підписування у вебзастосунки. Використовується Alby, nos2x, Flamingo та подібними розширеннями.", + nip46Desc: "Протокол віддаленого підписування («bunker»). Ваш застосунок-підписувач схвалює запити від інших застосунків, не передаючи ваших ключів. Використовується Nsec.app, Nostria та Nowser.", + nip55Desc: "Протокол-підписувач, специфічний для Android. Нативні застосунки можуть запитувати підписи від Amber, не розкриваючи ключів. Найбільш безшовний досвід на Android.", + whichChoose: "Що вибрати?", + chooseAndroid: "Android:", + chooseAndroidDesc: "Amber (NIP-55) для нативних застосунків", + chooseIos: "iOS:", + chooseIosDesc: "Nsec.app (NIP-46) для найкращої сумісності", + chooseDesktop: "Комп'ютер:", + chooseDesktopDesc: "Alby, nos2x або Flamingo (NIP-07)", + amberDesc: "Нативний підписувач для Android із фокусом на безпеку та зручність. Найкращий вибір для користувачів Android.", + nsecAppDesc: "Кросплатформний віддалений підписувач, що діє як безпечне сховище для ваших ключів.", + nostriaDesc: "Застосунок-підписувач із віддаленим доступом і ключами, збереженими в захищеному сховищі пристрою.", + nowserDesc: "Підписувач із кількома способами автентифікації, що підтримує і розширення браузера, і протоколи віддаленого підписування.", + nsecAppIosDesc: "Найкращий варіант для iOS. Використовуйте його як віддалений підписувач із будь-яким клієнтом Nostr.", + nowserTfDesc: "Підписувач для iOS, доступний через TestFlight, з можливостями підписування, схожими на Android.", + nostriaIosDesc: "Віддалений підписувач із безпечним зберіганням ключів на вашому пристрої.", + nos2xDesc: "Просте й надійне розширення браузера для підписування подій Nostr.", + albyDesc: "Гаманець Bitcoin Lightning із вбудованим керуванням ключами Nostr і WebLN.", + flamingoDesc: "Розширення браузера з фокусом на Nostr і чистим інтерфейсом.", + kiwiDesc: "На Android/GrapheneOS використовуйте браузер Kiwi, щоб завантажити розширення nos2x чи Alby.", + fNativeApp: "Нативний застосунок", + fMultiKey: "Підтримка кількох ключів", + fEventSigning: "Підписування подій", + fSecureStorage: "Безпечне зберігання ключів", + fRemoteSigning: "Віддалене підписування", + fAnyClient: "Працює з будь-яким клієнтом", + fCrossDevice: "Синхронізація між пристроями", + fMultiKeySupport: "Підтримка кількох ключів", + fNip07: "Підтримка NIP-07", + fNip46: "Підтримка NIP-46", + fFlexibleSigning: "Гнучке підписування", + fNativeIos: "Нативний застосунок для iOS", + fLightweight: "Легкий", + fEasyToUse: "Простий у використанні", + fChromeSupport: "Підтримка Chrome/Brave/Edge", + fLightningPayments: "Платежі Lightning", + fNostrSigning: "Підписування Nostr", + fWebln: "Підтримка WebLN", + fNwc: "Підтримка NWC", + fCleanUi: "Чистий інтерфейс", + fPrivacyFocused: "Орієнтований на приватність", + fExtensionMobile: "Підтримка розширень на мобільному", + fFullBrowser: "Повноцінний браузерний досвід", + fGraphene: "Працює на GrapheneOS" + }, + betaDisclaimer: { + title: "Увага — це бета", + subtitle: "Кілька слів, перш ніж ви почнете.", + ossTitle: "Відкритий код і експериментальність", + ossBody: "Створено відкрито спільнотою. Копайтеся, форкайте, ламайте.", + betaTitle: "У беті — без аудиту", + betaBody: "Код ще не пройшов формальний аудит безпеки. Помилки трапляються.", + moneyTitle: "Працює зі справжніми Bitcoin і Lightning", + moneyBody: "Використовуйте на ньому гроші на власний ризик. Завантажуйте лише те, що можете дозволити собі втратити.", + finePrint: "Жодних гарантій будь-якого роду. Ви несете одноосібну відповідальність за власні кошти та ключі.", + viewCode: "Переглянути код", + accept: "Зрозуміло, впустіть мене" + } + }, +}; export default ukBatch3; diff --git a/src/i18n/uk/batch4.ts b/src/i18n/uk/batch4.ts index 1106ecb..d902ace 100644 --- a/src/i18n/uk/batch4.ts +++ b/src/i18n/uk/batch4.ts @@ -1,4 +1,1115 @@ -/** uk — batch 4. Filled by the translation pass; empty until then. */ -const ukBatch4 = {}; +/** uk — batch 4. Ukrainian translation of the `walletUi` namespace. */ +const ukBatch4 = { + walletUi: { + page: { + title: "Гаманець", + subtitle: "Bitcoin Lightning + Cashu", + manage: "Керувати", + getAWallet: "Отримати гаманець", + learnPlanB: "Дізнатися більше в Plan B Academy", + walletMinibits: "Мобільний Cashu · NWC", + walletAlby: "Розширення браузера · WebLN + NWC", + walletZeus: "Lightning із самостійним зберіганням", + walletCoinos: "У браузері · працює всюди", + whatAreZaps: "Що таке Zap?", + whatAreZapsShort: "Що таке zaps?", + zapsDesc: "Миттєві платежі Bitcoin Lightning. Надсилайте sats будь-якому скейтеру, творцю споту чи тренеру — без посередників і комісій платформи.", + instant: "Миттєво", + instantDesc: "Зараховується за секунди", + flexible: "Гнучко", + flexibleDesc: "Ваш гаманець, ваші ключі", + private: "Приватно", + privateDesc: "Cashu приховує, хто платить", + direct: "Напряму", + directDesc: "Цінність іде творцю", + loginRequired: "Потрібен вхід", + loginRequiredDesc: "Увійдіть через свій акаунт Nostr, щоб підключити Lightning-гаманець і почати надсилати zaps.", + browseMints: "Переглянути Cashu mint" + }, + modal: { + walletName: "Назва гаманця (необов'язково)", + walletNamePlaceholder: "Мій Lightning-гаманець", + connectionUri: "URI підключення", + spendLimitTitle: "Спершу встановіть ліміт витрат", + spendLimitBody1: "Цей рядок дозволяє SkateSpots сплачувати Lightning-рахунки з вашого гаманця. У застосунку гаманця призначте цьому підключенню невеликий", + dailyBudget: "денний бюджет", + spendLimitBody2: "(наприклад, кілька тисяч sats) і увімкніть лише", + spendLimitBody3: "Ніколи не вставляйте підключення з необмеженим бюджетом. Ви можете будь-коли відкликати його у своєму гаманці.", + addWallet: "Додати гаманець", + nwcConnection: "Підключення NWC", + lightningWallet: "Lightning-гаманець", + pasteNwc: "Вставте рядок підключення NWC, щоб надсилати zaps", + connectWallet: "Підключити гаманець", + browserExtension: "Розширення браузера (WebLN)", + autoDetected: "Визначається автоматично, якщо встановлено", + ready: "Готово", + notFound: "Не знайдено", + getNwcFrom: "Отримати NWC від:", + connectionRequired: "Потрібен URI підключення", + connectionRequiredDesc: "Будь ласка, введіть дійсний NWC URI підключення.", + activeChanged: "Активний гаманець змінено", + activeChangedDesc: "Обраний гаманець тепер активний для zaps.", + connectNwc: "Підключити гаманець NWC", + connectNwcDesc: "Введіть рядок підключення з сумісного гаманця.", + connect: "Підключити", + connecting: "Підключення...", + walletSettings: "Налаштування гаманця", + connectDesc: "Підключіть Lightning-гаманець, щоб миттєво надсилати zaps." + }, + cashu: { + title: "Гаманець Cashu", + desc: "Вбудований ecash-гаманець — без зовнішнього налаштування", + initializing: "Ініціалізація гаманця...", + walletError: "Помилка гаманця", + balance: "Баланс", + balanceAria: "Баланс гаманця {{amount}} sats", + activeMint: "Активний mint", + selectMint: "Оберіть mint", + receive: "Отримати", + send: "Надіслати", + receiveViaLightning: "⚡ Отримати через Lightning", + amountSats: "Сума в sats", + generateInvoice: "Створити рахунок", + generating: "Створення…", + or: "Або", + receiveCashu: "🥜 Отримати токен Cashu", + scanQr: "Сканувати QR", + pasteCashu: "Вставте токен Cashu (cashu...)", + receiveToken: "Отримати токен", + receiving: "Отримання…", + createCashu: "🥜 Створити токен Cashu", + createToken: "Створити токен", + creating: "Створення…", + payInvoice: "⚡ Сплатити Lightning-рахунок", + pasteInvoice: "Вставте Lightning-рахунок (lnbc...)", + payInvoiceBtn: "Сплатити рахунок", + processing: "Обробка...", + payAddress: "📧 Сплатити на Lightning Address", + sendToAddress: "Надіслати на адресу", + sending: "Надсилання…", + recentActivity: "Остання активність", + receivedLightning: "Отримано ⚡ Lightning", + sentLightning: "Надіслано ⚡ Lightning", + sentToken: "Надіслано 🥜 токен", + receivedToken: "Отримано 🥜 токен", + whatIsCashu: "Що таке Cashu?", + whatIsCashuDesc: "Cashu — це цифрові гроші, забезпечені Bitcoin Lightning. Уявіть це як токени Bitcoin, які ви тримаєте у своєму браузері.", + benefitOffline: "Працює офлайн на спотах", + benefitInstant: "Миттєві платежі між користувачами", + benefitPrivacy: "Орієнтований на приватність (mint не можуть вас відстежити)", + benefitRedeemable: "Завжди можна обміняти на Lightning sats", + findMints: "Знайти mint на mintradar.pedani.eu", + backupTitle: "Створіть резервну копію гаманця", + backupDesc: "Ваш гаманець захищено фразою відновлення з 12 слів. Збережіть її надійно — вона знадобиться, щоб відновити баланс, якщо ви очистите дані браузера.", + viewRecovery: "Переглянути фразу відновлення", + backupNote: "Це як ваш Nostr nsec — тримайте в секреті та майте резервну копію!", + tokenReceived: "Токен отримано", + tokenReceivedDesc: "Токен Cashu успішно погашено!", + receiveFailed: "Не вдалося отримати", + unknownError: "Невідома помилка", + requestUnsupported: "Запит Cashu поки не підтримується", + requestUnsupportedDesc: "Цей гаманець поки не може сплатити запит Cashu (creq) — натомість попросіть Lightning-рахунок або адресу.", + onchainUnsupported: "On-chain тут не підтримується", + onchainUnsupportedDesc: "Це адреса Bitcoin. Цей гаманець надсилає лише токени Cashu та платежі Lightning.", + nostrProfile: "Це профіль Nostr", + nostrProfileDesc: "Скануйте токен Cashu, Lightning-рахунок або Lightning-адресу, щоб сплатити.", + clinkUnsupported: "Код платежу поки не підтримується", + clinkUnsupportedDesc: "Цей гаманець поки не може сплатити коди CLINK. Натомість використайте Lightning-рахунок або адресу.", + unrecognizedQr: "Нерозпізнаний QR-код", + unrecognizedQrDesc: "Скануйте токен Cashu, Lightning-рахунок або Lightning-адресу.", + invalidAmount: "Недійсна сума", + invalidAmountDesc: "Будь ласка, введіть дійсну суму", + paymentSent: "Платіж надіслано", + paymentSentDesc: "Надіслано {{amount}} sats на {{address}}", + paymentFailed: "Платіж не вдався", + copied: "Скопійовано", + copiedDesc: "{{label}} скопійовано до буфера обміну", + receiveSats: "Отримати {{amount}} sats", + payInvoiceHint: "Сплатіть цей рахунок з будь-якого Lightning-гаманця", + invoiceQrAlt: "QR-код рахунку", + lightningInvoice: "Lightning-рахунок", + invoiceLabel: "Рахунок", + waiting: "⏳ Очікування платежу...", + tokenReady: "Токен готовий до надсилання", + shareToken: "Поділіться цим токеном з отримувачем", + tokenQrAlt: "QR-код токена", + cashuToken: "Токен Cashu", + tokenLabel: "Токен", + copyToken: "Копіювати токен", + tokenWarning: "Будь-хто з цим токеном може його забрати — поводьтеся з ним як із готівкою!", + browser: { + title: "Вбудований ecash-гаманець", + appOnly: "Лише в застосунку", + desc: "Cashu ecash із самостійним зберіганням, на базі Bitcoin Lightning", + unlockTitle: "Розблокуйте повний гаманець у застосунку SkateSpots", + unlockDesc: "Вбудований ecash-гаманець дозволяє створювати, надсилати й погашати токени Cashu прямо на споті. Він працює в нативному застосунку, де може напряму зв'язуватися з mint — браузери ізолюють такі з'єднання для вашої безпеки.", + zapTipTitle: "Zap і чайові — уже працює у вашому браузері", + zapTipDesc: "Надсилання sats на споти, події, тренерів і команди працює прямо тут. Просто підключіть Lightning-гаманець нижче — Nostr Wallet Connect або розширення браузера, як-от Alby. Cashu mint не потрібен." + } + }, + escrow: { + title: "Ескроу", + desc: "Продавайте безпечно: увімкніть ескроу, і покупець зможе заблокувати свої sats для вас під час угоди. Ви вивільняєте їх, коли передаєте товар — якщо ні, покупець може повернути їх після узгодженого часу.", + active: "Ескроу увімкнено", + publish: "Увімкнути ескроу", + published: "Ескроу увімкнено", + publishedDesc: "Покупці тепер можуть блокувати кошти для вас під час угоди.", + failed: "Не вдалося увімкнути ескроу" + }, + escrowSettings: { + title: "Налаштування ескроу", + desc: "Типові параметри для угод ескроу Cashu. Лише на цьому пристрої.", + lockWindow: "Типовий період блокування", + lockWindowHint: "Як довго кошти залишаються заблокованими, перш ніж покупець зможе їх повернути. Довший період безпечніший для продавця.", + days: "днів", + preferredMint: "Mint для ескроу", + activeMint: "Активний mint", + preferredMintHint: "Який mint обслуговує ескроу. Використовуйте надійний.", + requireListings: "Вимагати ескроу для нових оголошень", + requireListingsHint: "Попередньо вибирає «Вимагати ескроу», коли ви додаєте товар." + }, + privacy: { + title: "Поради щодо приватності", + subtitle: "Дізнайтеся, як захистити свою фінансову приватність", + cashuRecommended: "CASHU (Рекомендовано)", + anon: "Анонімні транзакції", + blind: "Сліпі підписи приховують активність", + noIp: "Без розкриття IP", + trustMint: "Довіряти кошти mint", + lightningAddress: "LIGHTNING ADDRESS", + linked: "Можна пов'язати з особою", + traceable: "Історія платежів відстежувана", + ipVisible: "IP видно під час виставлення рахунку", + selfCustody: "Можливе самостійне зберігання", + bestPractices: "Найкращі практики", + tip1Title: "Використовуйте Cashu для отримання чайових", + tip1Desc: "Вбудований гаманець Cashu — найприватніший спосіб отримувати zaps", + tip2Title: "Використовуйте окремий гаманець для SkateSpots", + tip2Desc: "Не використовуйте свій основний ощадний гаманець — тримайте кошти застосунку окремо", + tip3Title: "Розгляньте використання VPN або Tor", + tip3Desc: "Приховує вашу IP-адресу під час транзакцій", + tip4Title: "Уникайте Lightning-адрес, пов'язаних з особою", + tip4Desc: "Використовуйте псевдонімні адреси, не пов'язані з вашим справжнім ім'ям", + proTip: "Порада:", + proTipDesc: "Спершу отримуйте платежі на гаманець Cashu, а потім періодично переказуйте більші суми до особистого гаманця, використовуючи VPN для переказу.", + warnTitle: "Примітка про приватність", + warnDesc: "Lightning-адреси потенційно можуть пов'язати вашу активність у SkateSpots з вашою справжньою особою.", + betterPrivacy: "Для кращої приватності:", + bullet1: "Використовуйте окремий гаманець для цього застосунку", + bullet2: "Розгляньте натомість використання гаманця Cashu", + bullet3: "Використовуйте VPN/Tor для транзакцій", + useCashu: "Використати Cashu", + understand: "Я розумію" + }, + mintPrivacy: { + title: "Приватність mint", + desc: "Використання кількох mint підвищує приватність, не даючи жодному окремому mint бачити всі ваші транзакції", + distribution: "Розподіл коштів", + singleWarning: "Використання одного mint означає, що цей mint бачить час і суми всіх ваших транзакцій. Розгляньте додавання більшої кількості mint для кращої приватності.", + yourMints: "Ваші mint ({{count}})", + default: "Типовий", + addMint: "Додати mint", + addMintDesc: "Додати новий Cashu mint до вашого гаманця", + mintUrl: "URL mint", + add: "Додати", + adding: "Додавання...", + orChoose: "Або оберіть зі списку", + recommended: "Рекомендовані mint", + allMints: "Усі mint (каталог)", + searchMints: "Пошук mint…", + noDirectoryMints: "Жоден mint не відповідає вашому пошуку.", + directoryHint: "З каталогу спільноти MintRadar — неофіційний і може бути застарілим.", + added: "Додано", + soon: "Скоро", + autoDistribute: "Автоматично розподіляти кошти", + autoDesc: "Розподіляти отримані кошти між кількома mint", + autoAria: "Автоматично розподіляти кошти (незабаром)", + tip1: "Використовуйте щонайменше 2-3 різні mint для кращої приватності", + tip2: "Не тримайте всі кошти в одному mint — розподіляйте їх", + tip3: "Враховуйте юрисдикцію mint (різні країни = різний правовий доступ)", + tip4: "Mint бачать час транзакцій, але НЕ те, кому ви платите (сліпі підписи)", + future: "Майбутні функції: ротація mint і оцінка приватності — слідкуйте за оновленнями!", + findMore: "Знайти більше mint на mintradar.pedani.eu", + trustWarning: "Попередження про довіру:", + trustWarningDesc: "Mint є кастодіальними — вони зберігають ваші кошти. Використовуйте лише ті mint, яким довіряєте. Якщо mint зникне, ваші кошти можуть бути втрачені. Розподіл коштів між кількома mint знижує ризик.", + removeTitle: "Видалити mint?", + removeDesc: "Ви впевнені, що хочете видалити {{name}}?", + removeMint: "Видалити mint", + warning: "Увага:", + withdrawWarning: "У цьому mint є {{amount}} sats. Виведіть кошти перед видаленням!", + invalidUrl: "Недійсний URL", + invalidUrlDesc: "URL mint має починатися з https://", + mintAdded: "Mint додано", + mintAddedDesc: "Новий mint успішно додано", + mintAddedNamed: "{{name}} успішно додано", + failedAdd: "Не вдалося додати mint", + failed: "Не вдалося", + noMints: "Немає mint", + singleMint: "Один mint", + concentrated: "Сконцентровано", + moderate: "Помірно", + wellDistributed: "Добре розподілено", + mintCoinosWebDesc: "Mint, дружній до браузера (рекомендовано для браузерів)", + mintMinibitsWebDesc: "⚠ Лише нативний застосунок — недоступний із браузерів", + mintMinibitsNativeDesc: "Mint SkateSpots — рекомендовано", + mintCoinosDesc: "Mint, дружній до браузера", + mintLnbitsDesc: "Mint спільноти на LNbits" + }, + nwc: { + title: "Lightning-гаманець", + noConnection: "Гаманець NWC", + refresh: "Оновити баланс", + createInvoice: "Створити рахунок", + copyInvoice: "Копіювати рахунок", + pasteInvoice: "Вставте Lightning-рахунок (lnbc…)", + amount: "Сума: {{amount}} sats", + pasteToSee: "Вставте рахунок, щоб побачити суму", + pay: "Сплатити", + invoiceQrAlt: "QR-код Lightning-рахунку", + enterAmount: "Введіть суму в sats", + readBalanceFailed: "Не вдалося прочитати баланс", + readBalanceFailedDesc: "Ваш гаманець не відповів.", + createInvoiceFailed: "Не вдалося створити рахунок", + createInvoiceFailedDesc: "Спробуйте ще раз за мить.", + paymentSent: "Платіж надіслано", + paidAmount: "Сплачено {{amount}} sats.", + paid: "Сплачено.", + paymentRejected: "Гаманець відхилив платіж." + }, + qr: { + title: "Сканувати QR-код", + desc: "Розмістіть QR-код у полі зору камери для сканування", + paste: "Вставити з буфера обміну", + hint: "Скануйте токен Cashu, Lightning-рахунок або Lightning-адресу", + clipboardEmpty: "Буфер обміну порожній", + clipboardEmptyDesc: "У буфері обміну не знайдено тексту", + pasteFailed: "Не вдалося вставити", + pasteFailedDesc: "Не вдалося прочитати з буфера обміну" + }, + recovery: { + title: "Фраза відновлення", + desc: "Ці 12 слів — єдиний спосіб відновити ваш баланс ecash. Запишіть їх у правильному порядку та зберігайте офлайн — ніколи нікому їх не показуйте.", + tapReveal: "Торкніться, щоб показати", + noWatching: "Переконайтеся, що ніхто не дивиться", + hide: "Приховати", + reveal: "Показати", + paperHint: "Найбезпечніше записати на папері — копіювання до буфера обміну може призвести до витоку в інші застосунки.", + written: "Я записав(ла) їх", + revealFirst: "Спершу покажіть слова", + copiedDesc: "Фразу відновлення скопійовано — вставте її в безпечне місце, а потім очистіть буфер обміну.", + copyFailed: "Не вдалося скопіювати", + copyFailedDesc: "Будь ласка, натомість запишіть слова." + }, + guide: { + quickGuide: "Швидкий посібник", + fullGuide: "Посібник із гаманця (видання для скейтерів)", + cashuSummary: "Приватність + зручність", + mintHoldsFunds: "(mint зберігає кошти)", + lightningSummary: "Контроль + безпека", + youHoldKeys: "(ви тримаєте ключі)", + useBoth: "Використовуйте обидва: Cashu для чайових, Lightning для заощаджень", + cashuTitle: "ГАМАНЕЦЬ CASHU", + cashuTagline: "Як готівка в кишені на скейтпарку", + cashuBullet1: "Швидко дістати для чайових", + cashuBullet2: "Не носьте тут усі свої заощадження", + cashuBullet3: "Якщо mint зникне, кошти можуть бути втрачені", + cashuBullet4: "Ніхто не знає, скільки у вас є (приватність!)", + cashuPerfectFor: "Перекуси на сесії, zaps за кліпи, малі чайові", + lightningTitle: "LIGHTNING-ГАМАНЕЦЬ", + lightningTagline: "Як ваш банківський рахунок — ви все контролюєте", + lightningBullet1: "Безпечно, ви контролюєте ключі", + lightningBullet2: "Потрібно трохи часу на налаштування", + lightningBullet3: "Повна історія транзакцій", + lightningBullet4: "Краще для більших сум", + lightningPerfectFor: "Купівля спорядження, заощадження, великі zaps", + perfectFor: "Ідеально для:", + proTips: "ПОРАДИ ПРО", + tip1Title: "Використовуйте обидва гаманці", + tip1Desc: "Тримайте гроші для сесій у Cashu, а заощадження — у Lightning", + tip2Title: "Спробуйте різні гаманці", + tip2Desc: "Експериментуйте, щоб знайти те, що підходить вам. Кожен має різні функції та компроміси", + tip3Title: "Краща приватність", + tip3Desc: "Використання кількох гаманців означає, що жоден застосунок не бачить усієї вашої активності", + tip4Title: "Набувайте досвіду", + tip4Desc: "Чим більше інструментів ви знаєте, тим більше у вас можливостей. Починайте з малого, вчіться в процесі", + tldr: "Коротко:", + tldrDesc: "Не існує «найкращого» гаманця — усе залежить від ваших потреб. Спробуйте обидва, користуйтеся тим, що підходить, і не тримайте всі свої sats в одному місці!" + }, + zap: { + count: "{{count}} zaps", + connectFirst: "Спершу підключіть гаманець", + connectFirstDesc: "Щоб надсилати zaps (чайові в Bitcoin), потрібно підключити Lightning-гаманець.", + quickSetup: "Швидке налаштування (30 секунд)", + quickSetupDesc: "Підключіть наявний Lightning-гаманець через Nostr Wallet Connect (NWC). Додаткові акаунти не потрібні.", + connectNwc: "Підключити гаманець через NWC", + noWallet: "Немає гаманця? Дізнайтеся як", + skip: "Пропустити поки що (ручний рахунок)", + note: "ℹ️ Примітка:", + noteDesc: "Ви все ще можете створити рахунок, не підключаючи гаманець, але для оплати доведеться скопіювати його вручну.", + payWithWebln: "Сплатити через WebLN", + processing: "Обробка...", + openInWallet: "Відкрити в Lightning-гаманці", + scanHint: "Скануйте QR-код або скопіюйте рахунок, щоб сплатити з будь-якого Lightning-гаманця.", + cashuInstant: "Сплатіть миттєво з вбудованого гаманця", + satsAvailable: "sats доступно", + or: "АБО", + customAmount: "Власна сума", + addComment: "Додати коментар (необов'язково)", + insufficientBanner: "⚠️ Недостатній баланс Cashu. Вам потрібно ще {{amount}} sats. Перемкніться на Lightning або поповніть гаманець Cashu.", + creatingInvoice: "Створення рахунку...", + zapAmount: "Zap {{amount}} sats", + zapAmountCashu: "Zap {{amount}} sats через Cashu", + lightningInvoice: "Lightning-рахунок", + qrAlt: "QR-код Lightning-рахунку", + enterAmount: "Введіть суму", + enterAmountDesc: "Оберіть готовий варіант або введіть дійсну кількість sats.", + cashuUnavailable: "Гаманець Cashu недоступний", + cashuUnavailableDesc: "Ваш гаманець Cashu не готовий. Перемкніться на Lightning або спершу відкрийте гаманець.", + insufficientCashu: "Недостатній баланс Cashu", + insufficientCashuDesc: "Вам потрібно ще {{amount}} sats. Перемкніться на Lightning або поповніть.", + zapSentCashu: "Zap надіслано! 🥜", + zapSentCashuDesc: "Надіслано {{amount}} sats з вашого гаманця Cashu.", + cashuFailed: "Платіж Cashu не вдався", + cashuFailedDesc: "Не вдалося сплатити з вашого гаманця Cashu.", + invoiceCopied: "Рахунок скопійовано", + invoiceCopiedDesc: "Lightning-рахунок скопійовано до буфера обміну", + defaultComment: "Zapped у SkateSpots! 🛹", + titleConnect: "Підключити гаманець", + titlePayment: "Платіж Lightning", + titleZap: "Надіслати Zap", + descConnect: "Підключіть Lightning-гаманець, щоб надсилати zaps", + descPayment: "Сплатіть через мережу Bitcoin Lightning", + descZap: "Zaps — це невеликі платежі в Bitcoin, які підтримують творця цього вмісту. Якщо вам сподобалося, подумайте про надсилання zap!", + descZapShort: "Zaps — це невеликі платежі в Bitcoin, які підтримують творців. Подумайте про надсилання zap!" + }, + zapCrew: { + title: "Zap для команди", + desc: "Розділіть zap порівну між {{count}} учасниками команди з Lightning-адресою.", + noMembers: "Зараз немає інших учасників команди для zap.", + totalAmount: "Загальна сума", + customTotal: "Власна загальна сума", + each: "sats кожному", + rounded: "(округлено)", + noWallet: "Гаманець не підключено — ви отримаєте рахунок для кожного учасника, щоб сплатити вручну. Підключіть гаманець для розподілу одним дотиком.", + zapAcross: "Zap {{amount}} sats між {{count}}", + sentTo: "⚡ Надіслано {{done}}/{{total}}", + none: "Автоматичні платежі не виконано", + copyPending: "Скопіюйте всі несплачені рахунки, щоб завершити оплату вручну.", + thanks: "Дякуємо за підтримку команди!", + payingCrew: "Оплата команді…", + defaultComment: "Zapped для команди {{crew}}! 🤘", + sent: "Надіслано", + paying: "Оплата", + resolving: "Визначення", + skipped: "Пропущено", + failed: "Не вдалося", + waiting: "Очікування", + copyInvoice: "Копіювати рахунок", + invoiceCopied: "Рахунок скопійовано", + invoiceCopiedDesc: "Вставте його в будь-який Lightning-гаманець" + }, + zapBadges: { + title: "Значки Zap", + zaps: "zaps", + satsSent: "sats надіслано", + rank: "ранг", + footnote: "На основі zaps за останні 30 днів.", + first: "Перший Zap", + firstHint: "Надішліть свій перший zap", + regular: "Постійний", + regularHint: "Надішліть 10 zaps", + generous: "Щедрий", + generousHint: "Надішліть 10 000 sats", + patron: "Патрон", + patronHint: "Надішліть 100 000 sats", + top10: "Топ-10", + top10Hint: "Увійдіть до топ-10 підтримувачів" + }, + trust: { + unavailable: "Оцінка довіри недоступна", + yourContent: "Це ваш вміст", + following: "Ви стежите за цим користувачем", + friendOfFriend: "Друг друга (2 кроки)", + nip05: "Користувач, підтверджений NIP-05", + unknown: "Невідомий користувач", + help: "Оцінки довіри допомагають визначити надійних учасників у спільноті скейтбордингу." + }, + share: { + title: "Поділитися профілем", + desc: "Наведіть камеру телефона на код, щоб відкрити профіль {{name}}.", + qrAlt: "QR-код профілю", + copyLink: "Копіювати посилання", + copyFailed: "Не вдалося скопіювати", + copyFailedDesc: "Не вдалося скопіювати посилання.", + shareEllipsis: "Поділитися…" + }, + addToCollection: { + title: "Зберегти в колекцію", + desc: "Зберегти «{{spot}}» в одну з ваших колекцій", + loginRequired: "Будь ласка, увійдіть, щоб зберігати споти в колекції", + noCollections: "У вас ще немає жодної колекції", + createFirst: "Створіть свою першу колекцію нижче!", + spotCount: "{{count}} спотів", + alreadySavedTag: "Уже збережено", + alreadySaved: "Уже збережено", + alreadySavedDesc: "«{{spot}}» вже є в «{{collection}}»", + saved: "Спот збережено!", + savedDesc: "Додано «{{spot}}» до «{{collection}}»", + saveFailed: "Не вдалося зберегти", + somethingWrong: "Щось пішло не так", + created: "Колекцію створено!", + createdDesc: "Додано «{{spot}}» до вашої нової колекції «{{collection}}»", + createFailed: "Не вдалося створити колекцію", + name: "Назва колекції", + descriptionOptional: "Опис (необов'язково)", + creating: "Створення...", + createAndSave: "Створити й зберегти", + createNew: "Створити нову колекцію" + }, + collection: { + back: "Назад до колекцій", + created: "Створено {{date}}", + deleteTitle: "Видалити колекцію?", + deleteDesc: "Це назавжди видалить «{{title}}». Самі споти не постраждають.", + deleting: "Видалення...", + deleteFailed: "Не вдалося видалити колекцію", + deleted: "Колекцію видалено", + deletedDesc: "«{{title}}» видалено", + empty: "У цій колекції немає спотів", + emptyOwner: "Додавайте споти до колекції, натискаючи «Зберегти в колекцію» на будь-якому споті", + emptyOther: "Ця колекція порожня", + browseSpots: "Переглянути споти", + linkCopied: "Посилання скопійовано!", + linkCopiedDesc: "Посилання на колекцію скопійовано до буфера обміну", + map: "Карта колекції", + removeFailed: "Не вдалося видалити спот", + shareText: "Погляньте на цю колекцію спотів: {{title}}", + spotRemoved: "Спот видалено", + spotRemovedDesc: "«{{title}}» видалено з цієї колекції" + }, + mints: { + title: "Mint", + subtitle: "Перегляньте Cashu mint та їхній стан. Операції гаманця Cashu виконуються в застосунку SkateSpots.", + searchPlaceholder: "Пошук mint за назвою або URL…", + onlineOnly: "Лише онлайн", + count: "{{filtered}} з {{total}} mint", + directoryError: "Не вдалося завантажити каталог mint.", + directoryHint: "Каталог веде спільнота, і він має обмеження частоти — може бути тимчасово недоступним.", + goToWallet: "До гаманця", + appOnly: "Додавання mint відбувається в застосунку SkateSpots (Cashu працює лише в застосунку).", + noMatch: "Жоден mint не відповідає «{{query}}».", + footer: "Дані про стан із проєкту спільноти MintRadar — неофіційні й можуть бути застарілими. Завжди переглядайте умови mint, перш ніж довіряти йому кошти.", + archived: "Архівовано", + degraded: "Погіршено", + offline: "Офлайн", + online: "Онлайн", + terms: "Умови", + reliability: "надійність", + add: "Додати", + addToWallet: "Додати до гаманця", + copyUrl: "Копіювати URL", + openMint: "Відкрити mint", + inWallet: "У вашому гаманці", + addedBadge: "Додано", + urlCopied: "URL mint скопійовано", + added: "Mint додано", + addedDesc: "{{host}} тепер у вашому гаманці.", + couldNotAdd: "Не вдалося додати mint", + communityRating: "Оцінка спільноти", + reliabilityLabel: "Надійність", + uptime: "Час роботи 24 год / 7 дн", + location: "Розташування", + latency: "Затримка", + nuts: "Підтримувані NUT", + units: "Одиниці", + version: "Версія", + ratedBy: "Оцінено {{rating}}/5 користувачами ({{count}}) на MintRadar.", + noRating: "Поки немає оцінки спільноти на MintRadar.", + reviewsNote1: "Текстові відгуки не є частиною каталогу —", + openMintRadar: "відкрити MintRadar", + reviewsNote2: "щоб прочитати або залишити відгук.", + liveness: "Аудит активності: перевірено {{mints}} mint і {{melts}} melts", + livenessErrors: " · {{errors}}/{{total}} недавніх помилок", + whatsAMint: "Що таке mint?", + whatsAMintDesc: "Cashu mint випускає та погашає ecash у вашому гаманці. Він зберігає Bitcoin, що забезпечує ваші токени — тож mint, який ви самі не запускаєте, доводиться довіряти.", + mintWarning: "Mint можуть виходити з мережі, змінювати умови або зникати разом із коштами. Тримайте лише невеликі баланси, якщо не довіряєте оператору.", + healthDisclaimer: "Дані про стан ведуть спільнотою (MintRadar) — неофіційні й можливо застарілі." + }, + appShop: { + title: "Крамниця застосунку", + subtitle: "Мерч SkateSpots для тих, хто тримає сцену в русі.", + comingSoon: "Незабаром", + wearThe: "Носіть", + scene: "Сцену", + heroDesc1: "Мерч для тих, хто тримає цю справу в русі — продається", + locally: "локально, на замовлення", + heroDesc2: ". Ви пишете мені, ми узгоджуємо деталі, і ви платите в", + heroDesc3: "— Lightning або Cashu — коли забираєте. Без карток, без акаунтів, без робота-каси, без посередника, що знімає відсоток.", + requestItem: "Замовити товар", + dmHint: "Відкриває приватне зашифроване повідомлення зі мною.", + lightning: "Lightning", + cashu: "Cashu", + localHandover: "Локальна передача", + inTheWorks: "У розробці", + notForSale: "ще не продається", + soon: "скоро", + tees: "Футболки та худі", + decks: "Деки", + shopTools: "Інструменти магазину", + stickerPacks: "Набори стікерів", + stickerPacksDesc: "Набори вже скоро. Дизайнів немає — роздрукуйте ці два прямо зараз, безкоштовно.", + sticker: "Стікер", + stickerTip: "Чорний вирізаний. Друкуйте на стікерному папері, вирізайте по чорному краю.", + poster: "Постер", + posterTip: "Друкується на A3; зменште до A4 (50%) — і він усе одно добре сканується.", + printableAlt: "SkateSpots {{title}} — для друку", + print: "Друкувати", + printNote1: "Друкуйте в", + actualSize: "100% / «Фактичний розмір»", + printNote2: "щоб розмір був точним, а QR залишався чітким — він веде на skate-spots.org. Векторні файли, тож масштабуються без розмиття.", + howBuying: "Як працює купівля", + dmNotCart: "це повідомлення, а не кошик", + step1Title: "Напишіть мені", + step1Desc: "Надішліть повідомлення з тим, що хочете — товар, розмір, колір, будь-що.", + step2Title: "Ми все узгоджуємо", + step2Desc: "Ціна в sats, а також де й коли зустрітися. Це розмова, а не оформлення замовлення.", + step3Title: "Сплатіть у sats", + step3Desc: "Lightning або Cashu під час передачі — і товар ваш. Без доставки, без черг." + }, + newsletter: { + newIssue: "Новий випуск", + composerTitle: "Опублікувати випуск розсилки", + composerDesc: "Публікується як стаття NIP-23 (kind 30023) на релеї спільноти. Підписники отримують її у своєму сповіщенні. Тіло підтримує Markdown.", + fieldTitle: "Заголовок", + identifier: "Ідентифікатор (slug)", + leaveBlank: "залиште порожнім для автогенерації", + reusingSlug: "Повторне використання наявного slug редагує той випуск, а не створює новий.", + summary: "Короткий опис", + optional: "необов'язково", + coverImage: "URL обкладинки", + bodyMarkdown: "Тіло (Markdown)", + characters: "{{count}} символів", + publishIssue: "Опублікувати випуск", + issuePublished: "Випуск опубліковано! 🛹", + issuePublishedDesc: "Підписники побачать його у своєму сповіщенні.", + publishFailed: "Не вдалося опублікувати", + couldNotReachRelay: "Не вдалося зв'язатися з жодним релеєм — перевірте з'єднання та спробуйте ще раз.", + tryAgain: "Будь ласка, спробуйте ще раз.", + publishedToNostr: "Опубліковано в Nostr", + publishedToast: "Опубліковано!", + postedToNostr: "Дроп {{number}} опубліковано в Nostr.", + postToNostr: "Опублікувати в Nostr", + previewLabel: "Попередній перегляд", + editFirst: "Спершу відредагувати", + previewNoteDesc: "Так нотатка виглядатиме в більшості клієнтів Nostr. Форматування залежить від клієнта.", + editNoteDesc: "Відредагуйте текст нотатки нижче. Зміни стосуються лише цієї публікації — вихідний файл залишається незмінним.", + dropNumber: "Дроп {{number}}", + publish: "Опублікувати", + publishing: "Публікація...", + dropIsOut: "Дроп {{number}} вийшов", + daysAgo: "{{count}} дн. тому", + dismiss: "Закрити", + itsMonday: "Це понеділок", + mondayDesc: "Час випускати щотижневу розсилку. Один клік — і AI пише її з git-логу.", + writeDrop: "Написати дроп {{number}}", + dismissReminder: "Закрити нагадування", + loginPrompt: "Увійдіть через Nostr, щоб отримувати нові дропи у своїй пошті.", + subscribedToast: "Ви підписані! 🛹", + subscribedToastDesc: "Нові дропи з'являтимуться у вашому сповіщенні в розділі «Новини».", + unsubscribed: "Відписалися", + unsubscribedDesc: "Ви все ще можете будь-коли прочитати кожен випуск тут.", + checking: "Перевірка…", + subscribed: "Підписані", + unsubscribe: "Відписатися", + subscribeCta: "Підписатися на розсилку", + archiveSynced: "Архів синхронізовано з Nostr", + missingCount: "{{count}} випусків архіву ще не в Nostr", + backfillDesc: "Опублікуйте {{list}} як статті NIP-23, щоб підписники та читачі довгих форматів бачили повний архів. Сторінка зберігає свій насичений макет незалежно від цього.", + backfill: "Заповнити {{count}} у Nostr", + publishing2: "Публікація…", + publishingLabel: "Публікація…", + backfilled: "Заповнено {{count}} випусків 🛹", + backfilledDesc: "Архів тепер живе в Nostr для підписників і читачів.", + partialBackfill: "Опубліковано {{published}}, {{failed}} не вдалося", + retryFinish: "Повторіть, щоб завершити: {{list}}.", + notLoggedIn: "Не увійшли", + allIssues: "Усі випуски", + brand: "Розсилка SkateSpots", + digTheDrop: "Сподобався дроп? Zapp його — і не пропустите наступний.", + sectionStats: "Спільнота в цифрах", + sectionWhatsNew: "Що нового", + sectionSpotOfWeek: "Спот тижня", + sectionCommunity: "Спільнота", + sectionSupport: "Підтримати проєкт", + sectionLatestDrops: "Останні дропи · У прямому ефірі з Nostr", + mappedBy: "Нанесено на карту", + viewOnMap: "Переглянути на карті", + noSpotPicked: "Цього тижня спот не обрано. Додайте свій — і він може потрапити до наступного дропу.", + browseMap: "Переглянути карту", + spotMap: "Карта спотів", + statsBadge: "Статистика", + supportDesc: "100% відкритий код, фінансується спільнотою, без реклами, без інвесторів. Якщо це корисно — zapp або підтримайте на Angor.", + readFull: "Читати повний випуск", + joinSkaters: "Долучайтеся до {{count}} скейтерів, які отримують дропи", + weeklyDrops: "Щотижневі дропи", + tagline: "Щотижнева розсилка · випускаємо, коли хочемо", + freeNote: "Безкоштовно. На базі Nostr — ваша підписка живе на ваших ключах і супроводжує вас на всіх пристроях. Нові дропи з'являються у вашому сповіщенні.", + live: "У прямому ефірі", + builtOn: "Побудовано на", + openSource: "Відкритий код", + supportUs: "Підтримайте нас", + freeToSkate: "Ви вільні кататися на скейті" + }, + stats: { + subtitle: "Живі метрики, отримані безпосередньо з мережі Nostr. Прозорі, децентралізовані, перевіряються будь-ким.", + dataSource: "Джерело даних:", + updated: "оновлено {{age}}", + refresh: "Оновити", + partial: "Не вдалося зв'язатися з кожним релеєм — ці числа можуть бути неповними.", + error: "Зараз не вдалося зв'язатися з релеєм. Статистика завантажиться, коли з'єднання відновиться.", + atAGlance: "Спільнота одним поглядом", + skateSpots: "Скейт-споти", + listedShops: "Магазини в списку", + events: "Події", + mappers: "Картографи", + uniqueContributors: "унікальних учасників", + labHeader: "The Lab · Творці та послуги", + total: "усього {{count}}", + coaches: "Тренери", + filmers: "Оператори", + editors: "Монтажери", + photographers: "Фотографи", + builders: "Будівельники", + artists: "Художники", + graffiti: "Графіті", + tattoo: "Тату", + trainers: "Інструктори", + musicians: "Музиканти", + judges: "Судді", + organizers: "Організатори", + barbers: "Барбери", + showFewer: "Показати менше", + showAllCrafts: "Показати всі 13 напрямів", + community: "Спільнота", + tours: "Тури", + crews: "Команди", + marketplace: "Маркетплейс", + liveListings: "Активні оголошення", + tradesRecorded: "Зафіксовані угоди", + satsTraded: "Sats в угодах", + zapsToMappers: "Zaps для картографів", + tradesNote1: "взаємних угод між", + tradesNote2: "людьми. Sats вказують самі учасники угод — застосунок не може спостерігати платіж поза застосунком — тож у заголовку враховано лише", + mutual: "взаємні", + tradesNote3: "угоди з обмеженням на пару; необроблена заявка становить", + tradesNote4: "sats. «Zaps для картографів» враховує лише чеки, адресовані нашим найкращим учасникам — це", + not: "не", + tradesNote5: "глобальний обсяг zaps.", + byRegion: "Споти та магазини за регіонами", + resolving: "Визначення {{count}} локацій без тегів за їхніми координатами… одноразово, потім кешується на цьому пристрої.", + topCountries: "Топ країн", + topCities: "Топ міст", + other: "Інші", + otherCountriesTitle: "Країни за межами топ-6", + otherCitiesTitle: "Міста за межами топ-6", + uncategorised: "Без категорії", + uncategorisedTitle: "Без тегу міста/країни", + regionNote1: "Підраховує", + spotsAndShops: "споти й магазини", + regionNote2: ", а не скейтерів — за власним тегом міста/країни кожного, або визначено з координат його мітки, якщо тегу немає (кешується на вашому пристрої; країни групуються за кодом ISO, якщо він є), лише релей спільноти, з виключенням вмісту, прихованого модерацією.", + ofTotal: "{{count}} з {{total}}", + regionNote3: "локацій не мають тегу місцеположення і показуються як «Без категорії».", + growth: "Зростання з часом", + chartCumulativeTitle: "Нанесено спотів (накопичувально)", + chartCumulativeDesc: "Загальна кількість спотів, доданих на карту з часом", + chartMonthlyTitle: "Місячна активність", + chartMonthlyDesc: "Новий вміст, опублікований щомісяця", + chartMappersTitle: "Активні картографи / місяць", + chartMappersDesc: "Унікальні учасники, що публікують щомісяця", + chartMixTitle: "Суміш вмісту", + chartMixDesc: "Розподіл за типом вмісту (за весь час)", + noData: "Поки немає даних", + topMappers: "Топ картографів", + mostSpots: "— найбільше доданих спотів", + noMapperData: "Поки немає даних про картографів", + topShops: "Топ магазинів", + mostShops: "— найбільше доданих магазинів", + shopCount: "{{count}} магазинів", + noShopData: "Поки немає даних про магазини", + supporters: "Підтримувачі спільноти", + fundedTitle: "Фінансується спільнотою", + fundedDesc1: "Децентралізоване краудфандингове фінансування Bitcoin через Angor.", + fundedDesc2: "Без реклами, без інвесторів, без продажу даних.", + backAngor: "Підтримайте нас на Angor", + communityLink: "Спільнота →", + footer1: "Усі дані отримуються в реальному часі з", + footer2: "— публічного релею Nostr.", + footer3: "Кожна подія підписана її творцем і криптографічно перевіряється.", + footer4: "Жодні числа не можна підробити.", + spots: "Споти", + shops: "Магазини", + lab: "Lab", + thisMonth: "+{{count}} цього місяця", + fromActive: "{{count}} з активних акаунтів", + viewAll: "Переглянути все", + spotCount: "{{count}} спотів" + }, + leaderboard: { + mapEarn: "Картографуй і заробляй", + helpMap: "ДОПОМОЖІТЬ НАНЕСТИ СВІТ НА КАРТУ", + intro: "Додавайте споти й магазини, отримуйте zaps від вдячних скейтерів. Найкращі учасники можуть отримати бонусні винагороди!", + howItWorks: "Як це працює", + step1Title: "1. Нанеси на карту", + step1Desc: "Додавайте споти й магазини з фото та деталями", + step2Title: "2. Отримуй zaps", + step2Desc: "Скейтери, яким ваші споти стануть у пригоді, надішлють вам чайові", + step3Title: "3. Бонусні винагороди", + step3Desc: "Найкращі картографи можуть отримати бонусні винагороди з нашого фонду", + proTips: "💡 Поради для більшої кількості zaps:", + tipPhotos: "Додавайте 3+ фото", + tipDescriptions: "Пишіть детальні описи", + tipLocation: "Точне розташування", + mapShop: "Нанести магазин", + mapShopDesc: "Скейт-шопи, магазини дошок", + mapSpot: "Нанести спот", + mapSpotDesc: "Парки, вуличні споти, DIY", + shops: "Магазини", + spotsLower: "спотів", + shopsLower: "магазинів", + contributions: "внесків", + yourRanking: "Ваш рейтинг", + spotsShops: "{{spots}} спотів • {{shops}} магазинів", + totalLower: "усього", + overall: "Загалом", + noContributions: "Ще немає внесків. Будьте першим!", + addFirstSpot: "Додати перший спот", + noShops: "Ще немає нанесених магазинів", + addFirstShop: "Додати перший магазин", + noSpots: "Ще немає нанесених спотів", + poweredBy: "Працює завдяки zaps спільноти", + poweredByDesc: "Коли спот став у пригоді, zapp картографу! Це найкращий спосіб подякувати й заохотити більше внесків.", + you: "Ви", + zapTitle: "Рейтинги Zap", + zapSubtitle: "Споти, що отримують найбільше любові — і скейтери, які її дарують.", + thisWeek: "Цього тижня", + thisMonth: "Цього місяця", + allTime: "За весь час", + topZappedSpots: "Найбільш zapped споти", + noZaps: "За цей період ще немає zaps. Будьте першим — натисніть ⚡ на споті, який любите.", + topSupporters: "Найкращі підтримувачі", + noZapsSent: "За цей період ще не надіслано zaps.", + fromTop10: "⚡ {{amount}} sats від топ-10", + supporter: "Підтримувач", + skateShop: "Скейт-шоп", + skateSpot: "Скейт-спот" + }, + supporters: { + our: "НАША", + community: "СПІЛЬНОТА", + heroDesc: "SkateSpots створено спільнотою і для спільноти. Підтримувачі, співучасники, партнери й друзі, які тримають це вільним і децентралізованим.", + backAngor: "Підтримайте нас на Angor", + backers: "Підтримувачі", + backersDesc: "Скейтери, які підтримали SkateSpots — фінансування on-chain через Angor і Lightning zaps для проєкту.", + sourceAngor: "Angor", + supportersTotals: "{{count}} підтримувачів · {{angor}} sats через Angor · {{zap}} sats у zaps", + quietNote: "А також усі, хто підтримав тихо — дякуємо. ❤️", + silentTitle: "Приватно on-chain (silent payments)", + silentDesc: "Одне ім'я, свіжа адреса для кожного платежу — on-chain через silent payments або Lightning з того самого запису. Нічого не використовувати повторно, нічого не пов'язати.", + silentCopyName: "Копіювати ім'я", + silentCopied: "Скопійовано", + silentWallets: "Потрібен гаманець із підтримкою payment names / silent payments: Sparrow, Cake, Dana, Phoenix, BlueWallet, Wasabi, Nunchuk або BitBox02.", + wayLightningTitle: "Миттєво й публічно", + wayLightningDesc: "Zapp SkateSpots або сплатіть тихо. Працює без входу.", + waySilentTitle: "Приватно on-chain", + waySilentDesc: "Ім'я для silent payments — нова адреса для кожного платежу.", + wayAngorTitle: "Фінансуйте розробку", + wayAngorDesc: "Angor — поетапне вивільнення, повернення для сум понад 100k sats.", + donateTitle: "Підтримайте SkateSpots", + donateDesc: "Три способи, три причини — оберіть той, що підходить. Кожен sat робить карту вільною, без реклами та з відкритим кодом.", + donatePageLink: "Відкрити просту сторінку донатів", + updatedAt: "Оновлено {{when}}", + tiersNote: "Рівні: Підтримувач до 100k sats · Патрон 100k–1M · Легенда 1M+", + tierEmpty: "Поки нікого — будьте першим.", + joinSupporters: "Долучайтеся до {{count}} підтримувачів", + showAll: "Показати всі {{count}}", + showLess: "Показати менше", + impactSeeStats: "Побачити повну картину →", + impactAsOf: "у реальному часі з релеїв спільноти", + anonymousBacker: "Анонімний підтримувач", + beFirstBacker: "Поки немає публічних підтримувачів — будьте першим.", + backersTotal: "{{count}} підтримувачів · зібрано {{amount}} sats", + verifiedOnChain: "Перевірено on-chain", + supportedBy: "Підтримано {{count}}", + tierSupporter: "Підтримувач", + tierPatron: "Патрон", + tierLegend: "Легенда", + topZappers: "Zapped SkateSpots", + topZappersDesc: "Скейтери, які надіслали публічний zap безпосередньо проєкту. Тихі платежі не внесено до списку.", + paysFor: "На що витрачається ваша підтримка", + paysForDesc: "Куди йде кожен sat — без зарплат, без офісів, без реклами.", + payRelay: "Хостинг релею", + payDomain: "Домен і TLS", + payAi: "Вузол AI / ContextVM", + payDev: "Час на розробку", + payOps: "Операційна діяльність", + payMarketing: "Маркетинг", + payRelayDesc: "Тримає карту онлайн і стійкою.", + payDomainDesc: "Ім'я, сертифікат, захищене з'єднання.", + payAiDesc: "Sasquatch, провідник спільноти.", + payDevDesc: "Розробка й виправлення SkateSpots.", + payOpsDesc: "Непомітна робота, що тримає все в роботі.", + payMarketingDesc: "Охоплення нових локальних сцен і скейт-шопів.", + impact: "Вплив на сьогодні", + impactDesc: "Що збудувала спільнота — за фінансування скейтерів.", + impactSpots: "Споти", + impactCrews: "Команди", + impactEvents: "Події", + impactLab: "Фахівці Lab", + impactShops: "Магазини", + impactMappers: "Картографи", + support: "Підтримка", + supportDesc: "Фінансуйте SkateSpots на Angor — децентралізований краудфандинг Bitcoin on-chain. Без посередників, без KYC.", + collaborators: "Співучасники", + collaboratorsDesc: "Люди, які активно розбудовують SkateSpots — розробники, дизайнери, оператори релеїв.", + partners: "Партнери", + partnersDesc: "Організації та проєкти, з якими ми тісно співпрацюємо.", + friends: "Друзі", + friendsDesc: "Люди, з якими ми на одній хвилі.", + backTitle: "Підтримайте проєкт на Angor", + backDesc: "Angor — це децентралізоване фінансування Bitcoin on-chain на базі Nostr — ваші кошти залишаються під вашим контролем, вивільняються поетапно, і жоден кастодіан не тримає банк. Внески до 100 000 sats працюють як донат (без процедури повернення); більші суми є інвестиціями, чиї невитрачені кошти можна повернути. Кожен sat іде на розробку, хостинг релеїв і збереження SkateSpots безкоштовним для кожного скейтера на Землі.", + donateNote: "Надаєте перевагу простому донату? ⚡ Zapp нижче — нічого повертати, нічого відновлювати.", + openAngor: "Відкрити Angor", + orZap: "або ⚡ zapp будь-який спот, команду чи творця прямо в застосунку", + wantCollaborate: "Хочете співпрацювати?", + wantCollaborateDesc: "Розробники, дизайнери, скейтери з навичками — зв'яжіться з нами.", + viewNostrHub: "Переглянути на NostrHub", + wantPartner: "Хочете стати партнером SkateSpots? Зв'яжіться в Nostr.", + comingSoon: "Незабаром", + wantListed: "Хочете потрапити до списку тут?", + wantListedDesc: "Надішліть логотип (PNG/WebP, прозорий фон, мінімум 200×200px) і ваш URL у приватному повідомленні в Nostr — лише якщо ви на тій самій хвилі.", + whyTitle1: "Чому нам потрібна", + whyTitle2: "підтримка", + whyDesc: "SkateSpots на 100% безкоштовний, з відкритим кодом і побудований на Nostr — децентралізованому протоколі без центрального сервера, який можна вимкнути. Без реклами, без продажу даних, без інвесторів. Кожен sat іде безпосередньо на розробку, хостинг релеїв і збереження цього безкоштовним для кожного скейтера на Землі.", + why1Title: "Нативний для Nostr", + why1Desc: "Без центрального сервера. Ваші дані живуть на обраних вами релеях.", + why2Title: "Працює на Bitcoin", + why2Desc: "Заробляйте sats за нанесення спотів. Витрачайте їх у місцевих магазинах.", + why3Title: "Безкоштовно назавжди", + why3Desc: "Відкритий код, без платних стін, без відстеження, без фінансування від венчурних фондів.", + thankYou: "Дякуємо. Кожен sat тримає споти на карті. 🛹⚡", + license: "Ліцензія", + faq: "FAQ" + }, + admin: { + confirmed: "Підтверджено", + title: "Черга перевірки", + subtitle: "Споти, магазини, події, тури та спорядження, що спрацьовують на сигнали сміття. «Приховати» й «Підтвердити» — м'які, оборотні позначки; скарги мають пріоритет. Нічого не видаляється.", + tabReports: "Скарги", + tabSpots: "Споти", + tabShops: "Магазини", + tabEvents: "Події", + tabTours: "Тури", + tabGear: "Спорядження", + tabCrews: "Команди", + tabLab: "Lab", + tabClaims: "Заявки", + nothingToReview: "Нічого перевіряти — нічого такого не спрацьовує на сигнали сміття.", + hideActioned: "Приховати оброблені", + showActioned: "Показати оброблені ({{count}})", + undoAll: "Скасувати всі {{count}}", + undoAllTitle: "Скасувати всі вердикти на цій вкладці?", + undoAllDesc: "Це повертає кожен елемент до нейтрального стану — не прихований, не підтверджений. Публікується одна публічна позначка на елемент, тож з Amber ви отримаєте {{count}} екранів схвалення.", + undoCount: "Скасувати {{count}}", + undo: "Скасувати", + confirm: "Підтвердити", + hide: "Приховати", + hideIt: "Приховати його", + hideForEveryone: "Приховати це для всіх?", + hideForEveryoneDesc: "Це видаляє елемент з огляду й пошуку для кожного користувача SkateSpots. Це публічна, оборотна позначка — ви можете скасувати її з цієї черги.", + hidden: "Приховано", + hiddenDesc: "Видалено із застосунку через публічну позначку. Оборотно.", + couldNotHide: "Не вдалося приховати", + notASpot: "Не скейт-спот", + lookAtIt: "Поглянути" + }, + profile: { + nip05Verified: "Підтверджено NIP-05", + nip05NotVerified: "NIP-05 не підтверджено для цього ключа", + message: "Повідомлення", + zapsReceived: "отримано zaps", + memberSince: "Учасник з", + badges: "Значки", + sponsorsSupport: "Спонсори й підтримка", + skater: "Скейтер", + stance: "Стійка", + skating: "Катання", + homeSpot: "Домашній спот", + basedIn: "Засновано в", + addSkateDetails: "Додайте свої дані про катання", + addSkateDetailsDesc: "Вкажіть свою стійку, стилі та рівень, щоб з'явитися в каталозі скейтерів.", + spotsAdded: "Додано спотів", + shopsAdded: "Додано магазинів", + noSpots: "Ви ще не додали жодного споту", + noSpotsDesc: "Нанесіть свій місцевий спот на карту →", + stash: "Stash", + gear: "Спорядження", + crews: "Команди", + info: "Інформація", + lightning: "Lightning", + silentPayment: "Silent Payment", + coordinator: "Координатор", + coordinatorAdded: "Координатора додано", + add: "Додати", + messagePrivately: "Написати приватно", + founder: "Засновник", + member: "Учасник", + supportSkater: "Підтримайте цього скейтера", + supportSkaterDesc: "Надішліть чайові, щоб подякувати за внесок" + }, + index: { + joinCommunity: "Долучайтеся до спільноти, щоб додавати споти, створювати події та більше", + topZapped: "НАЙБІЛЬШ ZAPPED", + topZappedDesc: "Найбільш підтримувані споти цього місяця", + leaderboard: "Рейтинг", + newHere: "УПЕРШЕ ТУТ?", + newHereDesc: "Створіть безкоштовний акаунт, щоб додавати споти, долучатися до подій, спілкуватися зі скейтерами та стати частиною спільноти. Електронна пошта не потрібна.", + followFounder: "Стежте за засновником", + followFounderDesc: "Утримуйте аватар 3 секунди, щоб стежити й бути в курсі нових функцій і подій!", + createAccount: "Створити акаунт", + accountWorks: "Ваш акаунт працює в усіх застосунках мережі", + footerTagline: "Відкритий код • Належить спільноті • Без реклами" + }, + stash: { + title: "Мій Stash", + loginDesc: "Ваш приватний інвентар спорядження. Відстежуйте, що маєте, встановлюйте ціни та вибірково діліться з торговцями.", + encrypted: "Зашифровано", + syncsEverywhere: "Синхронізується всюди", + p2pTrading: "P2P-торгівля", + encryptionRequired: "Потрібне шифрування", + encryptionRequiredDesc: "Ваш Stash зашифровано для приватності. Будь ласка, використовуйте підписувач із підтримкою шифрування NIP-44 (як-от Alby, nos2x або Amber).", + learnSigners: "Дізнатися про підписувачі", + select: "Вибрати", + stash: "Stash", + wishlist: "Список бажань", + allCategories: "Усі категорії", + sortNewest: "Найновіші", + sortValue: "Вартість", + sortCondition: "Стан", + sortAz: "A–Z", + friendsOnly: "Лише друзі", + addToWishlist: "Додати до списку бажань", + addItemToStash: "Додати товар до Stash", + addItem: "Додати товар", + editItem: "Редагувати товар", + publicStash: "Публічний Stash", + listView: "Список", + gridView: "Сітка", + uploading: "Завантаження...", + addPhotos: "Додати фото", + wishlistReqPlaceholder: "Будь-які конкретні вимоги...", + itemDescPlaceholder: "Опишіть товар, будь-які пошкодження...", + itemsCount: "{{count}} товар(ів)", + wishlistEmpty: "Список бажань порожній", + wishlistEmptyDesc: "Додайте спорядження, яке шукаєте — ми зіставимо вас зі Stash ваших друзів.", + stashEmpty: "Ваш Stash порожній", + stashEmptyDesc: "Почніть відстежувати своє спорядження. Деки, траки, кросівки — додайте один раз, майте доступ усюди через Nostr.", + noMatch: "Жоден товар не відповідає", + noMatchDesc: "Спробуйте змінити фільтри.", + backupTransfer: "Резервне копіювання й перенесення", + backupDesc: "Ваш Stash зашифровано в Nostr. Тримайте копію під своїм контролем — мертвий релей чи новий акаунт не втратить ваш список спорядження.", + exportTitle: "Зашифрована резервна копія", + exportDialogDesc: "Збережіть {{count}} товар(ів) у файл. Зашифруйте його, щоб витік файлу не був витоком.", + modePassword: "Пароль", + modeKey: "Мій ключ", + password: "Пароль", + confirmPassword: "Підтвердьте пароль", + passwordHint: "Використовуйте щонайменше 8 символів. Відновлення немає — не забудьте його.", + keyModeHint: "Зашифровано вашим ключем Nostr. Лише цей ключ може його відкрити — нічого не потрібно запам'ятовувати.", + exportPlaintext: "Експортувати без шифрування", + pwTooShort: "Використовуйте щонайменше 8 символів.", + pwMismatch: "Паролі не збігаються.", + exportFailed: "Не вдалося створити резервну копію.", + unlockTitle: "Розблокувати резервну копію", + unlockDesc: "Ця резервна копія захищена паролем.", + unlock: "Розблокувати", + unlockFailed: "Не вдалося розблокувати резервну копію.", + show: "Показати", + hide: "Приховати", + strength: "Надійність пароля", + strengthWeak: "Слабкий", + strengthFair: "Прийнятний", + strengthGood: "Добрий", + strengthStrong: "Надійний", + filenameWillSave: "Буде збережено як {{name}}", + export: "Експортувати", + import: "Імпортувати", + exported: "Stash експортовано", + exportedDesc: "{{count}} товарів збережено у файл.", + noItemsInFile: "У цьому файлі не знайдено товарів.", + noValidItems: "У цьому файлі не знайдено дійсних товарів.", + imported: "Імпортовано {{count}} товарів", + importSkipped: "{{count}} пропущено (уже у вашому Stash).", + importAdded: "Додано до вашого Stash.", + importFailed: "Не вдалося імпортувати", + couldNotRead: "Не вдалося прочитати цей файл.", + updateFailed: "Не вдалося оновити ваш Stash", + updatedCount: "Оновлено {{count}} товарів", + markedForSale: "Позначено {{count}} для продажу", + unmarkedCount: "Знято позначку з {{count}}", + removedCount: "Видалено {{count}} товарів", + selectedCount: "Вибрано {{count}}", + selectAll: "Вибрати все", + visibilityPublic: "Публічний", + visibilityPrivate: "Приватний", + forSale: "Продається", + remove: "Видалити", + bulkDeleteTitle: "Видалити {{count}} товарів?", + bulkDeleteDesc: "Це перезаписує ваш зашифрований Stash одним підписом, і тут це не можна скасувати. Якщо не впевнені, спершу експортуйте резервну копію.", + deleteTitle: "Видалити зі Stash?", + deleteDesc: "«{{title}}» буде видалено з вашого Stash", + deleteDescPublic: " і знято з публічної вітрини", + deleteUndone: ". Це не можна скасувати.", + deleteDescGeneric: "Цей товар буде видалено з вашого Stash. Це не можна скасувати.", + listOnMarketplace: "Розмістити на маркетплейсі", + noPriceSet: "Ціну не встановлено", + categoryLabel: "Категорія", + photosLabel: "Фото", + willingToSell: "Готовий продати", + willingToTrade: "Готовий обміняти", + whereIsThisItem: "Де цей товар?", + visibilityLabel: "Видимість", + visibilityPrivateOnlyYou: "Приватний — лише ви", + visibilityFriendsMutual: "Друзі — взаємні підписки", + visibilityPublicAnyone: "Публічний — будь-хто", + visibilityFriends: "Друзі", + brandLabel: "Бренд", + sizeLabel: "Розмір", + descriptionLabel: "Опис", + conditionLabel: "Стан", + itemName: "Назва товару", + saveChanges: "Зберегти зміни", + listItemDialogTitle: "Розмістити «{{title}}»", + pickUpWhere: "Де покупці можуть забрати цей товар?", + linkToSpot: "Прив'язати до скейт-споту", + linkToSpotDesc: "Найкраще для локальних продажів • Показується на сторінці споту й карті", + recommended: "Рекомендовано", + noSpecificSpot: "Без конкретного споту", + noSpecificSpotDesc: "Видно лише на сторінці маркетплейсу", + tipLinkedSpots: "💡 Порада: оголошення, прив'язані до спотів, легше знайти місцевим скейтерам.", + anyoneCanSee: "Будь-хто може бачити це у вашому профілі.", + seeWhatOthersSee: "Подивіться, що бачать інші", + inventory: "Інвентар", + publicWantsNote: "Публічні побажання розміщуються на маркетплейсі як оголошення «шукаю», щоб продавці могли вас знайти.", + howItWorks: "Як це працює", + tapToMarketplace: "Торкніться, щоб перейти на маркетплейс →", + viewWishlist: "Переглянути список бажань", + tipEditItems: "Редагуйте товари кнопкою з олівцем", + tipListForSale: "Розмістіть на продаж кнопкою магазину", + tipAddPhotos: "Додавайте фото для кращих пропозицій обміну", + tipKeySyncs: "Ключ Nostr синхронізується на всі пристрої", + itemsReadyToSell: "{{count}} товар(ів) готово до продажу" + } + } +}; export default ukBatch4; diff --git a/src/i18n/uk/batch5.ts b/src/i18n/uk/batch5.ts index 96cf6aa..7b949c0 100644 --- a/src/i18n/uk/batch5.ts +++ b/src/i18n/uk/batch5.ts @@ -1,4 +1,1598 @@ -/** uk — batch 5. Filled by the translation pass; empty until then. */ -const ukBatch5 = {}; +/** uk — batch 5. Filled by the Ukrainian translation pass. */ +const ukBatch5 = { + labUi: { + activeCount: "{{count}} активних", + addMusicProfile: "Додати музичний профіль", + all: "Усі", + clearAll: "Очистити все", + collective: "Колектив", + filters: "Фільтри", + following: "Стежу", + getRiderCard: "Отримати райдер-картку", + judgeEvents: "Оцінювати події", + justASkater: "Просто", + labForServices: "The Lab — для послуг. Переглянь і приєднайся до всієї спільноти скейтерів", + loginToOffer: "Увійдіть, щоб пропонувати послуги", + newest: "Найновіші", + noResults: "Немає результатів", + offer: "Пропонувати", + offerBuilding: "Пропонувати будівництво", + offerCoaching: "Пропонувати коучинг", + offerCuts: "Пропонувати стрижки", + offerDesignArt: "Пропонувати дизайн / мистецтво", + offerEditing: "Пропонувати монтаж", + offerFilming: "Пропонувати зйомку", + offerGraffiti: "Пропонувати графіті", + offerPhotography: "Пропонувати фотографію", + offerServices: "Пропонувати послуги", + yourProfiles: "Ваші профілі в The Lab", + preview: { + button: "Попередній перегляд", + title: "Живий перегляд", + desc: "Так виглядатиме ваш профіль {{noun}}, коли його опублікують.", + untitled: "Ваше ім'я", + noBio: "Ще немає біо — додайте рядок про те, що ви пропонуєте.", + years: "{{count}} років досвіду", + portfolio: "Портфоліо", + note: "Лише перегляд — нічого ще не опубліковано.", + }, + draft: { + title: "У вас є незбережена чернетка", + body: "Продовжте з того місця, де зупинилися — нічого не публікується, доки ви не натиснете «Опублікувати».", + resume: "Продовжити чернетку", + discard: "Відхилити чернетку", + }, + progress: { + title: "Повнота профілю", + count: "{{done}} з {{total}} готово", + photo: "Фото", + bio: "Біо", + skills: "Навички", + rate: "Ставка", + location: "Локація", + contact: "Контакти", + }, + wizard: { + identity: "Особа", + offer: "Що ви пропонуєте", + rates: "Ставки", + contact: "Контакти", + media: "Медіа", + }, + offerTattoo: "Пропонувати татуювання", + offerTraining: "Пропонувати тренування / фізіо", + organizeEvents: "Організовувати події", + resultsMany: "{{count}} результатів", + resultsOne: "{{count}} результат", + searchCityPlaceholder: "Місто…", + searchNamePlaceholder: "Ім'я, біо…", + showResults: "Показати результати", + showResultsActive: "Показати результати · {{count}} активних", + skaterWord: "скейтер", + sortBy: "Сортувати за", + theCrew: "Команда", + topRated: "Найкращі", + trusted: "Перевірені", + trustLevel: "Рівень довіри", + yearsExp: "{{count}} р. досвіду", + tabCoaches: "Coaches", + tabFilmers: "Filmers", + tabPhoto: "Фото", + tabEditors: "Editors", + tabBuilders: "Builders", + tabArtists: "Художники", + tabGraffiti: "Графіті", + tabTattoo: "Татуювання", + tabTrainers: "Тренери", + tabMusic: "Музика", + tabJudges: "Судді", + tabOrganizers: "Організатори", + tabBarbers: "Барбери", + filterSkillsToLearn: "Навички для вивчення", + filterContentType: "Тип контенту", + filterEquipmentStyle: "Спорядження та стиль", + filterServices: "Послуги", + filterCamera: "Камера", + filterLenses: "Об'єктиви", + filterLighting: "Освітлення", + filterSupportRig: "Опора та ріг", + filterStyle: "Стиль", + filterWhatTheyBuild: "Що вони будують", + filterMaterialsTrade: "Матеріали та ремесло", + filterProjectScale: "Масштаб проєкту", + filterWhatTheyMake: "Що вони створюють", + filterMedium: "Техніка", + filterSoftwareTools: "Софт та інструменти", + filterWorkContext: "Контекст роботи", + filterMethod: "Метод", + filterFocus: "Напрям", + filterInjuriesTreated: "Травми, які лікують", + filterCredentialsSetting: "Кваліфікації та середовище", + filterGenre: "Жанр", + filterInstrumentsRole: "Інструменти та роль", + filterEventFormats: "Формати подій", + filterSpecialty: "Спеціалізація", + filterLevelCircuit: "Рівень / траса", + filterEventTypes: "Типи подій", + filterWhatYouHandle: "Що ви берете на себе", + filterScale: "Масштаб", + filterWhatTheyOffer: "Що вони пропонують", + filterSignatureStyles: "Фірмові стилі", + filterSetting: "Середовище", + filterEditType: "Тип монтажу", + role: { + coach: "Coach", + filmer: "Filmer", + builder: "Builder", + editor: "Editor", + photographer: "Photographer", + skater: "Скейтер", + }, + empty: { + footer: "Маєте запитання? Перегляньте FAQ →", + loginSuffix: "щоб створити профіль.", + coachesTitle: "Ще немає Coach-ів", + coachesBody: "Станьте першим, хто пропонує коучинг зі скейтбордингу у вашому районі.", + filmersTitle: "Ще немає Filmer-ів", + filmersBody: "Станьте першим, хто пропонує зйомку скейтінгу — кліпи, повні парти, висвітлення змагань тощо.", + photographersTitle: "Ще немає Photographer-ів", + photographersBody: "Станьте першим, хто пропонує фотографію скейтінгу у вашому районі — зйомки в русі, серії, редакційні кадри тощо.", + editorsTitle: "Ще немає Editor-ів відео", + editorsBody: "Станьте першим, хто пропонує послуги монтажу скейт-відео.", + buildersTitle: "Ще немає Builder-ів", + buildersBody: "Станьте першим, хто додасть свою рампу, парк чи DIY-будівництво — бетон, дерево, рейли тощо.", + artistsTitle: "Ще немає художників", + artistsBody: "Станьте першим, хто пропонує графіку для дек, логотипи, постери та мерч для сцени.", + graffitiTitle: "Ще немає графіті-художників", + graffitiBody: "Станьте першим, хто пропонує роботи, мурали та мистецтво для скейт-парків у вашому районі.", + tattooTitle: "Ще немає майстрів татуювання", + tattooBody: "Станьте першим майстром татуювання у скейт-культурі — флеш, кастом, тонкі лінії тощо.", + trainersTitle: "Ще немає тренерів", + trainersBody: "Станьте першим тренером чи фізіо, хто допомагає скейтерам бути сильними та здоровими.", + musiciansTitle: "Ще немає музикантів", + musiciansBody: "Скейтиш і створюєш музику? Додай свій гурт або сольний проєкт — жанри, інструменти та посилання.", + judgesTitle: "Ще немає суддів", + judgesBody: "Проводиш чесні змагання? Додай себе, щоб судити Game of S.K.A.T.E., джеми за найкращий трюк, змагання та етапи турів.", + organizersTitle: "Ще немає організаторів", + organizersBody: "Влаштовуєш джеми, змагання, зустрічі чи демо? Додай себе, щоб скейтери могли знайти та замовити тебе.", + barbersTitle: "Ще немає барберів", + barbersBody: "Стрижеш скейтерів? Додай своє крісло чи виїзну послугу, щоб сцена могла отримати свіжу стрижку.", + }, + become: { + addNip05: "Додати NIP-05 у налаштуваннях", + backToLab: "Назад до The Lab", + bioWorkLabel: "Біо / Про вашу роботу", + checkContact: "Перевірте свої контактні дані", + cityArea: "Місто / Район", + cityCountry: "Місто, Країна", + connectWallet: "Під'єднати гаманець", + connectWalletNwc: "Під'єднати гаманець через NWC", + contactInfo: "Контактна інформація", + contactInfoDesc: "Як клієнти можуть з вами зв'язатися (усе необов'язково, але рекомендовано)", + coordinatesOptional: "Координати (необов'язково)", + email: "Email", + failedToPublish: "Не вдалося опублікувати", + fromNostrProfile: "З вашого профілю Nostr", + geolocationUnsupported: "Геолокація не підтримується", + getting: "Отримуємо…", + headline: "Заголовок", + headlineHint: "Показується як заголовок на вашій картці в The Lab — напр. «{{example}}». За замовчуванням — ваше ім'я.", + imageUploaded: "Зображення завантажено", + instagram: "Instagram", + invalidEmail: "Введіть дійсну адресу email.", + invalidPortfolio: "Введіть дійсну URL-адресу портфоліо.", + invalidWebsite: "Введіть дійсну URL-адресу вебсайту.", + latitude: "Широта", + learnHow: "Дізнатися як", + locationError: "Помилка локації", + locationFound: "Локацію знайдено", + loginRequired: "Потрібен вхід", + loginRequiredDesc: "Вам потрібно увійти, щоб створити профіль {{role}}.", + loginRequiredDescCraft: "Вам потрібно увійти, щоб створити профіль {{noun}}.", + longitude: "Довгота", + nip05Recommended: "Рекомендовано верифікацію NIP-05", + nip05RecommendedDesc: "Підтвердьте свою особу, щоб викликати довіру клієнтів.", + noWallet: "Гаманець не під'єднано", + otherSocial: "Інші соцмережі", + paymentSetup: "⚡ Потрібне налаштування оплати", + phoneNumber: "Номер телефону", + profilePhoto: "Фото профілю", + profilePublished: "Ваш профіль опубліковано.", + publishing: "Публікуємо...", + socialMedia: "Соцмережі", + tip: "💡 Порада: більшість Lightning-гаманців підтримують NWC (Alby, Minibits, Zeus, Coinos).", + tipWithTime: "💡 Порада: більшість Lightning-гаманців підтримують NWC (Alby, Minibits, Zeus, Coinos). Налаштування займає 30 секунд.", + upload: "Завантажити", + uploadFailed: "Не вдалося завантажити", + uploadImage: "Завантажити зображення", + uploading: "Завантаження…", + useCurrentLocation: "Використати поточну локацію", + useMyLocation: "Використати мою локацію", + usingNwc: "Використовується Nostr Wallet Connect", + usingWebln: "Використовується розширення браузера WebLN", + walletConnected: "Гаманець під'єднано — готово до отримання платежів!", + website: "Вебсайт", + yearsExperience: "Роки досвіду", + }, + coachForm: { + anonymous: "Анонімний Coach", + bioLabel: "Біо / Філософія коучингу", + bioPlaceholder: "Ваш досвід, стиль викладання...", + create: "СТВОРИТИ ПРОФІЛЬ COACH", + created: "Профіль Coach створено!", + createPro: "СТВОРИТИ PRO ПРОФІЛЬ COACH", + dmNote: "💬 Учні можуть писати вам напряму через зашифровані повідомлення SkateSpots", + heading: "Стати Coach-ом", + headlineExample: "Скейт-Coach Berlin", + hourlyRate: "Погодинна ставка", + identity: "Ваша особа як Coach", + nip05Reason: "Додайте ідентифікатор NIP-05, щоб підтвердити свою особу та викликати довіру учнів — це показує, що ви справжній Coach.", + paymentDesc: "Щоб отримувати оплату за уроки від учнів, вам потрібно під'єднати Lightning-гаманець. Учні надсилатимуть вам zap напряму за коучингові сесії.", + profileDesc: "Розкажіть учням про свій досвід", + profileTitle: "Профіль Coach", + ratePlaceholder: "5000 sats/год", + selectSkill: "Виберіть принаймні одну навичку.", + skillsLabel: "Навички, яких я навчаю * (виберіть принаймні одну)", + skillsRequired: "Потрібні навички", + formatsLabel: "Формати сесій", + formatsHint: "Як ви проводите коучинг.", + levelsLabel: "Рівні, які викладаєте", + agesLabel: "Вікові групи", + credentialsLabel: "Кваліфікації та безпека", + credentialsHint: "За власним підтвердженням — SkateSpots це не перевіряє.", + languagesLabel: "Мови спілкування", + languagesHint: "Додайте мови, якими можете проводити коучинг.", + languagePlaceholder: "напр. English, Español", + availabilityLabel: "Доступність", + bookingLabel: "Посилання для запису", + bookingHint: "Необов'язково — сторінка, де учні можуть записатися й оплатити.", + galleryLabel: "Фото портфоліо", + galleryHint: "Покажіть реальні сесії, учнів та споти (до 12).", + galleryAdd: "Додати фото портфоліо", + galleryUploaded: "{{count}} фото завантажено", + videoLabel: "Найкращі моменти", + videoHint: "Необов'язково — відео на YouTube чи Instagram про ваш коучинг.", + formatOneOnOne: "1-на-1", + formatGroup: "Група", + formatCamp: "Табір", + formatVideo: "Аналіз відео", + formatContestPrep: "Підготовка до змагань", + formatParkLesson: "Урок у парку", + formatAdaptive: "Адаптивний", + formatGirls: "Сесія для дівчат", + formatAfterSchool: "Після школи", + levelBeginner: "Початківець", + levelIntermediate: "Середній", + levelAdvanced: "Просунутий", + levelCompetition: "Змагальний", + ageKids: "Діти", + ageTeens: "Підлітки", + ageAdults: "Дорослі", + ageSeniors: "Літні люди", + certFirstAid: "Перша допомога", + certCpr: "СЛР", + certSafeguarding: "Захист дітей", + certBackgroundCheck: "Перевірка біографії", + certInsured: "Застрахований", + certFederation: "Тренер нацфедерації", + certQualification: "Кваліфікація тренера", + certJudge: "Суддя змагань", + certNoteLabel: "Інші кваліфікації (необов'язково)", + certNotePlaceholder: "напр. Skateboard GB Level 2, 8 років коучингу…", + availWeekdays: "Будні", + availWeekends: "Вихідні", + availEvenings: "Вечори", + availAfterSchool: "Після школи", + availHolidays: "Шкільні канікули", + availSeasonal: "Сезонно", + sectionWhatYouCoach: "Що ви викладаєте", + sectionCredentials: "Кваліфікації та безпека", + sectionAvailability: "Доступність і запис", + sectionWhereYouCoach: "Де ви викладаєте", + sectionPortfolio: "Портфоліо", + rateAmountLabel: "Ставка", + rateCurrencySats: "sats", + rateCurrencyUsd: "USD", + rateCurrencyEur: "EUR", + rateCurrencyGbp: "GBP", + perHour: "за годину", + perSession: "за сесію", + perHalfDay: "за пів дня", + perDay: "за день", + perCamp: "за табір", + perProject: "за проєкт", + perEvent: "за подію", + perGig: "за виступ", + perShoot: "за зйомку", + perPiece: "за роботу", + perCut: "за стрижку", + perMonth: "за місяць", + availByAppointment: "За записом", + rateNotesLabel: "Примітки до ставки (необов'язково)", + rateNotesPlaceholder: "Гнучка шкала, перша сесія безкоштовно, проїзд включено…", + sectionPayments: "Платежі", + paymentMethodsHint: "Як клієнти можуть вам платити. Це лише заява — SkateSpots ніколи не тримає кошти.", + payMethodCash: "Готівка на місці", + payMethodLightning: "Lightning", + payMethodCashu: "Cashu", + payMethodBank: "Банківський переказ", + payMethodOther: "Інше", + payWhatYouCanLabel: "Гнучка шкала / плати скільки можеш", + bookingFeeLabel: "Плата за бронювання (необов'язково)", + bookingFeeHint: "Невелика плата, що сплачується напряму вам для підтвердження бронювання. SkateSpots не тримає та не повертає її.", + paymentNoteLabel: "Примітка до оплати (необов'язково)", + paymentNotePlaceholder: "Перша сесія безкоштовно, проїзд включено, оплата після сесії…", + spotsDesc: "Виберіть споти, де ви проводите коучингові сесії", + spotsLabel: "Споти, де ви викладаєте", + tagline: "Поділіться своїми знаннями про скейтбординг", + update: "ОНОВИТИ ПРОФІЛЬ COACH", + updated: "Профіль Coach оновлено!", + }, + filmerForm: { + anonymous: "Анонімний Filmer", + bioPlaceholder: "Ваш досвід, стиль, обладнання...", + camerasLabel: "Камери та обладнання * (виберіть принаймні одне)", + create: "СТВОРИТИ ПРОФІЛЬ ЗЙОМКИ", + created: "Профіль зйомки створено!", + createPro: "СТВОРИТИ PRO ПРОФІЛЬ ЗЙОМКИ", + dmNote: "💬 Клієнти можуть писати вам напряму через зашифровані повідомлення SkateSpots", + gearHelper: "Перелічіть свої камери, об'єктиви та ріги — скейтерам важливий сетап.", + gearLabel: "Що в сумці (необов'язково)", + gearPlaceholder: "напр. Sony VX1000 + MK1 фішай, Panasonic HVX200, стабілізатор DJI RS3, GoPro Hero 12, мікрофон Sennheiser...", + heading: "Стати Filmer-ом", + headlineExample: "Скейт-Filmer Berlin", + identity: "Ваша особа як Filmer", + nip05Reason: "Додайте ідентифікатор NIP-05, щоб підтвердити свою особу та викликати довіру клієнтів — це показує, що ви справжній Filmer.", + paymentDesc: "Щоб отримувати оплату від клієнтів за зйомку, вам потрібно під'єднати Lightning-гаманець. Клієнти надсилатимуть вам zap напряму за вашу роботу.", + profileDesc: "Розкажіть клієнтам про свій досвід у зйомці", + profileTitle: "Профіль зйомки", + rate: "Ставка", + ratePlaceholder: "10000 sats/відео", + reelLabel: "Шоуріл / Портфоліо", + selectService: "Виберіть принаймні одну послугу.", + selectSkill: "Виберіть принаймні одну навичку зйомки.", + servicesLabel: "Послуги, що пропонуються * (виберіть принаймні одну)", + servicesRequired: "Потрібні послуги", + skillsRequired: "Потрібні навички", + spotsDesc: "Виберіть споти, де ви пропонуєте послуги зйомки", + spotsLabel: "Споти, де ви знімаєте", + tagline: "Пропонуйте зйомку скейт-відео — кліпи, лайни, повні парти та висвітлення змагань", + update: "ОНОВИТИ ПРОФІЛЬ ЗЙОМКИ", + updated: "Профіль зйомки оновлено!", + }, + editorForm: { + anonymous: "Анонімний Editor", + bioPlaceholder: "Ваш стиль монтажу, досвід, помітні проєкти…", + contactPortfolio: "Контакти та портфоліо", + create: "Опублікувати профіль Editor", + created: "Профіль Editor створено!", + createPro: "Опублікувати Pro профіль Editor", + editTypes: "Типи монтажу, що пропонуються * (виберіть принаймні один)", + hardware: "Обладнання", + hardwarePlaceholder: "напр. MacBook Pro M3, Sony FX3", + heading: "Стати Editor-ом відео", + headlineExample: "Скейт-відеомонтаж", + identity: "Ваша особа", + locationOptional: "Локація (необов'язково)", + loginDesc: "Увійдіть, щоб створити профіль Editor-а відео.", + phoneTelegram: "Телефон / Telegram", + portfolioPlaceholder: "Портфоліо (Vimeo, YouTube…)", + profileDesc: "Розкажіть спільноті про свій стиль монтажу та навички", + profileTitle: "Профіль Editor", + published: "Ваш профіль опубліковано в SkateSpots.", + rate: "Ставка / Ціни", + ratePlaceholder: "напр. 50k sats/хв, ціна в DM", + selectService: "Виберіть принаймні один тип монтажу.", + servicesRequired: "Потрібні послуги", + socialPlaceholder: "Instagram / нік у соцмережі", + software: "Софт", + softwareHardware: "Навички з софту та обладнання", + softwarePlaceholder: "напр. DaVinci Resolve, Premiere", + tagline: "Пропонуйте послуги монтажу відео скейт-спільноті", + thumbnail: "Мініатюра профілю / шоурілу", + update: "Оновити профіль Editor", + updated: "Профіль Editor оновлено!", + walletConnected: "Гаманець під'єднано ✓", + walletDesc: "Отримуйте платежі в Bitcoin ⚡ напряму від клієнтів за монтаж.", + walletTitle: "⚡ Lightning-гаманець для платежів", + yearsExperience: "Роки досвіду", + yearsPlaceholder: "напр. 5 років", + }, + photoForm: { + anonymous: "Анонімний Photographer", + bioPlaceholder: "Ваш досвід, стиль, улюблені сюжети...", + cameraLabel: "Камери * (виберіть принаймні одну)", + cameraRequired: "Потрібна камера", + contactDesc: "Як райдери можуть побачити вашу роботу та зв'язатися з вами (усе необов'язково, але рекомендовано)", + create: "СТВОРИТИ ПРОФІЛЬ ФОТОГРАФІЇ", + created: "Профіль фотографії створено!", + createPro: "СТВОРИТИ PRO ПРОФІЛЬ ФОТОГРАФІЇ", + dmNote: "💬 Райдери можуть писати вам напряму через зашифровані повідомлення SkateSpots", + gearHelper: "Перелічіть точні камери, об'єктиви та світло — райдери люблять знати сетап.", + gearPlaceholder: "напр. Canon R6 II, 8-15mm фішай, 70-200mm f/2.8, 2× Godox AD200, синхронізатори, штатив Manfrotto...", + heading: "Стати Photographer-ом", + headlineExample: "Скейт-фотографія", + identity: "Ваша особа як Photographer", + lensesLabel: "Об'єктиви", + lightingLabel: "Освітлювальне обладнання", + nip05Reason: "Додайте ідентифікатор NIP-05, щоб підтвердити свою особу та викликати довіру клієнтів.", + paymentDesc: "Щоб отримувати оплату за зйомки, під'єднайте Lightning-гаманець. Клієнти надсилають вам zap напряму за вашу роботу.", + portfolioLabel: "Портфоліо / Instagram", + profileDesc: "Розкажіть райдерам про свій погляд, обладнання та послуги", + profileTitle: "Профіль фотографії", + ratePlaceholder: "20000 sats/зйомка", + selectCamera: "Виберіть принаймні один тип камери, на якій знімаєте.", + selectService: "Виберіть принаймні одну послугу, яку пропонуєте.", + servicesLabel: "Послуги, що пропонуються * (виберіть принаймні одну)", + servicesRequired: "Потрібні послуги", + spotsDesc: "Виберіть споти, де ви пропонуєте фотографію", + spotsLabel: "Споти, де ви знімаєте", + styleLabel: "Стиль зйомки", + supportLabel: "Опора та ріг", + tagline: "Знімайте сесії — пропонуйте свою скейт-фотографію", + update: "ОНОВИТИ ПРОФІЛЬ ФОТОГРАФІЇ", + updated: "Профіль фотографії оновлено!", + }, + builderForm: { + anonymous: "Анонімний Builder", + bioLabel: "Біо / Про ваші роботи", + bioPlaceholder: "Ваша команда, помітні роботи, як ви підходите до проєкту...", + buildTypesLabel: "Що ви будуєте * (виберіть принаймні одне)", + buildTypesRequired: "Потрібні типи будівництва", + cityBase: "Місто / База", + contactPortfolio: "Контакти та портфоліо", + contactPortfolioDesc: "Як сцена може побачити ваші роботи та зв'язатися з вами (усе необов'язково, але рекомендовано)", + create: "СТВОРИТИ ПРОФІЛЬ BUILDER", + created: "Профіль Builder створено!", + createPro: "СТВОРИТИ PRO ПРОФІЛЬ BUILDER", + dmNote: "💬 Клієнти можуть писати вам напряму через зашифровані повідомлення SkateSpots", + gearHelper: "Команди та клієнти люблять знати ваше обладнання та процес.", + gearLabel: "Як ви працюєте / Обладнання (необов'язково)", + gearPlaceholder: "напр. Повна бетонна бригада, власний міксер + торкрет-установка, мобільне зварювання, ми беремо дозволи та дренаж...", + heading: "Стати Builder-ом", + headlineExample: "Builder рамп і парків", + identity: "Ваша особа як Builder", + insured: "Ліцензія / страховка", + insuredHelper: "Актуально для громадських парків і робіт для міськради", + logoPhoto: "Логотип / Фото", + materialsLabel: "Матеріали та ремісничі навички", + nip05Reason: "Додайте ідентифікатор NIP-05, щоб підтвердити свою особу та викликати довіру клієнтів.", + pastBuilds: "Минулі роботи / Instagram", + paymentDesc: "Щоб отримувати оплату за будівництво, під'єднайте Lightning-гаманець. Клієнти надсилають вам zap напряму за вашу роботу.", + profileDesc: "Розкажіть сцені, що ви будуєте і як працюєте", + profileTitle: "Профіль Builder", + rateLabel: "Ставка / Основа розрахунку", + ratePlaceholder: "за м² / за проєкт", + scaleLabel: "Масштаб проєкту", + selectBuild: "Виберіть принаймні одне, що ви будуєте.", + serviceArea: "Зона обслуговування", + serviceAreaPlaceholder: "напр. Каталонія, виїжджаю по всій ЄС", + spotsDesc: "Позначте споти й парки, які ви збудували, щоб люди бачили вашу роботу на карті", + spotsLabel: "Споти, які ви збудували", + tagline: "Залий, звари, збудуй — додайте своє будівництво рамп і парків", + update: "ОНОВИТИ ПРОФІЛЬ BUILDER", + updated: "Профіль Builder оновлено!", + yearsBuilding: "Років у будівництві", + }, + skaterForm: { + backToSkaters: "Назад до Скейтерів", + bioHelperPulled: "Взято з вашого профілю — підправте для райдер-картки або залиште як є.", + bioHelperShort: "Короткий вступ для вашої райдер-картки.", + bioPlaceholder: "Скільки ви катаєтеся, що вам до вподоби, над чим працюєте…", + browseSpots: "Переглянути споти", + changePhoto: "Змінити фото профілю", + chipBio: "Біо", + chipPhoto: "Фото", + cityArea: "Місто / район", + created: "Ви на карті! 🛹", + custom: "Власне", + customHelper: "Ваш власний ярлик — показується на райдер-картці замість шаблону.", + customPlaceholder: "напр. OG, Weekend Warrior, Retired…", + discoverable: "Інші скейтери тепер можуть вас знайти.", + editFullProfile: "редагувати повний профіль", + fromProfile: "З вашого профілю", + heroEditPrefix: "Редагувати ваш", + heroJoinPrefix: "Приєднатися до", + heroSuffix: "Каталог", + homeHelper: "Введіть вільно або прив'яжіть реальний спот з карти, щоб люди могли туди піти.", + homePlaceholder: "Місцевий парк / плаза — або натисніть «Переглянути споти»", + homeSpot: "Домашній спот", + layerEnd: "щоб змінити їх усюди.", + layerIntro: "Це ваш", + layerMid: ", побудований на вашому профілі Nostr. Ім'я, фото, біо, lightning і верифікація беруться звідти —", + layerWord: "скейт-шар", + level: "Рівень", + linked: "Прив'язано до спота на карті", + loadingProfile: "Завантаження профілю…", + loadingSpots: "Завантаження спотів…", + locationHelper: "Допомагає іншим знаходити скейтерів поблизу. Показується лише приблизний район.", + loginToJoin: "Увійдіть, щоб приєднатися", + loginToJoinDesc: "Створіть профіль скейтера, щоб спільнота могла вас знайти.", + mappedSpot: "Спот на карті", + noSpots: "Спотів поки не знайдено.", + noSpotsMatch: "Жоден спот не відповідає пошуку.", + openMap: "Відкрити карту", + pickEverything: "Виберіть усе, що пасує вашому стилю.", + pickHomeSpot: "Виберіть домашній спот", + pickStyles: "Виберіть свої стилі", + pickStylesDesc: "Виберіть принаймні одне, на чому катаєтеся.", + profilePic: "Фото профілю", + profilePicHelper: "Ваша райдер-картка використовує фото з профілю Nostr — те саме зображення усюди.", + publishingAs: "Публікується як", + putOnMap: "Поставити мене на карту", + searchSpots: "Пошук спотів за назвою чи містом…", + skateStory: "Ваша історія скейтінгу", + stance: "Стійка", + unlinkSpot: "Відв'язати спот", + updateButton: "Оновити мій профіль", + updated: "Профіль оновлено!", + whatYouSkate: "На чому ви катаєтеся *", + yearsPlaceholder: "напр. 8", + yearsSkating: "Років у скейтінгу", + yourProfilePic: "Ваше фото профілю", + zapsOn: "Zap-и увімкнено", + }, + skaters: { + clearSearch: "Очистити пошук", + community: "Спільнота", + countMany: "скейтерів", + countOne: "скейтер", + editProfile: "Редагувати мій профіль скейтера", + heroDesc: "Знайдіть своїх. Перегляньте команду скейтерів, що представляють SkateSpots — за стилем, стійкою, рівнем і містом.", + nip05Verified: "NIP-05 підтверджено", + noMatches: "Немає збігів", + noneDesc: "Станьте першим, хто приєднається до каталогу та поставить SkateSpots на карту.", + noneTitle: "Ще немає скейтерів", + noVerifiedMatch: "Немає перевірених скейтерів за запитом", + searchPlaceholder: "Пошук за іменем, містом або npub…", + tryDifferentSearch: "Спробуйте інший запит або очистіть фільтри.", + tryTurnOffVerified: "Спробуйте вимкнути фільтр «Перевірені», щоб побачити всіх.", + verifiedFilterTitle: "Показувати лише скейтерів з підтвердженою особою NIP-05", + }, + skaterCard: { + inDirectory: "Ви в Каталозі скейтерів", + joinDesc: "Додайте свою стійку, стилі та рівень, щоб скейтери могли вас знайти.", + joinTitle: "Приєднатися до Каталогу скейтерів", + }, + crewsStrip: { + allCrews: "Усі команди", + memberMany: "{{count}} учасників", + memberOne: "{{count}} учасник", + title: "Команди цієї сцени", + }, + labLink: { + coach: "Coach", + filmer: "Filmer", + editor: "Editor", + photographer: "Photographer", + builder: "Builder", + artist: "Художник", + graffiti: "Графіті", + tattoo: "Тату", + trainer: "Тренер", + musician: "Музикант", + judge: "Суддя", + barber: "Барбер", + organizer: "Організатор", + lab: "Lab", + linkedProfiles: "Пов'язані профілі Lab", + desc: "Також ведете студію, коучинг чи будівництво? Прив'яжіть свої оголошення Lab, щоб люди могли найняти вашу команду. Необов'язково. Коли профіль Lab також посилається на цю команду, обидва показують зелений", + descEnd: "бейдж.", + empty: "У вас ще немає профілів Lab. Створіть один у The Lab, щоб прив'язати його тут.", + }, + proUpgrade: { + goPro: "Go Pro", + optional: "· необов'язково", + freeTo: "Розміщення безкоштовне. Pro додає", + proBadge: "бейдж Pro", + featuredPlacement: "рекомендоване розміщення", + atTop: "угорі The Lab.", + active: "Активно", + benefit1: "Золотий бейдж «Pro» на вашому профілі та картках", + benefit2: "Показується першим, коли скейтери переглядають The Lab", + benefit3: "Підтримує SkateSpots — без реклами, без посередників", + platformOwner: "Власник платформи — Pro завжди увімкнено.", + proActiveOne: "Pro активний · залишився {{count}} день. Ваш профіль буде рекомендовано.", + proActiveMany: "Pro активний · залишилося {{count}} днів. Ваш профіль буде рекомендовано.", + context: "Після завершення Pro ваш профіль залишається безкоштовним — ви лише втрачаєте бейдж і підсилення.", + }, + profilePreview: { + viewPublic: "Публічний вигляд", + unnamed: "Скейтер без імені", + noHandle: "Ще немає ніку", + }, + pyramid: { + pyramidWord: "ПІРАМІДА", + rankingsWord: "РЕЙТИНГИ", + subtitle: "Найактивніші учасники у вашому місті", + yourRank: "Ваше місце", + keepContributing: "Продовжуйте додавати, щоб піднятися вище!", + topContributors: "Топ учасників", + noContributors: "Ще немає учасників. Станьте першим, хто додасть спот чи створить подію!", + spots: "Споти", + events: "Події", + total: "Усього", + trust: "Довіра", + }, + detail: { + joined: "Приєднався", + about: "Про", + howWeWork: "Як ми працюємо", + inTheBag: "У сумці", + hardware: "Обладнання", + software: "Софт", + eventsJudged: "Суджені події", + eventsOrganized: "Організовані події", + spots: "Споти", + viewSpot: "Переглянути спот", + credentialsTitle: "Кваліфікації та безпека", + selfAttested: "За власним підтвердженням Coach-а — не перевірено SkateSpots.", + formats: "Формати", + levels: "Рівні", + ages: "Вік", + languages: "Мови", + availability: "Доступність", + bookSession: "Записатися на сесію", + portfolio: "Портфоліо", + watchReel: "Дивитися на {{platform}}", + paymentsTitle: "Платежі", + payWhatYouCan: "Плати скільки можеш", + bookingFee: "Плата за бронювання", + payBookingFee: "Сплатити за бронювання", + bookingFeeNote: "Сплачується напряму Coach-у. SkateSpots не тримає та не повертає її.", + bookingFeeNoRail: "У цього Coach-а не вказано Lightning-адресу, тому оплата в застосунку недоступна — зв'яжіться з ним, щоб домовитися про оплату.", + serviceArea: "Зона обслуговування", + licensedInsured: "Ліцензія / страховка", + studio: "Студія", + shopStudio: "Магазин / Студія", + booksOpen: "Відкрито для замовлень", + credentials: "Кваліфікації", + remoteOnline: "Віддалено / Онлайн", + graffitiCrew: "Команда графіті", + act: "Виступ", + listen: "Слухати", + upcomingGigs: "Найближчі виступи", + past: "Минулі", + experience: "Досвід", + yearsCount: "{{count}} років", + rate: "Ставка", + contact: "Контакти", + sendMessage: "Надіслати повідомлення", + bookGig: "Замовити на виступ", + portfolioDomain: "Портфоліо · {{domain}}", + manage: "Керувати", + admin: "Адмін", + editProfile: "Редагувати профіль", + publishedTitle: "Ви в ефірі", + publishedBody: "Ваш профіль опубліковано в The Lab. Поділіться ним, щоб скейтери могли вас знайти.", + manageRemove: "Видалити ваш профіль {{noun}} з The Lab.", + adminTakeDown: "Зняти цей профіль {{noun}}. Його буде приховано в усьому SkateSpots.", + entityLabel: "профіль {{noun}}", + deleteProfile: "Видалити профіль", + location: "Локація", + servicesSkills: "Послуги та навички", + noun: { + coach: "Coach", + filmer: "Filmer", + editor: "Editor відео", + photographer: "Photographer", + builder: "Builder", + artist: "художник", + graffiti: "графіті-художник", + tattoo: "майстер татуювання", + trainer: "тренер", + musician: "музикант", + judge: "суддя подій", + organizer: "організатор подій", + barber: "барбер", + profile: "профіль", + }, + skillsTitle: { + skills: "Навички", + servicesGear: "Послуги та обладнання", + whatWeBuild: "Що ми будуємо", + whatTheyMake: "Що вони створюють", + stylesWork: "Стилі та роботи", + styles: "Стилі", + focusSpecialties: "Напрям і спеціалізації", + genresInstruments: "Жанри та інструменти", + formatsSpecialties: "Формати та спеціалізації", + servicesStyles: "Послуги та стилі", + eventTypesServices: "Типи подій і послуги", + }, + }, + rider: { + heroDesc: "Ваша перевірювана особа скейтера. Підписана Nostr, готова до друку, яку неможливо підробити.", + heroDesc2: "Отримуйте засвідчені бейджі навичок від інших скейтерів. Отримуйте перепустки до парків. Діліться карткою будь-де.", + headerTagline: "Підписано Nostr · Готово до друку · Перевірка через QR", + tabCard: "Моя картка", + tabBadges: "Бейджі", + tabAward: "Нагородити", + rendering: "Рендеримо…", + shareCard: "Поділитися карткою", + savePng: "Зберегти PNG", + print: "Друк", + copyId: "Копіювати ID", + cardType: "Тип картки", + licenseLabel: "Ліцензія скейтера", + licenseSub: "Ваша особиста райдер-особа", + parkLabel: "Доступ до парку", + parkSub: "Видавайте перепустки як власник парку", + theme: "Тема", + holoTitle: "Голографічний блиск", + holoDesc: "Анімований фольговий ефект", + cardDetails: "Деталі картки", + skateStyle: "Стиль катання", + ridesFor: "Катається за", + ridesForPlaceholder: "Місцевий магазин…", + sponsors: "Спонсори", + sponsorsPlaceholder: "Бренди…", + showOnCard: "Показати на картці", + zaps: "Zaps ⚡", + skills: "Навички", + selected: "{{count}}/6 вибрано", + goldBadgesHint1: "Золоті бейджі на вашій картці походять від інших скейтерів, які засвідчили вас — дивіться", + goldBadgesHint2: ".", + parkOwnersOnly: "Лише для власників парків.", + parkOwnersDesc: "Видайте це тим самим ключем Nostr, яким опубліковано ваше оголошення парку. Будь-хто може відсканувати QR і перевірити підпис — центральний орган не потрібен.", + parkDetails: "Деталі парку", + parkName: "Назва парку", + parkNamePlaceholder: "The Berrics…", + riderName: "Ім'я райдера", + riderNamePlaceholder: "Ім'я на картці", + riderNpub: "Nostr ID райдера (npub)", + accessLevel: "Рівень доступу", + validThru: "Дійсна до", + publishToNostr: "Опублікувати в Nostr", + badgesIntro: "Ці бейджі засвідчено й підписано іншими скейтерами в Nostr. Вони показуються як золоті чипи ⭐ на вашій картці.", + earnMore: "Хочете заробити більше? Катайтесь перед кимось і попросіть засвідчити ваш трюк.", + awardSomeone: "Нагородити бейджем когось іншого", + youSawIt: "Ви це бачили", + youSawItDesc: "Підпишіть доказ у Nostr. Він стане частиною їхнього постійного запису — криптографічно прив'язаного до вашого ключа.", + skillsWitnessed: "Навички, які ви засвідчили", + whereSeen: "Де ви це бачили?", + optional: "(необов'язково)", + signingOnNostr: "Підписуємо в Nostr…", + awardBadge: "Нагородити бейджем", + addRiderSkill: "Додайте npub райдера + принаймні одну навичку", + invalidNpub: "Недійсний npub", + badgeAwarded: "🏅 Бейдж видано!", + badgeSent: "{{skills}} надіслано.", + failed: "Не вдалося", + couldNotRender: "Не вдалося відрендерити картку", + popupBlocked: "Спливне вікно заблоковано", + popupBlockedDesc: "Дозвольте спливні вікна для цього сайту.", + linkCopied: "🔗 Посилання скопійовано!", + enterRiderNpub: "Введіть npub райдера", + parkPublished: "✅ Картку доступу до парку опубліковано!", + publishFailed: "Не вдалося опублікувати", + noBadges: "Ще немає бейджів. Катайтесь перед кимось і попросіть засвідчити ваші трюки!", + showMore: "Показати ще {{count}}", + witnessedBy: "Засвідчено", + at: "у", + previewLicense: "Ліцензія скейтера", + previewSince: "З {{year}}", + previewEvts: "Події", + previewScan: "Скануйте, щоб перевірити", + previewSkatepark: "Скейт-парк", + previewAccessPass: "Перепустка", + previewMemberName: "Ім'я учасника", + previewIssuedBy: "Видано власником парку · Підписано Nostr", + previewValidThru: "Дійсна до", + previewNostrVerified: "Перевірено Nostr", + }, + craftFields: { + detailsTitle: "Додаткові деталі", + deliverables: "Результати роботи", + turnaround: "Термін виконання", + surfaces: "Поверхні / Стіни", + maxSize: "Макс. розмір", + setLength: "Тривалість сету", + techRider: "Технічний райдер", + travel: "Подорожі", + certifications: "Сертифікати", + insurance: "Страховка", + permits: "Дозволи", + deposit: "Депозит", + minimum: "Мінімум", + modalities: "Модальності", + duration: "Тривалість прийому", + drone: "Дрон", + leadTime: "Час на підготовку", + warranty: "Гарантія", + }, + craftForm: { + profileImage: "Зображення профілю", + nameHeadline: "Ім'я / заголовок", + about: "Про", + aboutPlaceholder: "Розкажіть скейтерам про вашу роботу {{noun}}…", + required: "обов'язково", + nip05Title: "Додайте NIP-05, щоб викликати довіру", + nip05Desc: "Ідентифікатор NIP-05 допомагає скейтерам переконатися, що ви справжні. Дуже рекомендовано перед розміщенням.", + editingNote: "Редагування вашого наявного профілю {{noun}} — публікація замінить його.", + location: "Локація", + pinned: "📍 Закріплено на карті ({{lat}}, {{lng}})", + experienceYears: "Досвід (років)", + expPlaceholder: "напр. 5", + ratePlaceholder: "напр. 20k sats / за проєкт", + contactLinks: "Контакти та посилання", + phoneOptional: "Телефон (необов'язково)", + emailOptional: "Email (необов'язково)", + socialPlaceholder: "Соцмережа (Instagram тощо)", + gettingPaid: "Отримання оплати", + updateProfile: "Оновити профіль", + publishProfile: "Опублікувати профіль", + rateLeftBlankNote: "Необов'язково — залиште порожнім, якщо ставки вище достатньо.", + sectionRequired: "{{section}} обов'язково", + sectionRequiredDesc: "Виберіть принаймні один варіант у «{{section}}».", + updated: "Профіль оновлено!", + created: "Профіль створено!", + headlineExample: "Скейт-Coach Berlin", + }, + }, + socialUi: { + agentPanel: { + spot: "Spot", + event: "Event", + labPro: "Lab pro", + gear: "Gear", + crew: "Crew", + description: "Знає цю команду — її джеми, склад і відкритий набір — а також ширшу сцену з живими даними.", + greeting: "Йо! Я Sasquatch, гід команди {{crew}}. Питай мене про команду — наступний джем, хто нею керує, що ми шукаємо — або про ширшу сцену.", + suggestion1: "Коли наш наступний джем?", + suggestion2: "Хто керує цією командою?", + suggestion3: "Що ми шукаємо?", + suggestion4: "Найкращі споти поблизу?", + suggestion5: "Яка погода для катання?", + thinking: "Sasquatch думає…", + placeholder: "Запитайте про свою місцеву сцену…", + disclaimer: "ШІ може помилятися — посилання ведуть до справжніх оголошень.", + }, + badge: { + upcomingOne: "{{count}} майбутня подія", + upcomingMany: "{{count}} майбутніх подій", + comingOne: "{{count}} подія наближається", + comingMany: "{{count}} подій наближається", + }, + bell: { + youAreIn: "Ви в {{crew}}! 🛹", + membershipConfirmed: "Членство підтверджено.", + couldNotConfirm: "Не вдалося підтвердити", + addedYouTo: "додав вас до", + confirmToAppear: "Підтвердьте, щоб з'явитися як учасник.", + notifications: "Сповіщення", + notificationsNew: "Сповіщення ({{count}} нових)", + unreadCount: "{{count}} непрочитаних сповіщень", + markRead: "Позначити прочитаним", + allClear: "Усе чисто", + tabAll: "Усі", + tabTrades: "Обміни", + tabSocial: "Соціальні", + tabNews: "Новини", + tabCrews: "Команди", + checkingUpdates: "Перевірка оновлень…", + checkingTrades: "Перевірка пропозицій та обмінів…", + loadingDrops: "Завантаження останніх новин…", + emptyAll: "Пропозиції, обміни, zap-и, відповіді, розсилки та активність команд з'являться тут.", + emptyTrades: "Пропозиції, зустрічні пропозиції та підтвердження обмінів потрапляють сюди — чи ви продаєте, купуєте чи обмінюєте.", + emptySocial: "Zap-и, реакції, репости, згадки, відповіді, RSVP на події та оновлення від організаторів потрапляють сюди.", + emptyNews: "Розсилки SkateSpots з'являться тут. Підпишіться на сторінці розсилки.", + emptyCrews: "Запрошення до команд, запити колективів і запити на членство з'являться тут.", + subscribeBanner: "Підпишіться, щоб отримувати нові розсилки у своєму дзвіночку", + read: "Читати", + allCaughtUp: "Ви все прочитали", + }, + chat: { + hidden: "Приховано", + hideMessageAria: "Приховати це повідомлення", + hideMessageTitle: "Приховати повідомлення (адмін)", + messageHidden: "Повідомлення приховано", + messageHiddenDesc: "Приховано від чату команди для всіх.", + messageHideFailed: "Не вдалося приховати повідомлення", + encryptionUnavailable: "Шифрування недоступне", + encryptionUnavailableDesc: "Ваш підписувач не підтримує шифрування NIP-44. Оновіть розширення.", + messageFailed: "Повідомлення не надіслано", + couldNotSend: "Не вдалося надіслати повідомлення.", + noOneToMessage: "Ще немає кому писати", + noOneToMessageDesc: "У цій команді немає інших учасників для чату.", + subject: "чат команди {{crew}}", + title: "Чат команди", + cordnBadgeTitle: "Маршрутизується через координатор Cordn цієї команди на ContextVM. Наскрізно зашифровано.", + private: "Приватний", + privateBadgeTitle: "Наскрізне шифрування — лише учасники команди можуть читати ці повідомлення.", + encryptedCordn: "Зашифровано та маршрутизується через координатор команди (Cordn) — повідомлення не потрапляють на публічні релеї.", + encryptedNip17: "Зашифрований груповий чат для засновника та всіх учасників команди.", + moderatorNote: " Як модератор ви можете приховувати повідомлення від команди.", + loginToSee: "Увійдіть, щоб побачити, чи можете приєднатися до чату команди.", + membersOnly: "Цей чат приватний для учасників команди. Попросіть засновника додати вас до команди, щоб долучитися до розмови.", + noMessages: "Ще немає повідомлень. Почніть чат команди — сплануйте сесію, поділіться спотом, підтримайте кліп.", + newMessages: "Нові повідомлення", + new: "Нові", + placeholder: "Напишіть своїй команді…", + sendAria: "Надіслати повідомлення", + }, + collectiveJoinRequest: { + addedTitle: "Додано {{name}} до {{collective}} 🛹", + addedDesc: "Вони підтвердять зі свого боку, щоб з'явитися як перевірений учасник.", + couldNotAdd: "Не вдалося додати учасника", + couldNotDismiss: "Не вдалося відхилити", + addedDone: "Додано", + addedTo: "до", + dismissedDone: "Відхилено запит від {{name}}", + wantsToJoin: "хоче приєднатися", + alreadyOnRoster: "Уже у складі", + openCollective: "Відкрити колектив", + dismiss: "Відхилити", + addToCollective: "Додати до колективу", + }, + collectiveMembers: { + confirmed: "Підтверджено", + pending: "Очікує", + pendingTooltip: "Додано колективом — очікує підтвердження цього учасника.", + crewOnly: "Лише команда", + crewOnlyTooltip: "Цей учасник вирішив бути видимим лише для товаришів по команді. Ви бачите його, бо перебуваєте в команді.", + hiddenMember: "Прихований учасник", + title: "Учасники", + verifiedOf: "{{confirmed}} з {{total}} підтверджено — кожен підтверджений учасник підписав своїм ключем Nostr.", + verifiedPerMember: "Членство підтверджується для кожного учасника. Кожен підтверджує своїм ключем Nostr.", + adminsOne: "{{count}} адмін допомагає керувати командою.", + adminsMany: "{{count}} адмінів допомагають керувати командою.", + }, + confirmMembership: { + public: "Публічно", + crewOnly: "Лише команда", + confirmedTitle: "Членство підтверджено!", + confirmedCrew: "Вас підтверджено в {{name}} — видимо лише для товаришів по команді.", + confirmedPublic: "Тепер ви показуєтесь як перевірений учасник {{name}}.", + failed: "Не вдалося підтвердити", + addedTo: "Вас додано до {{name}}", + addedDesc: "Підтвердьте своє членство, щоб воно показувалося як перевірене у вашому профілі та в їхньому.", + yourVisibility: "Ваша видимість", + confirming: "Підтвердження…", + confirmButton: "Підтвердити членство", + }, + contacts: { + message: "Повідомлення", + removePrivate: "Видалити з приватних контактів", + savePrivate: "Зберегти в приватні контакти", + seoTitle: "Контакти - SkateSpots", + seoDescription: "Ваша сцена — товариші по команді, люди, за якими ви стежите, і нещодавні розмови, з приватними зашифрованими контактами.", + encryptionUnavailableDesc: "Ваш підписувач не підтримує шифрування NIP-44.", + removed: "Видалено з приватних контактів", + saved: "Збережено в приватні контакти", + savedDesc: "Лише ви бачите цей список.", + updateFailed: "Не вдалося оновити контакти", + loginTitle: "Ваша сцена, в одному місці", + loginDesc: "Увійдіть, щоб побачити товаришів по команді, людей, за якими стежите, і нещодавні розмови — та вести приватний зашифрований список контактів.", + title: "Контакти", + subtitle: "Ваша сцена — товариші по команді, стеження та розмови", + filterPlaceholder: "Фільтр за npub…", + tabCrew: "Команда", + tabFollows: "Стеження", + tabDms: "DM", + tabSaved: "Збережені", + emptyCrewmates: "Ще немає товаришів по команді. Приєднайтеся до команди або створіть свою, щоб розбудувати свою мережу.", + emptyFollowing: "Ви ще ні за ким не стежите.", + emptyDms: "Ще немає розмов. Напишіть скейтеру, щоб почати.", + savedHint: "Цей список зашифровано вашим ключем — лише ви можете його прочитати. Натисніть зірочку на будь-кому, щоб додати.", + emptySaved: "Ще немає збережених контактів. Позначайте людей зірочкою з будь-якої вкладки, щоб зібрати свою приватну адресну книгу.", + }, + conversation: { + unknown: "Невідомо", + seoTitle: "Чат з {{name}} - SkateSpots", + seoDescription: "Приватна зашифрована розмова", + sendFailed: "Не вдалося надіслати повідомлення", + sendFailedDesc: "Спробуйте ще раз за мить.", + tradeConfirmed: "Обмін підтверджено", + tradeConfirmedDesc: "Репутацію оновлено для вас обох.", + tradeConfirmFailed: "Не вдалося підтвердити обмін", + somethingWrong: "Щось пішло не так.", + soldNote: "Продано {{name}}.", + saleConfirmed: "Продаж підтверджено", + saleConfirmedDesc: "{{name}} тепер може підтвердити свій бік.", + saleConfirmFailed: "Не вдалося підтвердити продаж", + escrowRedeemed: "Ескроу викуплено", + escrowRedeemedDesc: "Кошти тепер у вашому гаманці Cashu.", + escrowRedeemFailed: "Не вдалося викупити ескроу", + loginTitle: "Увійдіть, щоб переглянути повідомлення", + secureLoginTitle: "Потрібен безпечний вхід", + secureLoginDesc: "Повідомлення потребують безпечного застосунку-підписувача.", + encrypted: "Зашифровано", + refresh: "Оновити", + didCompleteTrade: "Ви завершили цей обмін?", + recordedSale: "{{name}} зафіксував продаж. Підтвердьте, щоб оновити репутацію для вас обох.", + confirm: "Підтвердити", + confirmSale: "Підтвердити цей продаж?", + askedToRecord: "{{name}} попросив вас зафіксувати це. Підтвердження будує репутацію для вас обох.", + confirmSaleButton: "Підтвердити продаж", + redeemEscrow: "Викупити ескроу", + escrowAppOnly: "Cashu-ескроу лише в застосунку — відкрийте SkateSpots на телефоні, щоб викупити.", + startThread: "Надішліть повідомлення, щоб почати розмову", + placeholder: "Введіть повідомлення...", + e2eeNote: "Повідомлення наскрізно зашифровані за допомогою NIP-17", + }, + coordinator: { + secondsAgo: "{{count}} с тому", + minutesAgo: "{{count}} хв тому", + hoursAgo: "{{count}} год тому", + daysAgo: "{{count}} дн тому", + statusIdle: "Не перевірено", + statusChecking: "Перевірка…", + statusOnline: "З'єднано", + statusStale: "Тихо", + statusOffline: "Не бачено", + statusError: "Недоступно", + notACoordinator: "Це не координатор", + notACoordinatorDesc: "Вставте nprofile, npub або посилання cordn.net.", + added: "Координатор додано", + relayOne: "{{count}} релей", + relayMany: "{{count}} релеїв", + lastSeen: "востаннє бачено {{time}}", + onlineDesc: "Анонсує. Групи, що його використовують, можуть доставляти повідомлення зараз.", + staleDesc: "Знайдено, але він не анонсував нещодавно — можливо, спить.", + offlineDesc: "Анонсу не бачено. Можливо, він приватний (це нормально) або просто офлайн.", + errorDesc: "Не вдалося досягти релеїв.", + idleDesc: "Перевірка…", + checkingDesc: "Шукаємо його анонс…", + eventFoundOne: "Знайдено {{count}} подію.", + eventFoundMany: "Знайдено {{count}} подій.", + check: "Перевірити", + addLinkCopied: "Посилання для додавання скопійовано", + copyFailed: "Не вдалося скопіювати", + copyManually: "Скопіюйте вручну.", + addLink: "Додати посилання", + removeConfirm: "Видалити цей координатор з цього пристрою?", + scanToJoin: "Скануйте в Cordn, щоб приєднатися до цього координатора.", + noCoordinator: "Ще немає координатора", + noCoordinatorDescA: "Координатор доставляє", + encryptedWord: "зашифровані", + noCoordinatorDescB: "групові повідомлення вашої команди по порядку. Він бачить хто, коли й яка група — ніколи вміст. Виберіть один або запустіть власний.", + change: "Змінити координатор", + addTitle: "Додати координатор", + add: "Додати", + scanQR: "Сканувати QR координатора", + inputPlaceholder: "nprofile… або посилання cordn.net", + runOwn: "Запустіть власний", + runOwnDesc: "Він може жити на старому телефоні, Raspberry Pi чи будь-якій маленькій коробці, яку ви залишите увімкненою. Ваша група працює, поки він увімкнений — і ви можете перенести групу коли завгодно.", + onPhone: "На телефоні", + onPhoneDesc: "Використовуйте застосунок Cordn Coordinator, потім відскануйте його QR тут, щоб додати.", + openCordn: "Відкрити Cordn", + scanItsQR: "Сканувати його QR", + onServer: "На сервері", + commandCopied: "Команду скопійовано", + copyCommand: "Копіювати команду", + androidSleep: "Android може присипляти координатор на телефоні. Очікуйте, що часом доведеться переносити групу.", + privacyNote: "🔒 Координатор бачить лише шифротекст і метадані — ніколи вміст повідомлень. Запустіть власний, щоб навіть метадані належали вам.", + customTitle: "Власний координатор чату", + customBadge: "· експериментально · ваш власний релей", + customDescShort: "Необов'язково — у вашої команди вже є вбудований наскрізно зашифрований чат, тож це не потрібно. Налаштовуйте лише якщо запускаєте власний", + remove: "Видалити", + pointerNote: "Поки що лише вказівник: endpoint wss:// використовується як чат-релей команди; https:// — через спільний релей ContextVM. Справжній Cordn MLS ще не під'єднано.", + cordnCoordinator: "Координатор Cordn", + invalid: "Це не схоже на координатор. Вставте nprofile, посилання cordn.net або URL https/wss.", + useMine: "Використати мій координатор", + }, + createCrew: { + seoTitle: "Створити команду - SkateSpots", + seoDescription: "Створіть свою скейт-команду — домашня територія, учасники та споти.", + loginRequired: "Потрібен вхід", + loginRequiredDesc: "Вам потрібно увійти, щоб створити команду.", + backToCrews: "Назад до Команд", + title: "Створити команду", + intro: "Ваша скейт-сім'я — люди, з якими ви катаєтеся. Достатньо назви, щоб почати; усе інше необов'язкове.", + }, + crew: { + seoTitleNamed: "{{name}} - Команда SkateSpots", + seoTitle: "Команда - SkateSpots", + seoDescription: "Скейт-команда в SkateSpots.", + postHidden: "Допис приховано", + postHiddenDesc: "Видалено зі стрічки команди для всіх.", + postHideFailed: "Не вдалося приховати допис", + backToCrews: "Назад до Команд", + disband: "Розпустити", + youAreCaptain: "Ви капітан", + member: "Учасник", + askSasquatch: "Запитати Sasquatch", + agent: "Агент команди", + agentDesc: "ШІ-гід вашої команди — споти поблизу, події, Coach-и та спорядження, з живими даними.", + eventsTab: "Події", + chatTab: "Чат", + newMessages: "Нові повідомлення", + hostJam: "Провести джем", + noEvents: "Ще немає подій команди. Проведіть джем, змагання чи зустріч від імені команди — це пов'язує вашу команду з календарем подій і дозволяє надсилати їй zap.", + support: "Підтримка", + zapCrew: "Надіслати zap команді", + bandTitle: "Гурт команди", + bandTagline: "Жива музика · скейт і звук", + listenTitle: "Слухати: {{domain}}", + listen: "Послухати музику", + setUpGig: "Організувати виступ", + bookGigMessage: "Привіт {{crew}} — цікавить замовлення {{band}} на виступ. Є час обговорити дати?", + messageAboutGig: "Написати щодо виступу", + gigHintA: "додає музичну подію в календар, організовану цією командою.", + messageShort: "Повідомлення", + gigHintB: "відкриває зашифрований DM команді, щоб узгодити дати й деталі.", + homeSpots: "Домашні споти", + viewSpot: "Переглянути спот", + seeOnMap: "Подивитися на карті →", + founderLinks: "Засновник і посилання", + startedBy: "Створено {{name}}", + opens: "Відкриває: {{domain}}", + }, + crews: { + seoTitle: "Команди - SkateSpots", + seoDescription: "Знайдіть своїх. Відкривайте місцеві скейт-команди, колективи та спільноти поблизу.", + videoPartTooltip: "Ця команда має відеопарт", + part: "Парт", + bandTooltip: "Гурт команди: {{name}}", + band: "Гурт", + focusAll: "Усі", + focusAllShort: "Усі", + focusDiy: "DIY", + focusPhoto: "Фото", + focusCoaching: "Коучинг", + focusArt: "Мистецтво", + focusMusic: "Музика", + focusPhysio: "Фізіо", + focusMixed: "Змішане", + title: "Команди", + heroLine: "Ваша скейт-сім'я, прив'язана до карти — люди, з якими ви катаєтеся", + heroWith: "з", + heroRest: ", а не ті, кого наймаєте (це The Lab).", + crewCountOne: "{{count}} команда", + crewCountMany: "{{count}} команд", + cityCountOne: "{{count}} місто", + cityCountMany: "{{count}} міст", + createCrew: "Створити команду", + create: "Створити", + searchPlaceholder: "Пошук команд за назвою чи містом…", + filterTitle: "Фільтр команд", + filterDesc: "Чим займається команда.", + nearMe: "Поблизу", + emptySearchTitle: "Жодна команда не відповідає пошуку", + emptySearchHint: "Нічого не знайдено за «{{query}}». Спробуйте іншу назву чи місто.", + clearSearch: "Очистити пошук", + emptyFocusTitle: "Ще немає команд «{{label}}»", + emptyFocusHint: "Тут ніхто ще не підняв прапор «{{label}}». Покажіть усі команди або створіть цю самі.", + showAll: "Показати всі команди", + claimTitle: "Заявіть свою місцеву сцену", + claimHint: "Тут ще немає команд. Станьте першим — створіть свою команду, прив'яжіть домашні споти й позначте свою сцену на карті, щоб усі її знайшли.", + }, + crewCoordinator: { + privateChat: "Приватний чат команди", + on: "Увімк.", + defaultA: "Вкладка", + chatWord: "Чат", + defaultB: "є", + e2ee: "наскрізно зашифрована", + defaultC: "для засновника та всіх учасників — нічого налаштовувати. Повідомлення запечатані ключем кожного учасника (NIP-17), тож лише ваша команда може їх читати.", + advancedA: "Для просунутих: запустіть власний", + cordnCoordinator: "координатор Cordn", + routeThrough: "Маршрутизувати чат через нього", + coordinator: "Координатор", + deliveredOver: "Доставлено через", + sharedRelay: "— спільний релей ContextVM.", + ownRelay: "— власний релей вашої команди.", + chatLive: "Приватний чат активний", + routesA: "Вкладка", + routesB: "маршрутизується через цей координатор: повідомлення наскрізно зашифровані (NIP-44, запечатані для кожного учасника), тож він опрацьовує лише запечатаний трафік.", + publicWarning: "Увага: він адресується через спільний релей ContextVM, тож шифротекст і його метадані (яка команда і коли) публічно видимі — але не читабельні. Спрямуйте команду на приватний релей wss://, щоб приховати навіть це.", + ownRelaySafe: "Нічого специфічного для команди не покидає власний релей вашої команди.", + manage: "Керувати координатором", + open: "Відкрити {{domain}}", + runBy: "Координатор керується", + }, + dms: { + securityReminder: "Нагадування про безпеку", + phishingStrong: "SkateSpots ніколи не пише вам у DM", + phishingRest: "з проханням підтвердити акаунт, поділитися ключами чи надіслати платежі. Якщо хтось називає себе підтримкою SkateSpots у DM — це шахрайство.", + dismissReminder: "Відхилити нагадування про безпеку", + peopleCount: "{{count}} людей", + youPrefix: "Ви: ", + unreadMessages: "Непрочитані повідомлення", + seoTitle: "Повідомлення - SkateSpots", + seoDescription: "Приватні зашифровані повідомлення зі спільнотою скейтерів", + loginTitle: "Увійдіть, щоб отримати доступ до повідомлень", + loginDesc: "Приватні зашифровані повідомлення зі скейтерами зі спільноти", + secureLoginTitle: "Потрібен безпечний вхід", + secureLoginDesc: "Приватні повідомлення потребують безпечного застосунку-підписувача для шифрування розмов.", + onAndroid: "На Android:", + useAmber: "Використовуйте застосунок Amber", + getAmber: "Отримати Amber →", + onIOS: "На iOS:", + iosHint: "Спробуйте увійти через bunker-з'єднання (nsec.app) у налаштуваннях", + browserHint: "Спробуйте увійти через розширення браузера, як-от Alby чи nos2x, що підтримує шифрування.", + title: "Повідомлення", + subtitleFull: "Наскрізне шифрування з NIP-17", + subtitleShort: "Зашифровано", + newMessage: "Нове повідомлення", + groups: "Групи", + loadFailed: "Не вдалося завантажити повідомлення", + emptyTitle: "Ще немає повідомлень", + emptyDesc: "Почніть розмову з кимось зі спільноти", + startConversation: "Почати розмову", + undecryptableOne: "{{count}} зашифроване повідомлення не вдалося відкрити вашому підписувачу.", + undecryptableMany: "{{count}} зашифрованих повідомлень не вдалося відкрити вашому підписувачу.", + }, + editCrew: { + seoTitleNamed: "Редагувати {{name}} - SkateSpots", + seoTitle: "Редагувати команду - SkateSpots", + seoDescription: "Редагуйте свою скейт-команду.", + loginRequired: "Потрібен вхід", + notYours: "Не ваша команда", + notYoursDesc: "Лише засновник команди може редагувати цю команду.", + backToCrew: "Назад до Команди", + title: "Редагувати команду", + }, + form: { + add: "Додати", + added: "Додано", + addNameInBasicsA: "Поверніться й додайте назву команди у", + addNameInBasicsB: "щоб завершити.", + adminsDescA: "Зробіть довірених учасників", + adminsWord: "адмінами", + adminsDescB: "— вони можуть запрошувати учасників і модерувати стрічку та чат команди своїми ключами. Ви (засновник) завжди залишаєтесь власником ідентичності команди.", + agentDescA: "Додайте", + agentDescB: ", ШІ-гіда, який справді знає вашу команду. Учасники можуть питати про", + agentDescC: "— плюс споти поблизу, події, Coach-ів і спорядження з живих даних SkateSpots. Працює просто в браузері; без ключів і налаштувань. Це рання версія (безкоштовний тариф ШІ, тож часом повільно).", + agentDescStrong: "ваш наступний джем, хто керує командою, що ви шукаєте та ваш вайб", + agentEnabledNote: "Sasquatch з'явиться на сторінці вашої команди після збереження.", + bandDesc: "Маєте гурт? Скейт-сцени й місцева музика йдуть пліч-о-пліч — додайте назву гурту та посилання на музику.", + bandFooterA: "Для повного профілю гурту (жанри, інструменти, виступи) створіть", + musicianWord: "Музиканта", + bandFooterB: "у The Lab, потім прив'яжіть його в розділі", + linkedLabWord: "Пов'язані профілі Lab", + bandFooterC: "вище.", + bandMusicWord: "Гурт і музика", + bandName: "Назва гурту", + bandNamePlaceholder: "напр. The Bail Outs", + bandNudgeA: "У вас є гурт — натисніть, щоб встановити", + crewTypeWord: "Тип команди", + bandNudgeB: "на", + bandNudgeC: "щоб ви також з'являлися в музичній сцені The Lab.", + beta: "Бета", + bioLabel: "Про / Маніфест", + bioPlaceholder: "Хто ви, на чому катаєтеся, ваша історія...", + continue: "Продовжити", + crewCreated: "Команду створено!", + crewUpdated: "Команду оновлено!", + crewName: "Назва команди", + crewOnlyWord: "Лише для команди", + crewType: "Тип команди", + crewTypeDescA: "Ваша команда зосереджена на ремеслі? Виберіть одне, щоб також з'являтися в цій сцені в", + theLab: "The Lab", + crewTypeDescB: ". Звичайні скейт-команди залишаються", + mixedWord: "Змішаними", + crewTypeDescC: ".", + customVibeHint: "Додайте власний вайб чи напрям через #", + customVibePlaceholder: "напр. downhill, night-sessions, no-comply", + editDesc: "Ідентичність, домашня територія та учасники вашої команди", + enableAgent: "Увімкнути агента команди", + enableTreasury: "Увімкнути скарбницю команди", + failed: "Не вдалося", + founded: "Засновано (рік)", + geolocationUnsupported: "Геолокація не підтримується", + gettingLocation: "Отримуємо...", + goalHint: "Переконайтеся, що у вашому профілі Nostr є Lightning-адреса (lud16), щоб внески надходили.", + goalPlaceholder: "напр. Забетонувати DIY-спот", + goalTarget: "Ціль (sats)", + goalWhat: "Яка мета?", + homeSpots: "Домашні споти", + homeSpotsDesc: "Прив'яжіть споти, де буває ваша команда — вони з'єднаються з вашою командою на карті", + homeTurf: "Домашня територія (місто / район)", + homeTurfPlaceholder: "Bristol, UK", + instagramDetected: "Виявлено кліп Instagram", + invalidMember: "Введіть дійсний npub, nprofile або hex-публічний ключ.", + latitude: "Широта", + leaveBlankLocation: "Залиште порожнім, щоб зберегти поточну локацію домашньої території.", + links: "Посилання", + locationError: "Помилка локації", + locationFound: "Локацію знайдено", + logoAlt: "Команда", + logoHint: "Логотип робить вашу команду миттєво впізнаваною на карті та у стрічках. Найкраще квадратний.", + logoLabel: "Логотип / Фото команди", + logoUploaded: "Логотип завантажено", + longitude: "Довгота", + looksGood: "Виглядає добре", + makeAdmin: "Зробити адміном", + mapPin: "Мітка на карті", + mapPinHint: "Позначте свою команду на карті, щоб місцеві могли вас знайти. Натисніть кнопку — вводити не потрібно.", + memberAlreadyAdded: "Цей учасник уже доданий.", + members: "Учасники", + membersDesc: "Додайте акаунти Nostr вашої команди. Кожен учасник підтверджує своїм ключем — до того вони показуються як «очікує».", + musicLink: "Посилання на музику", + nameCrew: "Назвіть свою команду", + nameCrewDesc: "Команді потрібна назва, перш ніж продовжити.", + nameCrewFirst: "Спершу назвіть свою команду", + nameHint: "Єдине, що справді потрібно. Можете змінити пізніше.", + namePlaceholder: "напр. Backyard Bandits", + nameRequired: "Потрібна назва", + nameRequiredDesc: "Дайте своїй команді назву.", + nip05DescA: "Перевірюваний нік, яким ви керуєте на будь-якому домені, напр.", + nip05DescB: ". Він перевіряється проти ключа засновника цієї команди, і ви можете додати кілька — кожен показує зелену позначку, коли його домен підтверджує.", + nip05Label: "NIP-05 команди", + nip05Placeholder: "crew@yourdomain.com", + nip05Add: "Додати", + nip05Invalid: "Введіть нік на кшталт crew@yourdomain.com", + nip05TooMany: "Ви можете додати до {{count}} ніків.", + nip05Unverified: "Не перевірено", + nip05Remove: "Видалити {{handle}}", + notAKeyA: "Це поки не схоже на ключ Nostr — вставте", + notAKeyB: ",", + notAKeyC: ", або hex-публічний ключ.", + onlyYouTubeInstagram: "Підтримуються лише посилання YouTube та Instagram.", + openCall: "Відкритий набір", + openCallDescA: "Шукаєте Filmer-а, Editor-а чи нову кров? Оголосіть набір — він показується на сторінці вашої команди, щоб відповідні люди з", + openCallDescB: "могли зв'язатися.", + optional: "· необов'язково", + optionalParen: "(необов'язково)", + otherSocials: "Інші соцмережі", + otherSocialsDesc: "Додайте скільки завгодно — YouTube, TikTok, Discord, Telegram тощо.", + ownVisibility: "власну видимість", + progress: "Прогрес", + publicWord: "Публічно", + publishedToScene: "Опубліковано для сцени.", + publishFailed: "Не вдалося опублікувати", + publishing: "Публікуємо...", + ready: "Готово", + readyToRollA: "Готово до старту — натисніть", + readyToRollB: "коли завгодно.", + removeAdminRole: "Зняти роль адміна", + removeMember: "Видалити учасника", + removeSocial: "Видалити посилання на соцмережу", + removeVibe: "Видалити {{vibe}}", + roles: "Ролі:", + sasquatch: "Sasquatch", + saveCrew: "Зберегти команду", + skipToEnd: "Перейти до кінця", + socialPlaceholder: "@нік або посилання", + sponsorDesc: "Якщо місцевий магазин підтримує вашу команду, виберіть його тут, щоб показати банер «Спонсоровано» з посиланням на його магазин.", + stepAria: "Крок {{step}}: {{title}}", + stepBasics: "Основи", + stepBasicsShort: "Основи", + stepBasicsHint: "Лише найнеобхідніше — можна створити команду лише з цим кроком.", + stepVibe: "Ідентичність і вайб", + stepVibeShort: "Вайб", + stepVibeHint: "Як ваша команда показується в застосунку. Усе необов'язково.", + stepSquad: "Склад і споти", + stepSquadShort: "Склад", + stepSquadHint: "Додайте своїх людей і домашню територію. Це можна зробити й пізніше.", + stepExtras: "Додатково", + stepExtrasShort: "Додатково", + stepExtrasHint: "Покращення на потім — пропустіть усе, у чому не впевнені.", + extrasAllOptional: "Усе на цьому кроці необов'язкове.", + groupIdentity: "Ідентичність", + groupIdentityHint: "Нік, посилання", + groupAi: "Sasquatch AI", + groupShowcase: "Вітрина", + groupPayments: "Платежі та скарбниця", + groupIntegrations: "Інтеграції", + groupAdvanced: "Додатково", + groupAdvancedHint: "експериментально", + pro: "Pro", + agentProNote: "Працює на Sasquatch. Pro отримує найкращі моделі; без Pro використовується безкоштовний запасний варіант.", + stepOf: "Крок {{step}} з {{total}}", + treasuryDescA: "Збирайте sats на спільну мету — ремонт місцевого DIY-спота, поїздку команди, призовий фонд змагань. Це прозора Lightning-ціль; zap-и йдуть", + treasuryDescStrong: "прямо у ваш гаманець", + treasuryDescB: "(через Lightning-адресу вашого профілю). SkateSpots ніколи не тримає кошти.", + upload: "Завантажити", + uploadFailed: "Не вдалося завантажити", + useCurrentLocation: "Використати поточну локацію", + vibeLabel: "Вайб / Напрям", + videoDescA: "Повний парт, монтаж чи останній кліп вашої команди. Вставте посилання", + videoDescB: "— воно відтвориться прямо на сторінці вашої команди.", + visibilityDescA: "Кожен учасник контролює свою", + visibilityDescB: "— коли вони підтверджують своїм ключем, вони можуть вибрати", + visibilityDescC: "— приховано від сторонніх). Ви не можете встановити це за них; це їхнє рішення.", + website: "Вебсайт", + yourRoles: "Ваші ролі (Team Leader)", + youtubeDetected: "Виявлено відео YouTube", + invalidUrl: "Введіть дійсне посилання (напр. https://example.com).", + }, + groupConversation: { + seoTitle: "Груповий чат - SkateSpots", + invalidLink: "Це посилання на груповий чат недійсне.", + loginTitle: "Увійдіть, щоб переглянути цю групу", + secureSignerTitle: "Потрібен безпечний підписувач", + secureSignerDesc: "Групові повідомлення потребують підписувача з підтримкою NIP-44.", + encryptedGroup: "Наскрізно зашифрована група", + empty: "Ще немає повідомлень — привітайтеся з групою.", + placeholder: "Напишіть групі...", + }, + hero: { + established: "Засн. {{year}}", + teamLeader: "Team leader: {{name}}", + ledBy: "Керує", + }, + inviteCard: { + acceptedTitle: "Запрошення прийнято 🛹", + acceptedDesc: "Засновник команди підтверджує учасників у {{crew}}. Ви з'явитеся у складі, щойно він схвалить.", + couldNotAccept: "Не вдалося прийняти", + couldNotDecline: "Не вдалося відхилити", + acceptedDone: "Прийнято —", + confirmsMembers: "підтверджує учасників", + declinedDone: "Відхилено запрошення до {{crew}}", + invitedYou: "запросив вас приєднатися", + admin: "Адмін", + accept: "Прийняти", + decline: "Відхилити", + }, + inviteDialog: { + messageIntro: "Йо — приєднуйся до команди {{crew}} у SkateSpots 🛹", + messageBody: "Увійдіть своїм ключем Nostr, потім подайте запит на приєднання зі сторінки команди.", + copyFailed: "Не вдалося скопіювати", + shareTitle: "Приєднатися до {{crew}}", + sentTitle: "Запрошення надіслано! 🛹", + sentDesc: "Вони отримають сповіщення прийняти чи відхилити.", + couldNotSend: "Не вдалося надіслати запрошення", + trigger: "Запросити", + title: "Запросити до {{crew}}", + description: "Надішліть запрошення на ключ Nostr когось або поділіться посиланням.", + sendTab: "Надіслати запрошення", + shareTab: "Поділитися посиланням", + npubLabel: "npub скейтера", + invalidNpub: "Це не схоже на дійсний npub.", + noteLabel: "Примітка", + optional: "(необов'язково)", + notePlaceholder: "Приходь покататися з нами…", + inviteAsAdmin: "Запросити як адміна", + inviteAsAdminDesc: "Може керувати командою та запрошувати інших.", + sendButton: "Надіслати запрошення", + sendFooter: "Вони отримають сповіщення прийняти чи відхилити. Членство зараховується лише після прийняття.", + inviteLink: "Посилання-запрошення", + messageLabel: "Повідомлення", + copyMessage: "Копіювати повідомлення", + founderHint: "Як засновник ви також можете додати ключ учасника напряму, а він підтвердить.", + addMemberSettings: "Додати учасника в налаштуваннях команди", + }, + joinRequest: { + moreCount: "+{{count}} ще", + addedTitle: "Додано {{name}} до {{crew}} 🛹", + addedDesc: "Вони підтвердять зі свого боку, щоб з'явитися як учасник.", + vouchedTitle: "Ви поручилися за {{name}} 🤝", + vouchedDesc: "Засновник {{crew}} побачить вашу підтримку й зможе додати їх.", + couldNotEndorse: "Не вдалося підтримати", + endorsedDoneA: "Ви поручилися за", + endorsedDoneB: "— засновник підтвердить", + vouchedBy: "Поручився", + approveAndAdd: "Схвалити й додати", + addToCrew: "Додати до команди", + vouchedWaiting: "Поручилися — чекаємо на засновника", + vouchForThem: "Поручитися за них", + leadershipOnly: "Лише для керівництва команди.", + adminHelp: "Адміни не можуть додавати учасників напряму — порука повідомляє засновника, що ви підтримуєте цього райдера.", + }, + leadership: { + teamLeader: "Team Leader", + captain: "Капітан", + verifiedMember: "Перевірений учасник", + messageName: "Написати {{name}}", + title: "Керівництво", + captainsOne: "{{count}} капітан", + captainsMany: "{{count}} капітанів", + footer: "Team Leader керує складом; капітани допомагають запрошувати, проводити джеми та підтримувати лад у команді.", + }, + linkField: { + title: "Пов'язана команда", + description: "Також ведете команду? Прив'яжіть її, щоб люди могли переходити між вашою студією та командою. Необов'язково. Прив'яжіть цю команду назад до профілю з редактора команди, і вона покаже зелену", + descriptionRest: "позначку на обох.", + none: "У вас ще немає команд. Створіть одну на сторінці Команд, щоб прив'язати її тут.", + linkedCrew: "Пов'язана команда ({{id}})", + }, + lookingFor: { + title: "Відкритий набір", + subtitle: "Ця команда шукає:", + }, + memberVisibility: { + updatedTitle: "Видимість оновлено", + updatedCrew: "Тепер ви показуєтесь лише товаришам по команді.", + updatedPublic: "Тепер ви показуєтесь публічно в цій команді.", + couldNotUpdate: "Не вдалося оновити", + title: "Ваша видимість у цій команді", + save: "Зберегти видимість", + }, + newMessage: { + inCrew: "У вашій команді: {{crews}}", + crewmate: "Товариш по команді", + following: "Стежу", + invalidKey: "Це не схоже на дійсний npub чи публічний ключ.", + description: "Шукайте своїх за іменем або вставте npub, щоб написати будь-кому. Виберіть двох чи більше, щоб створити групу.", + searchPlaceholder: "Пошук за іменем або вставте npub1...", + messageThisKey: "Написати цьому ключу", + loadingPeople: "Завантаження ваших людей...", + noPeople: "Ще немає товаришів по команді чи стеження.", + noPeopleHint: "Вставте чийсь npub вище, щоб почати розмову.", + yourCrews: "Ваші команди", + selected: "{{count}} вибрано", + startGroup: "Створити групу ({{count}})", + message: "Повідомлення", + }, + nip05: { + mismatch: "Цей домен указує нік на інший ключ Nostr, ніж ключ засновника команди. Не підтверджено.", + verified: "Підтверджено — домен засвідчує, що цей нік належить ключу засновника команди.", + }, + requestCollective: { + sentTitle: "Запит надіслано 🤝", + sentDesc: "{{name}} побачить його у своїх сповіщеннях і зможе додати вас.", + couldNotSend: "Не вдалося надіслати запит", + title: "Приєднатися до цього колективу", + waiting: "Запит надіслано — чекаємо на {{name}}.", + askA: "Попросіть команду, що стоїть за", + askB: "додати вас до складу. Вони отримають сповіщення й зможуть додати вас одним дотиком.", + placeholder: "Необов'язково: скажіть, чому ви добре підходите…", + sendButton: "Надіслати запит", + }, + requestToJoin: { + sentTitle: "Запит надіслано! 🛹", + sentDesc: "Керівництво {{crew}} побачить його у своїх сповіщеннях.", + couldNotSend: "Не вдалося надіслати запит", + trigger: "Подати запит на приєднання", + title: "Приєднатися до {{crew}}", + description: "Повідомляє засновника й адмінів команди, щоб вони могли додати вас.", + placeholder: "Привітайтеся — де катаєтеся, кого знаєте, чому хочете до нас…", + sending: "Надсилаємо…", + sendButton: "Надіслати запит на приєднання", + }, + sponsorBanner: { + loading: "Завантаження спонсора…", + sponsoredBy: "Спонсоровано", + }, + sponsorPicker: { + selected: "Спонсора вибрано", + setLoading: "Спонсора встановлено (магазин завантажується…)", + set: "Спонсора встановлено", + clearAria: "Очистити спонсора", + searchPlaceholder: "Пошук скейт-магазинів за назвою чи містом…", + loading: "Завантаження магазинів…", + noMatch: "Немає відповідних магазинів — спробуйте інший пошук.", + none: "Магазинів поки не знайдено.", + }, + treasury: { + title: "Скарбниця команди", + ofGoal: "з цілі {{target}}", + goalReached: "Мети досягнуто!", + funded: "{{percent}}% профінансовано", + contributionOne: "{{count}} внесок", + contributionMany: "{{count}} внесків", + daysLeft: "залишилось {{days}} дн", + closed: "закрито", + nonCustodial: "Без зберігання · zap-и йдуть прямо в Lightning-гаманець команди", + }, + userStatus: { + atSpot: "📍 На споті", + autoClears: "⏱️ Автоочищення через {{min}} хв", + }, + video: { + title: "Парт", + fullVideo: "Повне відео · монтаж", + latestClip: "Останній кліп", + watch: "Дивитися", + iframeTitle: "{{crew}} — відео", + playAria: "Відтворити відео {{crew}}", + thumbAlt: "Мініатюра відео {{crew}}", + instagramTitle: "Кліп Instagram", + }, + vouch: { + removedTitle: "Поруку видалено", + vouchedTitle: "Поручилися!", + removedDesc: "Ви більше не поручаєтеся за {{name}}.", + vouchedDesc: "Ви поручилися за {{name}}. Сцена довіряє своїм.", + couldNotVouch: "Не вдалося поручитися", + title: "Поруки сцени", + sceneVerified: "Перевірено сценою", + vouched: "Поручилися", + newUnvouched: "Новий · без порук", + checking: "Перевіряємо сцену…", + empty: "Ще немає порук. Поруки від скейтерів з вашого кола — найкращий сигнал, що людина справжня, а не випадковий перехожий.", + countOne: "{{count}} порука", + countMany: "{{count}} порук", + trusted: "{{count}} від скейтерів з вашої мережі довіри", + remove: "Видалити поруку", + vouchFor: "Поручитися за {{name}}", + ownerNote: "Скейтери, які знають вашу роботу, можуть поручитися за вас тут.", + }, + }, +}; export default ukBatch5; +export { ukBatch5 }; diff --git a/src/i18n/uk/batch6.ts b/src/i18n/uk/batch6.ts index c3e2cbf..b9e441c 100644 --- a/src/i18n/uk/batch6.ts +++ b/src/i18n/uk/batch6.ts @@ -1,4 +1,1948 @@ -/** uk — batch 6. Filled by the translation pass; empty until then. */ -const ukBatch6 = {}; +/** uk — batch 6. Filled by the Ukrainian translation pass. */ +const ukBatch6 = { + placesUi: { + addToCalendar: { + add: "Додати в календар", + appleOutlook: "Apple / Outlook (.ics)", + google: "Google Календар", + }, + attendees: { + goingCount: "ідуть", + goingTab: "Ідуть ({{count}})", + interestedTab: "Цікавляться ({{count}})", + nobodyGoing: "Ще ніхто не підтвердив.", + nobodyInterested: "Ще ніхто не позначив зацікавленість.", + noRsvps: "Ще немає RSVP — будьте першим, хто скаже, що йде.", + trusted: "Довірені", + trustedTitle: "Той, за ким ви стежите, або довірений маппер", + youTrust: "яким ви довіряєте", + }, + bounty: { + addressCoords: "Адреса й координати", + basic: "Базовий", + contactInfo: "Контактна інформація", + description: "Опис", + earningPotential: "Потенціал заробітку", + excellent: "Відмінно!", + gettingStarted: "Початок роботи", + good: "Добре", + onePhoto: "Принаймні 1 фото", + openingHours: "Години роботи", + shopName: "Назва Shop", + threePhotos: "3+ фото", + tip: "💡 Вища якість = більше Zap від спільноти!", + }, + calendar: { + allDay: "Увесь день", + eventDay: "День Event", + eventsOnDay: "подій: {{count}}", + eventsThisMonth: "подій цього місяця", + going: "ідуть", + months: { + january: "Січень", + february: "Лютий", + march: "Березень", + april: "Квітень", + may: "Травень", + june: "Червень", + july: "Липень", + august: "Серпень", + september: "Вересень", + october: "Жовтень", + november: "Листопад", + december: "Грудень", + }, + nextMonth: "Наступний місяць", + nothingOnDay: "Цього дня нічого немає.", + prevMonth: "Попередній місяць", + tapHighlighted: "Торкніться виділеного дня, щоб побачити, що відбувається.", + today: "Сьогодні", + tourDay: "День Tour", + toursOnDay: "турів: {{count}}", + toursThisMonth: "турів цього місяця", + weekdays: { + sun: "Нд", + mon: "Пн", + tue: "Вт", + wed: "Ср", + thu: "Чт", + fri: "Пт", + sat: "Сб", + }, + weekdaysShort: { + sun: "Н", + mon: "П", + tue: "В", + wed: "С", + thu: "Ч", + fri: "П", + sat: "С", + }, + }, + countdown: { + ended: "Завершилося", + happeningNow: "Відбувається зараз", + inDays: "Через {{count}} дн.", + inHoursMins: "Через {{hours}} год {{mins}} хв", + inMins: "Через {{count}} хв", + startingNow: "Починається зараз", + tomorrow: "Завтра", + }, + createEvent: { + add: "Додати", + addNewSpot: "Додати новий Spot →", + changeSpot: "Змінити Spot", + created: "Event створено!", + createdDesc: "Ваш Event опубліковано в мережі.", + entryFee: "Вхідний внесок", + entryFeeHint: "(необов'язково — напр. \"500 sats\" або \"£10\")", + entryFeePlaceholder: "Залиште порожнім для безкоштовних подій", + featuring: "За участі {{name}}", + featuringDesc: "Цей виступ буде позначено як жива музика й показано в їхньому списку концертів.", + fundingGoal: "Ціль фінансування", + fundingGoalHint: "(необов'язково — sats для збору через Zap)", + fundingGoalPlaceholder: "напр. 50000", + geoNotSupported: "Геолокація не підтримується", + geoNotSupportedDesc: "Ваш браузер не підтримує геолокацію.", + hideSpots: "Сховати Spot-и", + hostingAs: "Ви проводите як {{name}}", + hostingAsDesc: "Цей Event з'явиться на сторінці вашого Crew і буде позначено як проведений Crew.", + imageUploaded: "Зображення завантажено", + imageUploadedDesc: "Ваше зображення успішно завантажено.", + invalidDate: "Невірна дата", + invalidDateDesc: "Введіть коректну дату й час початку.", + invalidEnd: "Невірний час завершення", + invalidEndDesc: "Час завершення має бути після часу початку.", + linkedTo: "Пов'язано з: {{title}}", + linkToSpot: "Пов'язати зі Spot", + linkToShop: "Пов'язати з Shop", + selectedShop: "Пов'язано з {{name}}", + selectShopHint: "Необов'язково — проводиться в Shop або Shop організовує.", + selectShop: "Вибрати Shop", + changeShop: "Змінити Shop", + hideShops: "Сховати Shop-и", + searchShops: "Пошук Shop-ів…", + noShopsMatch: "Жоден Shop не відповідає пошуку.", + noShopsAvailable: "Ще немає доступних Shop-ів.", + linkToTour: "Пов'язати з Tour (необов'язково)", + linkTourDesc: "Пов'яжіть цей Event із Tour, щоб показати, що він частина більшої серії. Чудово для національних турів, міжнародних пригод або днів викликів World Destruction Tour.", + loadingSpots: "Завантаження Spot-ів...", + loadingTours: "Завантаження турів...", + locationError: "Помилка локації", + locationFound: "Локацію знайдено", + locationFoundDesc: "Вашу поточну локацію встановлено.", + logoUrl: "URL логотипу (необов'язково)", + noSpotsAvailable: "Немає доступних Spot-ів", + noSpotsMatch: "Жоден Spot не відповідає пошуку", + noTourLinked: "Tour не пов'язано", + optional: "(необов'язково)", + pastDesc: "Виберіть дату й час у майбутньому, щоб скейтери могли відповісти й прийти.", + pastTitle: "Цей час початку вже минув", + publishFailed: "Не вдалося опублікувати", + publishFeatured: "Опублікувати Featured Event", + removeSponsor: "Видалити спонсора", + searchSpots: "Пошук Spot-ів за назвою, локацією або категорією...", + selectedSpot: "Вибрано: {{name}}", + selectSpot: "Вибрати Spot", + selectSpotHint: "Виберіть Spot на карті, де відбувається цей Event", + selectTour: "Вибрати Tour", + somethingWrong: "Щось пішло не так", + sponsorName: "Назва спонсора", + sponsors: "Спонсори", + sponsorsHint: "Маєте Shop або бренд, що підтримує? Додайте їхній логотип — він показується як рядок \"Presented by\" на Event.", + startRequired: "Потрібен час початку", + startRequiredDesc: "Будь ласка, вкажіть, коли починається Event.", + titleRequired: "Потрібна назва", + titleRequiredDesc: "Будь ласка, введіть назву для цього Event.", + uploadFailed: "Не вдалося завантажити", + uploadFailedDesc: "Не вдалося завантажити зображення", + websiteUrl: "URL вебсайту (необов'язково)", + }, + createShop: { + address: "Адреса Shop", + addressPlaceholder: "напр., 411 N Fairfax Ave, Los Angeles, CA 90036", + addressRequired: "Потрібна адреса", + addressRequiredDesc: "Будь ласка, введіть адресу вашого Shop.", + contactHint: "Допоможіть клієнтам зв'язатися з вами (рекомендовано принаймні один спосіб)", + contactInfo: "Контактна інформація", + created: "🎉 Shop додано!", + createdDesc: "Ваш Shop тепер на карті. Скейтери можуть відправити вам Zap подяки!", + descriptionPlaceholder: "Розкажіть людям про ваш Shop, що ви продаєте, вашу спеціалізацію...", + detailsDesc: "Розкажіть спільноті про ваш Shop. Усі поля, позначені *, обов'язкові.", + email: "Ел. пошта", + hoursOfOperation: "Години роботи", + hoursPlaceholder: "напр., Пн-Сб 10:00-20:00, Нд 12:00-18:00", + instagram: "Instagram", + invalidCoords: "Невірні координати", + invalidCoordsDesc: "Будь ласка, введіть коректну широту (-90 до 90) і довготу (-180 до 180).", + latPlaceholder: "Широта (напр., 34.0737)", + lngPlaceholder: "Довгота (напр., -118.3614)", + locationRequired: "Потрібна локація", + locationRequiredDesc: "Будь ласка, введіть координати або скористайтеся поточною локацією.", + loginToAdd: "Потрібно увійти, щоб додати Shop.", + namePlaceholder: "напр., Supreme Los Angeles", + nameRequired: "Потрібна назва Shop", + nameRequiredDesc: "Будь ласка, введіть назву вашого Shop.", + phoneNumber: "Номер телефону", + publishFailedDesc: "Щось пішло не так. Перевірте консоль для деталей.", + shopPhotoAlt: "Shop", + shopPhotos: "Фото Shop", + subtitle: "Розмістіть свій Shop на карті та зв'яжіться зі спільнотою", + upload: "Завантажити", + }, + createTour: { + acceptedClipSources: "Прийнятні джерела клипів", + acceptedClipSourcesDesc: "Які формати ви приймаєте для надсилання клипів?", + accommodationInfo: "Інформація про проживання", + accommodationPlaceholder: "Рекомендації або домовленості про проживання, напр., 'Бюджетні хостели вздовж маршруту', 'Потрібне кемпінгове спорядження', 'Airbnb включено'", + addChallenge: "Додати виклик", + addCity: "Додати місто...", + addCountry: "Додати країну...", + addShopFirst: "Спочатку додайте Shop", + alsoSelected: "Також вибрано:", + availabilityPlaceholder: "напр., Вихідні, Лише ранки, За домовленістю", + availabilityQuestion: "Коли ви зазвичай доступні?", + availableShops: "Доступні Shop-и ({{count}})", + challengeDescPlaceholder: "Необов'язковий опис...", + challenges: "Виклики", + challengesRequired: "Потрібні виклики", + challengesRequiredDesc: "Будь ласка, додайте принаймні один виклик, який команди мають виконати.", + challengesSecret: "Усі виклики ТАЄМНІ до дати початку змагання. Команди не побачать їх до того часу!", + challengeTitlePlaceholder: "Назва виклику, напр., 'Kickflip зі сходів на 10'", + citiesLabel: "Міста", + citiesOnTour: "Міста на Tour", + cityPlaceholder: "напр., Berlin, Germany", + cityRegion: "Місто / Регіон", + cityRequired: "Потрібне місто/регіон", + cityRequiredDesc: "Будь ласка, введіть ваше місто або регіон.", + clipAnyUrl: "🔗 Будь-який URL", + clipBlossom: "📦 Завантаження Blossom", + clipInstagram: "📸 Instagram", + clipYouTube: "▶️ YouTube", + competitionDates: "Дати змагання", + competitionDatesWarning: "⚠️ Усі виклики ТАЄМНІ до дати початку! Команди не побачать виклики, доки не почнеться змагання.", + competitionLocations: "Місця змагання", + competitionLocationsDesc: "Де змагатимуться команди? Додайте всі задіяні міста й країни.", + coordsHint: "Координати необов'язкові. Додайте їх, щоб позначити місце зустрічі на карті.", + countriesLabel: "Країни", + countriesRequired: "Потрібні країни", + countriesRequiredDesc: "Будь ласка, додайте принаймні одну країну для вашого міжнародного Tour.", + createdDestruction: "💀 WORLD DESTRUCTION TOUR СТВОРЕНО!", + createdDestructionDesc: "Команди можуть реєструватися. Виклики розкриються в дату початку!", + createDestructionTour: "Створити World Destruction Tour", + createdInternational: "✈️ Міжнародний Tour створено!", + createdInternationalDesc: "Вашу глобальну пригоду розміщено! Зв'яжіться зі скейтерами по всьому світу.", + createdLocal: "🏠 Локальний Tour створено!", + createdLocalDesc: "Ваш Tour тепер видно. Скейтери можуть забронювати через DM!", + createdNational: "🚐 Національний Tour створено!", + createdNationalDesc: "Ваша road trip активна! Почніть координуватися із зацікавленими скейтерами.", + departure: "Від'їзд *", + departureRequired: "Потрібна дата від'їзду", + departureRequiredDesc: "Вкажіть, коли вирушає подорож, щоб скейтери могли спланувати й забронювати.", + descriptionPlaceholder: "Опишіть, що відчують скейтери: Spot-и, які ви відвідаєте, атмосферу, чим ваш Tour особливий...", + destructionDesc: "Налаштуйте своє глобальне змагання в стилі KOTR — ви визначаєте ВСЕ!", + discountHint: "Учасники Tour можуть показати підтвердження бронювання в Shop, щоб отримати цю знижку", + discountPercentage: "Відсоток знижки", + dropTour: "Опублікувати Tour", + duration: "Тривалість", + durationHintDestruction: "Скільки триває змагання? (1-12 місяців)", + durationHintInternational: "Скільки тижнів триває пригода? (до 2 місяців)", + durationHintLocal: "Скільки зазвичай триває ваш Tour?", + durationHintNational: "Скільки днів триває road trip?", + durationWeeksMonths: "{{weeks}} тижнів (~{{months}} місяців)", + editTour: "Редагувати Tour", + enable: "Увімкнути", + enabled: "Увімкнено", + endBeforeStart: "Кінець раніше початку", + endBeforeStartDesc: "Дата завершення змагання має бути того ж дня або після дати початку.", + endDate: "Дата завершення", + entryFeeHint: "Ви залишаєте 95% • Платформа бере 5% • Залиште порожнім для безкоштовного входу", + entryFeePerTeam: "Вхідний внесок за команду (sats)", + entryFeePlaceholder: "напр., 100000", + entryPrizes: "Вхід і призи", + filmPremieres: "Прем'єри командних фільмів", + filmPremieresDesc: "Після змагання клипи кожної команди стають повним фільмом, який може прем'єритися в Shop по всьому світу.", + filmPremieresInfo: "🎥 Команди збирають свої клипи викликів у фінальний фільм. Shop-и можуть проводити прем'єри, з'єднуючи глобальне змагання з локальними спільнотами.", + filmReleaseDate: "Дата виходу фільму (необов'язково)", + filmReleaseDateHint: "Коли фільми будуть доступні. Залиште порожнім, щоб випустити одразу після завершення змагання.", + fixedSession: "Фіксована сесія", + fixedSessionDesc: "Встановлені дата й час", + flexible: "Гнучко", + flexibleDesc: "Бронюйте будь-коли через DM", + hide: "Сховати", + howDestruction1: "• Глобальне командне змагання — до 12 місяців", + howDestruction2: "• ВИ визначаєте виклики, бали, призи — ми лише надаємо платформу", + howDestruction3: "• Усі виклики ТАЄМНІ до дати початку змагання", + howDestruction4: "• Клипи через завантаження Blossom АБО зовнішні посилання (YouTube, Instagram, будь-який URL)", + howDestruction5: "• Лише просунутий рівень — усі типи Spot-ів включено автоматично", + howDestruction6: "• Платформа бере лише 5% вхідних внесків (НЕ призового фонду)", + howDestructionTitle: "💀 WORLD DESTRUCTION TOUR — у стилі KOTR", + howInternational1: "• Пригоди через кордони в кількох країнах", + howInternational2: "• Ви встановлюєте ціну — платформа бере лише 5%", + howInternational3: "• Вкажіть дати від'їзду й повернення, щоб Crew міг забронювати квитки", + howInternational4: "• З'єднуйте скейтерів з усього світу", + howInternational5: "• Створюйте незабутні глобальні враження!", + howInternationalTitle: "Як працюють міжнародні Tour-и", + howItWorks: "Як це працює:", + howLocal1: "• Ви встановлюєте ціну — платформа бере 10%", + howLocal2: "• Приховані Spot-и залишаються прихованими — ви показуєте їх особисто", + howLocal3: "• Проводьте заплановану сесію або залишайте гнучко / за домовленістю", + howLocal4: "• Скейтери бронюють через DM, платять у Lightning і можуть додати це в календар", + howLocal5: "• Будуйте свою репутацію відгуками й Zap", + howLocalTitle: "Як працюють локальні Tour-и", + howNational1: "• Road trip-и кількома містами вашої країни", + howNational2: "• Ви встановлюєте ціну — платформа бере лише 7%", + howNational3: "• Вкажіть дати подорожі, щоб скейтери могли взяти відгул і спланувати", + howNational4: "• Додайте інформацію про транспорт / проживання для Crew", + howNational5: "• Створюйте легендарні скейт-пригоди!", + howNationalTitle: "Як працюють національні Tour-и", + imageUploadedDesc: "Зображення вашого Tour завантажено.", + incompleteCoords: "Неповні координати", + incompleteCoordsDesc: "Будь ласка, введіть і широту, і довготу, або залиште обидва поля порожніми.", + internationalDetails: "Деталі міжнародної пригоди", + languagesSelected: "вибрано {{count}}", + languagesSpoken: "Мови спілкування", + latOptional: "Широта (необов'язково)", + lngOptional: "Довгота (необов'язково)", + loadingProfile: "Завантаження профілю...", + loadingProfileDesc: "Перевірка статусу верифікації NIP-05.", + loadingShops: "Завантаження Shop-ів...", + localShopPremieres: "Прем'єри в локальних Shop", + localShopPremieresDesc: "Shop-и по всьому світу можуть проводити кіновечори", + loginToCreate: "Потрібно увійти, щоб створити Tour.", + maxGroupSize: "Макс. розмір групи", + maxTeams: "Макс. команд", + maxTeamSize: "Макс. розмір команди", + meetingLocationSet: "Вашу поточну локацію встановлено як місце зустрічі.", + meetingPointDesc: "Де ви зустрінете учасників Tour? Виберіть публічне, відоме місце.", + meetingPointLabel: "Місце зустрічі", + meetingPointPlaceholder: "напр., Warschauer Straße Station", + meetingPointRequired: "Потрібне місце зустрічі", + meetingPointRequiredDesc: "Будь ласка, вкажіть, де ви зустрінете учасників Tour.", + minTeamSize: "Мін. розмір команди", + noChallenges: "Ще немає викликів", + noChallengesDesc: "Додайте виклики, які команди мають виконати", + noPartnerShop: "Немає Shop-партнера", + noShopsFound: "У мережі ще не знайдено Shop-ів.", + noShopsRegistered: "Ще не зареєстровано Shop-ів", + onlineRelease: "Онлайн-реліз", + onlineReleaseDesc: "Також випускати фільми на YouTube/Nostr", + organizerContact: "Контактні дані організатора", + organizerContactHint: "Це буде видно зареєстрованим командам", + organizerContactPlaceholder: "Як команди можуть зв'язатися з вами? напр., Nostr npub, email, Telegram тощо.", + partnerDiscountDesc: "Запропонуйте учасникам Tour знижку в локальному Shop", + partnerStep1: "1. Об'єднайтеся з локальним Shop, якому довіряєте", + partnerStep2: "2. Встановіть відсоток знижки для учасників Tour", + partnerStep3: "3. Після Tour дайте учасникам підтвердження, щоб показати в Shop", + partnerStep4: "4. Shop надає знижку — це зміцнює спільноту й приводить відвідувачів!", + percentOff: "Знижка {{percent}}%", + photoHint: "Додайте фото, як ви катаєтеся, або крутий Spot із вашого Tour.", + pickRide: "Виберіть свій транспорт", + place1: "🥇 1-ше", + place2: "🥈 2-ге", + place3: "🥉 3-тє", + platformFee: "Ви встановлюєте ціну • Платформа бере {{percent}}", + points: "Бали:", + pricePerPerson: "Ціна за особу (sats)", + pricePlaceholder: "напр., 25000", + prizeDistribution: "Розподіл призів", + prizePoolHint: "Необов'язково — загальний призовий фонд", + prizePoolPlaceholder: "напр., 2000000", + proTipDesc: "Перш ніж пропонувати знижку партнера, зв'яжіться з власником Shop через DM, щоб узгодити відсоток знижки. Це гарантує, що вони згодні й нададуть знижку вашим учасникам.", + proTipTitle: "💡 Порада: спершу узгодьте з Shop!", + return: "Повернення", + returnBeforeDeparture: "Повернення раніше від'їзду", + returnBeforeDepartureDesc: "Дата повернення має бути того ж дня або після дати від'їзду.", + roadTripDetails: "Деталі road trip", + schedule: "Розклад", + scheduleDesc: "Проводьте як разову заплановану сесію або залишайте гнучко, щоб скейтери бронювали час через DM.", + secretUntilStart: "Таємно до початку", + selectPartnerShop: "Вибрати Shop-партнера", + sessionDateRequired: "Потрібна дата сесії", + sessionDateRequiredDesc: "Виберіть дату й час для запланованої сесії або перемкніться на гнучкий розклад.", + sessionDateTime: "Дата й час сесії", + sessionDateTimeHint: "Скейтери побачать цей час і зможуть додати його в календар зі сторінки Tour.", + shopPremieresContact: "Зв'яжіться з цими Shop напряму, щоб організувати вечори прем'єр. Усі домовленості приватні.", + shopPremieresHow: "💡 Як працюють прем'єри в Shop: зв'яжіться з Shop напряму, щоб організувати вечори прем'єр. Усі домовленості приватні між вами та Shop.", + shopsCanRegister: "Shop-и можуть зареєструватися на /create-shop", + show: "Показати", + showAllLanguages: "Показати всі {{count}} мов", + somethingWrong: "Щось пішло не так.", + spotTypes: "Типи Spot-ів", + spotTypesRequired: "Потрібні типи Spot-ів", + spotTypesRequiredDesc: "Будь ласка, виберіть принаймні один тип Spot, який ви покажете.", + startDate: "Дата початку", + startDateRequired: "Потрібна дата початку", + startDateRequiredDesc: "Будь ласка, вкажіть, коли починається змагання (виклики розкриються цієї дати).", + startingCity: "Початкове місто", + startingCityPlaceholder: "напр., Los Angeles, USA", + teamSettings: "Налаштування команд", + teamsCount: "команд: {{count}}", + titlePlaceholder: "напр., Berlin Kreuzberg — Tour підпільними Spot-ами", + titleRequired: "Потрібна назва Tour", + titleRequiredDesc: "Будь ласка, введіть назву вашого Tour.", + totalPercent: "Разом: {{percent}}%", + totalPrizePool: "Загальний призовий фонд (sats)", + tourDesc: "Розкажіть скейтерам, чого очікувати на вашому Tour", + tourDetails: "Деталі Tour", + tourPhoto: "Фото Tour", + tourTitle: "Назва Tour", + transportDestructionPlaceholder: "Як команди переміщатимуться між локаціями? Чи надається/рекомендується транспорт?", + transportInfo: "Інформація про транспорт", + transportPlaceholder: "Як подорожуватимуть учасники? напр., 'Надається фургон', 'Летіть у Barcelona, ми орендуємо фургон', 'Потяг між містами'", + tripDatesDesc: "Зафіксуйте дати, щоб скейтери могли взяти відгул, забронювати квитки й спланувати подорож.", + tripDatesTitle: "Дати подорожі", + updated: "Tour оновлено!", + updatedDesc: "Ваші зміни опубліковано.", + upload: "Завантажити", + view: "Переглянути →", + worldDestruction: "World Destruction Tour", + youReceive: "Ви отримуєте: {{amount}} sats за особу", + }, + editEvent: { + accessDenied: "Доступ заборонено", + accessDeniedDesc: "Ви можете редагувати лише створені вами Event.", + backToEvent: "Назад до Event", + detailsDesc: "Оновіть інформацію про цей Event. Усі поля з * обов'язкові.", + eventCover: "Обкладинка Event", + locationUpdated: "Локацію оновлено.", + loginToEdit: "Потрібно увійти, щоб редагувати цей Event.", + newSpot: "Новий Spot: {{location}}.", + newTime: "Новий час: {{date}} о {{time}}.", + saveChanges: "Зберегти зміни", + saving: "Збереження...", + title: "Редагувати Event", + updated: "Event оновлено!", + updatedDesc: "Ваші зміни опубліковано в мережі.", + updateDetails: "Оновіть деталі для {{title}}", + updatedNotified: "Зміни опубліковано — повідомлено відвідувачів: {{count}}.", + updateFailed: "Не вдалося оновити", + updateMessage: "{{parts}} — дивіться Event для деталей.", + }, + editShop: { + accessDeniedDesc: "Ви можете редагувати лише створені вами Shop.", + backToShop: "Назад до Shop", + detailsDesc: "Оновіть інформацію про ваш Shop. Усі поля з * обов'язкові.", + loginToEdit: "Потрібно увійти, щоб редагувати цей Shop.", + updated: "Shop оновлено!", + updateDetails: "Оновіть деталі для {{name}}", + }, + editTour: { + accessDeniedDesc: "Ви можете редагувати лише створені вами Tour-и.", + loginToEdit: "Потрібно увійти, щоб редагувати цей Tour.", + }, + eventCard: { + report: "Скарга", + }, + eventDetail: { + aCrew: "Crew", + addToCalendar: "Додати в календар", + backToEvents: "Назад до подій", + cancelled: "Цей Event скасовано", + checkUpdate: "— перегляньте оновлення", + copyFailed: "Не вдалося скопіювати", + date: "Дата", + editEvent: "Редагувати Event", + eventFallback: "Event", + eventOrganizer: "Організатор Event", + getDirections: "Прокласти маршрут", + linkCopied: "Посилання скопійовано", + linkCopiedDesc: "Посилання на Event скопійовано в буфер обміну — вставте його будь-де.", + live: "Наживо:", + liveMusic: "жива музика", + location: "Локація", + newLocation: "Нова локація", + noRsvps: "RSVP не зафіксовано.", + organizer: "Організатор", + rsvpsClosed: "RSVP закрито — цей Event скасовано організатором.", + seeMap: "Показати карту", + shareEvent: "Поділитися Event", + shareText: "{{title}} — скейт-Event на SkateSpots", + shareTextFallback: "Подивіться цей скейт-Event на SkateSpots", + time: "Час", + timeChanged: "Час змінено", + updatesFromHost: "Оновлення від організатора", + where: "Де", + whoCame: "Хто прийшов", + whosGoing: "Хто йде", + }, + events: { + calendar: "Календар", + createTour: "Створити Tour", + events: "Події", + faqFooter: "Маєте питання? Перегляньте FAQ →", + hosting: "Проводжу", + hostingSubtitle: "Ваші Event — RSVP, оновлення й швидке редагування", + list: "Список", + noEventsMatchFilters: "Жоден Event не відповідає фільтрам. Спробуйте змінити або очистити їх.", + noPast: "Немає минулих подій", + noPastBody: "У ваших поточних фільтрах не знайдено минулих скейт-подій.", + noTours: "Турів не знайдено", + noToursBody: "Ще немає скейт-турів. Створіть перший і візьміть скейтерів у подорож до Spot-ів!", + noToursMatchFilters: "Жоден Tour не відповідає фільтрам. Спробуйте змінити або очистити їх.", + noUpcoming: "Немає майбутніх подій", + noUpcomingBody: "Майбутніх скейт-подій не знайдено. Будьте першим, хто створить одну!", + past: "Минулі", + resultsCount: "результатів: {{count}}", + searchCity: "Місто…", + searchEvent: "Назва Event…", + searchTour: "Назва Tour…", + tours: "Tour-и", + toursSubtitle: "Локальні гіди, road trip-и та змагання World Destruction", + upcoming: "Майбутні", + }, + eventTypes: { + contest: "Контест", + demo: "Демо", + jam: "Джем", + meetup: "Зустріч", + premiere: "Прем'єра", + session: "Сесія", + workshop: "Воркшоп", + }, + featured: { + active: "Активно", + bodyEvent: "Публікація безкоштовна. Featured Event отримують бейдж і розміщуються вгорі сторінки подій.", + bodyTour: "Публікація безкоштовна. Featured Tour отримують бейдж і розміщуються вгорі списку турів.", + contextEvent: "Ваш Event залишається в списку безкоштовно в будь-якому разі — Featured лише додає бейдж і підсилення.", + contextTour: "Ваш Tour залишається в списку безкоштовно в будь-якому разі — Featured лише додає бейдж і підсилення.", + daysRemaining: "Featured активний · залишилося {{count}} днів.", + headingEvent: "Просунути цей Event", + headingTour: "Просунути цей Tour", + optional: "необов'язково", + platformOwner: "Власник платформи — Featured завжди увімкнено.", + }, + filters: { + activeCount: "активних: {{count}}", + all: "Усі", + allLevels: "Усі рівні", + eventType: "Тип Event", + following: "Стежу", + newest: "Найновіші", + popular: "Популярні", + showResults: "Показати результати", + showResultsActive: "Показати результати · активних {{count}}", + skillLevel: "Рівень навичок", + sortBy: "Сортувати за", + topRated: "Найвищий рейтинг", + tourCategory: "Категорія Tour", + trusted: "Довірені", + trustLevel: "Рівень довіри", + verified: "Верифіковані", + }, + food: { + bar: "Бар", + cafe: "Кафе", + call: "Зателефонувати", + chooseSpot: "Виберіть Spot...", + directions: "Маршрут", + fastFood: "Фастфуд", + foodCourt: "Фудкорт", + locationLabel: "Локація:", + noneFound: "Закладів харчування не знайдено", + noneFoundDesc: "Ми не знайшли ресторанів чи кафе в межах 1 км від цього Spot. Спробуйте вибрати іншу локацію.", + placesFound: "Знайдено закладів у межах 1 км від {{spot}}: {{count}}", + pub: "Паб", + restaurant: "Ресторан", + selectSpot: "Виберіть Spot", + selectSpotDesc: "Виберіть Spot зі списку вище, щоб знайти ресторани, кафе та інші заклади поблизу.", + selectSpotTitle: "Виберіть Spot", + subtitle: "Знайдіть місця, де поїсти, біля ваших улюблених Spot-ів", + title: "Їжа біля Spot-ів", + unknown: "Невідомо", + website: "Вебсайт", + }, + rsvp: { + areYouGoing: "Ви йдете?", + cant: "Не можу", + cantMakeIt: "Не зможу прийти", + going: "Я йду", + goingCount: "ідуть", + goingShort: "Йду", + hostNote: "Ви проводите це — але все одно можете встановити свій статус.", + interested: "Цікавить", + interestedCount: "цікавляться", + loginToRsvp: "Увійдіть, щоб відповісти на RSVP.", + maybe: "Можливо", + toastError: "Не вдалося відповісти на RSVP", + toastGoing: "Ви йдете! 🛹", + toastInterested: "Позначено як цікавить.", + toastNotGoing: "Позначено як «не йду».", + tryAgain: "Будь ласка, спробуйте ще раз.", + }, + shop: { + addNip05Settings: "Додайте NIP-05 у налаштуваннях", + adminRemovedReason: "Адміністратор SkateSpots видалив Shop \"{{name}}\"", + areYouOwner: "Ви власник Shop?", + backToMap: "Назад до карти", + claimDesc: "Якщо ви володієте або керуєте цим Shop, ви можете заявити права, щоб підтвердити власність через NIP-05.", + claimNip05Intro: "Щоб заявити права на цей Shop, додайте ідентифікатор NIP-05, що відповідає домену вебсайту Shop. Наприклад, якщо вебсайт Shop —", + claimNip05Your: "ваш NIP-05 має бути", + contactShop: "Зв'язатися з Shop", + deleted: "Shop видалено", + deletedDesc: "Запит на видалення надіслано релеям. Більшість релеїв видалить цей вміст.", + deleteDialogDesc: "Це назавжди видалить \"{{name}}\" з усіх релеїв. Цю дію не можна скасувати.", + deleteDialogTitle: "Видалити Shop?", + deletedReason: "Видалений Shop", + deleteFailed: "Не вдалося видалити", + deleteShop: "Видалити Shop", + linkCopied: "Посилання скопійовано!", + linkCopiedDesc: "Посилання на Shop скопійовано в буфер обміну.", + nip05Required: "⚠️ Для заявлення прав на Shop потрібна верифікація NIP-05", + opens: "Відкривається: {{domain}}", + removeAdmin: "Видалити (адмін)", + removed: "Shop видалено", + removedDesc: "Цей Shop знято, його буде приховано в усьому SkateSpots.", + removeDialogDesc: "Як адміністратор SkateSpots ви знімаєте \"{{name}}\". Його буде приховано в застосунку для всіх, а на релеї надішлють запит на видалення.", + removeDialogTitle: "Видалити цей Shop? (адмін)", + removeShop: "Видалити Shop", + tipMapper: "Віддячити мапперу", + tipMapperDesc: "Цей Shop додав учасник спільноти. Відправте йому Zap подяки!", + updateNip05: "Оновити NIP-05 для заявлення прав", + viewPhotoFull: "Переглянути фото на весь екран", + viewPhotoOf: "Переглянути фото {{index}} з {{total}}", + }, + sponsors: { + presentedBy: "Представлено", + }, + tourCard: { + active: "Активний", + completed: "Завершено", + contactForPrice: "Ціна за запитом", + durationDays: "{{count}} днів", + durationHours: "{{count}} годин", + durationMonths: "{{count}} місяців", + durationWeeks: "{{count}} тижнів", + entry: "Вхід: {{amount}} sats", + happeningNow: "Відбувається зараз", + inDays: "Через {{count}} днів", + inHours: "Через {{count}} год", + inMonths: "Через {{count}} місяців", + inWeeks: "Через {{count}} тижнів", + maxGroup: "Макс. {{count}}", + price: "{{amount}} sats", + prizePool: "{{amount}} sats", + registrationOpen: "Реєстрація відкрита", + startingSoon: "Скоро почнеться", + teamsMax: "макс. {{count}} команд", + tomorrow: "Завтра", + worldwide: "По всьому світу", + }, + tourDetail: { + about: "Про цей Tour", + availability: "Доступність", + competitionWindow: "Вікно змагання", + contactToBook: "Зв'яжіться з гідом для бронювання", + discountAt: "Знижка {{percent}}% у {{shop}}", + duration: "Тривалість", + languages: "Мови", + loginToBook: "Увійдіть для бронювання", + loginToBookDesc: "Увійдіть, щоб зв'язатися з гідом і забронювати цей Tour", + maxGroup: "Макс. група", + meetingPoint: "Місце зустрічі", + notFound: "Tour не знайдено", + notFoundDesc: "Можливо, цей Tour видалено або він не існує.", + organizer: "Організатор", + partnerDiscount: "Знижка Shop-партнера", + partnerDiscountDesc: "Забронюйте цей Tour, щоб отримати знижку в Shop-партнері. Покажіть підтвердження бронювання персоналу Shop.", + people: "осіб: {{count}}", + perPerson: "за особу", + price: "Ціна", + runsAbout: "Триває близько {{duration}}", + scheduledSession: "Запланована сесія", + shareText: "Подивіться цей локальний скейт-Tour: {{title}}", + skillLevel: "Рівень навичок", + spotTypes: "Типи Spot-ів", + tourGuide: "Tour-гід", + tourSponsors: "Спонсори Tour", + tripDates: "Дати подорожі", + viewProfile: "Переглянути профіль", + }, + updates: { + admin: "Адмін", + adminNote: "Ви публікуєте як адміністратор SkateSpots. Це буде чітко позначено як повідомлення адміністратора, а не від організатора.", + kindCancelled: "Скасовано", + kindNewSpot: "Новий Spot", + kindNewTime: "Новий час", + kindUpdate: "Оновлення", + loading: "Завантаження оновлень…", + notifiedCount: "Повідомлено осіб: {{count}}.", + notifiedEveryone: "Усі побачать це на Event.", + notifiesRsvps: "Повідомляє {{count}} RSVP", + noUpdates: "Ще немає оновлень від організатора. Відповідайте на RSVP, і вас повідомлять, якщо щось зміниться.", + placeholder: "Дощ — перенесено на неділю, 14:00. Зустріч біля заднього леджу…", + post: "Опублікувати", + postAdminUpdate: "Опублікувати оновлення адміністратора", + posted: "Оновлення опубліковано", + postError: "Не вдалося опублікувати оновлення", + postUpdate: "Опублікувати оновлення", + tryAgain: "Будь ласка, спробуйте ще раз.", + visibleToEveryone: "Видно всім на цьому Event", + }, + destination: { + bitcoin: "Bitcoin", + closeSearch: "Закрити пошук", + nothingMatches: "Нічого не відповідає «{{query}}».", + placeholder: "Пошук Spot-ів, Shop-ів, Bitcoin-продавців…", + shop: "Shop", + spot: "Spot", + typeChars: "Введіть принаймні 2 символи. Шукає скейт-Spot-и, Shop-и та Bitcoin-продавців.", + typeCharsNear: "Введіть принаймні 2 символи. Шукає скейт-Spot-и, Shop-и та Bitcoin-продавців поблизу.", + }, + dateWindow: { + any: "Будь-який", + anytime: "Будь-коли", + month: "Цього місяця", + monthShort: "Місяць", + today: "Сьогодні", + todayShort: "Сьогодні", + week: "Цього тижня", + weekend: "Вихідні", + weekendShort: "Вих.", + weekShort: "Тиждень", + }, + }, + marketUi: { + gearSwap: { + title: "Обмін Gear", + subtitle: "Купуйте й продавайте вживаний скейт-Gear з іншими скейтерами", + listGear: "Розмістити Gear", + searchPlaceholder: "Пошук Gear...", + allCategories: "Усі категорії", + forSale: "Продаж", + wtb: "WTB", + trust: "Довіра", + filterByTrust: "Фільтр за довірою", + allSellers: "Усі продавці", + verifiedOnly: "Лише верифіковані", + trustedPlus: "Довірені+", + followingOnly: "Лише ті, за ким стежу", + pickupOrShip: "Самовивіз або доставка", + localPickup: "Самовивіз", + ships: "Доставка", + sortBy: "Сортувати за", + newest: "Найновіші", + priceLowHigh: "Ціна: від низької до високої", + priceHighLow: "Ціна: від високої до низької", + trustScore: "Рейтинг довіри", + nearest: "Найближчі (локальні)", + listingFound: "знайдено оголошень: {{count}}", + listingsFound: "знайдено оголошень: {{count}}", + loadFailed: "Не вдалося завантажити оголошення", + tryLater: "Будь ласка, спробуйте пізніше.", + noneTitle: "Оголошень не знайдено", + noneFiltered: "Жоден Gear не відповідає поточним фільтрам. Спробуйте очистити їх або пошукати інше.", + noneFirst: "Будьте першим, хто розмістить свій Gear — Deck-и, Trucks, Wheels, кросівки, будь-що скейтове!", + listYourGear: "Розмістити свій Gear", + faqLink: "Маєте питання? Перегляньте FAQ →", + }, + hub: { + browse: "Огляд", + selling: "Продаю", + myTrades: "Мої угоди", + reputation: "Репутація", + loginListings: "Увійдіть, щоб керувати своїми оголошеннями.", + loginReputation: "Увійдіть, щоб побачити свою репутацію та відгуки.", + }, + marketplace: { + heroTitle: "Shop-и та Marketplace", + heroBefore: "Наш маркетплейс працює на", + heroAfter: "— децентралізований маркетплейс на Nostr. Shop-и можуть розміщувати свої товари, а ви можете купувати/продавати вживаний Gear напряму за Bitcoin.", + whatIsTitle: "Що таке Plebeian Market?", + whatIsBody: "Plebeian Market — децентралізований маркетплейс, побудований на Nostr. Купуйте й продавайте скейт-Gear напряму з іншими скейтерами за Bitcoin. Без посередників, без комісій, повна свобода.", + noFeesTitle: "Без комісій", + noFeesBody: "Жодна платформа не бере 30%. Прямі продажі між людьми.", + bitcoinTitle: "Платежі Bitcoin", + bitcoinBody: "Платіть Bitcoin. Швидко, безпечно, глобально.", + decentralizedTitle: "Децентралізовано", + decentralizedBody: "Побудовано на Nostr. Жодна компанія не контролює це.", + visit: "Відвідати Plebeian Market", + buySellTitle: "Що можна купити й продати", + catCompletes: "Готові Deck-и", + preBuilt: "Готові зібрані комплекти", + customSetups: "Кастомні збірки", + beginnerBoards: "Дошки для початківців", + catParts: "Запчастини Deck", + decks: "Deck-и", + trucks: "Trucks", + wheels: "Wheels", + bearings: "Bearings", + gripTape: "Griptape", + hardware: "Кріплення", + catApparel: "Одяг і захист", + skateShoes: "Скейт-кросівки", + clothing: "Одяг", + helmets: "Шоломи", + pads: "Захист", + backpacks: "Рюкзаки", + catAccessories: "Аксесуари", + tools: "Інструменти", + wax: "Віск", + rails: "Rail-и", + stickers: "Стікери", + videos: "Відео", + magazines: "Журнали", + howItWorks: "Як це працює", + step1Title: "Перегляньте товари", + step1Body: "Відвідайте Plebeian Market і перегляньте скейт-Gear від Shop-ів і приватних осіб з усього світу.", + step2Title: "Зв'яжіться з продавцями", + step2Body: "Пишіть продавцям напряму через Nostr. Обговорюйте ціни, ставте питання, домовляйтеся про доставку.", + step3Title: "Платіть Bitcoin", + step3Body: "Завершуйте покупку через Bitcoin Lightning для миттєвих платежів з низькою комісією.", + step4Title: "Залиште відгук", + step4Body: "Оцініть свій досвід і зміцніть репутацію продавця на Nostr. Ваші відгуки допомагають спільноті.", + needBitcoinTitle: "Потрібен Bitcoin?", + needBitcoinBefore: "Вам знадобиться Lightning-гаманець із трохи sats для покупок. Перегляньте", + onboardingGuide: "посібник із початку роботи", + needBitcoinAfter: "для рекомендацій щодо гаманця.", + ownShopTitle: "Маєте Shop?", + ownShopBody: "Розмістіть свій Shop на SkateSpots і продавайте товари на Plebeian Market. Досягайте клієнтів по всьому світу без комісій платформи.", + addShop: "Додати свій Shop", + startSelling: "Почати продавати", + }, + listingDetail: { + notFound: "Оголошення не знайдено", + notFoundBody: "Можливо, його видалено або посилання неправильне.", + backToGearSwap: "Назад до Обміну Gear", + gearSwap: "Обмін Gear", + viewPhoto: "Переглянути фото {{n}}", + photoAlt: "{{title}} — фото {{n}}", + wantToBuy: "WTB", + sold: "ПРОДАНО", + description: "Опис", + usuallyHere: "Зазвичай тут {{availability}}", + listed: "Розміщено {{date}}", + listingCountOne: "оголошень: {{count}} · {{age}} дн.", + listingCountMany: "оголошень: {{count}} · {{age}} дн.", + relistActive: "Перепублікувати як активне", + markSold: "Позначити як продане", + deleteListing: "Видалити оголошення", + makeOffer: "Зробити пропозицію", + shareListing: "Поділитися оголошенням", + unknown: "Невідомо", + linkCopied: "Посилання скопійовано", + linkCopiedBody: "Поділіться зі скейтером.", + copyFailed: "Не вдалося скопіювати посилання", + relisted: "Перепубліковано", + relistedBody: "Ваше оголошення знову активне.", + couldNotUpdate: "Не вдалося оновити", + somethingWrong: "Щось пішло не так", + }, + create: { + imageUploaded: "Зображення завантажено", + uploadFailed: "Не вдалося завантажити", + failed: "Не вдалося", + cooldownActive: "Триває затримка", + cooldownWait: "Зачекайте {{time}}, перш ніж створити ще одне оголошення", + limitReached: "Досягнуто ліміт оголошень", + limitReachedBody: "Ви досягли місячного ліміту оголошень: {{limit}}", + feeRequired: "Потрібна оплата", + feeRequiredBody: "Сплатіть антиспам-збір, щоб продовжити", + titleRequired: "Потрібна назва", + categoryRequired: "Потрібна категорія", + photoRequired: "Потрібне фото", + photoRequiredBody: "Принаймні одне фото обов'язкове під час продажу Gear", + nip05Required: "Потрібна верифікація NIP-05", + nip05RequiredBody: "Для розміщення Gear потрібна верифікована адреса Nostr", + priceRequired: "Ціна обов'язкова для оголошень із фіксованою ціною", + sizeRequired: "Потрібен розмір", + sizeRequiredBody: "Будь ласка, виберіть розмір для {{category}}", + conditionRequired: "Потрібен стан", + conditionRequiredBody: "Будь ласка, виберіть стан вашого {{category}}", + wtbPosted: "WTB опубліковано!", + wtbPostedBody: "Продавці зможуть знайти ваш запит.", + listingCreated: "Оголошення створено!", + listingCreatedBody: "Ваш Gear тепер у списку.", + publishFailed: "Не вдалося опублікувати", + loginRequired: "Потрібен вхід", + loginRequiredBody: "Потрібно увійти, щоб розмістити Gear.", + backToStash: "Назад до Stash", + backToSpot: "Назад до {{title}}", + backToMarketplace: "Назад до Marketplace", + backToMap: "Назад до карти", + wantToBuy: "WTB", + listYourGear: "Розмістити свій Gear", + wtbSubtitle: "Розкажіть спільноті, який Gear ви шукаєте", + sellSubtitle: "Продавайте скейт-Gear спільноті", + fromStashTitle: "Оголошення зі Stash", + fromStashBody: "Попередньо заповнено деталями предмета зі Stash. Перевірте й виберіть місце зустрічі!", + nip05Banner: "Щоб запобігти спаму й захистити покупців, для розміщення Gear потрібна верифікована адреса Nostr (NIP-05).", + verifiedLabel: "Верифіковано:", + checkingTrust: "Перевірка вашого рівня довіри...", + trustLevel: "Рівень довіри:", + trusted: "Довірений", + active: "Активний", + newcomer: "Новачок", + newUser: "Новий користувач", + remaining: "залишилося {{remaining}} з {{limit}} оголошень цього місяця", + cooldownBody: "Для нових користувачів діє 24-годинна затримка між оголошеннями.", + timeRemaining: "Залишилось часу: {{time}}", + monthlyLimitTitle: "Досягнуто місячний ліміт", + monthlyLimitBody: "Ви досягли ліміту {{limit}} оголошень цього місяця. Зміцніть репутацію, створюючи Spot-и або завершуючи продажі, щоб підвищити ліміт.", + powAccepted: "Proof of work прийнято!", + feePaid: "Збір сплачено!", + canCreateNow: "Тепер ви можете створити оголошення.", + whatDoTitle: "Що ви хочете зробити?", + sellGear: "ПРОДАТИ GEAR", + categoryTitle: "Категорія *", + categoryHint: "Який тип Gear?", + detailsTitle: "Деталі Gear", + detailsWtbHint: "Опишіть, що ви шукаєте", + detailsSellHint: "Розкажіть покупцям про ваш предмет", + titleLabel: "Назва *", + titlePlaceholderWtb: "Шукаю Deck 8.0\"", + titlePlaceholderSell: "Майже новий Palace Deck 8.25\"", + summaryLabel: "Короткий опис", + summaryPlaceholderWtb: "Будь-який бренд, бажано мінімум графіки", + summaryPlaceholderSell: "Відмінний стан, майже не використовувався", + descriptionLabel: "Опис", + descriptionPlaceholderWtb: "Опишіть точно, що ви шукаєте — уподобання щодо бренду, вимоги до стану тощо.", + descriptionPlaceholderSell: "Отримав цей Deck на Різдво, але хочу менший розмір. З радістю дам спробувати перед покупкою!", + fulfilmentLabel: "Як це доставляється?", + pickup: "Самовивіз", + pickupHint: "Зустріч на місці", + ships: "Доставка", + shipsHint: "Надіслати поштою", + both: "Обидва", + bothHint: "Будь-який", + addressNote: "Ми ніколи не збираємо вашу адресу — для доставки поділіться нею приватно в чаті угоди.", + postageLabel: "Хто платить за доставку?", + requireEscrow: "Вимагати escrow", + requireEscrowHint: "Попросіть покупця розрахуватися через Cashu escrow.", + postageBuyer: "Платить покупець", + postageSeller: "Плачу я", + postageSplit: "Пополам", + sizeLabel: "Розмір", + selectSize: "Виберіть розмір", + truckHeight: "Висота Trucks", + selectHeight: "Виберіть висоту", + wheelHardness: "Твердість Wheels", + selectHardness: "Виберіть твердість", + pricingTitle: "Ціноутворення", + pricingWtbHint: "Як ви хочете платити?", + pricingSellHint: "Як ви хочете продавати?", + priceLabel: "Ціна *", + currencyLabel: "Валюта", + photosTitle: "Фото", + photosSellHint: "Принаймні одне фото обов'язкове", + photosWtbHint: "Необов'язково — додайте референсні зображення", + productPhoto: "Товар {{n}}", + upload: "Завантажити", + photosNote: "Додайте до 5 фото. Перше зображення буде головним.", + pickupLocationTitle: "Місце самовивозу", + pickupLocationHint: "Пов'яжіть зі Spot для зручних зустрічей", + searchSpots: "Пошук Spot-ів...", + noSpotsFound: "Spot-ів не знайдено. Спробуйте інший пошук.", + availabilityLabel: "Коли ви зазвичай доступні?", + availabilityPlaceholder: "Вихідні 10:00-14:00, вівторок/четвер ввечері", + availabilityHint: "Допомагає покупцям узгодити з вами зустрічі", + durationTitle: "Тривалість оголошення", + durationHint: "Як довго це оголошення має залишатися активним?", + publishing: "Публікація...", + checkingEligibility: "Перевірка відповідності...", + cooldownButton: "ЗАТРИМКА: {{time}}", + limitReachedButton: "ЛІМІТ ДОСЯГНУТО", + payFeeButton: "СПЛАТИТИ ЗБІР, ЩОБ ПРОДОВЖИТИ", + postWtbButton: "ОПУБЛІКУВАТИ WTB", + listForSaleButton: "РОЗМІСТИТИ GEAR НА ПРОДАЖ", + }, + trades: { + title: "Мої угоди", + loginBody: "Увійдіть, щоб керувати своїми угодами на маркетплейсі та репутацією.", + subtitle: "Підтвердження, запити та репутація, яку вони будують. Оплата узгоджується з іншим скейтером — застосунок лише фіксує угоду.", + actionNeeded: "Потрібна дія", + askedToConfirmSale: "просить вас підтвердити продаж", + recordedSale: "зафіксував продаж — підтвердьте свій бік", + confirmSale: "Підтвердити продаж", + confirm: "Підтвердити", + nothingWaiting: "Зараз нічого не чекає на вас. 🛹", + yourRecords: "Ваші записи про угоди", + noTrades: "Ще немає угод. Закрийте угоду й підтвердьте її, щоб почати будувати репутацію.", + browseGearSwap: "Переглянути Обмін Gear", + roleSold: "Продано", + roleBought: "Куплено", + roleTrade: "Обмін", + with: "з", + viewListing: "Переглянути оголошення", + revoke: "Відкликати", + revokeTitle: "Відкликати цей запис про угоду?", + revokeBody: "Він перестане враховуватися у вашій репутації. Інша сторона збереже власне підтвердження. Використовуйте це для спірної або помилкової угоди.", + revokeNote: "Відкликано автором.", + revoked: "Запис про угоду відкликано", + revokedBody: "Він більше не враховується в репутації.", + revokeFailed: "Не вдалося відкликати угоду", + saleConfirmed: "Продаж підтверджено", + saleConfirmedBody: "Тепер вони можуть підтвердити свій бік.", + saleConfirmFailed: "Не вдалося підтвердити продаж", + tradeConfirmed: "Угоду підтверджено", + tradeConfirmedBody: "Репутацію оновлено для вас обох.", + tradeConfirmFailed: "Не вдалося підтвердити угоду", + somethingWrong: "Щось пішло не так.", + }, + card: { + listingDeleted: "Оголошення видалено", + listingRemoved: "Оголошення знято", + listingDeletedBody: "Ваше оголошення видалено. Релеї, які поважають видалення, перестануть його віддавати.", + listingRemovedBody: "Це оголошення знято, його буде приховано в усьому SkateSpots.", + removeFailed: "Не вдалося видалити", + somethingWrong: "Щось пішло не так", + markedSold: "Позначено як продане", + markedSoldBody: "Ваше оголошення тепер показано як продане.", + couldNotUpdate: "Не вдалося оновити", + relisted: "Перепубліковано", + relistedBody: "Ваше оголошення знову активне.", + listingOptions: "Параметри оголошення", + report: "Скарга", + removeAdmin: "Видалити (адмін)", + postage: "доставка", + newSeller: "Новий продавець", + saleOne: "продаж: {{count}}", + saleMany: "продажів: {{count}}", + iHaveThis: "У мене це є!", + deleteTitle: "Видалити \"{{title}}\"?", + adminRemoveTitle: "Видалити це оголошення? (адмін)", + deleteBody: "Це попросить релеї видалити ваше оголошення \"{{title}}\". Це не можна скасувати звідси — доведеться створити нове.", + adminRemoveBody: "Як адміністратор SkateSpots ви знімаєте \"{{title}}\". Його буде приховано в застосунку для всіх, а на релеї надішлють запит на видалення.", + deleting: "Видалення…", + removing: "Зняття…", + deleteListing: "Видалити оголошення", + removeListing: "Зняти оголошення", + reportCount: "скарга: {{count}}", + reports: "скарг: {{count}}", + viewTitle: "Переглянути {{title}}", + reportListing: "Поскаржитися на оголошення", + manageListing: "Керувати оголошенням", + trusted: "Довірений", + daysOld: "{{n}} дн. тому", + monthsOld: "{{n}} міс. тому", + yearsOld: "{{n}} р. тому", + listingsCount: "оголошень: {{count}}", + postageBuyer: "доставка: покупець", + postageSeller: "доставка: продавець", + postageSplit: "доставка: пополам", + powTitle: "NIP-13 proof of work — безкоштовний антиспам", + verifiedTradeOne: "верифікована угода: {{count}}", + verifiedTrades: "верифікованих угод: {{count}}", + reportSubmitted: "Скаргу надіслано", + reportSubmittedBody: "Дякуємо, що допомагаєте зберігати маркетплейс безпечним.", + reportFailed: "Не вдалося надіслати скаргу", + selectReason: "Будь ласка, виберіть причину", + reportDialogBody: "Допоможіть зберегти маркетплейс безпечним, повідомляючи про недоречні або оманливі оголошення.", + reasonLabel: "Причина скарги *", + detailsLabel: "Додаткові деталі (необов'язково)", + detailsPlaceholder: "Надайте будь-який додатковий контекст, який може допомогти...", + reportNote: "Скарги публікуються в Nostr і допомагають спільноті виявляти проблемні оголошення. Оголошення з кількома скаргами можуть бути автоматично приховані.", + submitting: "Надсилання...", + submitReport: "Надіслати скаргу", + }, + tradeActions: { + tradeConfirmed: "Угоду підтверджено", + tradeConfirmedWithProof: "Додано підтверджуваний чек — це зараховується як верифікована угода.", + tradeConfirmedBody: "Репутацію оновлено для вас обох.", + tradeConfirmFailed: "Не вдалося підтвердити угоду", + somethingWrong: "Щось пішло не так.", + requestNote: "Будь ласка, підтвердіть нашу угоду для \"{{title}}\".", + requestSent: "Підтвердження запитано", + requestSentBody: "Продавець тепер може підтвердити продаж і зміцнити обидві репутації.", + requestFailed: "Не вдалося надіслати запит", + escrowRefunded: "Escrow повернено", + escrowRefundedBody: "Кошти повернулися у ваш Cashu-гаманець.", + escrowRefundFailed: "Не вдалося повернути escrow", + confirmThisTrade: "Підтвердити цю угоду", + escrowAndRequest: "Escrow і запит", + shipsEscrowHint: "Угода з доставкою — використовуйте escrow, щоб жодна сторона не відправила в порожнечу. Діліться адресою приватно в чаті угоди, ніколи тут.", + shipsHint: "Угода з доставкою — віддавайте перевагу escrow, якщо продавець його пропонує, і діліться адресою лише в чаті.", + askSeller: "Попросіть продавця підтвердити", + waitingSeller: "Підтвердження запитано — очікуємо на продавця.", + refundEscrow: "Повернути escrow", + buyWithSats: "Купити за sats", + depositTitle: "Депозит добросовісності (необов'язково)", + payDeposit: "Сплатити депозит", + depositBefore: "У обміну немає рахунку, тож саме так він отримує", + verifiableCost: "підтверджувану вартість", + depositAfter: ". Повернення після доставки (або використайте Cashu escrow для автоматичного повернення). ⚠️ Доводить зобов'язання, а не доставку.", + depositPaid: "Депозит сплачено", + depositPaidBody: "Збережено — його буде додано після підтвердження угоди.", + paid: "Сплачено ⚡", + paidWithProof: "Збережено підтверджуваний чек — підтвердьте угоду, щоб він зарахувався.", + paidBody: "Попросіть продавця підтвердити угоду, щоб вона зарахувалася вам обом.", + }, + offers: { + accepted: "Прийнято", + declined: "Відхилено", + withdrawn: "Відкликано", + open: "Відкрито", + noAmount: "без суми", + titleOwner: "Пропозиції ({{count}})", + titleBuyer: "Ваші переговори", + you: "Ви", + them: "Вони", + paidAskConfirm: "Сплачено — попросіть продавця підтвердити угоду.", + payWithSats: "Сплатити sats", + accept: "Прийняти", + decline: "Відхилити", + counter: "Контрпропозиція", + counterPlaceholder: "Ваша контрпропозиція (sats)", + send: "Надіслати", + counterItemPlaceholder: "…або контрпропозиція предметом для обміну (необов'язково)", + waitingOn: "Очікуємо на", + waitingOnSuffix: "— ваш хід повернеться, якщо вони дадуть контрпропозицію.", + withdraw: "Відкликати", + dmAccepted: "✅ Вашу пропозицію прийнято! Напишіть, щоб узгодити передачу.", + dmDeclined: "❌ Вашу пропозицію відхилено.", + offerAccepted: "Пропозицію прийнято", + offerDeclined: "Пропозицію відхилено", + respondFailed: "Не вдалося відповісти", + somethingWrong: "Щось пішло не так.", + offerWithdrawn: "Пропозицію відкликано", + withdrawFailed: "Не вдалося відкликати", + enterAmountOrItem: "Введіть суму або предмет для обміну", + counterDm: "Контрпропозиція", + counterSent: "Контрпропозицію надіслано", + counterSentBody: "Тепер їхній хід.", + counterFailed: "Не вдалося надіслати контрпропозицію", + }, + offer: { + validAmount: "Введіть коректну суму", + describeOffer: "Опишіть свою пропозицію", + describeOfferBody: "Додайте суму, предмет для обміну або повідомлення.", + dmAmount: " за {{amount}} sats", + dmItem: " (пропоную: {{item}})", + dmBody: "🛹 Нова пропозиція щодо вашого оголошення \"{{title}}\"{{amount}}{{item}}.{{note}}", + sent: "Пропозицію надіслано", + sentBody: "{{sellerName}} може прийняти або відхилити її.", + sendFailed: "Не вдалося надіслати пропозицію", + somethingWrong: "Щось пішло не так.", + title: "Зробити пропозицію", + description: "Запропонуйте sats або обмін — {{sellerName}} може прийняти, відхилити чи дати контрпропозицію. Передачу ви узгоджуєте між собою.", + amountLabel: "Сума (sats, необов'язково)", + amountPlaceholder: "напр. 45000", + itemLabel: "Або обмін чимось (необов'язково)", + itemPlaceholder: "напр. мій Deck 8.25 + запасні Wheels", + itemHint: "Обмінюєте? Вкажіть тут, що пропонуєте — можна поєднати із sats.", + messageLabel: "Повідомлення (необов'язково)", + messagePlaceholder: "Усе, що продавець має знати…", + send: "Надіслати пропозицію", + }, + markSold: { + enterBuyer: "Введіть npub покупця", + dealClosed: "Угоду закрито 🎉", + dealClosedBody: "Оголошення позначено як продане, а угоду опубліковано для репутації.", + closeFailed: "Не вдалося закрити угоду", + somethingWrong: "Щось пішло не так.", + title: "Закрити угоду", + description: "Позначає це оголошення проданим і записує підписане підтвердження угоди для вас і покупця.", + buyerLabel: "npub покупця", + methodLabel: "Як було сплачено? (самозвіт)", + amountLabel: "Сума в sats (необов'язково)", + submit: "Позначити як продане", + }, + handoff: { + title: "Узгодьте передачу", + suggest: "Запропонувати час і місце", + suggestDm: "Привіт! Хочу купити \"{{title}}\". Запропонуйте час і місце зустрічі — із задоволенням зустрінуся на публічному Spot.", + orMeetAt: "Або зустріньмося на публічному Spot поблизу:", + spotDm: "Привіт! Хочу купити \"{{title}}\". Зустріньмося на {{spot}}? {{url}}", + shareDelivery: "Поділитися даними доставки", + deliveryDm: "Привіт! Хочу купити \"{{title}}\". Ось мої дані доставки:\n\nІм'я:\nАдреса:\n\n(Діліться лише тим, що потрібно кур'єру.)", + useLocker: "Використати поштомат / пункт видачі", + lockerDm: "Привіт! Хочу купити \"{{title}}\". Можемо скористатися поштоматом / пунктом видачі замість домашньої адреси?", + noteBefore: "Ці дані залишаються в приватному чаті — SkateSpots ніколи їх не бачить. Для угод з доставкою віддавайте перевагу", + escrow: "escrow", + noteMiddle: ", і", + neverPay: "ніколи не платіть поза межами застосунку", + noteAfter: ". Зустрічайтеся на публіці.", + }, + shipping: { + noCounterparty: "Ще немає іншої сторони", + noCounterpartyBody: "Спершу продавець має зафіксувати продаж (вказавши покупця).", + markedShipped: "Позначено як відправлено", + markedReceived: "Позначено як отримано", + issueReported: "Проблему повідомлено", + receivedBody: "Дякуємо — це не звільняє escrow; розрахуйтеся напряму з продавцем.", + notifiedBody: "Іншу сторону повідомлено.", + updateFailed: "Не вдалося оновити", + somethingWrong: "Щось пішло не так.", + title: "Доставка", + shipped: "відправлено", + received: "отримано", + issue: "проблема", + trackingPlaceholder: "Номер відстеження (необов'язково)", + iShipped: "Я відправив", + iReceived: "Я отримав", + reportIssue: "Повідомити про проблему", + noteBefore: "Самозвіт — логістична примітка,", + notProof: "не доказ", + noteAfter: ". Позначення \"отримано\" не звільняє escrow. ⚠️ Не фотографуйте посилку з видимою адресою та діліться номером відстеження лише якщо не проти його публічності.", + }, + pay: { + sent: "Платіж надіслано ⚡", + sentWithProof: "Збережено підтверджуваний чек платежу — його зарахують як підтверджену оплату.", + sentBody: "Повідомте продавця — він може підтвердити угоду, щоб вона зарахувалася вам обом.", + failed: "Платіж не вдався", + title: "Сплатити sats", + descSendPrefix: "Надіслати", + descSendSuffix: "до {{sellerName}}, щоб закрити цю угоду.", + descSettle: "Закрийте цю угоду напряму з {{sellerName}}.", + paid: "Сплачено!", + paidBody: "Попросіть продавця підтвердити угоду — два підтвердження зміцнюють обидві репутації.", + noMethod: "{{sellerName}} не встановив спосіб оплати (немає Lightning-рахунку чи адреси). Напишіть, щоб узгодити оплату.", + ownListing: "Це ваше власне оголошення.", + paying: "Оплата…", + pay: "Сплатити", + payAmount: "Сплатити {{amount}} sats", + footnote: "Сплачує з вашого підключеного гаманця (NWC, WebLN або Cashu) напряму {{sellerName}} — SkateSpots ніколи не тримає кошти.", + }, + spamFee: { + invoiceComment: "Збір SkateSpots за оголошення", + generateFailed: "Не вдалося згенерувати рахунок", + paymentSuccess: "Платіж успішний!", + satsSent: "{{amount}} sats надіслано {{name}}", + autoPayFailed: "Автооплата не вдалася", + autoPayFailedBody: "Будь ласка, сплатіть вручну через QR-код або рахунок", + invoiceCopied: "Рахунок скопійовано!", + copyFailed: "Не вдалося скопіювати", + received: "Платіж отримано!", + receivedBody: "Ваш збір у {{amount}} sat сплачено. Тепер ви можете створити оголошення.", + title: "Разовий збір за оголошення", + subtitle: "Як новому учаснику, вам потрібно сплатити невеликий збір за перше оголошення.", + whyTitle: "Чому потрібно платити?", + spamLabel: "Запобігання спаму:", + spamBody: "Цей збір зупиняє ботів і шахраїв від завалювання маркетплейсу фальшивими оголошеннями.", + trustLabel: "Побудова довіри:", + trustBody: "Нові акаунти мають довести серйозність намірів перед розміщенням. Після кількох успішних оголошень цей збір скасовується.", + supportsLabel: "Підтримує спільноту:", + supportsPrefix: "Збір іде до", + supportsSpotOwner: " — людини, яка створила цей Spot!", + supportsPlatform: " — допомагає SkateSpots працювати.", + oneTimeFee: "~${{usd}} USD • разовий збір", + payToContinue: "Сплатіть {{amount}} sats, щоб продовжити", + proveWork: "Натомість доведіть роботою — безкоштовно", + proveWorkBody: "Витратьте кілька секунд CPU замість {{amount}} sats. Без грошей, без гаманця — антиспам-податок, а не платіж.", + generating: "Генерація рахунку...", + processing: "Обробка платежу...", + qrAlt: "QR-код платежу", + copyInvoice: "Копіювати рахунок", + openWallet: "Відкрити гаманець", + payWithWallet: "Сплатити підключеним гаманцем", + scanHint: "Скануйте QR-код Lightning-гаманцем або скористайтеся кнопками вище", + skipTitle: "Як уникнути цього збору в майбутньому:", + skip1: "Додайте скейт-Spot на карту", + skip2: "Завершіть 2-3 успішні оголошення", + skip3: "Зміцніть свою репутацію в спільноті", + skipNote: "Довірені учасники отримують необмежені безкоштовні оголошення!", + }, + reputation: { + highlyTrusted: "Дуже довірений торгівець", + building: "Будує репутацію", + newTrader: "Новий торгівець", + title: "Угоди", + verified: "Верифіковано", + sales: "Продажі", + purchases: "Покупки", + tradeConfirmedOne: "взаємно підтверджена угода", + tradeConfirmedMany: "взаємно підтверджених угод", + with: "з", + personOne: "особою", + personMany: "особами", + awaiting: "Очікує взаємного підтвердження", + withPaymentProof: "з доданим доказом оплати", + selfReported: "(самозвіт — не верифіковано)", + paymentVerified: "оплату підтверджено", + zapReceipt: "(Zap-чек)", + singlePartnerWarning: "Кожне підтвердження — з тим самим акаунтом. Взаємне підтвердження є самозвітом, тож ставтеся до цього запису обережно.", + lowDiversityWarning: "Більшість підтверджень надходить від дуже малої кількості акаунтів. Мала група, що поручається одна за одну, може виглядати активною — ставтеся до цього запису обережно.", + ringWarning: "Ці акаунти здебільшого торгують між собою — замкнений кластер. Взаємне підтвердження всередині кола є слабким доказом.", + weighted: "Зважено за довірою й активністю", + footnote: "Самозвіт і взаємний підпис — це сигнал, а не доказ оплати.", + }, + reputationPanel: { + reviewOfYou: "Відгук про вас", + yourRecord: "ваш запис", + listing: "Оголошення", + averageOne: "середнє з {{count}} оцінки", + averageMany: "середнє з {{count}} оцінок", + reviewsTitle: "Відгуки та записи про угоди", + fromOthers: "{{count}} від інших", + emptyBefore: "Ще немає записів про угоди. Завершіть угоду й підтвердьте її в", + emptyAfter: "— кожне підтвердження стає відгуком в обох профілях.", + }, + recommendations: { + published: "Рекомендацію опубліковано", + publishedBody: "Дякуємо за поруку.", + failed: "Не вдалося порекомендувати", + somethingWrong: "Щось пішло не так.", + title: "Довірений торгівець", + recommendedBy: "Рекомендують", + skaterOne: "скейтер", + skaterMany: "скейтерів", + none: "Ще немає рекомендацій.", + youRecommend: "Ви рекомендуєте цього торговця ✓", + recommend: "Порекомендувати як довіреного торговця", + }, + notification: { + newOffer: "Нова пропозиція", + counterOffer: "Контрпропозиція", + offerAccepted: "Пропозицію прийнято", + offerDeclined: "Пропозицію відхилено", + offerWithdrawn: "Пропозицію відкликано", + confirmTrade: "Підтвердити угоду", + tradeConfirmed: "Угоду підтверджено", + reviewOffer: "Переглянути пропозицію", + openListing: "Відкрити оголошення", + }, + confirmRow: { + rateTrade: "Оцініть угоду:", + }, + deckRating: { + title: "{{value}}/10 Deck-ів", + aria: "{{n}} з 10", + }, + clink: { + tip: "Віддячити в Bitcoin", + copiedBody: "Код CLINK скопійовано в буфер обміну.", + copyFailed: "Не вдалося скопіювати", + copyFailedBody: "Не вдалося отримати доступ до буфера обміну.", + whatIs: "Що таке CLINK?", + tooltipTitle: "Платіть напряму Bitcoin через Nostr", + tooltipBody: "CLINK — це код самостійного зберігання коштів: без акаунта в застосунку, без посередника. Скануйте його сумісним Lightning-гаманцем, і чайові йдуть напряму отримувачу.", + descRecipient: "Надішліть Bitcoin (Lightning) платіж із самостійним зберіганням до {{recipientName}} — без посередника.", + descGeneric: "Надішліть Bitcoin (Lightning) платіж із самостійним зберіганням через Nostr — без посередника.", + qrAlt: "QR-код пропозиції CLINK", + copyCode: "Копіювати код CLINK", + openWallet: "Відкрити в гаманці CLINK", + copyToWallet: "Копіювати код для вашого гаманця", + priceFixed: "Фіксована — {{amount}} sats", + priceFixedShort: "Фіксована ціна", + priceVariable: "Змінна ціна", + priceVariableCurrency: "Ціна у {{currency}}", + priceSpontaneous: "Ви обираєте суму", + footnote: "Скануйте сумісним із CLINK гаманцем (напр. ShockWallet). Якщо нічого не відкрилося, скопіюйте код вище — можливо, у вас не встановлено сумісного гаманця. Без кастодіана, без вебсервера: рахунок запитується напряму через Nostr.", + }, + paymentReadiness: { + ready: "Ви можете отримувати оплату", + notReady: "Налаштуйте платежі, щоб отримувати оплату", + readyBefore: "Ваша Lightning-адреса", + readyAfter: " є у вашому профілі — люди можуть надсилати вам Zap і платити напряму.", + silentSet: " Також встановлено адресу Bitcoin Silent Payment.", + notReadyBefore: "Додайте Lightning-адресу (і, за бажанням, адресу Bitcoin Silent Payment) до свого", + nostrProfile: "профілю Nostr", + notReadyAfter: "щоб скейтери могли платити вам. Налаштовується один раз і працює в усіх ваших профілях тут.", + }, + seller: { + trade: "Обмін", + active: "Активне", + markSold: "Позначити проданим", + yourListings: "Ваші оголошення", + activeCount: "активних: {{count}}", + listItem: "Розмістити предмет", + loading: "Завантаження ваших оголошень…", + empty: "У вас ще немає оголошень.", + listFirst: "Розмістіть свій перший предмет", + }, + noffer: { + label: "Код пропозиції CLINK", + optional: "(необов'язково, для досвідчених)", + offerId: "Пропозиція: {{id}}", + relay: "Relay: {{relay}}", + invalidBefore: "Це не схоже на коректний", + invalidAfter: "код.", + valid: "Коректний код CLINK — кнопка \"Сплатити через CLINK\" з'явиться у вашому профілі.", + help: "Вставте код платежу CLINK із самостійним зберіганням (напр. з ShockWallet / Lightning.Pub), щоб приймати нативні для Nostr Lightning-платежі — без вебсервера чи кастодіана.", + learnSpecs: "Дізнатися про специфікацію", + }, + escrowPanel: { + escrowed: "В escrow: {{amount}} sats", + mint: "Mint", + refundSinceBefore: "Покупець може повернути з", + redeemBefore: "Продавець може погасити зараз · покупець повертає після", + noExpiry: "Термін дії цього токена не встановлено.", + }, + escrowRequest: { + enterAmount: "Введіть суму escrow", + minLock: "Блокування щонайменше на {{days}} день", + requestNote: "В escrow: {{amount}} sats за нашу угоду — будь ласка, підтвердіть продаж.", + created: "Escrow створено 🎉", + createdBody: "{{amount}} sats заблоковано на {{days}} днів. {{sellerName}} може погасити після доставки.", + createFailed: "Не вдалося створити escrow", + somethingWrong: "Щось пішло не так.", + title: "Взяти цю угоду в escrow", + description: "Кошти заблоковано для {{sellerName}} і повертаються вам, якщо угода зірветься після дедлайну. Потрібен підключений Lightning-гаманець.", + amountLabel: "Сума (sats)", + daysLabel: "Повернення покупцю через (днів)", + daysHint: "Після цієї кількості днів ви можете забрати кошти, якщо продавець не доставив.", + nativeOnly: "Cashu escrow доступний лише в застосунку SkateSpots (не у вебверсії).", + lockAndRequest: "Заблокувати й запит", + }, + }, + labOptions: { + coach: { + skill: { + basics: "Основи", + ollies: "Ollies", + kickflips: "Kickflips", + grinds: "Grinds і Slides", + manuals: "Manuals", + inverts: "Inverts", + vert: "Vert/рамп", + bowl: "Чаша", + street: "Стріт", + freestyle: "Фрістайл", + safety: "Безпека", + diy: "DIY-модулі", + }, + skillDesc: { + basics: "Відштовхування, стійка, баланс, повороти", + ollies: "Ollie та варіації (nollie, fakie)", + kickflips: "Kickflip, heelflip та варіації", + grinds: "50-50, 5-0, boardslide та інші", + manuals: "Manual, nose manual, комбо", + inverts: "Invert, handplant, eggplant, andrecht", + vert: "Half-pipe, quarter-pipe, drop-in", + bowl: "Катання в чаші, пампінг, лінії", + street: "Вуличні перешкоди й креативність", + freestyle: "Трюки на площині та флоу", + safety: "Як падати, захисне спорядження, профілактика травм", + diy: "Будівництво рамп, rail-ів, леджів та інших скейт-перешкод", + }, + }, + filmer: { + service: { + miniclips: "Міні-клипи", + longparts: "Довгі відеопарти", + koth: "У стилі King of the Road", + documentaries: "Документальні фільми", + contests: "Зйомка контестів", + raw: "Сирий матеріал", + followlines: "Зйомка follow / ліній", + lines: "Зйомка ліній і B-roll", + }, + serviceDesc: { + miniclips: "Клипи на 15-60 секунд для соцмереж", + longparts: "Повні відеопарти 3-10 хвилин з музикою", + koth: "Скейт-відео у стилі пригод/викликів", + documentaries: "Контент про скейт-культуру та історії", + contests: "Професійне висвітлення контестів і змагань", + raw: "Необроблений матеріал з кількох ракурсів", + followlines: "Follow-cam з fisheye для ліній", + lines: "Довгофокусні лінії та кінематографічний B-roll", + }, + skill: { + vx1000: "VX1000", + hvx: "HVX / HPX", + cinema: "Кінокамера", + dslr: "DSLR / беззеркальна", + actioncam: "GoPro / екшн-камера", + phone: "Зйомка на телефон", + drone: "Дрон / аерозйомка", + gimbal: "Гімбал / стабілізатор", + fisheye: "Fisheye-об'єктив", + longlens: "Довгофокусний об'єктив", + "4k": "4K / висока частота кадрів", + editing: "Монтаж відео", + color: "Кольорокорекція", + }, + skillDesc: { + vx1000: "Класична естетика скейт-відео VX1000", + hvx: "Вигляд SD/HD камер Panasonic HVX/HPX", + cinema: "Кінокамера (FX3, C-series, RED, BMPCC)", + dslr: "Якісна DSLR або беззеркальна камера", + actioncam: "GoPro / екшн-камера POV та кріплення", + phone: "Мобільна зйомка сучасними смартфонами", + drone: "Аеро- та дрон-зйомка", + gimbal: "Стабілізований рух гімбала", + fisheye: "Кадри ширококутним fisheye-об'єктивом", + longlens: "Довгофокусний об'єктив для детальних кадрів", + "4k": "Роздільність 4K та slow-mo з високою частотою кадрів", + editing: "Професійний монтаж і постпродакшн", + color: "Кольорокорекція та грейдинг", + }, + }, + editor: { + service: { + parts: "Відеопарти", + montages: "Монтажі", + reels: "Reels / короткі клипи", + documentaries: "Документальні фільми", + contest: "Монтаж контестів", + brand: "Брендові / промо-відео", + motion: "Motion-графіка", + colorgrade: "Лише кольорокорекція", + }, + serviceDesc: { + parts: "Повні скейт-відеопарти із саундтреком", + montages: "Компіляційні монтажі із сирого матеріалу", + reels: "Клипи та reels на 15–60 секунд для соцмереж", + documentaries: "Сюжетні фільми про скейт-культуру", + contest: "Рекап-монтажі для контестів і подій", + brand: "Промо-контент для брендів і Shop-ів", + motion: "Титри, переходи, ефекти й графіка", + colorgrade: "Кольорокорекція та грейдинг на основі LUT", + }, + skill: { + premiere: "Adobe Premiere", + resolve: "DaVinci Resolve", + finalcut: "Final Cut Pro", + aftereffects: "After Effects", + luts: "Власні LUT", + vhs: "VHS / ретро-естетика", + "4k": "Робочі процеси 4K і RAW", + sound: "Звуковий дизайн / зведення", + }, + skillDesc: { + premiere: "Монтаж в Adobe Premiere Pro", + resolve: "Монтаж і грейдинг у DaVinci Resolve", + finalcut: "Монтаж у Final Cut Pro", + aftereffects: "Motion-графіка та компонування", + luts: "Розробка власного кольорового вигляду", + vhs: "VHS-глітч, super-8, ретро-кіновигляд", + "4k": "Робочі процеси з RAW/LOG камерами високої роздільності", + sound: "Синхронізація музики, SFX, мастеринг звуку", + }, + }, + photo: { + service: { + action: "Екшн / трюкові кадри", + sequence: "Секвенційні кадри", + portraits: "Портрети", + editorial: "Редакційна / журнальна зйомка", + product: "Предметна / Shop-зйомка", + events: "Висвітлення подій", + lifestyle: "Лайфстайл / документальна", + prints: "Друки та зіни", + }, + serviceDesc: { + action: "Пікові екшн-кадри трюків і ліній", + sequence: "Багатокадрові секвенції трюків", + portraits: "Портрети райдерів і командні кадри", + editorial: "Редакційні розвороти, готові для журналу", + product: "Зйомка Deck-ів, Gear та товарів Shop", + events: "Висвітлення контестів, джемів і прем'єр", + lifestyle: "Закадрова й культурна документалістика", + prints: "Фізичні друки, зіни та фотокниги", + }, + camera: { + dslr: "DSLR", + mirrorless: "Беззеркальна", + medium: "Середній формат", + film35: "Плівка 35 мм", + filmmedium: "Плівка середнього формату", + point: "Мильниця", + phone: "Телефон", + }, + lens: { + fisheye: "Fisheye", + wide: "Ширококутний", + standard: "Стандартний / фікс", + telephoto: "Телефото / довгофокусний", + macro: "Макро", + zoom: "Зум", + }, + lighting: { + strobes: "Студійні моноблоки", + speedlights: "Спалахи / накамерні", + profoto: "Profoto", + elinchrom: "Elinchrom", + godox: "Godox", + triggers: "Дистанційні синхронізатори", + continuous: "Постійне / LED", + reflectors: "Відбивачі / розсіювачі", + naturallight: "Лише природне світло", + }, + support: { + tripod: "Штатив", + monopod: "Монопод", + lightstands: "Стійки для світла", + gimbal: "Гімбал", + bag: "Мобільний сетап / сумка", + laptop: "Тетеринг на місці", + }, + style: { + flashfisheye: "Спалах fisheye", + natural: "Природне світло", + bw: "Чорно-біле", + film: "Плівкова естетика", + longlens: "Довгофокусний", + studio: "Студійне / зі світлом", + street: "Стріт / документальне", + }, + }, + builder: { + service: { + diy: "DIY-Spot-и", + concrete: "Бетонні парки", + wood: "Дерев'яні рампи", + bowls: "Чаші й басейни", + transitions: "Переходи й quarter", + rails: "Rail-и та леджі", + boxes: "Manny-пади й бокси", + minis: "Міні-рампи", + pumptrack: "Памп-треки", + foam: "Поролонові ями / приміщення", + repairs: "Ремонт і перезаливка", + design: "Дизайн і консультування", + }, + serviceDesc: { + diy: "Спільнотні DIY-Spot-и та саморобні споруди", + concrete: "Заливні бетонні скейтпарки та елементи", + wood: "Дерев'яні рампи, launch box-и й перешкоди", + bowls: "Чаші, басейни й глибокі переходи", + transitions: "Quarterpipe, банки й переходи", + rails: "Сталеві rail-и, леджі та грайнд-елементи", + boxes: "Manny-пади, фанбокси та вуличні елементи", + minis: "Міні-рампи та дворикові сетапи", + pumptrack: "Памп-треки та флоу-лінії", + foam: "Поролонові ями, resi та тренажерні елементи в приміщенні", + repairs: "Виправлення, латання й перезаливка наявних Spot-ів", + design: "Плани, креслення та консультування з будівництва", + }, + skill: { + concretework: "Бетон / торкрет", + welding: "Зварювання / метал", + carpentry: "Столярство / дерево", + formwork: "Опалубка й арматура", + masonry: "Мурування / блоки", + coping: "Копінг (басейн / сталь)", + surfacing: "Skatelite / покриття", + earthworks: "Земляні роботи / екскавація", + }, + scale: { + backyard: "Двір / міні", + diycommunity: "Спільнотний DIY", + publicpark: "Повний публічний парк", + indoor: "Приміщення", + event: "Траса для події / контесту", + }, + }, + artist: { + service: { + boardart: "Графіка для Deck-ів", + logos: "Логотипи й брендинг", + posters: "Постери й флаєри", + merch: "Мерч і одяг", + zines: "Зіни й друк", + illustration: "Ілюстрація", + stickers: "Стікери й наліпки", + webdesign: "Веб / диджитал", + typography: "Типографіка / летеринг", + animation: "Анімація / motion", + }, + serviceDesc: { + boardart: "Графіка на Deck-ах і мистецтво на Griptape", + logos: "Айдентика бренду, логотипи й логоформи", + posters: "Постери для подій, флаєри та афіші", + merch: "Графіка для футболок, худі та одягу", + zines: "Зіни, редакційна верстка й друк", + illustration: "Власні ілюстрації та робота з персонажами", + stickers: "Набори стікерів, наліпок і слапів", + webdesign: "Вебсайти, диджитал і UI", + typography: "Ручний летеринг і власні шрифти", + animation: "Motion-графіка та анімація", + }, + medium: { + digital: "Диджитал / вектор", + handdrawn: "Від руки", + screenprint: "Шовкодрук", + paint: "Фарба / акрил", + collage: "Колаж / мішана техніка", + photo: "Фото / Photoshop", + "3d": "3D / рендер", + }, + tool: { + illustrator: "Adobe Illustrator", + photoshop: "Adobe Photoshop", + procreate: "Procreate", + affinity: "Affinity", + figma: "Figma", + blender: "Blender", + aftereffects: "After Effects", + clipstudio: "Clip Studio", + }, + }, + graffiti: { + style: { + throwups: "Throw-up", + pieces: "Pieces / burners", + murals: "Мурали", + characters: "Персонажі", + lettering: "Летеринг / wildstyle", + stencil: "Трафарет", + handstyles: "Handstyle / теги", + "3dstyle": "3D-стиль", + abstract: "Абстракція", + }, + styleDesc: { + throwups: "Швидкі двохколірні заливки", + pieces: "Повноколірні pieces і burners", + murals: "Масштабні мурали та продакшни", + characters: "Робота з персонажами й фігурами", + lettering: "Wildstyle та структура літер", + stencil: "Трафарет і стріт-арт", + handstyles: "Теги й handstyle", + "3dstyle": "3D та анаморфний летеринг", + abstract: "Абстракція й фрістайл", + }, + medium: { + spray: "Аерозолі", + rollers: "Валики / емульсія", + markers: "Маркери / чорнило", + brush: "Пензель / фарба", + digital: "Диджитал / Procreate", + }, + context: { + legalwalls: "Легальні стіни", + commissions: "Замовлення", + liveart: "Живопис наживо", + skateparks: "Мурали в скейтпарках", + interiors: "Інтер'єри / Shop-и", + workshops: "Воркшопи", + }, + }, + tattoo: { + style: { + traditional: "Традиційний / old school", + neotraditional: "Неотрадиційний", + fineline: "Fine line", + blackwork: "Blackwork", + realism: "Реалізм", + lettering: "Летеринг / скрипт", + illustrative: "Ілюстративний", + skateflash: "Скейт-flash", + ignorant: "Ignorant / handpoke", + japanese: "Японський / irezumi", + }, + styleDesc: { + traditional: "Жирні лінії, класична американська", + neotraditional: "Традиційний з сучасними деталями", + fineline: "Делікатна робота однією голкою", + blackwork: "Суцільний чорний і візерунки", + realism: "Фотореалізм і портрети", + lettering: "Скрипт, летеринг і цитати", + illustrative: "Ілюстративний і графічний", + skateflash: "Flash-дизайни скейт-культури", + ignorant: "Ignorant / наївний handpoke", + japanese: "Японський традиційний / irezumi", + }, + method: { + machine: "Машинка", + handpoke: "Hand-poke / stick & poke", + flash: "Є flash", + custom: "Власні дизайни", + coverup: "Перекриття", + }, + }, + trainer: { + focus: { + strength: "Сила й кондиція", + mobility: "Рухливість і гнучкість", + injuryprevention: "Профілактика травм", + rehab: "Реабілітація / фізіо", + recovery: "Відновлення й робота з тілом", + balance: "Баланс і стабільність", + cardio: "Кардіо / витривалість", + nutrition: "Харчові рекомендації", + }, + focusDesc: { + strength: "Розвиток сили й потужності для катання", + mobility: "Амплітуда рухів і гнучкість", + injuryprevention: "Преабілітація та зниження ризику травм", + rehab: "Фізіотерапія та реабілітація після травм", + recovery: "Масаж, робота з тілом і відновлення", + balance: "Пропріоцепція, баланс і стабільність", + cardio: "Функціональна підготовка й витривалість", + nutrition: "Харчування та поради щодо енергії", + }, + injury: { + ankles: "Гомілкостопи", + knees: "Коліна", + wrists: "Зап'ястки", + hips: "Стегна", + back: "Спина / хребет", + shoulders: "Плечі", + heelbruise: "Забиття п'яти", + concussion: "Протокол струсу мозку", + }, + credential: { + physio: "Ліцензований фізіотерапевт", + osteo: "Остеопат", + certtrainer: "Сертифікований тренер", + sportstherapist: "Спортивний терапевт", + massage: "Масажист", + inperson: "Особисто", + remote: "Дистанційно / онлайн", + }, + }, + musician: { + genre: { + punk: "Панк", + hardcore: "Хардкор", + metal: "Метал", + rock: "Рок", + indie: "Інді / альт", + hiphop: "Хіп-хоп / реп", + electronic: "Електронна", + lofi: "Lo-Fi / біти", + reggae: "Реггі / даб", + ska: "Ска", + jazz: "Джаз", + funk: "Фанк / соул", + flamenco: "Фламенко", + folk: "Фолк / акустика", + experimental: "Експериментальна", + grunge: "Гранж", + }, + instrument: { + vocals: "Вокал", + guitar: "Гітара", + bass: "Бас", + drums: "Барабани", + keys: "Клавіші / синтезатор", + dj: "DJ / вертушки", + producer: "Продюсер / біти", + sax: "Сакс / духовий", + strings: "Струнні", + other: "Інше", + }, + act: { + solo: "Соло-артист", + band: "Гурт", + dj: "DJ", + producer: "Продюсер", + collective: "Колектив", + }, + }, + judge: { + format: { + game_of_skate: "Game of S.K.A.T.E.", + best_trick: "Best Trick", + jam: "Формат джем", + contest: "Контест / змагання", + street_league: "У стилі Street League", + bowl: "Чаша / vert", + mini_ramp: "Міні-рампа", + park: "Парк", + street: "Стріт", + freestyle: "Фрістайл", + world_tour: "World Destruction Tour", + am_series: "Am-серія / відбіркові", + local_jam: "Локальний джем / grassroots", + online: "Онлайн / IG-контест", + }, + specialty: { + head_judge: "Головний суддя", + scoring: "Підрахунок балів", + mc: "MC / ведучий", + format_design: "Дизайн формату", + rules: "Правила / суддівство", + brackets: "Сітки / хіти", + livestream: "Суддівство на стрімі", + am_scout: "Скаутинг am-райдерів", + }, + level: { + local: "Локальний", + regional: "Регіональний", + national: "Національний", + international: "Міжнародний", + pro: "Pro-цирк", + }, + }, + organizer: { + event: { + street_jam: "Стріт-джем", + best_trick: "Best Trick", + game_of_skate: "Game of S.K.A.T.E.", + contest: "Контест / змагання", + bowl: "Чаша / vert", + mini_ramp: "Міні-рампа", + park: "Парк-сесія", + demo: "Pro-демо", + clinic: "Клініка / воркшоп", + meetup: "Зустріч / круз", + downhill: "Даунхіл / гонка", + slalom: "Слалом", + kids: "Діти / молодь", + charity: "Благодійність / збір коштів", + tour_stop: "Етап Tour", + premiere: "Прем'єра відео", + market: "Маркет / виставка", + }, + service: { + organizing: "Повна організація", + hosting: "Ведення / MC", + permits: "Дозволи й міська рада", + sponsorship: "Спонсорство / бренд-угоди", + promotion: "Просування й маркетинг", + livestream: "Стрім / висвітлення", + sound: "Звук і музика", + ramps: "Рампи й перешкоди", + safety: "Безпека й перша допомога", + vendors: "Їжа й продавці", + media: "Фото / відео-висвітлення", + registration: "Реєстрація й сітки", + }, + scale: { + grassroots: "Grassroots", + local: "Локальний", + regional: "Регіональний", + national: "Національний", + international: "Міжнародний", + pro: "Pro-цирк", + }, + }, + barber: { + service: { + haircut: "Стрижка", + fade: "Фейд", + beard: "Підстригання бороди", + lineup: "Line-up / контури", + colour: "Фарбування", + kids: "Дитячі стрижки", + }, + serviceDesc: { + haircut: "Класична стрижка — машинкою й ножицями.", + fade: "Плавний фейд — низький, середній або високий.", + beard: "Підстригання, формування та догляд за бородою.", + lineup: "Чисті контури навколо лінії росту волосся та шиї.", + colour: "Фарбування, освітлення, тонування.", + kids: "Терплячі стрижки для молодших скейтерів.", + }, + style: { + skin_fade: "Skin fade", + taper: "Taper", + buzz: "Під нуль", + mohawk: "Ірокез", + mullet: "Маллет", + curly: "Кучері / афро", + long: "Довге волосся / шари", + classic: "Класична стрижка ножицями", + }, + setting: { + shop: "Shop / барбершоп", + mobile: "Виїзд / додому", + event: "Скейт-події та контести", + }, + }, + tour: { + skill: { + beginner: { + label: "Початківець", + description: "Новачок у катанні або базові трюки", + }, + intermediate: { + label: "Середній", + description: "Впевнено почувається на більшості теренів", + }, + advanced: { + label: "Просунутий", + description: "Досвідчений скейтер, складні Spot-и", + }, + all: { + label: "Усі рівні", + description: "Підходить для всіх", + }, + }, + }, + }, +}; export default ukBatch6; diff --git a/src/i18n/uk/batch7.ts b/src/i18n/uk/batch7.ts index 6a5398a..9cfa96f 100644 --- a/src/i18n/uk/batch7.ts +++ b/src/i18n/uk/batch7.ts @@ -1,4 +1,908 @@ -/** uk — batch 7. Filled by the translation pass; empty until then. */ -const ukBatch7 = {}; +/** uk — batch 7. Translated from the English source. */ +const ukBatch7 = { + events: { + title: 'Скейт-події', + createEvent: 'Створити подію', + editEvent: 'Редагувати подію', + eventDetails: 'Деталі події', + eventName: 'Назва події', + eventType: 'Тип події', + date: 'Дата', + time: 'Час', + startDate: 'Дата початку', + endDate: 'Дата завершення', + venue: 'Місце', + organizer: 'Організатор', + attendees: 'Учасники', + going: 'Іду', + interested: 'Цікавить', + rsvp: 'RSVP', + ticketPrice: 'Ціна квитка', + freeEntry: 'Вільний вхід', + register: 'Реєстрація', + moreInfo: 'Детальніше', + upcomingEvents: 'Найближчі', + pastEvents: 'Минулі', + noEvents: 'Подій не знайдено', + findEvents: 'Знаходьте конкурси, демо, сесії та багато іншого', + searchPlaceholder: 'Пошук подій...', + loginToCreate: 'Увійдіть, щоб створювати події', + noEventsMatch: 'Жодна найближча подія не відповідає вашим фільтрам.', + noUpcoming: 'Найближчих подій не знайдено.', + noPast: 'Минулих подій не знайдено.', + types: { + contest: 'Конкурс', + session: 'Сесія', + meetup: 'Зустріч', + premiere: 'Прем’єра відео', + workshop: 'Воркшоп', + demo: 'Демо', + jam: 'Джем', + }, + }, + wallet: { + title: 'Гаманець', + balance: 'Баланс', + send: 'Надіслати', + receive: 'Отримати', + transactions: 'Транзакції', + history: 'Історія', + noTransactions: 'Транзакцій ще немає', + sendSats: 'Надіслати sats', + receiveSats: 'Отримати sats', + amount: 'Сума', + recipient: 'Отримувач', + lightning: 'Lightning', + onChain: 'On-chain', + invoice: 'Інвойс', + address: 'Адреса', + scanQR: 'Сканувати QR', + paste: 'Вставити', + payInvoice: 'Сплатити інвойс', + createInvoice: 'Створити інвойс', + copied: 'Скопійовано в буфер обміну!', + insufficientFunds: 'Недостатньо коштів', + paymentSent: 'Платіж надіслано!', + paymentReceived: 'Платіж отримано!', + cashu: { + title: 'Гаманець Cashu', + tokens: 'Токени', + mint: 'Mint', + mints: 'Mints', + manageMints: 'Керування Mints', + addMint: 'Додати Mint', + removeMint: 'Видалити Mint', + defaultMint: 'Mint за замовчуванням', + backup: 'Резервна копія', + restore: 'Відновити', + recoveryPhrase: 'Фраза відновлення', + viewRecoveryPhrase: 'Показати фразу відновлення', + seedWarning: 'Це як ваш Nostr nsec — тримайте в секреті та робіть резервні копії!', + }, + }, + spots: { + addSpot: 'Додати Spot', + editSpot: 'Редагувати Spot', + spotDetails: 'Деталі Spot', + spotName: 'Назва Spot', + spotType: 'Тип Spot', + description: 'Опис', + location: 'Місцезнаходження', + address: 'Адреса', + photos: 'Фото', + addPhotos: 'Додати фото', + obstacles: 'Перешкоди', + features: 'Особливості', + bustLevel: 'Рівень ризику', + bestTime: 'Найкращий час', + tips: 'Поради', + reviews: 'Відгуки', + addReview: 'Додати відгук', + reportSpot: 'Поскаржитися на Spot', + directions: 'Маршрут', + shareSpot: 'Поділитися Spot', + createdBy: 'Створено', + lastUpdated: 'Останнє оновлення', + types: { + park: 'Скейтпарк', + street: 'Вуличний Spot', + diy: 'DIY Spot', + plaza: 'Площа', + indoor: 'Критий', + bowl: 'Чаша', + vert: 'Верт', + miniramp: 'Міні-рамп', + }, + bustLevels: { + chill: 'Спокійно', + moderate: 'Помірно', + sketchy: 'Ризиковано', + heavy: 'Жорстко', + }, + }, + settings: { + title: 'Налаштування', + profile: 'Профіль', + editProfile: 'Редагувати профіль', + account: 'Акаунт', + security: 'Безпека', + relays: 'Relays', + appearance: 'Вигляд', + language: 'Мова', + notifications: 'Сповіщення', + privacy: 'Приватність', + about: 'Про застосунок', + help: 'Довідка', + feedback: 'Зворотний зв’язок', + version: 'Версія', + displayName: 'Відображуване ім’я', + username: 'Ім’я користувача', + bio: 'Про себе', + website: 'Сайт', + lightningAddress: 'Lightning-адреса', + profilePicture: 'Фото профілю', + banner: 'Банер', + saveProfile: 'Зберегти профіль', + backupKeys: 'Резервна копія ключів', + exportKeys: 'Експортувати ключі', + secretKey: 'Секретний ключ', + publicKey: 'Публічний ключ', + showSecretKey: 'Показати секретний ключ', + hideSecretKey: 'Приховати секретний ключ', + copyKey: 'Скопіювати ключ', + keysBackedUp: 'Ви підтвердили, що ваші ключі надійно збережено.', + keysNotBackedUp: 'Обов’язково збережіть фразу відновлення або секретний ключ!', + selectLanguage: 'Вибрати мову', + english: 'Англійська', + spanish: 'Іспанська', + }, + createSpot: { + title: 'Додати скейт-Spot', + subtitle: 'Поділіться скейт-спотом зі спільнотою', + backToMap: 'Назад до карти', + namePlaceholder: 'напр., Hollywood High School', + descriptionPlaceholder: 'Опишіть Spot, перешкоди, найкращий час для катання, інформацію про безпеку тощо.', + addressPlaceholder: 'напр., 1521 N Highland Ave, Los Angeles, CA', + selectType: 'Виберіть тип Spot', + selectBustLevel: 'Виберіть рівень ризику', + uploadPhotos: 'Завантажити', + dragDrop: 'Перетягніть або натисніть для завантаження', + maxPhotos: 'Макс. 5 фото', + publishing: 'Публікація...', + success: 'Spot успішно опубліковано!', + error: 'Не вдалося опублікувати Spot', + locationRequired: 'Будь ласка, виберіть місцезнаходження на карті', + useCurrentLocation: 'Використати моє поточне місцезнаходження', + pickOnMap: 'Вибрати місцезнаходження на карті', + loginToAdd: 'Вам потрібно увійти, щоб додати скейт-Spot.', + locationLabel: 'Місцезнаходження', + tapToPlace: 'Натисніть на карту, щоб поставити мітку, або перетягніть її для точного налаштування.', + manualCoords: 'Ввести координати вручну', + moreDetails: 'Детальніше (необов’язково)', + photoHint: 'для публікації потрібне фото', + nameRequired: 'Будь ласка, введіть назву для цього Spot.', + descriptionRequired: 'Будь ласка, опишіть цей Spot.', + addressRequired: 'Будь ласка, додайте адресу або назву району.', + photoRequired: 'Будь ласка, додайте щонайменше одне фото.', + draftTitle: 'У вас є незбережений чернетка', + draftBody: 'Продовжте з того місця, де зупинилися, або видаліть її.', + draftResume: 'Продовжити', + draftDiscard: 'Видалити чернетку', + requiredFields: 'Розкажіть нам про цей Spot. Усі поля, позначені *, є обов’язковими.', + coordinates: 'Координати', + latitudePlaceholder: 'Широта (напр., 34.1012)', + longitudePlaceholder: 'Довгота (напр., -118.3389)', + gettingLocation: 'Отримання місцезнаходження...', + accessType: 'Тип доступу', + publicTitle: 'Громадський — відкритий для всіх', + publicDesc: 'Скейтпарки, громадські площі, вуличні Spot', + privateTitle: 'Приватна власність — потрібен дозвіл', + privateDesc: 'Рампи у дворі, приватна земля, закриті Spot', + localsTitle: 'Спочатку спитайте місцевих', + localsDesc: 'Поважайте Spot, не випалюйте його', + contactInfo: 'Контактна інформація', + contactPlaceholder: 'напр., номер телефону, Instagram, email...', + contactHintPrivate: 'Як люди мають зв’язатися з вами для дозволу?', + contactHintLocals: 'Як люди мають звернутися, щоб дізнатися про Spot?', + }, + marketplace: { + title: 'Маркетплейс', + subtitle: 'Купуйте, продавайте та обмінюйте скейт-Gear', + addListing: 'Додати оголошення', + condition: 'Стан', + conditions: { + new: 'Нове', + likeNew: 'Як нове', + good: 'Добре', + fair: 'Задовільний', + poor: 'Погане', + }, + categories: { + all: 'Усі', + decks: 'Деки', + trucks: 'Траки', + wheels: 'Колеса', + bearings: 'Підшипники', + shoes: 'Взуття', + clothing: 'Одяг', + protection: 'Захист', + other: 'Інше', + }, + priceRange: 'Діапазон цін', + location: 'Місцезнаходження', + seller: 'Продавець', + contact: 'Зв’язатися з продавцем', + makeOffer: 'Запропонувати ціну', + sold: 'Продано', + available: 'Доступно', + gear: 'Gear', + sellGear: 'Продати Gear', + wantToBuy: 'Хочу купити', + }, + auth: { + login: 'Увійти', + logout: 'Вийти', + signUp: 'Реєстрація', + signUpTitle: 'Уперше в Nostr?', + signUpDesc: 'Створіть новий акаунт, щоб почати. Це безкоштовно та відкрито.', + orLogIn: 'Або увійдіть', + loginWithExtension: 'Увійти через розширення', + loginWithAmber: 'Увійти через Amber (Android)', + loginWithKey: 'Секретний ключ (nsec) або фраза відновлення', + loginWithBunker: 'Увійти через Nostr Connect', + bunkerUri: 'Рядок підключення Bunker', + openAmber: 'Відкрити Amber', + connectToBunker: 'Підключитися до Bunker', + noExtension: 'Розширення не виявлено.', + extensionHelp: 'Спробуйте скористатися кнопкою «Реєстрація» вище, щоб створити новий акаунт, або вкладками Amber, Ключ і Bunker, якщо у вас уже є облікові дані.', + amberDesc: 'Amber — це безпечний застосунок-підписувач Nostr для пристроїв Android. Натисніть кнопку нижче, щоб відкрити Amber і авторизувати доступ.', + bunkerDesc: 'Отримуйте доступ до акаунта з будь-якого пристрою через віддалений підписувач (bunker). Ваші ключі залишаються в безпеці на сервері й ніколи не потрапляють на сайти.', + keyPlaceholder: 'nsec1... або ваша фраза відновлення з 12 слів', + keyHint: 'Ви можете вставити або ваш nsec-ключ, або фразу відновлення з 12 слів', + uploadKeyFile: 'Завантажити файл із ключем', + loggingIn: 'Вхід...', + connecting: 'Підключення...', + verifying: 'Перевірка...', + }, + createEvent: { + title: 'Створити подію', + subtitle: 'Організуйте скейт-подію для спільноти', + backToEvents: 'Назад до подій', + namePlaceholder: 'напр., літня скейт-сесія', + descriptionPlaceholder: 'Опишіть подію, чого очікувати, правила, призи тощо.', + selectType: 'Виберіть тип події', + venuePlaceholder: 'напр., Venice Beach Skatepark, CA', + selectDate: 'Виберіть дату', + selectTime: 'Виберіть час', + ticketPricePlaceholder: 'Залиште порожнім для безкоштовних подій', + publishing: 'Публікація...', + success: 'Подію успішно опубліковано!', + error: 'Не вдалося опублікувати подію', + loginToCreate: 'Вам потрібно увійти, щоб створити подію.', + requiredFields: 'Розкажіть нам про цю подію. Усі поля, позначені *, є обов’язковими.', + startDateTime: 'Дата та час початку', + endDateTime: 'Дата та час завершення (необов’язково)', + coordinatesOptional: 'Координати (необов’язково)', + coverImage: 'Обкладинка', + uploadCover: 'Завантажити обкладинку', + nip05Recommended: 'Рекомендовано верифікацію NIP-05', + nip05Desc: 'Додайте ідентифікатор NIP-05 до свого профілю, щоб підтвердити особу та зміцнити довіру учасників.', + addNip05: 'Додати NIP-05 у налаштуваннях', + }, + labPage: { + title: 'The Lab', + subtitle: 'Вивчайте трюки. Ловіть моменти. Спілкуйтеся з іншими скейтерами', + coachesTab: 'Коучинг', + filmersTab: 'Зйомка', + offerCoaching: 'ЗАПРОПОНУВАТИ КОУЧИНГ', + offerFilming: 'ЗАПРОПОНУВАТИ ЗЙОМКУ', + loginToOffer: 'Увійдіть, щоб пропонувати послуги', + whatToLearn: 'ЧОГО ВИ ХОЧЕТЕ НАВЧИТИСЯ?', + whatContent: 'ЯКИЙ ТИП КОНТЕНТУ?', + selectSkillsDesc: 'Виберіть навички, і ми підберемо вам коучів', + selectFilmingDesc: 'Виберіть послуги зйомки, які ви шукаєте', + searchPlaceholder: 'Пошук за ім’ям, місцезнаходженням або навичками...', + noServicesYet: 'ПОСЛУГ ЩЕ НЕМАЄ', + beFirstToOffer: 'Станьте першим, хто запропонує спільноті послуги коучингу чи зйомки!', + skills: 'Навички', + rate: 'Ставка', + perHour: '/година', + contact: 'Зв’язатися', + viewProfile: 'Переглянути профіль', + noProfilesYet: 'Профілів ще немає', + beFirstCoach: 'Станьте першим зареєстрованим коучем!', + beFirstFilmer: 'Станьте першим зареєстрованим філмером!', + yearsExperience: 'років досвіду', + }, + skills: { + kickflip: 'Kickflip', + heelflip: 'Heelflip', + ollie: 'Ollie', + treflip: '360 Flip', + shuvit: 'Shuvit', + hardflip: 'Hardflip', + varial: 'Varial', + nollie: 'Nollie', + fakie: 'Fakie', + switch: 'Switch', + grind: 'Grind', + slide: 'Slide', + manual: 'Manual', + transition: 'Transition', + bowl: 'Bowl', + vert: 'Vert', + street: 'Street', + flatground: 'Flatground', + }, + lab: { + title: 'The Lab', + subtitle: 'Прокачайте своє катання', + coaches: 'Коучі', + filmers: 'Філмери', + findCoach: 'Знайти коуча', + becomeCoach: 'Стати коучем', + findFilmer: 'Знайти філмера', + becomeFilmer: 'Стати філмером', + hourlyRate: 'Погодинна ставка', + experience: 'Досвід', + specialties: 'Спеціалізації', + availability: 'Доступність', + bookSession: 'Забронювати сесію', + contactCoach: 'Зв’язатися з коучем', + noCoaches: 'Коучів у вашому районі не знайдено', + noFilmers: 'Філмерів у вашому районі не знайдено', + }, + shops: { + title: 'Скейт-Shops', + addShop: 'Додати Shop', + editShop: 'Редагувати Shop', + shopDetails: 'Деталі Shop', + shopName: 'Назва Shop', + hours: 'Години роботи', + phone: 'Телефон', + website: 'Сайт', + services: 'Послуги', + brands: 'Бренди', + supportLocal: 'Підтримайте місцевих', + nip05: 'Shop NIP-05', + nip05Hint: 'Необов’язковий ідентифікатор, яким ви керуєте для цього Shop (напр., shop@yourdomain.com), перевіряється за вашим ключем. Додайте до 5.', + }, + becomeFilmer: { + title: 'Стати філмером', + subtitle: 'Знімайте найкращі кліпи для спільноти', + bioPlaceholder: 'Розкажіть про свій досвід зйомки та обладнання...', + specialtiesPlaceholder: 'напр., фішай, довгий об’єктив, дрон, монтаж', + selectSpecialties: 'Виберіть свої спеціалізації', + hourlyRate: 'Погодинна ставка (sats)', + ratePlaceholder: 'напр., 5000', + locationPlaceholder: 'Ваше місто або район', + portfolioUrl: 'Посилання на портфоліо', + portfolioPlaceholder: 'Посилання на ваші роботи (YouTube, Instagram тощо)', + publishing: 'Публікація профілю...', + success: 'Профіль філмера створено!', + error: 'Не вдалося створити профіль', + }, + food: { + title: 'Місця з їжею', + subtitle: 'Підкріпіться до або після сесії', + addFood: 'Додати місце з їжею', + categories: { + all: 'Усі', + burgers: 'Бургери', + pizza: 'Піца', + tacos: 'Тако', + coffee: 'Кава', + drinks: 'Напої', + snacks: 'Закуски', + }, + skaterFriendly: 'Дружнє до скейтерів', + nearSpots: 'Поруч зі Spot', + }, + profile: { + posts: 'Пости', + spots: 'Spot', + events: 'Події', + following: 'Підписки', + followers: 'Підписники', + editProfile: 'Редагувати профіль', + follow: 'Підписатися', + unfollow: 'Відписатися', + noPostsYet: 'Постів ще немає', + noBio: 'Опису ще немає', + zapProfile: 'Запнути цього скейтера', + }, + becomeCoach: { + title: 'Стати коучем', + subtitle: 'Поділіться навичками та допоможіть іншим скейтерам прогресувати', + bioPlaceholder: 'Розкажіть про свій скейт-досвід і стиль викладання...', + skillsPlaceholder: 'напр., kickflip, heelflip, грайнди, чаші', + selectSkills: 'Виберіть навички, яких можете навчити', + hourlyRate: 'Погодинна ставка (sats)', + ratePlaceholder: 'напр., 5000', + locationPlaceholder: 'Ваше місто або район', + publishing: 'Публікація профілю...', + success: 'Профіль коуча створено!', + error: 'Не вдалося створити профіль', + }, + weather: { + title: 'Погода', + current: 'Поточні умови', + forecast: 'Прогноз', + humidity: 'Вологість', + wind: 'Вітер', + feelsLike: 'Відчувається як', + goodForSkating: 'Добре для катання!', + notIdeal: 'Не ідеальні умови', + allWeather: 'Будь-яка погода', + goodWeather: 'Хороша погода', + perfectWeather: 'Ідеальна погода', + }, + errors: { + somethingWentWrong: 'Щось пішло не так', + tryAgainLater: 'Спробуйте пізніше', + notFound: 'Не знайдено', + pageNotFound: 'Сторінку не знайдено', + unauthorized: 'Доступ заборонено', + loginRequired: 'Будь ласка, увійдіть, щоб продовжити', + networkError: 'Помилка мережі', + checkConnection: 'Перевірте підключення до інтернету', + invalidInput: 'Неприпустимий ввід', + requiredField: 'Це поле обов’язкове', + }, + time: { + today: 'Сьогодні', + yesterday: 'Учора', + tomorrow: 'Завтра', + thisWeek: 'Цього тижня', + nextWeek: 'Наступного тижня', + thisMonth: 'Цього місяця', + justNow: 'Щойно', + minutesAgo: '{{count}} хв тому', + hoursAgo: '{{count}} год тому', + daysAgo: '{{count}} дн тому', + }, + spotDetail: { + postedBy: 'Опублікував', + getDirections: 'Прокласти маршрут', + reviews: 'Відгуки', + noReviews: 'Відгуків ще немає', + beFirstReview: 'Станьте першим, хто залишить відгук про цей Spot!', + writeReview: 'Написати відгук', + submitReview: 'Надіслати відгук', + rating: 'Оцінка', + reviewPlaceholder: 'Поділіться своїм досвідом на цьому Spot...', + relatedSpots: 'Поруч', + }, + eventDetail: { + organizedBy: 'Організатор', + eventInfo: 'Інформація про подію', + location: 'Місцезнаходження', + dateTime: 'Дата та час', + price: 'Ціна', + attendeeCount: '{{count}} ідуть', + interested: 'Цікавить', + going: 'Іду', + notGoing: 'Не йду', + share: 'Поділитися подією', + }, + venueAccess: { + title: 'Пропуски доступу', + desc: 'Видайте підписаний пропуск райдеру, щоб він міг підтвердити доступ біля входу — він показує картку, і будь-хто може відсканувати QR, щоб перевірити її.', + active: '{{count}} активних', + revoked: '{{count}} відкликаних', + issue: 'Видати пропуск', + verifyHint: 'Перевіряється скануванням — для перевірки не потрібні застосунок чи акаунт.', + publicTitle: 'Пропуски доступу', + publicDesc: 'Цей заклад видає пропуски доступу. Відскануйте картку райдера біля входу, щоб перевірити її.', + badge: 'Пропуски', + sellerHint: 'Заклад цього продавця видає пропуски доступу', + }, + zaps: { + zapButton: 'Zap', + sendZap: 'Надіслати Zap', + zapAmount: 'Сума Zap', + customAmount: 'Своя сума', + addMessage: 'Додати повідомлення (необов’язково)', + sending: 'Надсилання...', + sent: 'Zap надіслано!', + failed: 'Zap не вдався', + received: 'Ви отримали Zap!', + }, + rewards: { + title: 'Нагороди', + yourPoints: 'Ваші бали', + earnPoints: 'Заробити бали', + redeemPoints: 'Витратити бали', + leaderboard: 'Таблиця лідерів', + achievements: 'Досягнення', + dailyTasks: 'Щоденні завдання', + weeklyTasks: 'Щотижневі завдання', + }, + errorsUi: { + slammedTitle: 'Слем', + slammedBody: 'Щось спіткнулося на цьому екрані. Ваш акаунт і дані в безпеці — повертаймося до руху.', + tryAgain: 'Спробувати знову', + reloadApp: 'Перезавантажити застосунок', + pageSlammedTitle: 'Ця сторінка слемнулася', + pageSlammedBody: 'Щось на цьому екрані спіткнулося. Ваш акаунт і дані в безпеці. Зазвичай допомагає швидке перезавантаження.', + reload: 'Перезавантажити', + goBack: 'Назад', + }, + backup: { + title: 'Збережіть свій вхід', + subtitle: 'Займе 10 секунд — зробіть один раз', + message: 'Ваш код відновлення — єдиний шлях назад до акаунта. Збережіть його, і ви зможете увійти з будь-якого пристрою.', + warning: 'Втратите його — скидання немає: ні email, ні відновлення пароля.', + backupNow: 'Зберегти зараз', + confirmed: 'Я зберіг', + remindLater: 'Пізніше', + }, + bootUi: { + ariaLoading: 'Завантаження SkateSpots', + ariaReady: 'SkateSpots готовий', + ready: 'Готово', + statusWaking: 'Пробуджуємо мережу', + statusTuning: 'Налаштовуємо Relays', + statusPulling: 'Підтягуємо Spot', + statusDropping: 'Заходимо', + }, + footer: { + vibedWith: 'Зроблено з', + poweredBy: 'Працює на', + openSource: 'Відкритий код', + contribute: 'Долучитися', + decentralized: 'Децентралізовано', + communityOwned: 'Належить спільноті', + }, + role: { + owner: 'Власник', + admin: 'Адмін', + organiser: 'Організатор', + verifiedOwner: 'Підтверджений власник', + }, + nfc: { + write: 'Записати на NFC-мітку', + written: 'Мітку записано', + writtenDesc: 'Прикладіть мітку до телефона, щоб відкрити сторінку перевірки.', + failed: 'Не вдалося записати мітку', + }, + collectionUi: { + namePlaceholder: 'Поїздка до Барселони 2024', + descriptionPlaceholder: 'Мої улюблені Spot з поїздки до Барселони...', + }, + toastsUi: { + followingSuccess: 'Ви підписалися', + followingSuccessDesc: 'Цей користувач тепер у вашій мережі', + followFailed: 'Не вдалося підписатися', + unfollowSuccess: 'Ви відписалися', + unfollowSuccessDesc: 'Видалено з вашої мережі', + unfollowFailed: 'Не вдалося відписатися', + reportThanks: 'Дякуємо — надіслано на перевірку', + reportFailed: 'Не вдалося надіслати скаргу', + savedOffline: 'Збережено офлайн', + savedOfflineDesc: 'Ми опублікуємо це автоматично, коли ви знову будете онлайн.', + cacheCleaned: 'Кеш очищено', + cacheCleanedDesc: 'Видалено {{count}} старих Spot з кешу', + cacheCleared: 'Кеш очищено', + cacheClearedDesc: 'Усі кешовані Spot видалено', + backOnline: 'Знову онлайн', + backOnlineDesc: 'Надіслано {{count}} збережених дій.', + postQueued: 'Пост у черзі', + postQueuedDesc: 'Ваш пост буде опубліковано, коли ви знову будете онлайн', + invalidIdentifier: 'Неприпустимий ідентифікатор. Використовуйте npub1..., user@domain.com або hex pubkey', + notASpotThanks: 'Дякуємо — надіслано на перевірку', + notASpotThanksDesc: 'Без образ: це позначає мітку як не за темою, щоб люди могли вирішити самі.', + notASpotFailed: 'Не вдалося надіслати скаргу', + pleaseTryAgain: 'Спробуйте ще раз.', + relayUnreachable: 'Не вдалося зв’язатися з жодним Relay — перевірте підключення та спробуйте знову.', + loginToReport: 'Увійдіть, щоб поскаржитися на Spot.', + zapLoginRequired: 'Потрібен вхід', + zapLoginRequiredDesc: 'Ви маєте увійти, щоб надіслати Zap.', + zapEventNotFound: 'Подію не знайдено', + zapEventNotFoundDesc: 'Не вдалося знайти подію для Zap.', + zapAuthorNotFound: 'Автора не знайдено', + zapAuthorNotFoundDesc: 'Не вдалося знайти автора цього елемента.', + zapSuccess: 'Zap успішно надіслано!', + zapSuccessNwcDesc: 'Ви надіслали {{amount}} sats через NWC автору.', + zapSuccessDesc: 'Ви надіслали {{amount}} sats автору.', + zapStatusUnknown: 'Статус платежу невідомий', + zapStatusUnknownDesc: 'Ваш гаманець може все ще проводити цей Zap. Перевірте гаманець перед повторною спробою — не платіть двічі.', + zapNwcFailed: 'Платіж NWC не вдався', + zapWeblnFailed: 'Платіж WebLN не вдався', + zapFallingBack: '{{error}}. Перемикаємося на інші способи оплати...', + zapFailed: 'Zap не вдався', + zapUnknownNwcError: 'Невідома помилка NWC', + zapUnknownWeblnError: 'Невідома помилка WebLN', + nwcInvalidUri: 'Неприпустимий NWC URI', + nwcInvalidUriDesc: 'Перевірте рядок підключення та спробуйте знову.', + nwcExists: 'Підключення вже існує', + nwcExistsDesc: 'Цей гаманець уже підключено.', + nwcConnected: 'Гаманець підключено', + nwcConnectedDesc: 'Успішно підключено до {{alias}}.', + nwcFailed: 'Не вдалося підключитися', + nwcFailedDesc: 'Не вдалося підключитися до гаманця: {{error}}', + nwcUnknownError: 'Сталася невідома помилка', + nwcDisconnected: 'Гаманець відключено', + nwcDisconnectedDesc: 'Підключення гаманця видалено.', + deleteApproveAmber: 'Підтвердьте в Amber', + deleteApproveAmberDesc: 'Amber відкриється — натисніть «Підтвердити», щоб підтвердити видалення.', + deleteCancelled: 'Скасовано', + deleteCancelledDesc: 'Ви відхилили запит в Amber.', + deleteCouldntSign: 'Не вдалося підписати', + deletePublishing: 'Крок 2/2: публікація…', + deletePublishingDesc: 'Надсилаємо видалення в Relays.', + deleteStuck: 'Застрягло на PUBLISHING', + deleteStuckDesc: 'Етап Relay не вдався: {{error}}. Підписано успішно; Relay не підтвердив.', + stashMerged: 'Зміни об’єднано з іншого пристрою', + stashMergedDesc: 'Ваш Stash було змінено в іншому місці — обидва набори змін збережено.', + statusUpdated: 'Статус оновлено!', + statusUpdatedDesc: 'Ваш скейт-статус тепер видно іншим.', + statusFailed: 'Не вдалося встановити статус', + statusCleared: 'Статус очищено', + statusClearedDesc: 'Ваш статус видалено.', + statusClearFailed: 'Не вдалося очистити статус', + nutzapEnabled: 'Приймання Nutzap увімкнено', + nutzapEnabledDesc: 'Тепер ви можете отримувати ecash-Zap!', + nutzapSetupFailed: 'Налаштування не вдалося', + nutzapUnavailable: 'Надсилання Nutzap недоступне', + tokenReceived: 'Токен отримано', + tokenReceivedDesc: 'Токен Cashu успішно обміняно!', + receiveFailed: 'Не вдалося отримати', + invalidAmount: 'Неприпустима сума', + invalidAmountDesc: 'Будь ласка, введіть коректну суму', + tokenCreated: 'Токен створено', + sendFailed: 'Не вдалося надіслати', + mintAdded: 'Mint додано', + mintAddedDesc: 'Mint додано та успішно позначено як довірений', + mintAddFailed: 'Не вдалося додати Mint', + mintRemoved: 'Mint видалено', + mintRemoveFailed: 'Не вдалося видалити Mint', + paymentReceived: 'Платіж отримано', + paymentReceivedDesc: 'Успішно отримано {{amount}} sats!', + paymentSent: 'Платіж надіслано', + paymentSentDesc: 'Платіж Lightning успішно завершено', + loginRequired: 'Потрібен вхід', + loginToFollowFounder: 'Будь ласка, увійдіть, щоб підписатися на засновника', + alreadyFollowing: 'Уже підписані', + alreadyFollowingDesc: 'Ви вже підписані на {{name}}!', + couldNotComplete: 'Не вдалося завершити', + tryAgainLower: 'Спробуйте ще раз.', + couldNotLoadProfile: 'Не вдалося завантажити профіль', + couldNotLoadProfileDesc: 'Перевірте підключення до інтернету та спробуйте оновити.', + undone: 'Скасовано', + undoneDesc: 'Знову нейтрально — не приховано, не підтверджено.', + confirmed: 'Підтверджено', + confirmedDesc: 'Поручилися — це виходить з черги.', + hiddenToast: 'Приховано', + couldNotUndo: 'Не вдалося скасувати', + couldNotConfirm: 'Не вдалося підтвердити', + deleteFailed: 'Не вдалося видалити', + somethingWentWrong: 'Щось пішло не так', + }, + seoUi: { + becomeBuilderTitle: 'Стати будівельником - SkateSpots', + becomeBuilderDesc: 'Розмістіть послуги з будівництва рамп, парків і DIY — що ви будуєте, матеріали та масштаб.', + tradesTitle: 'Мої угоди — SkateSpots', + tradesDesc: 'Керуйте своїми угодами на маркетплейсі, підтвердженнями та репутацією.', + eventsTitle: 'Скейт-події та тури - SkateSpots', + eventsDesc: 'Відкривайте скейт-події, змагання, тури та сесії поруч із вами.', + editShopDesc: 'Редагуйте свій скейт-Shop.', + createTourDesc: 'Організовуйте скейт-тури - тури місцевими прихованими перлинами, національні роуд-тріпи, міжнародні пригоди або руйнівні змагання у стилі KOTR.', + deckDesignerTitle: 'Дизайнер дек — SkateSpots DIY', + deckDesignerDesc: 'Накресліть контур скейтборда чи лонгборда, потім експортуйте друкований шаблон 1:1, SVG або DXF — concave, кіки, колісна база та отвори під траки включно.', + createEventTitle: 'Створити скейт-подію - SkateSpots', + createEventDesc: 'Створіть нову скейт-подію для спільноти.', + editTourDesc: 'Редагуйте свій скейт-тур — оновлюйте зупинки, дати та деталі.', + walletTitle: 'Гаманець - SkateSpots', + walletDesc: 'Підключіть гаманець Lightning, щоб надсилати Zap скейтерам і творцям Spot.', + becomePhotographerTitle: 'Стати фотографом - SkateSpots', + becomePhotographerDesc: 'Створіть профіль скейт-фотографа — камери, об’єктиви, світло та послуги.', + newsletterTitle: 'Розсилка - SkateSpots', + newsletterDesc: 'Щотижневі новини від спільноти SkateSpots. Оновлення застосунку, нові Spot, події та люди, які підтримують скейтбординг живим.', + homeTitle: 'SkateSpots - Відкривайте скейт-локації по всьому світу', + zapLeaderboardTitle: 'Таблиці лідерів за Zap - SkateSpots', + zapLeaderboardDesc: 'Найбільш запнуті скейт-Spot і члени спільноти, які їх підтримують.', + adminReviewTitle: 'Черга модерації — SkateSpots', + gearSwapTitle: 'Обмін Gear - SkateSpots', + gearSwapDesc: 'Купуйте та продавайте вживаний скейт-Gear з іншими скейтерами. Деки, траки, колеса, взуття та багато іншого.', + donateTitle: 'Пожертвувати — SkateSpots', + donateDesc: 'Підтримайте SkateSpots — Lightning, приватний on-chain (silent payments) або фінансування розробки на Angor.', + verifyCardTitle: 'Перевірити — SkateSpots', + verifyCardDesc: 'Перевірте картку SkateSpots або пропуск доступу.', + mapTitle: 'Карта скейт-Spot - SkateSpots', + mapDesc: 'Досліджуйте скейтборд-локації по всьому світу на нашій інтерактивній карті.', + diyTitle: 'DIY — Зроби сам | SkateSpots', + diyDesc: 'Посібники, відкриті інструменти та плани, щоб зробити свої скейтборди, рампи й бетонні Spot — а також люди та місця для цього.', + appShopTitle: 'Магазин застосунку — SkateSpots', + becomeSkaterTitle: 'Долучайтеся до каталогу скейтерів - SkateSpots', + becomeSkaterDesc: 'Створіть профіль скейтера, щоб спільнота могла вас знайти.', + marketplaceTitle: 'Маркетплейс - SkateSpots', + marketplaceDesc: 'Купуйте та продавайте скейт-Gear на децентралізованому Plebeian Market.', + becomeEditorTitle: 'Стати відеомонтажером - SkateSpots', + becomeEditorDesc: 'Створіть профіль скейт-відеомонтажера на SkateSpots.', + amberCallbackTitle: 'Вхід через Amber - SkateSpots', + amberCallbackDesc: 'Завершуємо вхід через Amber (NIP-55).', + supportersTitle: 'Прихильники - SkateSpots', + supportersDesc: 'Спільнота, що підтримує SkateSpots — прихильники, співтворці, партнери та друзі.', + becomeCoachTitle: 'Стати коучем - SkateSpots', + becomeCoachDesc: 'Створіть профіль скейт-коуча.', + riderCardTitle: 'Картка скейтера — SkateSpots', + riderCardDesc: 'Створіть друковану ліцензію скейтера або картку доступу до парку SkateSpots.', + editEventDesc: 'Редагуйте свою скейт-подію.', + createShopTitle: 'Додати скейт-Shop - SkateSpots', + createShopDesc: 'Додайте свій скейт-Shop до спільноти.', + deckCostTitle: 'Калькулятор вартості деки — SkateSpots DIY', + deckCostDesc: 'Розрахуйте, скільки коштує виготовлення деки — праця, обладнання, матеріали, час процесу, пакування та маржа — і справедливу ціну продажу.', + pyramidTitle: 'Рейтинг Pyramid - SkateSpots', + pyramidDesc: 'Головні дописувачі та лідери спільноти.', + foodTitle: 'Їжа поруч зі Spot - SkateSpots', + foodDesc: 'Знайдіть ресторани, кав’ярні та варіанти їжі поруч зі скейт-Spot.', + createListingTitle: 'Продати Gear - SkateSpots', + createListingDesc: 'Розмістіть скейт-Gear на продаж або знайдіть Gear, який хочете купити.', + becomeFilmerTitle: 'Стати філмером - SkateSpots', + becomeFilmerDesc: 'Створіть профіль скейт-філмера.', + skatersTitle: 'Скейтери - SkateSpots', + skatersDesc: 'Відкривайте скейтерів у спільноті SkateSpots. Переглядайте за стилем, стійкою, рівнем і місцезнаходженням.', + communityStatsTitle: 'Статистика спільноти — SkateSpots', + communityStatsDesc: 'Живі метрики спільноти SkateSpots — Spot, події, коучі, філмери, монтажери, тури та зростання з часом. Дані напряму з Nostr.', + labTitle: 'The Lab - SkateSpots', + labDesc: 'Знайдіть скейт-коучів, філмерів, фотографів і відеомонтажерів.', + stashTitle: 'Мій Stash - SkateSpots', + stashDesc: 'Керуйте своїм приватним інвентарем Gear. Відстежуйте, чим володієте, що хочете продати чи обміняти.', + bountyLeaderboardTitle: 'Картографуй і заробляй - SkateSpots', + bountyLeaderboardDesc: 'Позначайте скейт-Spot і Shop на карті, заробляйте Zap від спільноти. Дивіться найкращих дописувачів.', + spotCollectionsTitle: 'Мої колекції Spot - SkateSpots', + spotCollectionsDesc: 'Організуйте улюблені скейт-Spot у персональні колекції', + mintsTitle: 'Cashu Mints — SkateSpots', + mintsDesc: 'Переглядайте Cashu Mints, перевіряйте їхній стан і додайте один до свого гаманця.', + }, + miscUi: { + openingCamera: 'Відкриваємо камеру…', + usePhoneCamera: 'Використайте камеру телефона, потім поверніться сюди', + startingCamera: 'Запуск камери...', + cameraAccessRequired: 'Потрібен доступ до камери', + cameraAccessHint: 'Дозвольте доступ до камери в налаштуваннях браузера або скористайтеся вибором файлу нижче.', + cameraErrorTitle: 'Помилка камери', + cameraErrorDesc: 'Не вдалося відкрити камеру. Перевірте дозволи застосунку в налаштуваннях.', + cameraDeniedTitle: 'Доступ до камери заборонено', + cameraDeniedDesc: 'Будь ласка, дозвольте доступ до камери в налаштуваннях браузера.', + uploadFromGallery: 'Завантажити з галереї', + uploading: 'Завантаження...', + usePhoto: 'Використати фото', + earningPotential: 'Потенціал заробітку', + qualityExcellent: 'Відмінно!', + qualityGood: 'Добре', + qualityBasic: 'Базово', + qualityGettingStarted: 'Для початку', + qualityLocationAdded: 'Місцезнаходження додано', + qualityOnePhoto: 'Щонайменше 1 фото', + qualityThreePhotos: '3+ фото', + qualityMoreAngles: 'Більше ракурсів = краще', + qualityDescription: 'Опис', + qualityDetailedDesc: 'Детальний опис (100+ символів)', + qualityContact: 'Контактна інформація', + qualityPhoneOrWebsite: 'Телефон або сайт', + qualityHours: 'Години роботи', + qualitySpotType: 'Тип Spot вибрано', + failedToLoadComments: 'Не вдалося завантажити коментарі', + commentsTitle: 'Коментарі', + noCommentsYet: 'Коментарів ще немає', + beFirstComment: 'Станьте першим, хто поділиться думками!', + removeMember: 'Видалити учасника', + whoIsThisFor: 'Для кого цей профіль?', + individual: 'Приватна особа', + individualDesc: 'Одна людина', + collective: 'Колектив', + collectiveDesc: 'Crew, студія або компанія', + membersLabel: 'Учасники', + dismissReport: 'Відхилити скаргу', + reportedBy: 'поскаржився', + completingLoginAmber: 'Завершуємо вхід через Amber...', + entityMembersHint: 'Додайте Nostr-акаунти своєї Crew. Кожен учасник підтверджує свій Spot своїм ключем — до того вони показуються як «очікують».', + entityVerifiedHint: 'Участь перевіряється для кожного учасника — нікого не можна додати до вашої Crew без підтвердження з власного акаунта.', + entityInvalidPubkey: 'Введіть коректний npub, nprofile або 64-символьний hex pubkey.', + entityAlreadyAdded: 'Цей учасник уже доданий.', + offline: 'Офлайн', + connected: 'Підключено', + offlineMode: 'Офлайн-режим', + allFeaturesAvailable: 'Усі функції доступні', + browsingCachedSpots: 'Перегляд кешованих Spot', + queuedActions: '{{count}} дій у черзі', + syncing: 'Синхронізація', + publishingWhenStable: 'Публікація, коли з’єднання стабілізується...', + willPublishOnline: 'Буде опубліковано, коли знову з’явиться мережа', + availableOffline: 'Доступно офлайн:', + offlineBrowseSpots: 'Переглядайте раніше переглянуті Spot', + offlineViewDetails: 'Переглядайте кешовані деталі Spot', + offlineKeepActing: 'Продовжуйте діяти — пости, RSVP, оголошення та повідомлення ставляться в чергу й надсилаються при відновленні зв’язку', + }, + sasquatchGuide: { + homeTitle: 'Ласкаво просимо до SkateSpots! 🦧', + homeMessage: 'Йо, я The Sasquatch. Хранитель дошок, стежок і диких поїздок. Ласкаво просимо до невгамовного скейт-світу на Nostr — без костюмів, без реклами, лише скейтери, що прокладають власний шлях. Тут ви володієте своїми трюками, своїми даними й навіть заробляєте Bitcoin за свій слід. Спілкуйтеся зі скейтерами зі свого району чи з усього світу. Жодних правил, крім катання, жодних слідів, крім ваших.', + homeQ1: 'Сплануй мені 3 дні в Барселоні', + homeQ2: 'Знайди Spot для новачків', + homeQ3: 'Є найближчі події?', + homeQ4: 'Статистика спільноти', + homeQ5: 'Знайди коучів поруч', + homeQ6: 'Gear на продаж?', + homeQ7: 'Що таке Nostr?', + homeQ8: 'Це безкоштовно?', + homeLearnMore: 'Дізнатися більше', + onboardingTitle: 'Початок роботи 🚀', + onboardingMessage: 'Дозвольте допомогти розібратися в основах! Nostr — це ваша особистість, Bitcoin Lightning дозволяє заробляти sats за внесок, а Zap — це миттєві чайові. Запитайте мене про будь-що щодо початку роботи!', + onboardingQ1: 'Як увійти?', + onboardingQ2: 'Що таке Nostr?', + onboardingQ3: 'Як працює Nostr?', + onboardingQ4: 'Що таке Cashu?', + onboardingQ5: 'Як користуватися гаманцем Cashu?', + onboardingQ6: 'Що таке Mints?', + onboardingQ7: 'Що таке Zap?', + onboardingQ8: 'Що таке NWC?', + onboardingStart: 'Почати дослідження', + onboardingLogin: 'Увійдіть, щоб почати', + labTitle: 'Ласкаво просимо до The Lab! 🎓', + labMessage: 'Тут відбувається магія! Знайдіть коучів, які навчать вас будь-чого — від kickflip до darkslide, або зв’яжіться з філмерами, щоб закарбувати найкращі сесії. Фільтруйте за навичками, перевіряйте досвід і бронюйте сесію. Пам’ятайте — усі з чогось починали!', + labQ1: 'Знайти коучів', + labQ2: 'Знайти філмерів', + labQ3: 'Знайти фотографів', + labQ4: 'Знайти відеомонтажерів', + labQ5: 'Знайти будівельника рамп', + labQ6: 'Що таке The Lab?', + labQ7: 'Що таке будівельник?', + labQ8: 'Як запропонувати коучинг?', + labLogin: 'Увійдіть, щоб пропонувати послуги', + crewsTitle: 'Crew 🤘', + crewsMessage: 'Crew — це ваша прив’язана до карти скейт-родина — люди, з якими ви катаєтеся РАЗОМ, а не яких наймаєте. У кожної Crew є рідна територія на карті, домашні Spot, учасники та маніфест. Учасники підтверджують зі своїх ключів, тож склад легітимний. Створіть свою або знайдіть своїх!', + crewsQ1: 'Що таке Crew?', + crewsQ2: 'Як створити Crew?', + crewsQ3: 'Чим Crew відрізняється від The Lab?', + crewsQ4: 'Як учасники підтверджують?', + crewsQ5: 'Що таке Nostr?', + crewsQ6: 'Як працюють Zap?', + crewsLogin: 'Увійдіть, щоб створити Crew', + }, + supportUi: { + keepMapFree: 'Нехай карта залишається безкоштовною', + keepMapFreeDesc: 'Без реклами, без стеження, без VC. Ваші sats оплачують хостинг, AI-вузол і Relay.', + thankYou: 'Дякуємо! ⚡', + satsKeepMapFree: 'Ваші sats зберігають карту безкоштовною.', + keptFreeNext: 'Ви щойно зберегли SkateSpots безкоштовним для наступного скейтера.', + scanToPay: 'Відскануйте для оплати', + zapSkateSpots: 'Запнути SkateSpots', + payQuietly: 'Сплатити тихо', + pickAmount: 'Виберіть суму', + enterAmount: 'Введіть, скільки sats ви хочете надіслати.', + couldNotStartPayment: 'Не вдалося розпочати платіж.', + customAmountAria: 'Своя сума в sats', + commentPlaceholder: 'Скажіть щось (необов’язково — лише публічні Zap)', + publicZapTitle: 'Публічний Zap з вашим коментарем', + loginToZapTitle: 'Увійдіть, щоб надіслати публічний Zap', + anonymousTitle: 'Анонімно — без входу, без запису', + copyLightningTitle: 'Скопіювати Lightning-адресу', + copiedSuffix: '{{label}} скопійовано', + invoiceLabel: 'Інвойс', + addressLabel: 'Адреса', + notAPurchase: 'Підтримка, а не покупка — це нічого не купує і повернень немає. Мерч і Sasquatch Pro — окремо. Ваше місцезнаходження й особистість ніколи не задіяні в тихому платежі.', + }, + statusUi: { + quickStatus: 'Швидкий статус', + skating: 'Катаюся', + skatingDesc: 'Зараз катається', + filming: 'Знімаю', + filmingDesc: 'Знімає трюки', + lookingForSesh: 'Шукаю сесію', + lookingForSeshDesc: 'Хоче покататися з іншими', + coaching: 'Коучинг', + coachingDesc: 'Навчає/тренує', + chilling: 'Відпочиваю', + chillingDesc: 'Тусується на Spot', + onMyWay: 'У дорозі', + onMyWayDesc: 'Їде на Spot', + takingABreak: 'Перерва', + takingABreakDesc: 'Відпочиває/п’є воду', + doneForToday: 'На сьогодні все', + doneForTodayDesc: 'Закінчив кататися', + }, +}; export default ukBatch7; diff --git a/src/i18n/uk/batch8.ts b/src/i18n/uk/batch8.ts index 8e157fe..1fda1ac 100644 --- a/src/i18n/uk/batch8.ts +++ b/src/i18n/uk/batch8.ts @@ -1,4 +1,629 @@ -/** uk — batch 8. Filled by the translation pass; empty until then. */ -const ukBatch8 = {}; +/** + * uk — batch 8. Український переклад `deckCostUi`, `becomeRolesUi`, + * `weatherUi`, `skaterLabelsUi`, `notifyUi` та `legacyMiscUi`. + * + * Терміни скейту/брендів збережено англійською (Deck, Trucks, Wheels, Bearings, + * Griptape, Spot, Park, Bowl, Vert, Crew, Stash, The Lab, sats, Nostr, + * Lightning) та `{{placeholder}}` збережено дослівно. + */ +const ukBatch8 = { + deckCostUi: { + presetPrompt: 'Назвіть цей пресет', + presetDefaultName: 'Пресет {{n}}', + summaryCopied: 'Підсумок скопійовано', + couldNotCopy: 'Не вдалося скопіювати', + resetConfirm: 'Скинути все до значень прикладу?', + logoTooLarge: 'Логотип завеликий (макс. 500 КБ)', + loginToFill: 'Увійдіть, щоб заповнити з вашого профілю Nostr', + filledFromProfile: 'Заповнено з вашого профілю Nostr', + warnRetailBelowOne: 'Роздрібна націнка менша за 1× — ви продасте собі на збиток.', + warnWholesaleAboveRetail: 'Оптова націнка має бути нижчою за роздрібну.', + warnZeroBoards: '{{count}} рядок(ів) використовують 0 дощок — собівартість цього рядка ігнорується.', + warnFixedNoBoards: 'Задано фіксовані місячні витрати, але дощок/міс = 0, тож витрати на операції ігноруються.', + warnNoMaterials: 'Немає витрат на матеріали — додайте принаймні один матеріал.', + warnEquipmentOverhead: 'Обладнання + накладні перевищують 60% собівартості — ця модель розрахована на великий обсяг; перевірте кількість дощок.', + warnOneBoard: 'Частину обладнання розподілено лише на одну дошку — збільште кількість дощок для амортизації.', + templateStarterName: 'Старт для хобі', + templateStarterBlurb: 'Кілька рядків, без фіксованих витрат', + templateShopName: 'Невелика майстерня', + templateShopBlurb: 'Повна таблиця з орендою та накладними', + currency: 'Валюта', + noCurrencyMatches: 'Немає відповідних валют.', + ratesUnavailable: 'Живі курси недоступні — перемикання лише змінює позначення.', + liveRates: 'живі курси BTC · sats включено', + chipCost: 'собівартість', + chipSell: 'продаж', + chipTotal: 'разом', + startFrom: 'Почати з', + advancedToggleHint: 'Показати ставки та відходи за операціями, налаштування партії, податок і криву вартості від кількості', + advanced: 'Розширений', + simple: 'Простий', + sectionLabor: 'Праця', + sectionEquipment: 'Обладнання', + sectionOperations: 'Операційні витрати', + sectionMaterials: 'Матеріали', + sectionProcesses: 'Вартість процесів', + sectionPackaging: 'Пакування', + sectionMargins: 'Націнки', + subtotalLoaded: '{{value}}/год з нарахуваннями', + subtotalPerBoard: '{{value}}/дошка', + hourlyRate: 'Погодинна ставка ({{unit}})', + labourBurden: 'Навантаження на працю (×)', + loadedRate: 'Повна ставка', + loadedRateHintBefore: 'Повна ставка = зарплата × навантаження (податки та страхові внески роботодавця на працю). Оренда та рахунки належать до розділу ', + loadedRateHintAfter: ' — не рахуйте їх двічі.', + colEquipment: 'Обладнання', + colCostUnit: 'Вартість ({{unit}})', + colCost: 'Вартість', + colSetupH: 'Налаштування (год)', + colLifetimeBoards: 'Дощок за строк служби', + colPerBoard: 'На дошку', + colMaterial: 'Матеріал', + colOrderUnit: 'Замовлення ({{unit}})', + colShipUnit: 'Доставка ({{unit}})', + colBoardsOrder: 'Дощок / замовлення', + colOrderM: 'Замовлення (м)', + colUnloadM: 'Розвантаження (м)', + colOrder: 'Замовлення', + colShipping: 'Доставка', + colOrderMin: 'Замовлення (хв)', + colUnloadMin: 'Розвантаження (хв)', + colProcess: 'Процес', + colTimeM: 'Час (м)', + colBoardsRun: 'Дощок / прогін', + colRateHr: 'Ставка/год (0 = майстерня)', + colRateHrShort: 'Ставка/год', + colScrapPct: 'Відходи %', + colTimeMin: 'Час (хв)', + colPackaging: 'Пакування', + colTimeBoardM: 'Час/дошка (м)', + colTimeBoardMin: 'Час/дошка (хв)', + colMaterialsBoardUnit: 'Матеріали/дошка ({{unit}})', + colMaterialsBoard: 'Матеріали/дошка', + equipmentPerBoard: 'Обладнання на дошку:', + materialsPerBoard: 'Матеріали на дошку:', + processesPerBoard: 'Процеси на дошку:', + packagingPerBoard: 'Пакування на дошку:', + perBoard: 'На дошку:', + addEquipment: 'Додати обладнання', + addMaterial: 'Додати матеріал', + addProcess: 'Додати процес', + addPackagingStep: 'Додати етап пакування', + duplicate: 'Дублювати', + remove: 'Видалити', + boardsPerMonth: 'Дощок / місяць', + rentPerMonth: 'Оренда / місяць', + utilitiesPerMonth: 'Комунальні / місяць', + subscriptionsPerMonth: 'Підписки / місяць', + markup: 'Націнка (×)', + wholesaleMarkup: 'Оптова націнка (×)', + scrapWaste: 'Відходи / втрати (%)', + quantityDecks: 'Кількість (decks)', + targetMonthlyProfit: 'Цільовий місячний прибуток ({{unit}})', + costNoPackaging: 'Собівартість / дошка (без пакування)', + costWithPackaging: 'Собівартість / дошка (з пакуванням)', + batchSetupHours: 'Налаштування партії (год / прогін)', + batchSetupCost: 'Вартість налаштування партії ({{unit}} / прогін)', + taxVat: 'Податок / ПДВ (%)', + quoteTax: 'Податок у пропозиції', + includedInPrice: 'Включено в ціну', + addedOnTop: 'Додається зверху', + setupPerBoard: 'Налаштування / дошка', + marginNoteBefore: 'Націнка {{markup}}× ≈ ', + grossMargin: '{{pct}}% валової маржі', + marginNoteAfter: ' · відходи {{waste}}% розподілено по придатних дошках.', + sellingPriceNoPackaging: 'Ціна продажу · без пакування', + sellingPriceWithPackaging: 'Ціна продажу · з пакуванням', + profitPerDeck: 'Прибуток / deck', + wholesalePerDeck: 'Опт / deck', + orderTotalQty: 'Сума замовлення ({{qty}})', + orderTotal: 'Сума замовлення', + breakeven: 'Точка беззбитковості', + breakevenPerMonth: '{{count}}/міс', + targetDecksHint: 'Щоб отримати {{amount}}/місяць понад фіксовані витрати, продавайте {{decks}} decks/місяць.', + priceIncludesTax: 'Ціна включає податок {{pct}}%: {{amount}} від загальної суми.', + plusTax: 'Плюс податок {{pct}}%: {{amount}} → разом {{total}}.', + costVsQuantity: 'Вартість від кількості (налаштування амортизовано)', + deckOne: 'deck', + deckOther: 'decks', + perDeckSuffix: '/ deck', + orderSuffix: 'замовлення {{amount}}', + shippingNotIncluded: 'Не включає доставку покупцеві.', + clientQuoteDetails: 'Деталі пропозиції клієнту (для PDF)', + fillFromProfileTitle: 'Заповнити ім’я, сайт, NIP-05, Lightning і npub з вашого профілю Nostr', + fillFromProfile: 'Заповнити з профілю', + businessName: 'Назва бізнесу / майстерні', + email: 'Email', + phone: 'Телефон', + website: 'Сайт', + address: 'Адреса', + quoteNumber: 'Пропозиція №', + nextNumber: 'Наступний номер', + validDays: 'Дійсно (днів)', + nip05: 'NIP-05', + lightningAddress: 'Lightning-адреса', + nostrNpub: 'Nostr (npub)', + depositPct: 'Передоплата наперед (%)', + deliveryTerms: 'Умови поставки (Інкотермс, необов’язково)', + paymentMethods: 'Способи оплати', + paymentTerms: 'Умови оплати', + paymentDetails: 'Платіжні реквізити', + notesTerms: 'Нотатки / умови', + changeLogo: 'Змінити логотип', + addLogo: 'Додати логотип', + incotermNone: 'Немає', + incotermExw: 'EXW — самовивіз у продавця', + incotermFca: 'FCA — передано перевізнику покупця', + incotermDap: 'DAP — доставлено на адресу покупця', + incotermDdp: 'DDP — доставлено, мита сплачено', + payMethodCash: 'Готівка', + payMethodLightning: 'Lightning', + payMethodCashu: 'Cashu', + payMethodBank: 'Банківський переказ', + payMethodCard: 'Картка', + payMethodOther: 'Інше', + listDeckAtPrice: 'Виставити deck за цією ціною', + getItMade: 'Замовити виготовлення — знайти білдера', + savePreset: 'Зберегти пресет', + load: 'Завантажити', + export: 'Експорт', + import: 'Імпорт', + reset: 'Скинути', + deletePreset: 'Видалити пресет', + exportPdfFull: 'PDF — повна таблиця', + exportPdfQuote: 'PDF — пропозиція клієнту', + exportPng: 'Зображення PNG', + exportXlsx: 'Книга XLSX', + exportCsv: 'CSV (таблиця)', + exportMarkdown: 'Markdown', + exportJson: 'JSON (резервна копія)', + exportCopySummary: 'Копіювати підсумок', + }, + becomeRolesUi: { + artist: { + seoTitle: 'Стати дизайнером / художником - SkateSpots', + seoDescription: 'Розмістіть свій скейт-дизайн та мистецтво — графику для дощок, логотипи, плакати, мерч та інше.', + heading: 'Дизайнер / Художник', + tagline: 'Графіка для дощок, логотипи, плакати, мерч — покажіть своє мистецтво сцені', + noun: 'художник', + rateLabel: 'Ставка', + portfolioLabel: 'Портфоліо / посилання на магазин', + sectionWhatYouMake: 'Що ви створюєте', + sectionMedium: 'Матеріал / техніка', + sectionSoftwareTools: 'Софт та інструменти', + deliverablesPlaceholder: 'напр. файли для друку, вихідники, графіка для дощок', + turnaroundPlaceholder: 'напр. 3–5 днів', + }, + graffiti: { + seoTitle: 'Запропонувати графіті / мурали - SkateSpots', + seoDescription: 'Розмістіть свої графіті та мурали — роботи, настінні розписи, мистецтво для скейт-парків та інше.', + heading: 'Художник графіті / муралів', + tagline: 'Роботи, мурали, мистецтво для скейт-парків — розмалюйте сцену', + noun: 'графіті-художник', + rateLabel: 'Ставка', + portfolioLabel: 'Портфоліо (IG, сайт)', + sectionStyle: 'Стиль', + sectionMedium: 'Техніка', + sectionWorkContext: 'Контекст роботи', + crewLabel: 'Crew графіті', + crewPlaceholder: 'Ваш райтинг-Crew (необов’язково)', + crewHelper: 'Окремо від вашого скейт-Crew — ті, з ким ви малюєте.', + surfacesPlaceholder: 'напр. бетон, цегла, дозволені стіни', + maxSizePlaceholder: 'напр. до 10 м', + }, + musician: { + seoTitle: 'Додати музичний профіль - SkateSpots', + seoDescription: 'Катаєтеся та робите музику? Розмістіть свій гурт або сольний проєкт — жанри, інструменти та посилання.', + heading: 'Музикант / Гурт', + tagline: 'Катаєтеся та робите музику? Отримуйте замовлення на демо, джеми та афтерпаті', + noun: 'музикант', + rateLabel: 'Ставка за виступ', + portfolioLabel: 'Сайт / посилання на EPK', + sectionGenre: 'Жанр', + sectionInstruments: 'Інструменти та роль', + actLabel: 'Тип проєкту', + actPlaceholder: 'соло / гурт / dj / продюсер', + spotifyLabel: 'Spotify', + spotifyPlaceholder: 'https://open.spotify.com/…', + bandcampLabel: 'Bandcamp', + bandcampPlaceholder: 'https://…bandcamp.com', + soundcloudLabel: 'SoundCloud', + soundcloudPlaceholder: 'https://soundcloud.com/…', + youtubeLabel: 'YouTube', + youtubePlaceholder: 'https://youtube.com/…', + setLengthPlaceholder: 'напр. 30–45 хв', + techRiderPlaceholder: 'напр. PA, мікрофони, беклайн', + }, + judge: { + seoTitle: 'Судді скейт-подій - SkateSpots', + seoDescription: 'Розмістіть себе як суддю скейт-подій — Game of S.K.A.T.E., best trick, контести, аматорські серії та етапи світового туру. Отримуйте замовлення на чесні, авторитетні події.', + heading: 'Суддя скейт-подій', + tagline: 'Від Game of S.K.A.T.E. на площині до World Destruction Tour — судіть чесно та авторитетно', + noun: 'суддя', + rateLabel: 'Денна ставка / гонорар', + portfolioLabel: 'Архів результатів / посилання на профіль', + sectionEventFormats: 'Формати подій', + sectionSpecialty: 'Спеціалізація', + sectionLevelCircuit: 'Рівень / серія', + eventsJudgedLabel: 'Відсуджено подій', + eventsJudgedPlaceholder: 'напр. 40+ контестів, 3 етапи світового туру', + eventsJudgedHelper: 'Помітні події, контести чи тури, які ви судили.', + travelPlaceholder: 'напр. регіон / вся країна / міжнародний', + certificationsPlaceholder: 'напр. національний суддівський курс', + }, + organizer: { + seoTitle: 'Організовувати скейт-події - SkateSpots', + seoDescription: 'Розмістіть себе як організатора скейт-подій — стрит-джеми, best trick, контести, зустрічі, демо та етапи турів. Вас знайдуть і запросять провести сесію.', + heading: 'Організатор подій', + tagline: 'Джеми, контести, зустрічі та демо — проведіть сесію та об’єднайте сцену', + noun: 'організатор', + rateLabel: 'Гонорар / бюджет', + portfolioLabel: 'Минулі події / посилання на результати', + sectionEventTypes: 'Типи подій', + sectionWhatYouHandle: 'Що ви берете на себе', + sectionScale: 'Масштаб', + eventsHostedLabel: 'Організовано подій', + eventsHostedPlaceholder: 'напр. 25 джемів, 3 міські контести', + eventsHostedHelper: 'Помітні події, контести чи зустрічі, які ви проводили.', + insurancePlaceholder: 'напр. цивільна відповідальність включена', + permitsPlaceholder: 'напр. дозволи оформлено', + }, + tattoo: { + seoTitle: 'Стати тату-майстром - SkateSpots', + seoDescription: 'Розмістіть свої тату-роботи для скейт-сцени — стилі, флеші, кастом та інше.', + heading: 'Тату-майстер', + tagline: 'Тату для сцени — флеш, кастом, тонкі лінії та інше', + noun: 'тату-майстер', + rateLabel: 'Ставка / за годину', + portfolioLabel: 'Портфоліо (IG, сайт)', + sectionStyles: 'Стилі', + sectionMethod: 'Метод', + studioLabel: 'Студія / салон', + studioPlaceholder: 'Назва студії (необов’язково)', + booksOpenLabel: 'Запис відкрито', + booksOpenHelper: 'Чи приймаєте ви зараз записи?', + depositPlaceholder: 'напр. 50 EUR без повернення', + minimumPlaceholder: 'напр. 80 EUR', + }, + trainer: { + seoTitle: 'Стати тренером / фізіо - SkateSpots', + seoDescription: 'Допоможіть скейтерам стати сильнішими та залишатися здоровими — сила, мобільність, профілактика травм і відновлення.', + heading: 'Тренер / Фізіо', + tagline: 'Сила, мобільність, профілактика травм і відновлення для скейтерів', + noun: 'тренер', + rateLabel: 'Ставка / за сесію', + portfolioLabel: 'Профіль / посилання для запису', + sectionFocus: 'Напрям', + sectionInjuries: 'Травми, з якими працюєте', + sectionCredentialsSetting: 'Кваліфікація та умови', + credentialsPlaceholder: 'напр. BSc фізіотерапії, CSCS…', + credentialsHelper: 'Вказуйте реальну кваліфікацію — скейтери довіряють перевірним документам.', + remoteLabel: 'Віддалено / онлайн', + remoteHelper: 'Чи пропонуєте ви онлайн-тренування або консультації?', + modalitiesPlaceholder: 'напр. мануальна терапія, ЗФП, сухе голковколювання', + }, + barber: { + seoTitle: 'Стати барбером / перукарем - SkateSpots', + seoDescription: 'Розмістіть свій барбершоп або крісло для скейт-сцени — стрижки, фейди, стрижка бороди, фарбування та інше. Отримуйте записи від скейтерів.', + heading: 'Барбер / Перукар', + tagline: 'Стрижки, фейди та борода для сцени — крісло в салоні або виїзд', + noun: 'барбер', + rateLabel: 'Ціна / стрижка', + portfolioLabel: 'Галерея стрижок / посилання на IG', + sectionWhatYouOffer: 'Що ви пропонуєте', + sectionSignatureStyles: 'Фірмові стилі', + sectionSetting: 'Умови', + studioLabel: 'Салон / студія', + studioPlaceholder: 'Назва салону або студії (необов’язково)', + booksOpenLabel: 'Запис відкрито', + booksOpenHelper: 'Чи приймаєте ви зараз записи?', + durationPlaceholder: 'напр. 30–45 хв', + }, + }, + weatherUi: { + condition: { + clearSky: 'Ясне небо', + mainlyClear: 'Переважно ясно', + partlyCloudy: 'Мінлива хмарність', + overcast: 'Похмуро', + foggy: 'Туман', + depositingRimeFog: 'Туман з інеєм', + lightDrizzle: 'Слабка мряка', + moderateDrizzle: 'Помірна мряка', + denseDrizzle: 'Сильна мряка', + lightFreezingDrizzle: 'Слабка крижана мряка', + denseFreezingDrizzle: 'Сильна крижана мряка', + slightRain: 'Невеликий дощ', + moderateRain: 'Помірний дощ', + heavyRain: 'Сильний дощ', + lightFreezingRain: 'Слабкий крижаний дощ', + heavyFreezingRain: 'Сильний крижаний дощ', + slightSnow: 'Невеликий сніг', + moderateSnow: 'Помірний сніг', + heavySnow: 'Сильний сніг', + snowGrains: 'Снігова крупа', + slightRainShowers: 'Невеликі зливи', + moderateRainShowers: 'Помірні зливи', + violentRainShowers: 'Сильні зливи', + slightSnowShowers: 'Невеликі снігопади', + heavySnowShowers: 'Сильні снігопади', + thunderstorm: 'Гроза', + thunderstormSlightHail: 'Гроза з невеликим градом', + thunderstormHeavyHail: 'Гроза з сильним градом', + unknown: 'Невідомо', + }, + aqi: { + good: 'Добре', + moderate: 'Помірно', + unhealthySensitive: 'Шкідливо для чутливих груп', + unhealthy: 'Шкідливо', + veryUnhealthy: 'Дуже шкідливо', + hazardous: 'Небезпечно', + }, + skateability: { + perfect: 'Ідеально', + good: 'Добре', + okay: 'Нормально', + poor: 'Погано', + bad: 'Дуже погано', + unrideable: 'Некатабельно', + }, + reason: { + currentlyRaining: 'Зараз іде дощ', + raining: 'Дощ', + snowing: 'Сніг', + thunderstorm: 'Гроза', + freezingTemperature: 'Мінусова температура', + veryCold: 'Дуже холодно', + extremelyHot: 'Надзвичайно спекотно', + veryHot: 'Дуже спекотно', + veryStrongWind: 'Дуже сильний вітер', + strongWind: 'Сильний вітер', + moderateWind: 'Помірний вітер', + veryUnhealthyAir: 'Дуже брудне повітря', + unhealthyAir: 'Брудне повітря', + moderateAirQuality: 'Середня якість повітря', + veryHumid: 'Дуже волого', + humid: 'Волого', + extremeUv: 'Екстремальний УФ — використовуйте сонцезахисний крем', + highUv: 'Високий УФ — рекомендується захист від сонця', + perfectConditions: 'Ідеальні умови для катання', + }, + }, + skaterLabelsUi: { + stance: { + regular: 'Regular', + goofy: 'Goofy', + }, + style: { + street: 'Street', + park: 'Park', + vert: 'Vert', + transition: 'Transition', + bowl: 'Bowl', + cruising: 'Cruising', + downhill: 'Downhill', + freestyle: 'Freestyle', + ledges: 'Ledges', + stairs: 'Stairs', + diy: 'DIY', + }, + level: { + grom: 'Grom', + intermediate: 'Середній', + advanced: 'Просунутий', + ripper: 'Ripper', + }, + sponsor: { + title: 'Титульний спонсор', + gold: 'Золото', + silver: 'Срібло', + partner: 'Партнер', + }, + }, + notifyUi: { + activity: { + zappedWithAmount: 'Вам надіслали zap на {{sats}} sats', + zapped: 'Вам надіслали zap', + liked: 'Комусь сподобався ваш допис', + reposted: 'Хтось зробив репост вашого допису', + mentioned: 'Хтось згадав вас', + replied: 'Хтось відповів вам', + rsvp: 'Хтось підтвердив участь у вашій події', + eventUpdated: 'Подію, на яку ви йдете, оновлено', + newActivity: 'Нова активність', + tapToOpen: 'Натисніть, щоб відкрити SkateSpots', + }, + crew: { + inviteTitle: 'Запрошення до Crew', + inviteBody: 'Вас запрошують до {{crew}}', + addedTitle: 'Вас додали до Crew', + addedBody: '{{crew}} — підтвердіть, щоб приєднатися', + joinRequestTitle: 'Запит на приєднання', + joinRequestBody: 'Хтось хоче приєднатися до {{name}}', + }, + dm: { + title: 'Нове особисте повідомлення', + body: 'Натисніть, щоб прочитати', + }, + trade: { + confirm: 'Підтвердіть угоду', + confirmed: 'Угоду підтверджено', + newOffer: 'Нова пропозиція щодо вашого оголошення', + counter: 'Зустрічна пропозиція', + accepted: 'Пропозицію прийнято 🎉', + declined: 'Пропозицію відхилено', + withdrawn: 'Пропозицію відкликано', + }, + newsletter: { + drop: 'Новий випуск SkateSpots', + }, + summary: { + moreUpdates: 'Ще {{count}} оновлень', + openToCatchUp: 'Відкрийте SkateSpots, щоб наздогнати', + }, + }, + legacyMiscUi: { + hostingGoing: '{{count}} йдуть', + hostingInterested: '{{count}} цікавляться', + hostingPostUpdate: 'Опублікувати оновлення', + hostingEdit: 'Редагувати', + hostingLoginToSee: 'Увійдіть, щоб побачити події, які ви проводите.', + hostingEmptyTitle: 'Ви поки нічого не проводите', + hostingEmptyBody: 'Проведіть джем, контест або сесію. Створіть подію — скейтери зможуть відгукнутися, отримувати оновлення та приїхати.', + hostingCreateEvent: 'Створити подію', + hostingUpcoming: 'Майбутні · {{count}}', + hostingPast: 'Минулі · {{count}}', + sponsorPartners: 'Партнери', + sponsorTitleSponsor: 'Титульний спонсор', + sponsorPlatformPartners: 'Партнери платформи', + reportsUntitled: '(без назви)', + reportsResolveFailed: 'Не вдалося знайти подію зі скарги (можливо, її видалено, або скарга стосується профілю, а не допису).', + reportsLookAtIt: 'Подивитися', + reportsNoReports: 'Скарг поки немає. Або все гаразд, або ніхто не знайшов кнопку.', + statusSetYourStatus: 'Установіть статус', + statusSetDesc: 'Розкажіть іншим, чим ви зайняті. Ваш статус буде видно у профілі та на пов’язаних Spot.', + statusClear: 'Очистити', + statusOrWriteOwn: 'Або напишіть свій', + statusCustomPlaceholder: 'Чим ви зайняті?', + statusLinkToSpot: 'Прив’язати до Spot (необов’язково)', + statusSpotSelected: 'Spot вибрано', + statusSearchSpots: 'Пошук Spot...', + statusNoSpotsFound: 'Spot не знайдено.', + statusSelectSpot: 'Виберіть Spot', + statusAutoClearAfter: 'Автоочищення через: {{time}}', + statusExpMin: '{{count}} хв', + statusExpOneHour: '1 година', + statusExpHours: '{{count}} год', + statusExpOneDay: '1 день', + statusExpDays: '{{count}} дн.', + statusSlider15: '15 хв', + statusSlider1h: '1 год', + statusSlider4h: '4 год', + statusSlider24h: '24 год', + statusSetting: 'Установлення статусу...', + statusSet: 'Установити статус', + statusSomethingWrong: 'Щось пішло не так', + seoProfileTitle: 'Профіль - SkateSpots', + seoViewProfile: 'Переглянути профіль.', + bannerAlt: 'Банер', + openInCordn: 'Відкрити в Cordn', + modHelp: 'Сховати публікує org.skatespots.moderation / hidden; Підтвердити публікує … / verified; Скасувати публікує … / cleared (повернення до нейтрального). Усі три — публічні оборотні мітки, нічого ніколи не видаляється з релеїв.', + zapNoActiveMint: 'Активний Cashu-мінт не знайдено.', + altProfile: 'Профіль', + altCardPreview: 'Попередній перегляд картки', + altCard: 'Картка', + altCaptured: 'Знято', + ariaPrevPhoto: 'Попереднє фото', + ariaNextPhoto: 'Наступне фото', + ariaCommentOptions: 'Дії з коментарем', + ariaMessageConversation: 'Переписка', + exportTitle: 'SkateSpots — Калькулятор собівартості Deck', + exportQuoteTitle: 'ПРОПОЗИЦІЯ', + exportPngTitle: 'Собівартість Deck', + exportMarkdownTitle: 'Калькулятор собівартості Deck', + exportSectionLabor: 'Праця', + exportSectionEquipment: 'Обладнання', + exportSectionOperations: 'Операційні витрати', + exportSectionMaterials: 'Матеріали', + exportSectionProcesses: 'Вартість процесів', + exportSectionPackaging: 'Пакування', + exportSectionResult: 'Результат', + exportLabelOperations: 'Операції', + exportLabelProcesses: 'Процеси', + exportKvHourlyRate: 'Погодинна ставка', + exportKvLabourBurden: 'Навантаження на працю', + exportKvLoadedRate: 'Повна ставка', + exportKvEquipmentPerBoard: 'Обладнання на дошку', + exportKvBoardsPerMonth: 'Дощок / місяць', + exportKvRentPerMonth: 'Оренда / місяць', + exportKvUtilitiesPerMonth: 'Комунальні / місяць', + exportKvSubscriptionsPerMonth: 'Підписки / місяць', + exportKvPerBoard: 'На дошку', + exportKvMaterialsPerBoard: 'Матеріали на дошку', + exportKvProcessesPerBoard: 'Процеси на дошку', + exportKvPackagingPerBoard: 'Пакування на дошку', + exportKvMarkup: 'Націнка', + exportMarkupValue: '{{markup}}× (≈ {{pct}}% валової маржі)', + exportKvWasteEffective: 'Відходи (ефективні)', + exportKvCostNoPack: 'Собівартість / дошка (без пакування)', + exportKvCostWithPack: 'Собівартість / дошка (з пакуванням)', + exportKvBatchSetupPerBoard: 'Налаштування партії / дошка', + exportKvTax: 'Податок ({{pct}}%)', + exportKvTaxIncluded: 'Податок ({{pct}}%, включено)', + exportKvSellingNoPack: 'Ціна продажу (без пакування)', + exportKvSellingWithPack: 'Ціна продажу (з пакуванням)', + exportShippingNote: 'Не включає доставку покупцеві.', + exportGeneratedBy: 'Створено в SkateSpots · skate-spots.org', + exportGeneratedWith: 'Створено за допомогою SkateSpots · skate-spots.org', + exportDetailSetup: '+ {{hours}} год налаштування', + exportDetailBoards: '{{boards}} дощок', + exportDetailShip: '+ {{amount}} доставка', + exportDetailMinutes: '{{minutes}} хв', + exportDetailPerBoards: '/ {{boards}} дощок', + exportDetailScrap: '{{pct}}% відходів', + exportDetailMaterials: '{{materials}} матеріалів', + exportQuoteRef: '№ {{ref}}', + exportQuoteLineItem: 'Кастомний скейтборд deck', + exportQuoteLineItemQty: 'Кастомний скейтборд deck × {{qty}}', + exportQuoteLineDesc: 'Зібрано вручну, оздоблено та упаковано. Кількість 1.', + exportQuoteLineDescQty: 'Зібрано вручну, оздоблено та упаковано. {{price}} за штуку.', + exportQuoteSubtotal: 'Проміжний підсумок', + exportQuoteSubtotalQty: 'Проміжний підсумок ({{qty}} decks)', + exportQuoteTax: 'Податок / ПДВ ({{pct}}%)', + exportQuoteTotal: 'Разом', + exportQuoteTotalQty: 'Разом ({{qty}} decks)', + exportQuoteIncludesTax: 'Включає податок {{pct}}% ({{amount}})', + exportQuoteDeposit: 'Передоплата зараз ({{pct}}%)', + exportQuoteBalance: 'Залишок після завершення', + exportQuotePayment: 'Оплата: {{value}}', + exportQuoteLightning: 'Lightning: {{value}}', + exportQuoteDetails: 'Реквізити: {{value}}', + exportQuoteTerms: 'Умови: {{value}}', + exportQuoteDelivery: 'Доставка: {{value}}', + exportQuoteValidUntil: 'Не включає доставку. Пропозиція дійсна до {{date}}.', + exportPngSellingWith: 'ЦІНА ПРОДАЖУ · З ПАКУВАННЯМ', + exportPngSellingNo: 'ЦІНА ПРОДАЖУ · БЕЗ ПАКУВАННЯ', + exportPngCostWith: 'СОБІВАРТІСТЬ / ДОШКА (З ПАКУВАННЯМ)', + exportPngDeposit: 'Передоплата {{pct}}%: {{amount}}', + exportXlsxSummary: 'Підсумок', + exportXlsxCurrency: 'Валюта', + exportXlsxDate: 'Дата', + exportXlsxOperationsPerBoard: 'Операції на дошку', + exportColCost: 'Вартість', + exportColSetupH: 'Налаштування (год)', + exportColBoards: 'Дошки', + exportColPerBoard: 'На дошку', + exportColMaterial: 'Матеріал', + exportColOrderCost: 'Вартість замовлення', + exportColShipping: 'Доставка', + exportColOrderMin: 'Замовлення (хв)', + exportColUnloadMin: 'Розвантаження (хв)', + exportColProcess: 'Процес', + exportColTimeMin: 'Час (хв)', + exportColTimeBoardMin: 'Час/дошка (хв)', + exportColMaterialsBoard: 'Матеріали/дошка', + exportCopyTitle: 'Собівартість Deck — {{currency}}', + exportCopyCostWith: 'Собівартість / дошка (з пакуванням): {{amount}}', + exportCopySellingNo: 'Ціна продажу (без пакування): {{amount}}', + exportCopySellingWith: 'Ціна продажу (з пакуванням): {{amount}}', + exportCopyBreakdown: 'Обладнання {{equipment}} · Операції {{operations}} · Матеріали {{materials}} · Процеси {{processes}} · Пакування {{packaging}}', + exportMdHourlyRate: 'Погодинна ставка: {{value}}', + exportMdLabourBurden: 'Навантаження на працю: {{value}}', + exportMdLoadedRate: 'Повна ставка: {{value}}', + exportMdBoardsPerMonth: 'Дощок/місяць: {{value}}', + exportMdRent: 'Оренда: {{value}}', + exportMdUtilities: 'Комунальні: {{value}}', + exportMdSubscriptions: 'Підписки: {{value}}', + exportMdPerBoard: 'На дошку: {{value}}', + exportMdMarkupWaste: 'Націнка: {{markup}}× (≈ {{pct}}% валової маржі) · Відходи: {{waste}}%', + exportMdCostNoPack: 'Собівартість/дошка (без пакування): {{value}}', + exportMdCostWithPack: 'Собівартість/дошка (з пакуванням): {{value}}', + exportMdBatchSetup: 'Налаштування партії/дошка: {{value}}', + exportMdSellingNo: 'Ціна продажу (без пакування): {{value}}', + exportMdSellingWith: 'Ціна продажу (з пакуванням): {{value}}', + exportMdDisclaimer: 'Не включає доставку покупцеві. Створено в SkateSpots.', + }, +}; export default ukBatch8; diff --git a/src/pages/CreateTourPage.tsx b/src/pages/CreateTourPage.tsx index c8f01d3..d030e66 100644 --- a/src/pages/CreateTourPage.tsx +++ b/src/pages/CreateTourPage.tsx @@ -38,6 +38,7 @@ const COMMON_LANGUAGES = [ { code: 'ja', label: 'Japanese', flag: '🇯🇵' }, { code: 'zh-CN', label: 'Chinese (Simplified)', flag: '🇨🇳' }, { code: 'zh-TW', label: 'Chinese (Traditional)', flag: '🇹🇼' }, + { code: 'uk', label: 'Ukrainian', flag: '🇺🇦' }, { code: 'id', label: 'Indonesian', flag: '🇮🇩' }, { code: 'cs', label: 'Czech', flag: '🇨🇿' }, { code: 'ro', label: 'Romanian', flag: '🇷🇴' },