diff --git a/backend/server/adventures/serializers.py b/backend/server/adventures/serializers.py index a0bf6e0b..a658e843 100644 --- a/backend/server/adventures/serializers.py +++ b/backend/server/adventures/serializers.py @@ -7,8 +7,6 @@ from worldtravel.serializers import CountrySerializer, RegionSerializer, CitySer from geopy.distance import geodesic from integrations.models import ImmichIntegration from adventures.utils.geojson import gpx_to_geojson -import gpxpy -import geojson import logging logger = logging.getLogger(__name__) diff --git a/backend/server/adventures/views/generate_description_view.py b/backend/server/adventures/views/generate_description_view.py index 988773af..c4f16eff 100644 --- a/backend/server/adventures/views/generate_description_view.py +++ b/backend/server/adventures/views/generate_description_view.py @@ -3,42 +3,137 @@ from rest_framework.decorators import action from rest_framework.permissions import IsAuthenticated from rest_framework.response import Response import requests +from django.conf import settings +import urllib.parse +import logging + +logger = logging.getLogger(__name__) class GenerateDescription(viewsets.ViewSet): permission_classes = [IsAuthenticated] + + # User-Agent header required by Wikipedia API + HEADERS = { + 'User-Agent': f'AdventureLog/{getattr(settings, "ADVENTURELOG_RELEASE_VERSION", "unknown")}' + } - @action(detail=False, methods=['get'],) + @action(detail=False, methods=['get']) def desc(self, request): name = self.request.query_params.get('name', '') - # un url encode the name - name = name.replace('%20', ' ') - name = self.get_search_term(name) - url = 'https://en.wikipedia.org/w/api.php?origin=*&action=query&prop=extracts&exintro&explaintext&format=json&titles=%s' % name - response = requests.get(url) - data = response.json() - data = response.json() - page_id = next(iter(data["query"]["pages"])) - extract = data["query"]["pages"][page_id] - if extract.get('extract') is None: - return Response({"error": "No description found"}, status=400) - return Response(extract) - @action(detail=False, methods=['get'],) + if not name: + return Response({"error": "Name parameter is required"}, status=400) + + # Properly URL decode the name + name = urllib.parse.unquote(name) + search_term = self.get_search_term(name) + + if not search_term: + return Response({"error": "No matching Wikipedia article found"}, status=404) + + # Properly URL encode the search term for the API + encoded_term = urllib.parse.quote(search_term) + url = f'https://en.wikipedia.org/w/api.php?origin=*&action=query&prop=extracts&exintro&explaintext&format=json&titles={encoded_term}' + + try: + response = requests.get(url, headers=self.HEADERS, timeout=10) + response.raise_for_status() + data = response.json() + + pages = data.get("query", {}).get("pages", {}) + if not pages: + return Response({"error": "No page data found"}, status=404) + + page_id = next(iter(pages)) + page_data = pages[page_id] + + # Check if page exists (page_id of -1 means page doesn't exist) + if page_id == "-1": + return Response({"error": "Wikipedia page not found"}, status=404) + + if not page_data.get('extract'): + return Response({"error": "No description found"}, status=404) + + return Response(page_data) + + except requests.exceptions.RequestException as e: + logger.exception("Failed to fetch data from Wikipedia") + return Response({"error": "Failed to fetch data from Wikipedia."}, status=500) + except ValueError as e: # JSON decode error + return Response({"error": "Invalid response from Wikipedia API"}, status=500) + + @action(detail=False, methods=['get']) def img(self, request): name = self.request.query_params.get('name', '') - # un url encode the name - name = name.replace('%20', ' ') - name = self.get_search_term(name) - url = 'https://en.wikipedia.org/w/api.php?origin=*&action=query&prop=pageimages&format=json&piprop=original&titles=%s' % name - response = requests.get(url) - data = response.json() - page_id = next(iter(data["query"]["pages"])) - extract = data["query"]["pages"][page_id] - if extract.get('original') is None: - return Response({"error": "No image found"}, status=400) - return Response(extract["original"]) + if not name: + return Response({"error": "Name parameter is required"}, status=400) + + # Properly URL decode the name + name = urllib.parse.unquote(name) + search_term = self.get_search_term(name) + + if not search_term: + return Response({"error": "No matching Wikipedia article found"}, status=404) + + # Properly URL encode the search term for the API + encoded_term = urllib.parse.quote(search_term) + url = f'https://en.wikipedia.org/w/api.php?origin=*&action=query&prop=pageimages&format=json&piprop=original&titles={encoded_term}' + + try: + response = requests.get(url, headers=self.HEADERS, timeout=10) + response.raise_for_status() + data = response.json() + + pages = data.get("query", {}).get("pages", {}) + if not pages: + return Response({"error": "No page data found"}, status=404) + + page_id = next(iter(pages)) + page_data = pages[page_id] + + # Check if page exists + if page_id == "-1": + return Response({"error": "Wikipedia page not found"}, status=404) + + original_image = page_data.get('original') + if not original_image: + return Response({"error": "No image found"}, status=404) + + return Response(original_image) + + except requests.exceptions.RequestException as e: + logger.exception("Failed to fetch data from Wikipedia") + return Response({"error": "Failed to fetch data from Wikipedia."}, status=500) + except ValueError as e: # JSON decode error + return Response({"error": "Invalid response from Wikipedia API"}, status=500) def get_search_term(self, term): - response = requests.get(f'https://en.wikipedia.org/w/api.php?action=opensearch&search={term}&limit=10&namespace=0&format=json') - data = response.json() - if data[1] and len(data[1]) > 0: - return data[1][0] \ No newline at end of file + if not term: + return None + + # Properly URL encode the search term + encoded_term = urllib.parse.quote(term) + url = f'https://en.wikipedia.org/w/api.php?action=opensearch&search={encoded_term}&limit=10&namespace=0&format=json' + + try: + response = requests.get(url, headers=self.HEADERS, timeout=10) + response.raise_for_status() + + # Check if response is empty + if not response.text.strip(): + return None + + data = response.json() + + # OpenSearch API returns an array with 4 elements: + # [search_term, [titles], [descriptions], [urls]] + if len(data) >= 2 and data[1] and len(data[1]) > 0: + return data[1][0] # Return the first title match + + return None + + except requests.exceptions.RequestException: + # If search fails, return the original term as fallback + return term + except ValueError: # JSON decode error + # If JSON parsing fails, return the original term as fallback + return term \ No newline at end of file diff --git a/frontend/pnpm-lock.yaml b/frontend/pnpm-lock.yaml index 0531978f..2e135aa8 100644 --- a/frontend/pnpm-lock.yaml +++ b/frontend/pnpm-lock.yaml @@ -853,8 +853,8 @@ packages: resolution: {integrity: sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==} engines: {node: '>=8'} - devalue@5.1.1: - resolution: {integrity: sha512-maua5KUiapvEwiEAe+XnlZ3Rh0GD+qI1J/nb9vrJc3muPXvcF/8gXYTWF76+5DAqHyDUtOIImEuo0YKE9mshVw==} + devalue@5.3.2: + resolution: {integrity: sha512-UDsjUbpQn9kvm68slnrs+mfxwFkIflOhkanmyabZ8zOYk8SMEIbJ3TK+88g70hSIeytu4y18f0z/hYHMTrXIWw==} didyoumean@1.2.2: resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} @@ -2235,7 +2235,7 @@ snapshots: '@sveltejs/vite-plugin-svelte': 3.1.2(svelte@4.2.19)(vite@5.4.19(@types/node@22.15.2)) '@types/cookie': 0.6.0 cookie: 0.6.0 - devalue: 5.1.1 + devalue: 5.3.2 esm-env: 1.2.2 import-meta-resolve: 4.1.0 kleur: 4.1.5 @@ -2535,7 +2535,7 @@ snapshots: detect-libc@2.0.4: {} - devalue@5.1.1: {} + devalue@5.3.2: {} didyoumean@1.2.2: {} diff --git a/frontend/src/locales/ru.json b/frontend/src/locales/ru.json index 4894dae2..5426a815 100644 --- a/frontend/src/locales/ru.json +++ b/frontend/src/locales/ru.json @@ -1,1018 +1,1021 @@ { - "navbar": { - "adventures": "Приключения", - "collections": "Коллекции", - "worldtravel": "Мировые путешествия", - "map": "Карта", - "users": "Пользователи", - "search": "Поиск", - "profile": "Профиль", - "greeting": "Привет", - "my_adventures": "Мои приключения", - "my_tags": "Мои теги", - "tag": "Тег", - "shared_with_me": "Поделились со мной", - "settings": "Настройки", - "logout": "Выйти", - "about": "О AdventureLog", - "documentation": "Документация", - "language_selection": "Язык", - "support": "Поддержка", - "calendar": "Календарь", - "theme_selection": "Выбор темы", - "admin_panel": "Панель администратора", - "themes": { - "aestheticDark": "Эстетическая темнота", - "aestheticLight": "Эстетический свет", - "aqua": "Аква", - "dark": "Темный", - "dim": "Тусклый", - "forest": "Лес", - "light": "Свет", - "night": "Ночь", - "northernLights": "Северное сияние" - }, - "navigation": "Навигация" - }, - "about": { - "about": "О программе", - "license": "Лицензировано под лицензией GPL-3.0.", - "source_code": "Исходный код", - "message": "Сделано с ❤️ в США.", - "oss_attributions": "Атрибуции открытого исходного кода", - "nominatim_1": "Поиск местоположений и геокодирование предоставляется", - "nominatim_2": "Их данные лицензированы под лицензией ODbL.", - "other_attributions": "Дополнительные атрибуции можно найти в файле README.", - "generic_attributions": "Войдите в AdventureLog, чтобы просмотреть атрибуции для включённых интеграций и сервисов.", - "close": "Закрыть", - "attributions": "Атрибуты", - "developer": "Разработчик", - "license_info": "Лицензия", - "sponsor": "Спонсор", - "thank_you": "Спасибо за использование AdventureLog!", - "version": "Версия", - "view_changelog": "Посмотреть изменение изменений", - "view_license": "Просмотреть лицензию" - }, - "home": { - "hero_1": "Откройте для себя самые захватывающие приключения мира", - "hero_2": "Открывайте и планируйте своё следующее приключение с AdventureLog. Исследуйте захватывающие дух места, создавайте персональные маршруты и оставайтесь на связи в пути.", - "go_to": "Перейти к AdventureLog", - "key_features": "Ключевые особенности", - "desc_1": "Открывайте, планируйте и исследуйте с лёгкостью", - "desc_2": "AdventureLog создан для упрощения вашего путешествия, предоставляя вам инструменты и ресурсы для планирования, сборов и навигации в вашем следующем незабываемом приключении.", - "feature_1": "Журнал путешествий", - "feature_1_desc": "Ведите учёт своих приключений с персональным журналом путешествий и делитесь своими впечатлениями с друзьями и семьёй.", - "feature_2": "Планирование поездок", - "feature_2_desc": "Легко создавайте персональные маршруты и получайте подробную разбивку поездки по дням.", - "feature_3": "Карта путешествий", - "feature_3_desc": "Просматривайте свои путешествия по всему миру с интерактивной картой и открывайте новые направления.", - "explore_world": "Исследуйте мир", - "latest_travel_experiences": "Ваш последний опыт путешествий", - "of_world": "мира", - "start_your_journey": "Начните свое путешествие" - }, - "adventures": { - "invalid_date_range": "Недопустимый диапазон дат", - "timezone": "Часовой пояс", - "no_visits": "Нет посещений", - "departure_timezone": "Часовой пояс отправления", - "arrival_timezone": "Часовой пояс прибытия", - "departure_date": "Дата отправления", - "arrival_date": "Дата прибытия", - "no_image_found": "Изображение не найдено", - "checklist_delete_confirm": "Вы уверены, что хотите удалить этот контрольный список? Это действие нельзя отменить.", - "note_delete_confirm": "Вы уверены, что хотите удалить эту заметку? Это действие нельзя отменить.", - "transportation_delete_confirm": "Вы уверены, что хотите удалить этот транспорт? Это действие нельзя отменить.", - "lodging_delete_confirm": "Вы уверены, что хотите удалить это место проживания? Это действие нельзя отменить.", - "delete_checklist": "Удалить контрольный список", - "delete_note": "Удалить заметку", - "delete_transportation": "Удалить транспорт", - "delete_lodging": "Удалить жильё", - "open_details": "Открыть детали", - "edit_adventure": "Редактировать приключение", - "remove_from_collection": "Убрать из коллекции", - "add_to_collection": "Добавить в коллекцию", - "delete": "Удалить", - "homepage": "Главная страница", - "collection": "Коллекция", - "longitude": "Долгота", - "latitude": "Широта", - "visit": "Посещение", - "timed": "По времени", - "coordinates": "Координаты", - "copy_coordinates": "Копировать координаты", - "visits": "Посещения", - "create_new": "Создать новое...", - "adventure": "Приключение", - "count_txt": "результатов соответствуют вашему поиску", - "sort": "Сортировка", - "order_by": "Сортировать по", - "order_direction": "Направление сортировки", - "ascending": "По возрастанию", - "descending": "По убыванию", - "updated": "Обновлено", - "name": "Название", - "date": "Дата", - "activity_types": "Типы активности", - "tags": "Теги", - "add_a_tag": "Добавить тег", - "date_constrain": "Ограничить датами коллекции", - "rating": "Рейтинг", - "my_images": "Мои изображения", - "no_images": "Нет изображений", - "distance": "Расстояние", - "copy_link": "Копировать ссылку", - "sun_times": "Время солнца", - "sunrise": "Восход", - "sunset": "Закат", - "image": "Изображение", - "upload_image": "Загрузить изображение", - "open_in_maps": "Открыть в картах", - "url": "URL", - "fetch_image": "Получить изображение", - "wikipedia": "Википедия", - "add_notes": "Добавить заметки", - "warning": "Предупреждение", - "my_adventures": "Мои приключения", - "no_linkable_adventures": "Не найдено приключений, которые можно связать с этой коллекцией.", - "add": "Добавить", - "save_next": "Сохранить и далее", - "end_date": "Дата окончания", - "start_date": "Дата начала", - "remove": "Удалить", - "location": "Местоположение", - "search_for_location": "Поиск местоположения", - "clear_map": "Очистить карту", - "search_results": "Результаты поиска", - "collection_no_start_end_date": "Добавление дат начала и окончания коллекции разблокирует функции планирования маршрута на странице коллекции.", - "no_results": "Результаты не найдены", - "attachments": "Вложения", - "attachment": "Вложение", - "images": "Изображения", - "generate_desc": "Сгенерировать описание", - "location_information": "Информация о местоположении", - "link": "Ссылка", - "links": "Ссылки", - "description": "Описание", - "sources": "Источники", - "collection_adventures": "Включить приключения коллекции", - "filter": "Фильтр", - "category_filter": "Фильтр категории", - "category": "Категория", - "clear": "Очистить", - "my_collections": "Мои коллекции", - "open_filters": "Открыть фильтры", - "archived_collections": "Архивные коллекции", - "share": "Поделиться", - "private": "Приватное", - "public": "Публичное", - "archived": "Архивное", - "edit_collection": "Редактировать коллекцию", - "unarchive": "Разархивировать", - "archive": "Архивировать", - "not_visited": "Не посещено", - "archived_collection_message": "Коллекция успешно архивирована!", - "unarchived_collection_message": "Коллекция успешно разархивирована!", - "delete_collection_success": "Коллекция успешно удалена!", - "cancel": "Отмена", - "delete_collection": "Удалить коллекцию", - "visited": "Посещено", - "planned": "Запланировано", - "duration": "Продолжительность", - "all": "Все", - "image_removed_success": "Изображение успешно удалено!", - "image_removed_error": "Ошибка удаления изображения", - "no_image_url": "Изображение по этому URL не найдено.", - "image_upload_success": "Изображение успешно загружено!", - "image_upload_error": "Ошибка загрузки изображения", - "dates": "Даты", - "wiki_image_error": "Ошибка получения изображения из Википедии", - "start_before_end_error": "Дата начала должна быть раньше даты окончания", - "actions": "Действия", - "see_adventures": "Посмотреть приключения", - "image_fetch_failed": "Не удалось получить изображение", - "no_location": "Пожалуйста, введите местоположение", - "no_description_found": "Описание не найдено", - "lodging": "Жильё", - "set_to_pin": "Установить как булавку", - "category_fetch_error": "Ошибка получения категорий", - "basic_information": "Основная информация", - "display_name": "Отображаемое имя", - "adventure_not_found": "Нет приключений для отображения. Добавьте их, используя кнопку плюс в правом нижнем углу, или попробуйте изменить фильтры!", - "no_adventures_found": "Приключения не найдены", - "mark_visited": "Отметить как посещённое", - "error_updating_regions": "Ошибка обновления регионов", - "regions_updated": "регионов обновлено", - "cities_updated": "городов обновлено", - "visited_region_check": "Проверка посещённых регионов", - "visited_region_check_desc": "Выбрав это, сервер проверит все ваши посещённые приключения и отметит регионы, в которых они находятся, как посещённые в мировых путешествиях.", - "update_visited_regions": "Обновить посещённые регионы", - "update_visited_regions_disclaimer": "Это может занять некоторое время в зависимости от количества ваших посещённых приключений.", - "link_new": "Связать новое...", - "add_new": "Добавить новое...", - "transportation": "Транспорт", - "note": "Заметка", - "checklist": "Контрольный список", - "collection_archived": "Эта коллекция была архивирована.", - "visit_link": "Перейти по ссылке", - "collection_completed": "Вы завершили эту коллекцию!", - "collection_stats": "Статистика коллекции", - "keep_exploring": "Продолжайте исследовать!", - "linked_adventures": "Связанные приключения", - "notes": "Заметки", - "checklists": "Контрольные списки", - "transportations": "Транспорт", - "adventure_calendar": "Календарь приключений", - "day": "День", - "itineary_by_date": "Маршрут по дате", - "nothing_planned": "На этот день ничего не запланировано. Наслаждайтесь путешествием!", - "copied_to_clipboard": "Скопировано в буфер обмена!", - "copy_failed": "Копирование не удалось", - "show": "Показать", - "hide": "Скрыть", - "clear_location": "Очистить местоположение", - "starting_airport": "Аэропорт отправления", - "view_profile": "Просмотреть профиль", - "joined": "Присоединился", - "ending_airport": "Аэропорт прибытия", - "no_location_found": "Местоположение не найдено", - "from": "От", - "to": "До", - "start": "Начало", - "end": "Конец", - "emoji_picker": "Выбор эмодзи", - "download_calendar": "Скачать календарь", - "all_day": "Весь день", - "ordered_itinerary": "Упорядоченный маршрут", - "itinerary": "Маршрут", - "all_linked_items": "Все связанные элементы", - "date_itinerary": "Маршрут по дате", - "no_ordered_items": "Добавьте элементы с датами в коллекцию, чтобы увидеть их здесь.", - "date_information": "Информация о дате", - "flight_information": "Информация о рейсе", - "out_of_range": "Не в диапазоне дат маршрута", - "preview": "Предварительный просмотр", - "finding_recommendations": "Поиск скрытых жемчужин для вашего следующего приключения", - "location_details": "Детали местоположения", - "city": "Город", - "region": "Регион", - "md_instructions": "Напишите ваш markdown здесь...", - "days": "дней", - "attachment_upload_success": "Вложение успешно загружено!", - "attachment_upload_error": "Ошибка загрузки вложения", - "upload": "Загрузить", - "attachment_delete_success": "Вложение успешно удалено!", - "attachment_update_success": "Вложение успешно обновлено!", - "attachment_name": "Название вложения", - "gpx_tip": "Загрузите GPX-файлы во вложения, чтобы просматривать их на карте!", - "attachment_update_error": "Ошибка обновления вложения", - "activities": {}, - "lodging_information": "Информация о жилье", - "price": "Цена", - "reservation_number": "Номер бронирования", - "share_collection": "Поделитесь этой коллекцией!", - "filters_and_sort": "Фильтры", - "filters_and_stats": "Фильтры", - "no_adventures_message": "Начните документировать ваши приключения и планировать новые. \nУ каждого путешествия есть история, которую стоит рассказать.", - "travel_progress": "Прогресс путешествий", - "adventures_available": "Приключения доступны", - "all_adventures_already_linked": "Все приключения уже связаны с этой коллекцией.", - "collections_linked": "Коллекции связаны", - "create_collection_first": "Сначала создайте коллекцию, чтобы организовать ваши приключения и воспоминания.", - "delete_collection_warning": "Вы уверены, что хотите удалить эту коллекцию? \nЭто действие не может быть отменено.", - "done": "Сделанный", - "loading_adventures": "Загрузка приключений ...", - "name_location": "имя, местоположение", - "collection_contents": "Содержание коллекции", - "check_in": "Регистрироваться", - "check_out": "Проверить", - "collection_link_location_error": "Ошибка связывания местоположения с сбором", - "collection_link_location_success": "Местоположение, связанное с коллекцией успешно!", - "collection_locations": "Включите места для сбора", - "collection_remove_location_error": "Ошибка удаления местоположения из сбора", - "collection_remove_location_success": "Место удалено из коллекции успешно!", - "create_location": "Создать местоположение", - "delete_location": "Удалить местоположение", - "edit_location": "Редактировать местоположение", - "location_create_error": "Не удалось создать местоположение", - "location_created": "Место создано", - "location_delete_confirm": "Вы уверены, что хотите удалить это место? \nЭто действие не может быть отменено.", - "location_delete_success": "Место удалено успешно!", - "location_not_found": "Местоположение не найдено", - "location_not_found_desc": "Место, которое вы искали, не было найдено. \nПожалуйста, попробуйте другое место или проверьте позже.", - "location_update_error": "Не удалось обновить местоположение", - "location_updated": "Место обновлено", - "new_location": "Новое место", - "no_collections_to_add_location": "Коллекции не обнаружили, чтобы добавить это место.", - "no_locations_to_recommendations": "Никаких мест не найдено. \nДобавьте хотя бы одно место, чтобы получить рекомендации.", - "public_location": "Общественное местоположение", - "share_location": "Поделитесь этим расположением!", - "visit_calendar": "Посетите календарь", - "wiki_location_desc": "Вытягивает отрывок из статьи Википедии, соответствующей названию места.", - "will_be_marked_location": "будет отмечен по посещению после сохранения местоположения.", - "no_locations_found": "Никаких мест не найдено", - "image_modal_navigate": "Используйте клавиши со стрелками или нажмите, чтобы перемещаться", - "details": "Подробности", - "leave": "Оставлять", - "leave_collection": "Оставить коллекцию", - "leave_collection_warning": "Вы уверены, что хотите покинуть эту коллекцию? \nЛюбые места, которые вы добавили, будут не связаны и останутся в вашей учетной записи.", - "left_collection_message": "Успешно оставил коллекцию", - "loading_collections": "Загрузка коллекций ...", - "quick_start": "Быстрый старт", - "achievements": "Достижения", - "active_duration": "Активная продолжительность", - "activities_name": "Деятельность", - "activity_name": "Имя деятельности", - "activity_name_placeholder": "Утренняя пробежка", - "activity_name_required": "Требуется имя деятельности", - "activity_options": "Варианты деятельности", - "activity_statistics": "Статистика деятельности", - "activity_statistics_description": "Ваши достижения в области фитнеса и активности", - "add_activity": "Добавить деятельность", - "add_first_trail": "Добавьте свой первый след, используя кнопку выше", - "add_new_activity": "Добавить новую деятельность", - "add_new_trail": "Добавить новую тропу", - "add_trail": "Добавить след", - "add_visit": "Добавить визит", - "add_wanderer_trail": "Добавить тропу Странника", - "attachment_management": "Управление привязанностью", - "attachment_name_required": "Требуется имя вложения", - "attachment_remove_error": "Произошла ошибка при удалении вложения", - "attachment_removed": "Приложение удалено успешно", - "attachment_updated": "Вложение успешно обновлено", - "average_cadence": "Средняя каденция", - "average_speed": "Средняя скорость", - "avg_speed": "Средняя скорость", - "back": "Назад", - "cadence": "Каденция", - "calories": "Калории", - "click_map": "Нажмите на карту, чтобы выбрать местоположение", - "click_on_map": "Нажмите на карту, чтобы выбрать местоположение", - "complete_import": "Полный импорт", - "complete_strava_import": "Полный импорт Strava", - "confirm_delete_activity": "Вы уверены, что хотите удалить это занятие?", - "connect_to_wanderer": "Подключитесь к Wanderer", - "continue": "Продолжать", - "create_new_location": "Создайте новое место", - "create_trail": "Создать след", - "created": "Созданный", - "current_attachments": "Текущие вложения", - "date_selection": "Выбор даты", - "download_gpx": "Скачать gpx", - "edit_visit": "Редактировать посещение", - "elapsed_time": "Прошло время", - "elevation": "Возвышение", - "elevation_gain": "Увеличение возвышения", - "elevation_high": "Высота высота", - "elevation_loss": "Потеря высоты", - "elevation_low": "Высота", - "end_lat": "Конец широты", - "end_lng": "Конец долготы", - "export_gpx": "Экспорт GPX", - "export_original": "Экспорт оригинал", - "external_link": "Внешняя ссылка", - "gain": "прирост", - "getting_location_details": "Получение деталей местоположения", - "gpx_file": "Файл gpx", - "gpx_file_downloaded": "Файл gpx загружен. \nПожалуйста, загрузите его ниже, чтобы завершить импорт.", - "gpx_file_required": "Требуется файл GPX", - "image_management": "Управление изображением", - "import_activity": "Импортная деятельность", - "importing": "Импорт", - "likes": "Лайки", - "loading_activities": "Погрузка", - "location_display_name": "Отображение местоположения", - "location_map": "Расположение", - "location_selected": "Местоположение выбрано", - "max_speed": "Максимальная скорость", - "moving_time": "Время движения", - "next_image": "Следующее изображение", - "no_attachments_uploaded_yet": "Пока не загружены вложения", - "no_external_link": "Внешнее внешнее ссылка", - "no_file_selected": "Файл не выбран", - "no_images_uploaded_yet": "Пока не загружены изображения", - "no_strava_activities": "Во время этого визита не было найдено мероприятий Strava", - "no_trails_added": "Пока не добавили тропы", - "no_trails_available": "Нет тропинок", - "no_trails_found_matching": "Трейлей не найдено подходящими", - "no_visits_description": "Создайте свой первый посещение, выбрав даты выше", - "notes_placeholder": "Добавить заметки об этом визите", - "or": "ИЛИ", - "pace": "Шаг", - "photos": "Фото", - "previous_image": "Предыдущее изображение", - "processing": "Обработка", - "public_location_description": "Сделайте это место видимым другим пользователям", - "remove_visit": "Удалить посещение", - "rest_time": "Время отдыха", - "saved_activities": "Спасенные действия", - "search_location": "Поиск места", - "search_placeholder": "Войдите в город, место или достопримечательность ...", - "search_trails_placeholder": "Поисковые следы по имени", - "searching": "Идет поиск", - "select_on_map": "Выберите на карте", - "select_wanderer_trail": "Выберите след из своей учетной записи Wanderer", - "sport_type": "Спортивный тип", - "sport_type_placeholder": "Тропа бег", - "start_lat": "Запустить широту", - "start_lng": "Начните долготу", - "strava_activities_during_visit": "Мероприятия Strava во время визита", - "strava_activity_ready": "Страва готова", - "time": "Время", - "total_covered": "Общее покрытие", - "total_recorded": "Всего записано", - "trail": "Тащить", - "trail_created_successfully": "Тропа создала успешно", - "trail_creation_failed": "Не удалось создать след", - "trail_fetch_failed": "Не удалось принести тропы Странника", - "trail_link_required": "Требуется ссылка на след", - "trail_name": "Название тропы", - "trail_removal_failed": "Не удалось снять след", - "trail_removed_successfully": "Тропа успешно удален", - "trail_update_failed": "Не удалось обновить след", - "trail_updated_successfully": "Тропа обновлен успешно", - "trails": "Тропы", - "trails_found_for": "Тропы найдены для", - "trails_management": "Управление тропами", - "trails_management_description": "Управление трассами, связанными с этим местом. \nСледы могут быть связаны с внешними услугами, такими как Alltrails или ссылка на Trails Wanderer.", - "update_location_details": "Обновление сведений о местоположении", - "update_visit": "Обновить посещение", - "upload_activity": "Загрузка активности", - "upload_attachment": "Загрузите вложение", - "upload_first_attachment": "Загрузите свое первое вложение, используя приведенные выше параметры", - "upload_first_image": "Загрузите свое первое изображение, используя один из вариантов выше", - "upload_from_device": "Загрузить с устройства", - "upload_from_url": "Загрузите из URL", - "upload_gpx_file": "Загрузите файл GPX, который был только что загружен, чтобы завершить импорт Strava", - "uploading": "Загрузка", - "use_current_location": "Используйте текущее местоположение", - "view_gpx": "Посмотреть GPX", - "view_on": "Посмотреть на", - "view_strava_activities": "Посмотреть мероприятия Strava", - "view_trail": "Посмотреть след", - "wanderer_integration_error": "Интеграция Wanderer не включена или истек.", - "wikipedia_error": "Не удалось получить описание из Википедии", - "high": "Высокий", - "low": "Низкий", - "rest": "Отдых", - "total": "Общий", - "attachment_removed_error": "Ошибка удаления вложения", - "attachment_removed_success": "Приложение удалено успешно", - "attachments_upload_info": "Вложения будут загружены после сохранения", - "image_upload_info": "Изображения будут загружены после сохранения", - "linked_locations": "Связанные локации", - "lodging_save_error": "Ошибка сохранения жилья", - "my_attachments": "Мои вложения", - "no_attachments": "Нет вложений", - "no_attachments_desc": "Загрузить файлы, чтобы начать", - "no_images_desc": "Загрузить изображения, чтобы начать", - "route_map": "Маршрутная карта", - "selected_attachments": "Выбранные вложения", - "selected_images": "Выбранные изображения", - "activities_text": "деятельность", - "activity_breakdown_by_category": "Распад деятельности по категории", - "distance_covered": "Расстояние", - "recorded_sessions": "Записанные сеансы", - "total_activities": "Общая деятельность", - "total_climbed": "Всего поднялось", - "total_distance": "Общее расстояние" - }, - "worldtravel": { - "country_list": "Список стран", - "num_countries": "стран найдено", - "all": "Все", - "partially_visited": "Частично посещённые", - "not_visited": "Не посещённые", - "completely_visited": "Полностью посещённые", - "all_subregions": "Все субрегионы", - "clear_search": "Очистить поиск", - "no_countries_found": "Страны не найдены", - "view_cities": "Просмотреть города", - "no_cities_found": "Города не найдены", - "visit_to": "Посещение", - "region_failed_visited": "Не удалось отметить регион как посещённый", - "failed_to_mark_visit": "Не удалось отметить посещение", - "visit_remove_failed": "Не удалось удалить посещение", - "removed": "удалено", - "failed_to_remove_visit": "Не удалось удалить посещение", - "marked_visited": "отмечено как посещённое", - "regions_in": "Регионы в", - "cities": "городов", - "all_regions": "Все регионы", - "available_to_explore": "Доступно для изучения", - "cities_in": "Города в", - "clear_all": "Очистить все", - "clear_all_filters": "Очистить все фильтры", - "clear_filters": "Четкие фильтры", - "complete": "Полный", - "countries": "страны", - "country_completed": "Страна завершена", - "filter_by": "Фильтр за", - "filter_by_region": "Фильтр по региону", - "hide_map": "Скрыть карту", - "hide_map_labels": "Скрыть этикетки карты", - "interactive_map": "Интерактивная карта", - "no_countries_found_desc": "Попробуйте настройки ваших поисковых терминов или фильтров, чтобы найти страны, которые вы ищете.", - "no_country_data_available": "Данные о стране не доступны", - "no_country_data_available_desc": "Пожалуйста, проверьте документацию для обновления данных региона.", - "no_regions_found": "Не было найдено регионов", - "of": "из", - "partial": "Частично", - "progress": "Прогресс", - "progress_and_stats": "Прогресс", - "region_completed": "Регион завершен", - "remaining": "Оставшийся", - "show_map": "Показать карту", - "show_map_labels": "Показать этикетки карты", - "total_cities": "Общие города", - "total_countries": "Всего стран", - "total_regions": "Общие регионы", - "newest_first": "Новейший первый", - "oldest_first": "Сначала старейший", - "unvisited_first": "Не заселяется первым", - "visited_first": "Посетил первым", - "total_items": "Общие предметы", - "getting_location_details": "Получение деталей местоположения" - }, - "auth": { - "username": "Имя пользователя", - "password": "Пароль", - "forgot_password": "Забыли пароль?", - "signup": "Регистрация", - "login_error": "Не удалось войти с предоставленными учётными данными.", - "login": "Вход", - "email": "Email", - "first_name": "Имя", - "last_name": "Фамилия", - "confirm_password": "Подтвердите пароль", - "registration_disabled": "Регистрация в настоящее время отключена.", - "profile_picture": "Фото профиля", - "public_profile": "Публичный профиль", - "public_tooltip": "С публичным профилем пользователи могут делиться с вами коллекциями и просматривать ваш профиль на странице пользователей.", - "new_password": "Новый пароль (6+ символов)", - "or_3rd_party": "Или войти через сторонний сервис", - "no_public_collections": "Публичные коллекции не найдены", - "user_collections": "Коллекции пользователя", - "no_public_locations": "Общественных мест не найдено", - "user_locations": "Пользовательские местоположения", - "enter_password": "Введите свой пароль", - "enter_username": "Введите свое имя пользователя", - "logging_in": "Вход в систему", - "totp": "Двухфакторный код" - }, - "users": { - "no_users_found": "Пользователи с публичными профилями не найдены." - }, - "settings": { - "update_error": "Ошибка обновления настроек", - "update_success": "Настройки успешно обновлены!", - "settings_page": "Страница настроек", - "account_settings": "Настройки учётной записи пользователя", - "update": "Обновить", - "no_verified_email_warning": "У вас должен быть подтверждённый адрес электронной почты для включения двухфакторной аутентификации.", - "social_auth": "Социальная аутентификация", - "social_auth_desc_1": "Управление опциями социального входа и настройками пароля", - "password_auth": "Аутентификация по паролю", - "password_login_enabled": "Вход по паролю включён", - "password_login_disabled": "Вход по паролю отключён", - "password_change": "Изменить пароль", - "new_password": "Новый пароль", - "confirm_new_password": "Подтвердите новый пароль", - "email_change": "Изменить email", - "no_email_set": "Email не установлен", - "email_management": "Управление email", - "email_management_desc": "Управление вашими адресами электронной почты и статусом подтверждения", - "add_new_email": "Добавить новый email", - "add_new_email_address": "Добавить новый адрес электронной почты", - "enter_new_email": "Введите новый адрес электронной почты", - "new_email": "Новый email", - "change_password": "Изменить пароль", - "reset_password": "Сбросить пароль", - "possible_reset": "Если адрес электронной почты, который вы указали, связан с учётной записью, вы получите письмо с инструкциями по сбросу пароля!", - "about_this_background": "Об этом фоне", - "photo_by": "Фото", - "join_discord": "Присоединиться к Discord", - "join_discord_desc": "чтобы поделиться своими фотографиями. Размещайте их в канале #travel-share.", - "current_password": "Текущий пароль", - "password_change_lopout_warning": "Вы будете вылогинены после изменения пароля.", - "generic_error": "Произошла ошибка при обработке вашего запроса.", - "email_removed": "Email успешно удалён!", - "email_removed_error": "Ошибка удаления email", - "verify_email_success": "Подтверждение email успешно отправлено!", - "verify_email_error": "Ошибка подтверждения email. Попробуйте снова через несколько минут.", - "email_added": "Email успешно добавлен!", - "email_set_primary": "Email успешно установлен как основной!", - "email_set_primary_error": "Ошибка установки email как основного", - "verified": "Подтверждён", - "primary": "Основной", - "not_verified": "Не подтверждён", - "make_primary": "Сделать основным", - "verify": "Подтвердить", - "no_emai_set": "Email не установлен", - "mfa_disabled": "Многофакторная аутентификация успешно отключена!", - "mfa_page_title": "Многофакторная аутентификация", - "mfa_desc": "Добавьте дополнительный уровень безопасности к вашему аккаунту", - "enable_mfa": "Включить MFA", - "disable_mfa": "Отключить MFA", - "enabled": "Включено", - "disabled": "Отключено", - "mfa_not_enabled": "MFA не включен", - "mfa_is_enabled": "MFA включен", - "mfa_enabled": "Многофакторная аутентификация успешно включена!", - "copy": "Копировать", - "recovery_codes": "Коды восстановления", - "recovery_codes_desc": "Это ваши коды восстановления. Сохраните их в безопасном месте. Вы не сможете увидеть их снова.", - "reset_session_error": "Пожалуйста, выйдите из системы и войдите снова, чтобы обновить сессию и повторите попытку.", - "authenticator_code": "Код аутентификатора", - "email_verified": "Email успешно подтвержден!", - "email_verified_success": "Ваш email был подтвержден. Теперь вы можете войти в систему.", - "email_verified_error": "Ошибка подтверждения email", - "email_verified_erorr_desc": "Ваш email не может быть подтвержден. Пожалуйста, попробуйте еще раз.", - "launch_administration_panel": "Запустить панель администрирования", - "administration": "Администрирование", - "admin_panel_desc": "Доступ к полному интерфейсу администрирования", - "region_updates": "Обновления регионов", - "debug_information": "Отладочная информация", - "staff_status": "Статус персонала", - "staff_user": "Сотрудник", - "regular_user": "Обычный пользователь", - "app_version": "Версия приложения", - "quick_actions": "Быстрые действия", - "license": "Лицензия", - "all_rights_reserved": "Все права защищены.", - "region_updates_desc": "Обновить посещенные регионы и города", - "access_restricted": "Доступ ограничен", - "access_restricted_desc": "Административные функции доступны только сотрудникам.", - "advanced_settings": "Расширенные настройки", - "advanced_settings_desc": "Расширенная конфигурация и инструменты разработчика", - "social_auth_setup": "Настройка социальной аутентификации", - "administration_desc": "Административные инструменты и настройки", - "social_auth_desc": "Включите или отключите социальные и OIDC провайдеры аутентификации для вашего аккаунта. Эти подключения позволяют вам входить в систему с помощью самостоятельно размещенных провайдеров идентификации, таких как Authentik, или сторонних провайдеров, таких как GitHub.", - "social_auth_desc_2": "Эти настройки управляются на сервере AdventureLog и должны быть вручную включены администратором.", - "documentation_link": "Ссылка на документацию", - "launch_account_connections": "Запустить подключения аккаунта", - "add_email": "Добавить Email", - "password_enabled": "Аутентификация по паролю включена", - "password_disabled": "Аутентификация по паролю отключена", - "password_disable_warning": "В настоящее время аутентификация по паролю отключена. Требуется вход через социального или OIDC провайдера.", - "password_disabled_error": "Ошибка отключения аутентификации по паролю. Убедитесь, что к вашему аккаунту привязан социальный или OIDC провайдер.", - "password_enabled_error": "Ошибка включения аутентификации по паролю.", - "settings_menu": "Меню настроек", - "security": "Безопасность", - "emails": "Email адреса", - "integrations": "Интеграции", - "integrations_desc": "Подключите внешние сервисы для улучшения вашего опыта", - "admin": "Админ", - "advanced": "Расширенные", - "profile_info": "Информация профиля", - "profile_info_desc": "Обновите ваши личные данные и фотографию профиля", - "public_profile_desc": "Сделать ваш профиль видимым для других пользователей", - "pass_change_desc": "Обновите пароль вашего аккаунта для лучшей безопасности", - "enter_first_name": "Введите ваше имя", - "enter_last_name": "Введите вашу фамилию", - "enter_username": "Введите ваше имя пользователя", - "enter_current_password": "Введите текущий пароль", - "enter_new_password": "Введите новый пароль", - "connected": "Подключено", - "disconnected": "Отключено", - "invalid_credentials": "Неверные полномочия", - "backup_restore": "Резервная копия", - "backup_restore_desc": "Сохраните данные или восстановите их из предыдущего файла резервного копирования.", - "complete_setup_to_enable": "Полная установка, чтобы включить MFA", - "copy_all": "Копировать все", - "enter_6_digit_code": "Введите 6 -значный код", - "enter_code_from_app": "Введите код из приложения", - "error_occurred": "Произошла ошибка", - "important": "Важный", - "manual_entry": "Ручная запись", - "mfa_already_enabled": "MFA уже включен", - "mfa_required": "MFA требуется", - "scan_qr_code": "Сканировать QR -код", - "scan_with_authenticator_app": "Сканирование с помощью приложения аутентификатора", - "secure_your_account": "Защитите свою учетную запись", - "setup_required": "Настройка требуется", - "verify_setup": "Проверьте настройку", - "whats_included": "Что включено", - "backup_your_data": "Резервную копию ваших данных", - "backup_your_data_desc": "Загрузите полное резервное копирование данных вашей учетной записи, включая местоположения, коллекции, медиа и посещения.", - "data_override_acknowledge": "Я признаю, что это переопределит все мои существующие данные", - "data_override_acknowledge_desc": "Это действие необратимо и заменит все местоположения, коллекции и посещения в вашем аккаунте.", - "data_override_warning": "Предупреждение о переопределении данных", - "data_override_warning_desc": "Восстановление данных полностью заменит все существующие данные (которые включены в резервную копию) в вашу учетную запись. \nЭто действие не может быть отменено.", - "integrations_settings": "Настройки интеграции", - "media": "СМИ", - "restore_data": "Восстановить данные", - "restore_data_desc": "Загрузите файл резервного копирования, чтобы восстановить ваши данные.", - "select_backup_file": "Выберите файл резервного копирования", - "world_travel_visits": "Всемирные поездки", - "activities": "Деятельность", - "trails": "Тропы", - "use_imperial": "Используйте имперские подразделения", - "use_imperial_desc": "Используйте имперские единицы (ноги, дюймы, фунты) вместо метрических единиц" - }, - "collection": { - "collection_created": "Коллекция успешно создана!", - "error_creating_collection": "Ошибка создания коллекции", - "new_collection": "Новая коллекция", - "create": "Создать", - "collection_edit_success": "Коллекция успешно отредактирована!", - "error_editing_collection": "Ошибка редактирования коллекции", - "public_collection": "Публичная коллекция", - "manage_collections": "Управлять коллекциями", - "archived_appear_here": "Архивные коллекции появятся здесь.", - "create_first": "Создайте свою первую коллекцию, чтобы организовать свои приключения и воспоминания.", - "make_sure_public": "Убедитесь, что ваш профиль публично, чтобы другие могли поделиться с вами.", - "no_archived_collections": "Нет архивированных коллекций.", - "no_collections_yet": "Пока нет коллекций", - "no_shared_collections": "Нет общих коллекций.", - "shared_collections": "Общие коллекции", - "available": "Доступный", - "linked": "Связанный", - "try_different_search": "Попробуйте другой поиск или фильтр." - }, - "notes": { - "note_deleted": "Заметка успешно удалена!", - "note_delete_error": "Ошибка удаления заметки", - "open": "Открыть", - "failed_to_save": "Не удалось сохранить заметку", - "note_editor": "Редактор заметок", - "note_viewer": "Просмотр заметки", - "editing_note": "Редактирование заметки", - "content": "Содержание", - "save": "Сохранить", - "note_public": "Эта заметка публична, потому что находится в публичной коллекции.", - "add_a_link": "Добавить ссылку", - "invalid_url": "Неверный URL", - "create_new_note": "Создайте новую ноту", - "enter_note_title": "Введите заголовок", - "update_note_details": "Редактирование примечания", - "viewing_note": "Просмотр примечания" - }, - "checklist": { - "checklist_deleted": "Чек-лист успешно удален!", - "checklist_delete_error": "Ошибка удаления чек-листа", - "checklist_editor": "Редактор чек-листа", - "new_checklist": "Новый чек-лист", - "item": "Элемент", - "items": "Элементы", - "new_item": "Новый элемент", - "checklist_public": "Этот чек-лист публичен, потому что находится в публичной коллекции.", - "item_cannot_be_empty": "Элемент не может быть пустым", - "item_already_exists": "Элемент уже существует", - "add_new_item": "Добавить новый элемент", - "add_your_first_item": "Добавьте свой первый элемент", - "checklist_viewer": "Просмотр просмотра контрольного списка", - "completed": "Завершенный", - "current_items": "Текущие элементы", - "editing_checklist": "Редактирование контрольного списка", - "enter_checklist_title": "Введите заголовок контрольного списка", - "no_items_yet": "Пока нет предметов", - "update_checklist_details": "Редактирование контрольного списка", - "viewing_checklist": "Просмотр контрольного списка" - }, - "transportation": { - "transportation_deleted": "Транспорт успешно удален!", - "transportation_delete_error": "Ошибка удаления транспорта", - "type": "Тип", - "new_transportation": "Новый транспорт", - "flight_number": "Номер рейса", - "from_location": "Откуда", - "to_location": "Куда", - "fetch_location_information": "Получить информацию о местоположении", - "starting_airport_desc": "Введите код аэропорта отправления (например, SVO)", - "ending_airport_desc": "Введите код аэропорта прибытия (например, LED)", - "edit": "Редактировать", - "modes": { - "car": "Автомобиль", - "plane": "Самолет", - "train": "Поезд", - "bus": "Автобус", - "boat": "Лодка", - "bike": "Велосипед", - "walking": "Пешком", - "other": "Другое" - }, - "edit_transportation": "Редактировать транспорт", - "create_new_transportation": "Новый транспорт", - "enter_flight_number": "Введите номер полета", - "enter_from_location": "Введите из местоположения", - "enter_link": "Введите ссылку", - "enter_to_location": "Введите в местоположение", - "enter_transportation_name": "Введите название транспорта", - "select_type": "Выберите тип", - "update_transportation_details": "Обновите детали транспорта" - }, - "lodging": { - "new_lodging": "Новое жилье", - "edit": "Редактировать", - "edit_lodging": "Редактировать жилье", - "hotel": "Отель", - "hostel": "Хостел", - "resort": "Курорт", - "bnb": "Гостевой дом", - "campground": "Кемпинг", - "cabin": "Домик", - "apartment": "Квартира", - "house": "Дом", - "villa": "Вилла", - "motel": "Мотель", - "other": "Другое", - "reservation_number": "Номер бронирования", - "create_new_lodging": "Новое жилье", - "enter_lodging_name": "Введите имя жилья", - "enter_price": "Введите цену", - "enter_reservation_number": "Введите номер бронирования", - "update_lodging_details": "Обновить детали жилья" - }, - "search": { - "adventurelog_results": "Результаты AdventureLog", - "public_adventures": "Публичные приключения", - "online_results": "Онлайн результаты", - "cities": "Города", - "countries": "Страны", - "found": "найденный", - "result": "Результат", - "results": "Результаты", - "try_searching_desc": "Попробуйте искать приключения, коллекции, страны, регионы, города или пользователей." - }, - "map": { - "view_details": "Подробности", - "adventure_map": "Карта приключений", - "map_options": "Настройки карты", - "show_visited_regions": "Показать посещенные регионы", - "add_adventure_at_marker": "Добавить новое приключение в отмеченном месте", - "clear_marker": "Очистить маркер", - "add_adventure": "Добавить новое приключение", - "adventure_stats": "Приключенческая статистика", - "completion": "Завершение", - "display_options": "Параметры отображения", - "map_controls": "Карта управления", - "marker_placed_on_map": "Маркер размещен на карте", - "regions": "Регионы", - "add_location": "Добавить новое место", - "add_location_at_marker": "Добавить новое место в маркере", - "location_map": "Карта местоположения", - "locations_shown": "Места показаны", - "place_marker_desc_location": "Нажмите на карту, чтобы разместить маркер.", - "show_activities": "Показать деятельность", - "show_visited_cities": "Посещены города" - }, - "share": { - "shared": "Поделено", - "with": "с", - "unshared": "Не поделено", - "share_desc": "Поделитесь этой коллекцией с другими пользователями.", - "shared_with": "Поделено с", - "no_users_shared": "Ни с кем не поделено", - "not_shared_with": "Не поделено с", - "no_shared_found": "Не найдено коллекций, которыми с вами поделились.", - "set_public": "Чтобы пользователи могли делиться с вами, вам нужно сделать ваш профиль публичным.", - "go_to_settings": "Перейти к настройкам", - "available": "Доступный", - "pending": "В ожидании", - "revoke_invite": "Отменить приглашение", - "send_invite": "Отправить приглашение" - }, - "languages": {}, - "profile": { - "member_since": "Участник с", - "user_stats": "Статистика пользователя", - "visited_countries": "Посещенные страны", - "visited_regions": "Посещенные регионы", - "visited_cities": "Посещенные города", - "discovered": "обнаруженный", - "explored": "исследован", - "no_shared_adventures": "Этот пользователь еще не поделился публичными приключениями.", - "no_shared_collections": "Этот пользователь еще не поделился публичными коллекциями.", - "planned_trips": "Запланированные поездки", - "travel_statistics": "Статистика путешествий", - "your_journey_at_a_glance": "Ваше приключенческое путешествие с первого взгляда", - "public_location_experiences": "Общественное местоположение" - }, - "categories": { - "manage_categories": "Управление категориями", - "no_categories_found": "Категории не найдены.", - "edit_category": "Редактировать категорию", - "icon": "Иконка", - "select_category": "Выбрать категорию", - "category_name": "Название категории", - "add_new_category": "Добавить новую категорию", - "name_required": "Требуется название категории", - "location_update_after_refresh": "Карты местоположения будут обновлены после обновления страницы." - }, - "dashboard": { - "welcome_back": "Добро пожаловать обратно", - "countries_visited": "Посещенные страны", - "total_adventures": "Всего приключений", - "total_visited_regions": "Всего посещенных регионов", - "total_visited_cities": "Всего посещенных городов", - "recent_adventures": "Недавние приключения", - "no_recent_adventures": "Нет недавних приключений?", - "add_some": "Почему бы не начать планировать ваше следующее приключение? Вы можете добавить новое приключение, нажав на кнопку ниже.", - "document_some_adventures": "Начните документировать свои путешествия и создать свою личную карту приключений!", - "view_all": "Просмотреть все", - "welcome_text_1": "Вы были на", - "welcome_text_2": "Приключения пока", - "welcome_text_3": "Продолжайте исследовать и документировать ваши путешествия!" - }, - "immich": { - "immich": "Immich", - "integration_fetch_error": "Ошибка получения данных из интеграции Immich", - "no_items_found": "Элементы не найдены", - "load_more": "Загрузить еще", - "immich_error": "Ошибка обновления интеграции Immich", - "immich_disabled": "Интеграция Immich успешно отключена!", - "disable": "Отключить", - "server_url": "URL сервера Immich", - "api_note": "Примечание: это должен быть URL к API серверу Immich, поэтому он, вероятно, заканчивается на /api, если у вас нет пользовательской конфигурации.", - "api_key": "API ключ Immich", - "enable_integration": "Включить интеграцию", - "update_integration": "Обновить интеграцию", - "immich_integration_desc": "Подключите ваш сервер управления фотографиями Immich", - "localhost_note": "Примечание: localhost, скорее всего, не будет работать, если вы не настроили сети Docker соответствующим образом. Рекомендуется использовать IP-адрес сервера или доменное имя.", - "api_key_placeholder": "Введите ваш API ключ Immich", - "need_help": "Нужна помощь с настройкой? Посмотрите", - "copy_locally": "Копировать изображения локально", - "copy_locally_desc": "Копировать изображения на сервер для офлайн доступа. Использует больше дискового пространства.", - "error_saving_image": "Ошибка сохранения изображения", - "connection_error": "Ошибка подключения к серверу Immich", - "integration_already_exists": "Интеграция Immich уже существует. Вы можете иметь только одну интеграцию одновременно.", - "integration_not_found": "Интеграция Immich не найдена. Пожалуйста, создайте новую интеграцию.", - "validation_error": "Произошла ошибка при проверке интеграции Immich. Пожалуйста, проверьте URL сервера и API ключ.", - "network_error": "Сетевая ошибка при подключении к серверу Immich. Пожалуйста, проверьте ваше соединение и попробуйте еще раз.", - "by_album": "По альбому", - "by_date": "На дату", - "error_no_object_id": "Идентификатор объекта не был предоставлен", - "fetch_error": "Ошибка извлечения данных из интеграции Immich", - "image_search_placeholder": "Поиск с помощью Immich", - "loading": "Загрузка", - "loading_albums": "Загрузка альбомов", - "no_images": "Не было найдено изображений", - "select_album_first": "Сначала выберите альбом", - "select_date": "Выберите дату", - "try_different_date": "Попробуйте другую дату", - "select_album": "Выберите альбом" - }, - "google_maps": { - "google_maps_integration_desc": "Подключите ваш аккаунт Google Maps для получения высококачественных результатов поиска местоположений и рекомендаций.", - "google_maps_integration_desc_no_staff": "Эта интеграция должна сначала быть включена администратором на этом сервере." - }, - "recomendations": { - "recommendation": "Рекомендация", - "recommendations": "Рекомендации", - "food": "Еда", - "tourism": "Туризм", - "location_recommendations": "Рекомендации местоположения" - }, - "calendar": { - "all_day_event": "Событие на весь день", - "calendar_overview": "Обзор календаря", - "day": "День", - "events_scheduled": "События запланированы", - "filtered_results": "Отфильтрованные результаты", - "month": "Месяц", - "today": "Сегодня", - "total_events": "Общее количество событий", - "week": "Неделя" - }, - "locations": { - "location": "Расположение", - "locations": "Локации", - "my_locations": "Мои локации" - }, - "settings_download_backup": "Скачать резервную копию", - "invites": { - "accept": "Принимать", - "accept_failed": "Не удалось принять приглашение", - "accepted": "Пригласить принятый", - "by": "к", - "decline": "Отклонить", - "decline_failed": "Не удалось отказаться пригласить", - "declined": "Пригласить отклонено", - "invited_on": "Приглашен", - "no_invites": "Нет приглашений", - "no_invites_desc": "Убедитесь, что ваш профиль является общедоступным, чтобы пользователи могли пригласить вас.", - "pending_invites": "В ожидании приглашений", - "title": "Приглашает" - }, - "strava": { - "account_connected": "Учетная запись подключена", - "admin_setup_required": "Администратор сервера должен включить его во всем мире", - "authorization_error": "Перенаправление ошибки на URL авторизации Strava", - "connect_account": "Подключить учетную запись", - "disconnect": "Отключить", - "disconnect_error": "Ошибка отключения от Strava", - "disconnected": "Успешно отключен от Strava", - "not_configured": "Страва не настроен", - "ready_to_connect": "Готов к подключению", - "strava_integration_desc": "Подключитесь к Strava, чтобы легко импортировать ваши активации в места и посещения", - "gpx_required": "Пожалуйста, загрузите файл GPX, чтобы завершить импорт Strava", - "not_enabled": "Интеграция Strava не включена в этом случае." - }, - "wanderer": { - "connected": "Успешно связанный с Wanderer", - "connection_error": "Ошибка подключения к Wanderer", - "wanderer_integration_desc": "Подключитесь к Wanderer, чтобы легко импортировать и просмотреть ваши следы в местах" - } + "navbar": { + "adventures": "Приключения", + "collections": "Коллекции", + "worldtravel": "Мировые путешествия", + "map": "Карта", + "users": "Пользователи", + "search": "Поиск", + "profile": "Профиль", + "greeting": "Привет", + "my_adventures": "Мои приключения", + "my_tags": "Мои теги", + "tag": "Тег", + "shared_with_me": "Поделились со мной", + "settings": "Настройки", + "logout": "Выйти", + "about": "О AdventureLog", + "documentation": "Документация", + "language_selection": "Язык", + "support": "Поддержка", + "calendar": "Календарь", + "theme_selection": "Выбор темы", + "admin_panel": "Панель администратора", + "themes": { + "aestheticDark": "Эстетическая темнота", + "aestheticLight": "Эстетический свет", + "aqua": "Аква", + "dark": "Темный", + "dim": "Тусклый", + "forest": "Лес", + "light": "Свет", + "night": "Ночь", + "northernLights": "Северное сияние" + }, + "navigation": "Навигация" + }, + "about": { + "about": "О программе", + "license": "Лицензировано под лицензией GPL-3.0.", + "source_code": "Исходный код", + "message": "Сделано с ❤️ в США.", + "oss_attributions": "Атрибуции открытого исходного кода", + "nominatim_1": "Поиск местоположений и геокодирование предоставляется", + "nominatim_2": "Их данные лицензированы под лицензией ODbL.", + "other_attributions": "Дополнительные атрибуции можно найти в файле README.", + "generic_attributions": "Войдите в AdventureLog, чтобы просмотреть атрибуции для включённых интеграций и сервисов.", + "close": "Закрыть", + "attributions": "Атрибуты", + "developer": "Разработчик", + "license_info": "Лицензия", + "sponsor": "Спонсор", + "thank_you": "Спасибо за использование AdventureLog!", + "version": "Версия", + "view_changelog": "Посмотреть изменение изменений", + "view_license": "Просмотреть лицензию" + }, + "home": { + "hero_1": "Откройте для себя самые захватывающие приключения мира", + "hero_2": "Открывайте и планируйте своё следующее приключение с AdventureLog. Исследуйте захватывающие дух места, создавайте персональные маршруты и оставайтесь на связи в пути.", + "go_to": "Перейти к AdventureLog", + "key_features": "Ключевые особенности", + "desc_1": "Открывайте, планируйте и исследуйте с лёгкостью", + "desc_2": "AdventureLog создан для упрощения вашего путешествия, предоставляя вам инструменты и ресурсы для планирования, сборов и навигации в вашем следующем незабываемом приключении.", + "feature_1": "Журнал путешествий", + "feature_1_desc": "Ведите учёт своих приключений с персональным журналом путешествий и делитесь своими впечатлениями с друзьями и семьёй.", + "feature_2": "Планирование поездок", + "feature_2_desc": "Легко создавайте персональные маршруты и получайте подробную разбивку поездки по дням.", + "feature_3": "Карта путешествий", + "feature_3_desc": "Просматривайте свои путешествия по всему миру с интерактивной картой и открывайте новые направления.", + "explore_world": "Исследуйте мир", + "latest_travel_experiences": "Ваш последний опыт путешествий", + "of_world": "мира", + "start_your_journey": "Начните свое путешествие" + }, + "adventures": { + "invalid_date_range": "Недопустимый диапазон дат", + "timezone": "Часовой пояс", + "no_visits": "Нет посещений", + "departure_timezone": "Часовой пояс отправления", + "arrival_timezone": "Часовой пояс прибытия", + "departure_date": "Дата отправления", + "arrival_date": "Дата прибытия", + "no_image_found": "Изображение не найдено", + "checklist_delete_confirm": "Вы уверены, что хотите удалить этот контрольный список? Это действие нельзя отменить.", + "note_delete_confirm": "Вы уверены, что хотите удалить эту заметку? Это действие нельзя отменить.", + "transportation_delete_confirm": "Вы уверены, что хотите удалить этот транспорт? Это действие нельзя отменить.", + "lodging_delete_confirm": "Вы уверены, что хотите удалить это место проживания? Это действие нельзя отменить.", + "delete_checklist": "Удалить контрольный список", + "delete_note": "Удалить заметку", + "delete_transportation": "Удалить транспорт", + "delete_lodging": "Удалить жильё", + "open_details": "Открыть детали", + "edit_adventure": "Редактировать приключение", + "remove_from_collection": "Убрать из коллекции", + "add_to_collection": "Добавить в коллекцию", + "delete": "Удалить", + "homepage": "Главная страница", + "collection": "Коллекция", + "longitude": "Долгота", + "latitude": "Широта", + "visit": "Посещение", + "timed": "По времени", + "coordinates": "Координаты", + "copy_coordinates": "Копировать координаты", + "visits": "Посещения", + "create_new": "Создать новое...", + "adventure": "Приключение", + "count_txt": "результатов соответствуют вашему поиску", + "sort": "Сортировка", + "order_by": "Сортировать по", + "order_direction": "Направление сортировки", + "ascending": "По возрастанию", + "descending": "По убыванию", + "updated": "Обновлено", + "name": "Название", + "date": "Дата", + "activity_types": "Типы активности", + "tags": "Теги", + "add_a_tag": "Добавить тег", + "date_constrain": "Ограничить датами коллекции", + "rating": "Рейтинг", + "my_images": "Мои изображения", + "no_images": "Нет изображений", + "distance": "Расстояние", + "copy_link": "Копировать ссылку", + "sun_times": "Время солнца", + "sunrise": "Восход", + "sunset": "Закат", + "image": "Изображение", + "upload_image": "Загрузить изображение", + "open_in_maps": "Открыть в картах", + "url": "URL", + "fetch_image": "Получить изображение", + "wikipedia": "Википедия", + "add_notes": "Добавить заметки", + "warning": "Предупреждение", + "my_adventures": "Мои приключения", + "no_linkable_adventures": "Не найдено приключений, которые можно связать с этой коллекцией.", + "add": "Добавить", + "save_next": "Сохранить и далее", + "end_date": "Дата окончания", + "start_date": "Дата начала", + "remove": "Удалить", + "location": "Локация", + "search_for_location": "Поиск местоположения", + "clear_map": "Очистить карту", + "search_results": "Результаты поиска", + "collection_no_start_end_date": "Добавление дат начала и окончания коллекции разблокирует функции планирования маршрута на странице коллекции.", + "no_results": "Результаты не найдены", + "attachments": "Вложения", + "attachment": "Вложение", + "images": "Изображения", + "generate_desc": "Сгенерировать описание", + "location_information": "Информация о местоположении", + "link": "Ссылка", + "links": "Ссылки", + "description": "Описание", + "sources": "Источники", + "collection_adventures": "Включить приключения из коллекций", + "filter": "Фильтр", + "category_filter": "Фильтр категории", + "category": "Категория", + "clear": "Очистить", + "my_collections": "Мои коллекции", + "open_filters": "Открыть фильтры", + "archived_collections": "Архивные коллекции", + "share": "Поделиться", + "private": "Приватное", + "public": "Публичное", + "archived": "В архиве", + "edit_collection": "Редактировать коллекцию", + "unarchive": "Разархивировать", + "archive": "Архивировать", + "not_visited": "Не посещено", + "archived_collection_message": "Коллекция успешно архивирована!", + "unarchived_collection_message": "Коллекция успешно разархивирована!", + "delete_collection_success": "Коллекция успешно удалена!", + "cancel": "Отмена", + "delete_collection": "Удалить коллекцию", + "visited": "Посещено", + "planned": "Запланировано", + "duration": "Продолжительность", + "all": "Все", + "image_removed_success": "Изображение успешно удалено!", + "image_removed_error": "Ошибка удаления изображения", + "no_image_url": "Изображение по этому URL не найдено.", + "image_upload_success": "Изображение успешно загружено!", + "image_upload_error": "Ошибка загрузки изображения", + "dates": "Даты", + "wiki_image_error": "Ошибка получения изображения из Википедии", + "start_before_end_error": "Дата начала должна быть раньше даты окончания", + "actions": "Действия", + "see_adventures": "Посмотреть приключения", + "image_fetch_failed": "Не удалось получить изображение", + "no_location": "Пожалуйста, введите локацию", + "no_description_found": "Описание не найдено", + "lodging": "Жильё", + "set_to_pin": "Установить как булавку", + "category_fetch_error": "Ошибка получения категорий", + "basic_information": "Основная информация", + "display_name": "Отображаемое имя", + "adventure_not_found": "Нет приключений для отображения. Добавьте их, используя кнопку плюс в правом нижнем углу, или попробуйте изменить фильтры!", + "no_adventures_found": "Приключения не найдены", + "mark_visited": "Отметить как посещённое", + "error_updating_regions": "Ошибка обновления регионов", + "regions_updated": "регионов обновлено", + "cities_updated": "городов обновлено", + "visited_region_check": "Проверка посещённых регионов", + "visited_region_check_desc": "Выбрав это, сервер проверит все ваши посещённые приключения и отметит регионы, в которых они находятся, как посещённые в мировых путешествиях.", + "update_visited_regions": "Обновить посещённые регионы", + "update_visited_regions_disclaimer": "Это может занять некоторое время в зависимости от количества ваших посещённых приключений.", + "link_new": "Связать новое...", + "add_new": "Добавить новое...", + "transportation": "Транспорт", + "note": "Заметка", + "checklist": "Контрольный список", + "collection_archived": "Эта коллекция была архивирована.", + "visit_link": "Перейти по ссылке", + "collection_completed": "Вы завершили эту коллекцию!", + "collection_stats": "Статистика коллекции", + "keep_exploring": "Продолжайте исследовать!", + "linked_adventures": "Связанные приключения", + "notes": "Заметки", + "checklists": "Контрольные списки", + "transportations": "Транспорт", + "adventure_calendar": "Календарь приключений", + "day": "День", + "itineary_by_date": "Маршрут по дате", + "nothing_planned": "На этот день ничего не запланировано. Наслаждайтесь путешествием!", + "copied_to_clipboard": "Скопировано в буфер обмена!", + "copy_failed": "Копирование не удалось", + "show": "Показать", + "hide": "Скрыть", + "clear_location": "Очистить локацию", + "starting_airport": "Аэропорт отправления", + "view_profile": "Просмотреть профиль", + "joined": "Присоединился", + "ending_airport": "Аэропорт прибытия", + "no_location_found": "Локация не найдена", + "from": "От", + "to": "До", + "start": "Начало", + "end": "Конец", + "emoji_picker": "Выбор эмодзи", + "download_calendar": "Скачать календарь", + "all_day": "Весь день", + "ordered_itinerary": "Упорядоченный маршрут", + "itinerary": "Маршрут", + "all_linked_items": "Все связанные элементы", + "date_itinerary": "Маршрут по дате", + "no_ordered_items": "Добавьте элементы с датами в коллекцию, чтобы увидеть их здесь.", + "date_information": "Информация о дате", + "flight_information": "Информация о рейсе", + "out_of_range": "Не в диапазоне дат маршрута", + "preview": "Предварительный просмотр", + "finding_recommendations": "Поиск скрытых жемчужин для вашего следующего приключения", + "location_details": "Детали местоположения", + "city": "Город", + "region": "Регион", + "md_instructions": "Напишите ваш markdown здесь...", + "days": "дней", + "attachment_upload_success": "Вложение успешно загружено!", + "attachment_upload_error": "Ошибка загрузки вложения", + "upload": "Загрузить", + "attachment_delete_success": "Вложение успешно удалено!", + "attachment_update_success": "Вложение успешно обновлено!", + "attachment_name": "Название вложения", + "gpx_tip": "Загрузите GPX-файлы во вложения, чтобы просматривать их на карте!", + "attachment_update_error": "Ошибка обновления вложения", + "activities": {}, + "lodging_information": "Информация о жилье", + "price": "Цена", + "reservation_number": "Номер бронирования", + "share_collection": "Поделитесь этой коллекцией!", + "filters_and_sort": "Фильтры", + "filters_and_stats": "Фильтры", + "no_adventures_message": "Начните документировать ваши приключения и планировать новые. \nУ каждого путешествия есть история, которую стоит рассказать.", + "travel_progress": "Прогресс путешествий", + "adventures_available": "Приключения доступны", + "all_adventures_already_linked": "Все приключения уже связаны с этой коллекцией.", + "collections_linked": "Коллекции связаны", + "create_collection_first": "Сначала создайте коллекцию, чтобы организовать ваши приключения и воспоминания.", + "delete_collection_warning": "Вы уверены, что хотите удалить эту коллекцию? \nЭто действие не может быть отменено.", + "done": "Готово", + "loading_adventures": "Загрузка приключений ...", + "name_location": "имя, локация", + "collection_contents": "Содержание коллекции", + "check_in": "Регистрация", + "check_out": "Выезд", + "collection_link_location_error": "Ошибка связывания локации с коллекцией", + "collection_link_location_success": "Локация успешно привязана к коллекции!", + "collection_locations": "Добавить локации из коллекций", + "collection_remove_location_error": "Ошибка удаления локации из коллекции", + "collection_remove_location_success": "Локация успешно удалена из коллекции!", + "create_location": "Создать локацию", + "delete_location": "Удалить локацию", + "edit_location": "Редактировать локацию", + "location_create_error": "Не удалось создать локацию", + "location_created": "Локация создана", + "location_delete_confirm": "Вы уверены, что хотите удалить это место? \nЭто действие не может быть отменено.", + "location_delete_success": "Локация успешно удалена!", + "location_not_found": "Локация не найдена", + "location_not_found_desc": "Локация, которую вы искали, не найдена. \nПожалуйста, попробуйте другую локацию или попробуйте позже.", + "location_update_error": "Не удалось обновить локацию", + "location_updated": "Локация обновлена", + "new_location": "Новая локация", + "no_collections_to_add_location": "Коллекции для добавления этой локации не нейдены.", + "no_locations_to_recommendations": "Локаций не найдено. \nДобавьте хотя бы одну локацию, чтобы получить рекомендации.", + "public_location": "Общественная локация", + "share_location": "Поделитесь этой локацией!", + "visit_calendar": "Календарь посещений", + "wiki_location_desc": "Вытягивает отрывок из статьи Википедии, соответствующей названию места.", + "will_be_marked_location": "будет отмечен как посещенынй при сохранении.", + "no_locations_found": "Локации не найдены", + "image_modal_navigate": "Используйте клавиши со стрелками или нажмите, чтобы перемещаться", + "details": "Подробности", + "leave": "Покинуть", + "leave_collection": "Оставить коллекцию", + "leave_collection_warning": "Вы уверены, что хотите покинуть эту коллекцию? \nЛюбые локации, которые вы добавили, будут не связаны и останутся в вашей учетной записи.", + "left_collection_message": "Успешно оставил коллекцию", + "loading_collections": "Загрузка коллекций ...", + "quick_start": "Быстрый старт", + "achievements": "Достижения", + "active_duration": "Активная продолжительность", + "activities_name": "Активности", + "activity_name": "Название активности", + "activity_name_placeholder": "Утренняя пробежка", + "activity_name_required": "Требуется имя активности", + "activity_options": "Варианты активностей", + "activity_statistics": "Статистика активности", + "activity_statistics_description": "Ваши достижения в области фитнеса и активности", + "add_activity": "Добавить активность", + "add_first_trail": "Добавьте свой первый след, используя кнопку выше", + "add_new_activity": "Добавить новую активность", + "add_new_trail": "Добавить новый маршрут", + "add_trail": "Добавить маршрут", + "add_visit": "Добавить посещение", + "add_wanderer_trail": "Добавить маршрут Wanderer", + "attachment_management": "Управление вложениями", + "attachment_name_required": "Требуется имя вложения", + "attachment_remove_error": "Произошла ошибка при удалении вложения", + "attachment_removed": "Приложение удалено успешно", + "attachment_updated": "Вложение успешно обновлено", + "average_cadence": "Средняя каденция", + "average_speed": "Средняя скорость", + "avg_speed": "Средняя скорость", + "back": "Назад", + "cadence": "Каденция", + "calories": "Калории", + "click_map": "Нажмите на карту, чтобы выбрать локацию", + "click_on_map": "Нажмите на карту, чтобы выбрать локацию", + "complete_import": "Полный импорт", + "complete_strava_import": "Полный импорт Strava", + "confirm_delete_activity": "Вы уверены, что хотите удалить это занятие?", + "connect_to_wanderer": "Подключитесь к Wanderer", + "continue": "Далее", + "create_new_location": "Создайте новую локацию", + "create_trail": "Создать след", + "created": "Созданный", + "current_attachments": "Текущие вложения", + "date_selection": "Выбор даты", + "download_gpx": "Скачать gpx", + "edit_visit": "Редактировать посещение", + "elapsed_time": "Длительность", + "elevation": "Возвышение", + "elevation_gain": "Набор высоты", + "elevation_high": "Высшая точка", + "elevation_loss": "Потеря высоты", + "elevation_low": "Низшая точка", + "end_lat": "Широта финиша", + "end_lng": "Долгота финиша", + "export_gpx": "Экспорт GPX", + "export_original": "Экспорт оригинал", + "external_link": "Внешняя ссылка", + "gain": "прирост", + "getting_location_details": "Получение деталей локации", + "gpx_file": "Файл gpx", + "gpx_file_downloaded": "Файл gpx загружен. \nПожалуйста, загрузите его ниже, чтобы завершить импорт.", + "gpx_file_required": "Требуется файл GPX", + "image_management": "Управление изображениями", + "import_activity": "Загрузить активность", + "importing": "Импорт", + "likes": "Лайки", + "loading_activities": "Погрузка", + "location_display_name": "Отображение локации", + "location_map": "Расположение", + "location_selected": "Локация выбрана", + "max_speed": "Максимальная скорость", + "moving_time": "Время движения", + "next_image": "Следующее изображение", + "no_attachments_uploaded_yet": "Вложения еще не загружены", + "no_external_link": "Внешнее внешнее ссылка", + "no_file_selected": "Файл не выбран", + "no_images_uploaded_yet": "Изображения еще не загружены", + "no_strava_activities": "Во время этого посещения не было найдено мероприятий Strava", + "no_trails_added": "Пока не добавили маршруты", + "no_trails_available": "Нет маршрутов", + "no_trails_found_matching": "Не найдено подходящих маршрутов", + "no_visits_description": "Создайте свое первое посещение, выбрав даты выше", + "notes_placeholder": "Добавить заметки об этом посещении", + "or": "ИЛИ", + "pace": "Шаг", + "photos": "Фото", + "previous_image": "Предыдущее изображение", + "processing": "Обработка", + "public_location_description": "Сделайте эту локацию видимой другим пользователям", + "remove_visit": "Удалить посещение", + "rest_time": "Время отдыха", + "saved_activities": "Сохраненные активности", + "search_location": "Поиск локации", + "search_placeholder": "Введите город, локацию или достопримечательность ...", + "search_trails_placeholder": "Поиск маршрутов по имени", + "searching": "Идет поиск", + "select_on_map": "Выберите на карте", + "select_wanderer_trail": "Выберите маршрут из своей учетной записи Wanderer", + "sport_type": "Вид спорта", + "sport_type_placeholder": "Бег по пересечённой местности", + "start_lat": "Широта старта", + "start_lng": "Долгота старта", + "strava_activities_during_visit": "Мероприятия Strava во время посещения", + "strava_activity_ready": "Strava готова", + "time": "Время", + "total_covered": "Всего охвачено", + "total_recorded": "Всего записано", + "trail": "Маршрут", + "trail_created_successfully": "Маршрут успешно создан", + "trail_creation_failed": "Не удалось создать маршрут", + "trail_fetch_failed": "Не удалось получить маршрут Wanderer", + "trail_link_required": "Требуется ссылка на маршрут", + "trail_name": "Название маршрута", + "trail_removal_failed": "Не удалось удалить маршрут", + "trail_removed_successfully": "Маршрут успешно удален", + "trail_update_failed": "Не удалось обновить маршрут", + "trail_updated_successfully": "Маршрут успешно обновлен", + "trails": "Маршруты", + "trails_found_for": "Маршруты найдены для", + "trails_management": "Управление маршрутами", + "trails_management_description": "Управляйте маршрутами, связанными с этой локацией. \nИх можно связать с внешними сервисами, например, AllTrails или с маршрутами Wanderer.", + "update_location_details": "Обновление сведений о локации", + "update_visit": "Обновить посещение", + "upload_activity": "Загрузка активности", + "upload_attachment": "Загрузите вложение", + "upload_first_attachment": "Загрузите свое первое вложение, используя приведенные выше параметры", + "upload_first_image": "Загрузите свое первое изображение, используя один из вариантов выше", + "upload_from_device": "Загрузить с устройства", + "upload_from_url": "Загрузите из URL", + "upload_gpx_file": "Загрузите файл GPX, который был только что загружен, чтобы завершить импорт Strava", + "uploading": "Загрузка", + "use_current_location": "Используйте текущее местоположение", + "view_gpx": "Посмотреть GPX", + "view_on": "Посмотреть на", + "view_strava_activities": "Посмотреть мероприятия Strava", + "view_trail": "Посмотреть маршрут", + "wanderer_integration_error": "Интеграция Wanderer не включена или срок ее действия истек.", + "wikipedia_error": "Не удалось получить описание из Википедии", + "high": "Высокий", + "low": "Низкий", + "rest": "Осталось", + "total": "Всего", + "attachment_removed_error": "Ошибка удаления вложения", + "attachment_removed_success": "Вложение успешно удалено", + "attachments_upload_info": "Вложения будут загружены после сохранения", + "image_upload_info": "Изображения будут загружены после сохранения", + "linked_locations": "Связанные локации", + "lodging_save_error": "Ошибка сохранения жилья", + "my_attachments": "Мои вложения", + "no_attachments": "Нет вложений", + "no_attachments_desc": "Загрузить файлы, чтобы начать", + "no_images_desc": "Загрузить изображения, чтобы начать", + "route_map": "Маршрутная карта", + "selected_attachments": "Выбранные вложения", + "selected_images": "Выбранные изображения", + "activities_text": "активность", + "activity_breakdown_by_category": "Распределение активностей по категориям", + "distance_covered": "Расстояние", + "recorded_sessions": "Записанные сеансы", + "total_activities": "Всего активностей", + "total_climbed": "Общий набор высоты", + "total_distance": "Общее расстояние" + }, + "worldtravel": { + "country_list": "Список стран", + "num_countries": "стран найдено", + "all": "Все", + "partially_visited": "Частично посещённые", + "not_visited": "Не посещённые", + "completely_visited": "Полностью посещённые", + "all_subregions": "Все субрегионы", + "clear_search": "Очистить поиск", + "no_countries_found": "Страны не найдены", + "view_cities": "Просмотреть города", + "no_cities_found": "Города не найдены", + "visit_to": "Посещение", + "region_failed_visited": "Не удалось отметить регион как посещённый", + "failed_to_mark_visit": "Не удалось отметить посещение", + "visit_remove_failed": "Не удалось удалить посещение", + "removed": "удалено", + "failed_to_remove_visit": "Не удалось удалить посещение", + "marked_visited": "отмечено как посещённое", + "regions_in": "Регионы в", + "cities": "городов", + "all_regions": "Все регионы", + "available_to_explore": "Доступно для изучения", + "cities_in": "Города в", + "clear_all": "Очистить все", + "clear_all_filters": "Очистить все фильтры", + "clear_filters": "Четкие фильтры", + "complete": "Полный", + "countries": "страны", + "country_completed": "Страна завершена", + "filter_by": "Фильтр за", + "filter_by_region": "Фильтр по региону", + "hide_map": "Скрыть карту", + "hide_map_labels": "Скрыть этикетки карты", + "interactive_map": "Интерактивная карта", + "no_countries_found_desc": "Попробуйте настройки ваших поисковых терминов или фильтров, чтобы найти страны, которые вы ищете.", + "no_country_data_available": "Данные о стране не доступны", + "no_country_data_available_desc": "Пожалуйста, проверьте документацию для обновления данных региона.", + "no_regions_found": "Не было найдено регионов", + "of": "из", + "partial": "Частично", + "progress": "Прогресс", + "progress_and_stats": "Прогресс", + "region_completed": "Регион завершен", + "remaining": "Оставшийся", + "show_map": "Показать карту", + "show_map_labels": "Показать этикетки карты", + "total_cities": "Всего город", + "total_countries": "Всего стран", + "total_regions": "Всего регионов", + "newest_first": "Сначала новые", + "oldest_first": "Сначала старые", + "unvisited_first": "Сначала не посещенные", + "visited_first": "Сначала посещенные", + "total_items": "Общие предметы", + "getting_location_details": "Получение деталей локации" + }, + "auth": { + "username": "Имя пользователя", + "password": "Пароль", + "forgot_password": "Забыли пароль?", + "signup": "Регистрация", + "login_error": "Не удалось войти с предоставленными учётными данными.", + "login": "Вход", + "email": "Email", + "first_name": "Имя", + "last_name": "Фамилия", + "confirm_password": "Подтвердите пароль", + "registration_disabled": "Регистрация в настоящее время отключена.", + "profile_picture": "Фото профиля", + "public_profile": "Публичный профиль", + "public_tooltip": "С публичным профилем пользователи могут делиться с вами коллекциями и просматривать ваш профиль на странице пользователей.", + "new_password": "Новый пароль (6+ символов)", + "or_3rd_party": "Или войти через сторонний сервис", + "no_public_collections": "Публичные коллекции не найдены", + "user_collections": "Коллекции пользователя", + "no_public_locations": "Публичные локации не найдены", + "user_locations": "Локации пользователя", + "enter_password": "Введите свой пароль", + "enter_username": "Введите свое имя пользователя", + "logging_in": "Вход в систему", + "totp": "Двухфакторный код" + }, + "users": { + "no_users_found": "Пользователи с публичными профилями не найдены." + }, + "settings": { + "update_error": "Ошибка обновления настроек", + "update_success": "Настройки успешно обновлены!", + "settings_page": "Страница настроек", + "account_settings": "Настройки учётной записи пользователя", + "update": "Обновить", + "no_verified_email_warning": "У вас должен быть подтверждённый адрес электронной почты для включения двухфакторной аутентификации.", + "social_auth": "Социальная аутентификация", + "social_auth_desc_1": "Управление опциями социального входа и настройками пароля", + "password_auth": "Аутентификация по паролю", + "password_login_enabled": "Вход по паролю включён", + "password_login_disabled": "Вход по паролю отключён", + "password_change": "Изменить пароль", + "new_password": "Новый пароль", + "confirm_new_password": "Подтвердите новый пароль", + "email_change": "Изменить email", + "no_email_set": "Email не установлен", + "email_management": "Управление email", + "email_management_desc": "Управление вашими адресами электронной почты и статусом подтверждения", + "add_new_email": "Добавить новый email", + "add_new_email_address": "Добавить новый адрес электронной почты", + "enter_new_email": "Введите новый адрес электронной почты", + "new_email": "Новый email", + "change_password": "Изменить пароль", + "reset_password": "Сбросить пароль", + "possible_reset": "Если адрес электронной почты, который вы указали, связан с учётной записью, вы получите письмо с инструкциями по сбросу пароля!", + "about_this_background": "Об этом фоне", + "photo_by": "Фото", + "join_discord": "Присоединиться к Discord", + "join_discord_desc": "чтобы поделиться своими фотографиями. Размещайте их в канале #travel-share.", + "current_password": "Текущий пароль", + "password_change_lopout_warning": "Вы будете вылогинены после изменения пароля.", + "generic_error": "Произошла ошибка при обработке вашего запроса.", + "email_removed": "Email успешно удалён!", + "email_removed_error": "Ошибка удаления email", + "verify_email_success": "Подтверждение email успешно отправлено!", + "verify_email_error": "Ошибка подтверждения email. Попробуйте снова через несколько минут.", + "email_added": "Email успешно добавлен!", + "email_set_primary": "Email успешно установлен как основной!", + "email_set_primary_error": "Ошибка установки email как основного", + "verified": "Подтверждён", + "primary": "Основной", + "not_verified": "Не подтверждён", + "make_primary": "Сделать основным", + "verify": "Подтвердить", + "no_emai_set": "Email не установлен", + "mfa_disabled": "Многофакторная аутентификация успешно отключена!", + "mfa_page_title": "Многофакторная аутентификация", + "mfa_desc": "Добавьте дополнительный уровень безопасности к вашему аккаунту", + "enable_mfa": "Включить MFA", + "disable_mfa": "Отключить MFA", + "enabled": "Включено", + "disabled": "Отключено", + "mfa_not_enabled": "MFA не включен", + "mfa_is_enabled": "MFA включен", + "mfa_enabled": "Многофакторная аутентификация успешно включена!", + "copy": "Копировать", + "recovery_codes": "Коды восстановления", + "recovery_codes_desc": "Это ваши коды восстановления. Сохраните их в безопасном месте. Вы не сможете увидеть их снова.", + "reset_session_error": "Пожалуйста, выйдите из системы и войдите снова, чтобы обновить сессию и повторите попытку.", + "authenticator_code": "Код аутентификатора", + "email_verified": "Email успешно подтвержден!", + "email_verified_success": "Ваш email был подтвержден. Теперь вы можете войти в систему.", + "email_verified_error": "Ошибка подтверждения email", + "email_verified_erorr_desc": "Ваш email не может быть подтвержден. Пожалуйста, попробуйте еще раз.", + "launch_administration_panel": "Запустить панель администрирования", + "administration": "Администрирование", + "admin_panel_desc": "Доступ к полному интерфейсу администрирования", + "region_updates": "Обновления регионов", + "debug_information": "Отладочная информация", + "staff_status": "Статус персонала", + "staff_user": "Сотрудник", + "regular_user": "Обычный пользователь", + "app_version": "Версия приложения", + "quick_actions": "Быстрые действия", + "license": "Лицензия", + "all_rights_reserved": "Все права защищены.", + "region_updates_desc": "Обновить посещенные регионы и города", + "access_restricted": "Доступ ограничен", + "access_restricted_desc": "Административные функции доступны только сотрудникам.", + "advanced_settings": "Расширенные настройки", + "advanced_settings_desc": "Расширенная конфигурация и инструменты разработчика", + "social_auth_setup": "Настройка социальной аутентификации", + "administration_desc": "Административные инструменты и настройки", + "social_auth_desc": "Включите или отключите социальные и OIDC провайдеры аутентификации для вашего аккаунта. Эти подключения позволяют вам входить в систему с помощью самостоятельно размещенных провайдеров идентификации, таких как Authentik, или сторонних провайдеров, таких как GitHub.", + "social_auth_desc_2": "Эти настройки управляются на сервере AdventureLog и должны быть вручную включены администратором.", + "documentation_link": "Ссылка на документацию", + "launch_account_connections": "Запустить подключения аккаунта", + "add_email": "Добавить Email", + "password_enabled": "Аутентификация по паролю включена", + "password_disabled": "Аутентификация по паролю отключена", + "password_disable_warning": "В настоящее время аутентификация по паролю отключена. Требуется вход через социального или OIDC провайдера.", + "password_disabled_error": "Ошибка отключения аутентификации по паролю. Убедитесь, что к вашему аккаунту привязан социальный или OIDC провайдер.", + "password_enabled_error": "Ошибка включения аутентификации по паролю.", + "settings_menu": "Меню настроек", + "security": "Безопасность", + "emails": "Email адреса", + "integrations": "Интеграции", + "integrations_desc": "Подключите внешние сервисы для улучшения вашего опыта", + "admin": "Админ", + "advanced": "Расширенные", + "profile_info": "Информация профиля", + "profile_info_desc": "Обновите ваши личные данные и фотографию профиля", + "public_profile_desc": "Сделать ваш профиль видимым для других пользователей", + "pass_change_desc": "Обновите пароль вашего аккаунта для лучшей безопасности", + "enter_first_name": "Введите ваше имя", + "enter_last_name": "Введите вашу фамилию", + "enter_username": "Введите ваше имя пользователя", + "enter_current_password": "Введите текущий пароль", + "enter_new_password": "Введите новый пароль", + "connected": "Подключено", + "disconnected": "Отключено", + "invalid_credentials": "Неверные полномочия", + "backup_restore": "Резервная копия", + "backup_restore_desc": "Сохраните данные или восстановите их из предыдущего файла резервного копирования.", + "complete_setup_to_enable": "Полная установка, чтобы включить MFA", + "copy_all": "Копировать все", + "enter_6_digit_code": "Введите 6 -значный код", + "enter_code_from_app": "Введите код из приложения", + "error_occurred": "Произошла ошибка", + "important": "Важный", + "manual_entry": "Ручная запись", + "mfa_already_enabled": "MFA уже включен", + "mfa_required": "MFA требуется", + "scan_qr_code": "Сканировать QR -код", + "scan_with_authenticator_app": "Сканирование с помощью приложения аутентификатора", + "secure_your_account": "Защитите свою учетную запись", + "setup_required": "Настройка требуется", + "verify_setup": "Проверьте настройку", + "whats_included": "Что включено", + "backup_your_data": "Резервную копию ваших данных", + "backup_your_data_desc": "Загрузите полное резервное копирование данных вашей учетной записи, включая локации, коллекции, медиа и посещения.", + "data_override_acknowledge": "Я признаю, что это переопределит все мои существующие данные", + "data_override_acknowledge_desc": "Это действие необратимо и заменит все локации, коллекции и посещения в вашем аккаунте.", + "data_override_warning": "Предупреждение о переопределении данных", + "data_override_warning_desc": "Восстановление данных полностью заменит все существующие данные (которые включены в резервную копию) в вашу учетную запись. \nЭто действие не может быть отменено.", + "integrations_settings": "Настройки интеграции", + "media": "Файлы", + "restore_data": "Восстановить данные", + "restore_data_desc": "Загрузите файл резервного копирования, чтобы восстановить ваши данные.", + "select_backup_file": "Выберите файл резервного копирования", + "world_travel_visits": "Всемирные поездки", + "activities": "Активности", + "trails": "Маршруты", + "use_imperial": "Используйте имперские подразделения", + "use_imperial_desc": "Используйте имперские единицы (ноги, дюймы, фунты) вместо метрических единиц" + }, + "collection": { + "collection_created": "Коллекция успешно создана!", + "error_creating_collection": "Ошибка создания коллекции", + "new_collection": "Новая коллекция", + "create": "Создать", + "collection_edit_success": "Коллекция успешно отредактирована!", + "error_editing_collection": "Ошибка редактирования коллекции", + "public_collection": "Публичная коллекция", + "manage_collections": "Управлять коллекциями", + "archived_appear_here": "Архивные коллекции появятся здесь.", + "create_first": "Создайте свою первую коллекцию, чтобы организовать свои приключения и воспоминания.", + "make_sure_public": "Убедитесь, что ваш профиль публично, чтобы другие могли поделиться с вами.", + "no_archived_collections": "Нет архивированных коллекций.", + "no_collections_yet": "Пока нет коллекций", + "no_shared_collections": "Нет общих коллекций.", + "shared_collections": "Общие коллекции", + "available": "Доступный", + "linked": "Связанный", + "try_different_search": "Попробуйте другой поиск или фильтр." + }, + "notes": { + "note_deleted": "Заметка успешно удалена!", + "note_delete_error": "Ошибка удаления заметки", + "open": "Открыть", + "failed_to_save": "Не удалось сохранить заметку", + "note_editor": "Редактор заметок", + "note_viewer": "Просмотр заметки", + "editing_note": "Редактирование заметки", + "content": "Содержание", + "save": "Сохранить", + "note_public": "Эта заметка публична, потому что находится в публичной коллекции.", + "add_a_link": "Добавить ссылку", + "invalid_url": "Неверный URL", + "create_new_note": "Создайте новую ноту", + "enter_note_title": "Введите заголовок", + "update_note_details": "Редактирование примечания", + "viewing_note": "Просмотр примечания" + }, + "checklist": { + "checklist_deleted": "Чек-лист успешно удален!", + "checklist_delete_error": "Ошибка удаления чек-листа", + "checklist_editor": "Редактор чек-листа", + "new_checklist": "Новый чек-лист", + "item": "Элемент", + "items": "Элементы", + "new_item": "Новый элемент", + "checklist_public": "Этот чек-лист публичен, потому что находится в публичной коллекции.", + "item_cannot_be_empty": "Элемент не может быть пустым", + "item_already_exists": "Элемент уже существует", + "add_new_item": "Добавить новый элемент", + "add_your_first_item": "Добавьте свой первый элемент", + "checklist_viewer": "Просмотр просмотра контрольного списка", + "completed": "Завершенный", + "current_items": "Текущие элементы", + "editing_checklist": "Редактирование контрольного списка", + "enter_checklist_title": "Введите заголовок контрольного списка", + "no_items_yet": "Пока нет предметов", + "update_checklist_details": "Редактирование контрольного списка", + "viewing_checklist": "Просмотр контрольного списка" + }, + "transportation": { + "transportation_deleted": "Транспорт успешно удален!", + "transportation_delete_error": "Ошибка удаления транспорта", + "type": "Тип", + "new_transportation": "Новый транспорт", + "flight_number": "Номер рейса", + "from_location": "Откуда", + "to_location": "Куда", + "fetch_location_information": "Получить информацию о местоположении", + "starting_airport_desc": "Введите код аэропорта отправления (например, SVO)", + "ending_airport_desc": "Введите код аэропорта прибытия (например, LED)", + "edit": "Редактировать", + "modes": { + "car": "Автомобиль", + "plane": "Самолет", + "train": "Поезд", + "bus": "Автобус", + "boat": "Лодка", + "bike": "Велосипед", + "walking": "Пешком", + "other": "Другое" + }, + "edit_transportation": "Редактировать транспорт", + "create_new_transportation": "Новый транспорт", + "enter_flight_number": "Введите номер рейса", + "enter_from_location": "Укажите место отправления", + "enter_link": "Введите ссылку", + "enter_to_location": "Укажите место прибытия", + "enter_transportation_name": "Введите название транспорта", + "select_type": "Выберите тип", + "update_transportation_details": "Обновите детали транспорта" + }, + "lodging": { + "new_lodging": "Новое жилье", + "edit": "Редактировать", + "edit_lodging": "Редактировать жилье", + "hotel": "Отель", + "hostel": "Хостел", + "resort": "Курорт", + "bnb": "Гостевой дом", + "campground": "Кемпинг", + "cabin": "Домик", + "apartment": "Квартира", + "house": "Дом", + "villa": "Вилла", + "motel": "Мотель", + "other": "Другое", + "reservation_number": "Номер бронирования", + "create_new_lodging": "Новое жилье", + "enter_lodging_name": "Введите имя жилья", + "enter_price": "Введите цену", + "enter_reservation_number": "Введите номер бронирования", + "update_lodging_details": "Обновить детали жилья" + }, + "search": { + "adventurelog_results": "Результаты AdventureLog", + "public_adventures": "Публичные приключения", + "online_results": "Онлайн результаты", + "cities": "Города", + "countries": "Страны", + "found": "найденный", + "result": "Результат", + "results": "Результаты", + "try_searching_desc": "Попробуйте искать локации, коллекции, страны, регионы, города или пользователей." + }, + "map": { + "view_details": "Подробности", + "adventure_map": "Карта приключений", + "map_options": "Настройки карты", + "show_visited_regions": "Показать посещенные регионы", + "add_adventure_at_marker": "Добавить новое приключение в отмеченном месте", + "clear_marker": "Очистить маркер", + "add_adventure": "Добавить новое приключение", + "adventure_stats": "Приключенческая статистика", + "completion": "Завершение", + "display_options": "Параметры отображения", + "map_controls": "Карта управления", + "marker_placed_on_map": "Маркер размещен на карте", + "regions": "Регионы", + "add_location": "Добавить новую локацию", + "add_location_at_marker": "Добавить новую локацию в маркере", + "location_map": "Карта местоположения", + "locations_shown": "Места показаны", + "place_marker_desc_location": "Нажмите на карту, чтобы разместить маркер.", + "show_activities": "Показать активности", + "show_visited_cities": "Посещенные города" + }, + "share": { + "shared": "Поделился", + "with": "с", + "unshared": "Не поделено", + "share_desc": "Поделитесь этой коллекцией с другими пользователями.", + "shared_with": "Поделился с", + "no_users_shared": "Ни с кем не поделился", + "not_shared_with": "Не поделился с", + "no_shared_found": "Не найдено коллекций, которыми с вами поделились.", + "set_public": "Чтобы пользователи могли делиться с вами, вам нужно сделать ваш профиль публичным.", + "go_to_settings": "Перейти к настройкам", + "available": "Доступный", + "pending": "В ожидании", + "revoke_invite": "Отменить приглашение", + "send_invite": "Отправить приглашение", + "available_users": "Поделиться с", + "no_available_users": "Нет доступных пользователей" + }, + "languages": {}, + "profile": { + "member_since": "Участник с", + "user_stats": "Статистика пользователя", + "visited_countries": "Посещенные страны", + "visited_regions": "Посещенные регионы", + "visited_cities": "Посещенные города", + "discovered": "обнаруженно", + "explored": "исследованно", + "no_shared_adventures": "Этот пользователь еще не поделился публичными приключениями.", + "no_shared_collections": "Этот пользователь еще не поделился публичными коллекциями.", + "planned_trips": "Запланированные поездки", + "travel_statistics": "Статистика путешествий", + "your_journey_at_a_glance": "Ваше приключенческое путешествие с первого взгляда", + "public_location_experiences": "Общественная локация" + }, + "categories": { + "manage_categories": "Управление категориями", + "no_categories_found": "Категории не найдены.", + "edit_category": "Редактировать категорию", + "icon": "Иконка", + "select_category": "Выбрать категорию", + "category_name": "Название категории", + "add_new_category": "Добавить новую категорию", + "name_required": "Требуется название категории", + "location_update_after_refresh": "Карты местоположения будут обновлены после обновления страницы.", + "no_categories_yet": "Нет категорий" + }, + "dashboard": { + "welcome_back": "Добро пожаловать обратно", + "countries_visited": "Посещенные страны", + "total_adventures": "Всего приключений", + "total_visited_regions": "Всего посещенных регионов", + "total_visited_cities": "Всего посещенных городов", + "recent_adventures": "Недавние приключения", + "no_recent_adventures": "Нет недавних приключений?", + "add_some": "Почему бы не начать планировать ваше следующее приключение? Вы можете добавить новое приключение, нажав на кнопку ниже.", + "document_some_adventures": "Начните документировать свои путешествия и создать свою личную карту приключений!", + "view_all": "Просмотреть все", + "welcome_text_1": "Вы были на", + "welcome_text_2": "Приключения пока", + "welcome_text_3": "Продолжайте исследовать и документировать ваши путешествия!" + }, + "immich": { + "immich": "Immich", + "integration_fetch_error": "Ошибка получения данных из интеграции Immich", + "no_items_found": "Элементы не найдены", + "load_more": "Загрузить еще", + "immich_error": "Ошибка обновления интеграции Immich", + "immich_disabled": "Интеграция Immich успешно отключена!", + "disable": "Отключить", + "server_url": "URL сервера Immich", + "api_note": "Примечание: это должен быть URL к API серверу Immich, поэтому он, вероятно, заканчивается на /api, если у вас нет пользовательской конфигурации.", + "api_key": "API ключ Immich", + "enable_integration": "Включить интеграцию", + "update_integration": "Обновить интеграцию", + "immich_integration_desc": "Подключите ваш сервер управления фотографиями Immich", + "localhost_note": "Примечание: localhost, скорее всего, не будет работать, если вы не настроили сети Docker соответствующим образом. Рекомендуется использовать IP-адрес сервера или доменное имя.", + "api_key_placeholder": "Введите ваш API ключ Immich", + "need_help": "Нужна помощь с настройкой? Посмотрите", + "copy_locally": "Копировать изображения локально", + "copy_locally_desc": "Копировать изображения на сервер для офлайн доступа. Использует больше дискового пространства.", + "error_saving_image": "Ошибка сохранения изображения", + "connection_error": "Ошибка подключения к серверу Immich", + "integration_already_exists": "Интеграция Immich уже существует. Вы можете иметь только одну интеграцию одновременно.", + "integration_not_found": "Интеграция Immich не найдена. Пожалуйста, создайте новую интеграцию.", + "validation_error": "Произошла ошибка при проверке интеграции Immich. Пожалуйста, проверьте URL сервера и API ключ.", + "network_error": "Сетевая ошибка при подключении к серверу Immich. Пожалуйста, проверьте ваше соединение и попробуйте еще раз.", + "by_album": "По альбому", + "by_date": "На дату", + "error_no_object_id": "Идентификатор объекта не был предоставлен", + "fetch_error": "Ошибка извлечения данных из интеграции Immich", + "image_search_placeholder": "Поиск с помощью Immich", + "loading": "Загрузка", + "loading_albums": "Загрузка альбомов", + "no_images": "Не было найдено изображений", + "select_album_first": "Сначала выберите альбом", + "select_date": "Выберите дату", + "try_different_date": "Попробуйте другую дату", + "select_album": "Выберите альбом" + }, + "google_maps": { + "google_maps_integration_desc": "Подключите ваш аккаунт Google Maps для получения высококачественных результатов поиска местоположений и рекомендаций.", + "google_maps_integration_desc_no_staff": "Эта интеграция должна сначала быть включена администратором на этом сервере." + }, + "recomendations": { + "recommendation": "Рекомендация", + "recommendations": "Рекомендации", + "food": "Еда", + "tourism": "Туризм", + "location_recommendations": "Рекомендации местоположения" + }, + "calendar": { + "all_day_event": "Событие на весь день", + "calendar_overview": "Обзор календаря", + "day": "День", + "events_scheduled": "События запланированы", + "filtered_results": "Отфильтрованные результаты", + "month": "Месяц", + "today": "Сегодня", + "total_events": "Общее количество событий", + "week": "Неделя" + }, + "locations": { + "location": "Локация", + "locations": "Локации", + "my_locations": "Мои локации" + }, + "settings_download_backup": "Скачать резервную копию", + "invites": { + "accept": "Принять", + "accept_failed": "Не удалось принять приглашение", + "accepted": "Приглашение принято", + "by": "к", + "decline": "Отклонить", + "decline_failed": "Не удалось отклонить приглашение", + "declined": "Приглашение отклонено", + "invited_on": "Приглашен", + "no_invites": "Нет приглашений", + "no_invites_desc": "Убедитесь, что ваш профиль является общедоступным, чтобы пользователи могли пригласить вас.", + "pending_invites": "В ожидании приглашений", + "title": "Приглашения" + }, + "strava": { + "account_connected": "Учетная запись подключена", + "admin_setup_required": "Администратор сервера должен включить его во всем мире", + "authorization_error": "Перенаправление ошибки на URL авторизации Strava", + "connect_account": "Подключить учетную запись", + "disconnect": "Отключить", + "disconnect_error": "Ошибка отключения от Strava", + "disconnected": "Успешно отключен от Strava", + "not_configured": "Страва не настроен", + "ready_to_connect": "Готов к подключению", + "strava_integration_desc": "Подключитесь к Strava, чтобы легко импортировать ваши активации в места и посещения", + "gpx_required": "Пожалуйста, загрузите файл GPX, чтобы завершить импорт Strava", + "not_enabled": "Интеграция Strava не включена в этом случае." + }, + "wanderer": { + "connected": "Успешно связанный с Wanderer", + "connection_error": "Ошибка подключения к Wanderer", + "wanderer_integration_desc": "Подключитесь к Wanderer, чтобы легко импортировать и просмотреть ваши маршруты в локациях" + } } diff --git a/frontend/src/routes/locations/+page.server.ts b/frontend/src/routes/locations/+page.server.ts index cc7ba0c9..de2bc1a2 100644 --- a/frontend/src/routes/locations/+page.server.ts +++ b/frontend/src/routes/locations/+page.server.ts @@ -22,7 +22,7 @@ export const load = (async (event) => { typeString = 'all'; } - const include_collections = event.url.searchParams.get('include_collections') || 'false'; + const include_collections = event.url.searchParams.get('include_collections') || 'true'; const order_by = event.url.searchParams.get('order_by') || 'updated_at'; const order_direction = event.url.searchParams.get('order_direction') || 'asc'; const page = event.url.searchParams.get('page') || '1'; diff --git a/frontend/src/routes/locations/+page.svelte b/frontend/src/routes/locations/+page.svelte index b12fead8..eda25f74 100644 --- a/frontend/src/routes/locations/+page.svelte +++ b/frontend/src/routes/locations/+page.svelte @@ -114,10 +114,13 @@ } else { currentSort.visited = false; } - if (url.searchParams.get('include_collections') === 'on') { + if (url.searchParams.get('include_collections') === 'true') { currentSort.includeCollections = true; - } else { + } else if (url.searchParams.get('include_collections') === 'false') { currentSort.includeCollections = false; + } else { + // Default to true when no parameter is present (first visit) + currentSort.includeCollections = true; } if (!currentSort.visited && !currentSort.planned) { @@ -469,6 +472,18 @@ id="include_collections" class="checkbox checkbox-primary" checked={currentSort.includeCollections} + on:change={(e) => { + const target = e.currentTarget; + currentSort.includeCollections = target.checked; + // Immediately update the URL to reflect the change + let url = new URL(window.location.href); + if (target.checked) { + url.searchParams.set('include_collections', 'true'); + } else { + url.searchParams.set('include_collections', 'false'); + } + goto(url.toString(), { invalidateAll: true, replaceState: true }); + }} /> {$t('adventures.collection_locations')} diff --git a/frontend/src/routes/settings/+page.svelte b/frontend/src/routes/settings/+page.svelte index b46410b2..9c4e1be0 100644 --- a/frontend/src/routes/settings/+page.svelte +++ b/frontend/src/routes/settings/+page.svelte @@ -1226,22 +1226,17 @@ {/if} - {#if user.is_staff || !stravaGlobalEnabled} + + {#if !wandererEnabled}
- 📖 {$t('immich.need_help')} - {$t('navbar.documentation')} -
- {:else if !stravaGlobalEnabled} -- ℹ️ {$t('google_maps.google_maps_integration_desc_no_staff')} -
- {/if} ++ 📖 {$t('immich.need_help')} + {$t('navbar.documentation')} +