Enhance user profile and world travel pages with improved UI and functionality

- Updated user profile page to include achievement calculations and enhanced styling for user information and statistics.
- Added icons for better visual representation of user stats and achievements.
- Improved layout for displaying adventures and collections with conditional rendering for empty states.
- Refactored world travel page to include search and filter functionality for cities, with a sidebar for progress and stats.
- Implemented completion percentage and progress bars for visited cities.
- Enhanced map integration with markers for visited and not visited cities, including toggle options for map labels.
This commit is contained in:
Sean Morley
2025-06-14 11:10:59 -04:00
parent d4c76f8718
commit 151c76dbd1
21 changed files with 2209 additions and 2461 deletions

View File

@@ -16,22 +16,12 @@
"logout": "Выйти",
"about": "О AdventureLog",
"documentation": "Документация",
"discord": "Discord",
"language_selection": "Язык",
"support": "Поддержка",
"calendar": "Календарь",
"theme_selection": "Выбор темы",
"admin_panel": "Панель администратора",
"themes": {
"light": "Светлая",
"dark": "Тёмная",
"night": "Ночная",
"forest": "Лесная",
"aestheticLight": "Эстетическая светлая",
"aestheticDark": "Эстетическая тёмная",
"aqua": "Аква",
"northernLights": "Северное сияние"
}
"themes": {}
},
"about": {
"about": "О программе",
@@ -89,9 +79,7 @@
"not_found": "Приключение не найдено",
"not_found_desc": "Приключение, которое вы искали, не найдено. Попробуйте другое приключение или проверьте позже.",
"homepage": "Главная страница",
"adventure_details": "Детали приключения",
"collection": "Коллекция",
"adventure_type": "Тип приключения",
"longitude": "Долгота",
"latitude": "Широта",
"visit": "Посещение",
@@ -101,8 +89,6 @@
"visits": "Посещения",
"create_new": "Создать новое...",
"adventure": "Приключение",
"additional_info": "Дополнительная информация",
"sunrise_sunset": "Восход и закат",
"count_txt": "результатов соответствуют вашему поиску",
"sort": "Сортировка",
"order_by": "Сортировать по",
@@ -118,11 +104,9 @@
"date_constrain": "Ограничить датами коллекции",
"rating": "Рейтинг",
"my_images": "Мои изображения",
"add_an_activity": "Добавить активность",
"show_region_labels": "Показать названия регионов",
"no_images": "Нет изображений",
"distance": "Расстояние",
"upload_images_here": "Загрузите изображения сюда",
"share_adventure": "Поделиться этим приключением!",
"copy_link": "Копировать ссылку",
"sun_times": "Время солнца",
@@ -141,7 +125,6 @@
"add": "Добавить",
"save_next": "Сохранить и далее",
"end_date": "Дата окончания",
"my_visits": "Мои посещения",
"start_date": "Дата начала",
"remove": "Удалить",
"location": "Местоположение",
@@ -154,8 +137,6 @@
"attachments": "Вложения",
"attachment": "Вложение",
"images": "Изображения",
"primary": "Основное",
"view_attachment": "Просмотреть вложение",
"generate_desc": "Сгенерировать описание",
"public_adventure": "Публичное приключение",
"location_information": "Информация о местоположении",
@@ -167,11 +148,9 @@
"filter": "Фильтр",
"category_filter": "Фильтр категории",
"category": "Категория",
"select_adventure_category": "Выберите категорию приключения",
"clear": "Очистить",
"my_collections": "Мои коллекции",
"open_filters": "Открыть фильтры",
"close_filters": "Закрыть фильтры",
"archived_collections": "Архивные коллекции",
"share": "Поделиться",
"private": "Приватное",
@@ -187,7 +166,6 @@
"delete_collection_success": "Коллекция успешно удалена!",
"delete_collection_warning": "Вы уверены, что хотите удалить эту коллекцию? Это также удалит все связанные приключения. Это действие нельзя отменить.",
"cancel": "Отмена",
"of": "из",
"delete_collection": "Удалить коллекцию",
"delete_adventure": "Удалить приключение",
"adventure_delete_success": "Приключение успешно удалено!",
@@ -203,13 +181,10 @@
"dates": "Даты",
"wiki_image_error": "Ошибка получения изображения из Википедии",
"start_before_end_error": "Дата начала должна быть раньше даты окончания",
"activity": "Активность",
"actions": "Действия",
"no_end_date": "Пожалуйста, введите дату окончания",
"see_adventures": "Посмотреть приключения",
"image_fetch_failed": "Не удалось получить изображение",
"no_location": "Пожалуйста, введите местоположение",
"no_start_date": "Пожалуйста, введите дату начала",
"no_description_found": "Описание не найдено",
"adventure_created": "Приключение создано",
"adventure_create_error": "Не удалось создать приключение",
@@ -225,7 +200,6 @@
"display_name": "Отображаемое имя",
"adventure_not_found": "Нет приключений для отображения. Добавьте их, используя кнопку плюс в правом нижнем углу, или попробуйте изменить фильтры!",
"no_adventures_found": "Приключения не найдены",
"mark_region_as_visited": "Отметить регион {region}, {country} как посещённый?",
"mark_visited": "Отметить как посещённое",
"error_updating_regions": "Ошибка обновления регионов",
"regions_updated": "регионов обновлено",
@@ -267,7 +241,6 @@
"will_be_marked": "будет отмечено как посещённое после сохранения приключения.",
"start": "Начало",
"end": "Конец",
"show_map": "Показать карту",
"emoji_picker": "Выбор эмодзи",
"download_calendar": "Скачать календарь",
"all_day": "Весь день",
@@ -293,32 +266,8 @@
"attachment_update_success": "Вложение успешно обновлено!",
"attachment_name": "Название вложения",
"gpx_tip": "Загрузите GPX-файлы во вложения, чтобы просматривать их на карте!",
"welcome_map_info": "Публичные приключения на этом сервере",
"attachment_update_error": "Ошибка обновления вложения",
"activities": {
"general": "Общее 🌍",
"outdoor": "На открытом воздухе 🏞️",
"lodging": "Проживание 🛌",
"dining": "Питание 🍽️",
"activity": "Активность 🏄",
"attraction": "Достопримечательность 🎢",
"shopping": "Покупки 🛍️",
"nightlife": "Ночная жизнь 🌃",
"event": "Мероприятие 🎉",
"transportation": "Транспорт 🚗",
"culture": "Культура 🎭",
"water_sports": "Водные виды спорта 🚤",
"hiking": "Пешие походы 🥾",
"wildlife": "Дикая природа 🦒",
"historical_sites": "Исторические места 🏛️",
"music_concerts": "Музыка и концерты 🎶",
"fitness": "Фитнес 🏋️",
"art_museums": "Искусство и музеи 🎨",
"festivals": "Фестивали 🎪",
"spiritual_journeys": "Духовные путешествия 🧘‍♀️",
"volunteer_work": "Волонтёрская работа 🤝",
"other": "Другое"
},
"activities": {},
"lodging_information": "Информация о жилье",
"price": "Цена",
"reservation_number": "Номер бронирования",
@@ -344,8 +293,6 @@
"failed_to_remove_visit": "Не удалось удалить посещение",
"marked_visited": "отмечено как посещённое",
"regions_in": "Регионы в",
"region_stats": "Статистика регионов",
"all_visited": "Вы посетили все регионы в",
"cities": "городов"
},
"auth": {
@@ -363,10 +310,7 @@
"profile_picture": "Фото профиля",
"public_profile": "Публичный профиль",
"public_tooltip": "С публичным профилем пользователи могут делиться с вами коллекциями и просматривать ваш профиль на странице пользователей.",
"email_required": "Email обязателен",
"new_password": "Новый пароль (6+ символов)",
"both_passwords_required": "Оба пароля обязательны",
"reset_failed": "Не удалось сбросить пароль",
"or_3rd_party": "Или войти через сторонний сервис",
"no_public_adventures": "Публичные приключения не найдены",
"no_public_collections": "Публичные коллекции не найдены",
@@ -392,7 +336,6 @@
"new_password": "Новый пароль",
"confirm_new_password": "Подтвердите новый пароль",
"email_change": "Изменить email",
"current_email": "Текущий email",
"no_email_set": "Email не установлен",
"email_management": "Управление email",
"email_management_desc": "Управление вашими адресами электронной почты и статусом подтверждения",
@@ -401,21 +344,13 @@
"enter_new_email": "Введите новый адрес электронной почты",
"new_email": "Новый email",
"change_password": "Изменить пароль",
"login_redir": "Затем вы будете перенаправлены на страницу входа.",
"token_required": "Токен и UID необходимы для сброса пароля.",
"reset_password": "Сбросить пароль",
"possible_reset": "Если адрес электронной почты, который вы указали, связан с учётной записью, вы получите письмо с инструкциями по сбросу пароля!",
"missing_email": "Пожалуйста, введите адрес электронной почты",
"submit": "Отправить",
"password_does_not_match": "Пароли не совпадают",
"password_is_required": "Пароль обязателен",
"invalid_token": "Токен недействителен или истёк",
"about_this_background": "Об этом фоне",
"photo_by": "Фото",
"join_discord": "Присоединиться к Discord",
"join_discord_desc": "чтобы поделиться своими фотографиями. Размещайте их в канале #travel-share.",
"current_password": "Текущий пароль",
"change_password_error": "Не удалось изменить пароль. Неверный текущий пароль или недопустимый новый пароль.",
"password_change_lopout_warning": "Вы будете вылогинены после изменения пароля.",
"generic_error": "Произошла ошибка при обработке вашего запроса.",
"email_removed": "Email успешно удалён!",
@@ -423,7 +358,6 @@
"verify_email_success": "Подтверждение email успешно отправлено!",
"verify_email_error": "Ошибка подтверждения email. Попробуйте снова через несколько минут.",
"email_added": "Email успешно добавлен!",
"email_added_error": "Ошибка добавления email",
"email_set_primary": "Email успешно установлен как основной!",
"email_set_primary_error": "Ошибка установки email как основного",
"verified": "Подтверждён",
@@ -432,7 +366,6 @@
"make_primary": "Сделать основным",
"verify": "Подтвердить",
"no_emai_set": "Email не установлен",
"error_change_password": "Ошибка изменения пароля. Пожалуйста, проверьте ваш текущий пароль и попробуйте снова.",
"mfa_disabled": "Многофакторная аутентификация успешно отключена!",
"mfa_page_title": "Многофакторная аутентификация",
"mfa_desc": "Добавьте дополнительный уровень безопасности к вашему аккаунту",
@@ -452,16 +385,6 @@
"email_verified_success": "Ваш email был подтвержден. Теперь вы можете войти в систему.",
"email_verified_error": "Ошибка подтверждения email",
"email_verified_erorr_desc": "Ваш email не может быть подтвержден. Пожалуйста, попробуйте еще раз.",
"invalid_code": "Неверный MFA код",
"invalid_credentials": "Неверное имя пользователя или пароль",
"mfa_required": "Требуется многофакторная аутентификация",
"required": "Это поле обязательно",
"add_email_blocked": "Вы не можете добавить email адрес к аккаунту, защищенному двухфакторной аутентификацией.",
"duplicate_email": "Этот email адрес уже используется.",
"csrf_failed": "Не удалось получить CSRF токен",
"email_taken": "Этот email адрес уже используется.",
"username_taken": "Это имя пользователя уже используется.",
"administration_settings": "Настройки администрирования",
"launch_administration_panel": "Запустить панель администрирования",
"administration": "Администрирование",
"admin_panel_desc": "Доступ к полному интерфейсу администрирования",
@@ -481,16 +404,11 @@
"advanced_settings_desc": "Расширенная конфигурация и инструменты разработчика",
"social_auth_setup": "Настройка социальной аутентификации",
"administration_desc": "Административные инструменты и настройки",
"social_oidc_auth": "Социальная и OIDC аутентификация",
"social_auth_desc": "Включите или отключите социальные и OIDC провайдеры аутентификации для вашего аккаунта. Эти подключения позволяют вам входить в систему с помощью самостоятельно размещенных провайдеров идентификации, таких как Authentik, или сторонних провайдеров, таких как GitHub.",
"social_auth_desc_2": "Эти настройки управляются на сервере AdventureLog и должны быть вручную включены администратором.",
"documentation_link": "Ссылка на документацию",
"launch_account_connections": "Запустить подключения аккаунта",
"password_too_short": "Пароль должен содержать не менее 6 символов",
"add_email": "Добавить Email",
"password_disable": "Отключить аутентификацию по паролю",
"password_disable_desc": "Отключение аутентификации по паролю не позволит вам входить в систему с паролем. Вам нужно будет использовать социального или OIDC провайдера для входа. Если ваш социальный провайдер будет отключен, аутентификация по паролю будет автоматически включена, даже если эта настройка отключена.",
"disable_password": "Отключить пароль",
"password_enabled": "Аутентификация по паролю включена",
"password_disabled": "Аутентификация по паролю отключена",
"password_disable_warning": "В настоящее время аутентификация по паролю отключена. Требуется вход через социального или OIDC провайдера.",
@@ -513,9 +431,7 @@
"enter_current_password": "Введите текущий пароль",
"enter_new_password": "Введите новый пароль",
"connected": "Подключено",
"disconnected": "Отключено",
"confirm_new_password_desc": "Подтвердите новый пароль",
"email_verified_error_desc": "Ваше письмо не может быть проверено. \nПожалуйста, попробуйте еще раз."
"disconnected": "Отключено"
},
"collection": {
"collection_created": "Коллекция успешно создана!",
@@ -524,7 +440,6 @@
"create": "Создать",
"collection_edit_success": "Коллекция успешно отредактирована!",
"error_editing_collection": "Ошибка редактирования коллекции",
"edit_collection": "Редактировать коллекцию",
"public_collection": "Публичная коллекция",
"manage_collections": "Управлять коллекциями"
},
@@ -545,16 +460,11 @@
"checklist": {
"checklist_deleted": "Чек-лист успешно удален!",
"checklist_delete_error": "Ошибка удаления чек-листа",
"failed_to_save": "Не удалось сохранить чек-лист",
"checklist_editor": "Редактор чек-листа",
"checklist_viewer": "Просмотр чек-листа",
"editing_checklist": "Редактирование чек-листа",
"new_checklist": "Новый чек-лист",
"item": "Элемент",
"items": "Элементы",
"add_item": "Добавить элемент",
"new_item": "Новый элемент",
"save": "Сохранить",
"checklist_public": "Этот чек-лист публичен, потому что находится в публичной коллекции.",
"item_cannot_be_empty": "Элемент не может быть пустым",
"item_already_exists": "Элемент уже существует"
@@ -562,14 +472,8 @@
"transportation": {
"transportation_deleted": "Транспорт успешно удален!",
"transportation_delete_error": "Ошибка удаления транспорта",
"provide_start_date": "Пожалуйста, укажите дату начала",
"transport_type": "Тип транспорта",
"type": "Тип",
"transportation_added": "Транспорт успешно добавлен!",
"error_editing_transportation": "Ошибка редактирования транспорта",
"new_transportation": "Новый транспорт",
"date_time": "Дата и время начала",
"end_date_time": "Дата и время окончания",
"flight_number": "Номер рейса",
"from_location": "Откуда",
"to_location": "Куда",
@@ -587,27 +491,12 @@
"walking": "Пешком",
"other": "Другое"
},
"transportation_edit_success": "Транспорт успешно отредактирован!",
"edit_transportation": "Редактировать транспорт",
"start": "Начало",
"date_and_time": "Дата и время"
"edit_transportation": "Редактировать транспорт"
},
"lodging": {
"lodging_deleted": "Жилье успешно удалено!",
"lodging_delete_error": "Ошибка удаления жилья",
"provide_start_date": "Пожалуйста, укажите дату начала",
"lodging_type": "Тип жилья",
"type": "Тип",
"lodging_added": "Жилье успешно добавлено!",
"error_editing_lodging": "Ошибка редактирования жилья",
"new_lodging": "Новое жилье",
"check_in": "Заезд",
"check_out": "Выезд",
"edit": "Редактировать",
"lodging_edit_success": "Жилье успешно отредактировано!",
"edit_lodging": "Редактировать жилье",
"start": "Начало",
"date_and_time": "Дата и время",
"hotel": "Отель",
"hostel": "Хостел",
"resort": "Курорт",
@@ -619,8 +508,7 @@
"villa": "Вилла",
"motel": "Мотель",
"other": "Другое",
"reservation_number": "Номер бронирования",
"current_timezone": "Текущий часовой пояс"
"reservation_number": "Номер бронирования"
},
"search": {
"adventurelog_results": "Результаты AdventureLog",
@@ -664,7 +552,6 @@
"update_after_refresh": "Карточки приключений будут обновлены после обновления страницы.",
"select_category": "Выбрать категорию",
"category_name": "Название категории",
"add_category": "Добавить категорию",
"add_new_category": "Добавить новую категорию"
},
"dashboard": {
@@ -680,29 +567,18 @@
"immich": {
"immich": "Immich",
"integration_fetch_error": "Ошибка получения данных из интеграции Immich",
"integration_missing": "Интеграция Immich отсутствует в бэкенде",
"query_required": "Запрос обязателен",
"server_down": "Сервер Immich в настоящее время недоступен",
"no_items_found": "Элементы не найдены",
"imageid_required": "ID изображения обязателен",
"load_more": "Загрузить еще",
"immich_updated": "Настройки Immich успешно обновлены!",
"immich_enabled": "Интеграция Immich успешно включена!",
"immich_error": "Ошибка обновления интеграции Immich",
"immich_disabled": "Интеграция Immich успешно отключена!",
"immich_desc": "Интегрируйте ваш аккаунт Immich с AdventureLog, чтобы искать в вашей библиотеке фотографий и импортировать фото для ваших приключений.",
"integration_enabled": "Интеграция включена",
"disable": "Отключить",
"server_url": "URL сервера Immich",
"api_note": "Примечание: это должен быть URL к API серверу Immich, поэтому он, вероятно, заканчивается на /api, если у вас нет пользовательской конфигурации.",
"api_key": "API ключ Immich",
"enable_immich": "Включить Immich",
"enable_integration": "Включить интеграцию",
"update_integration": "Обновить интеграцию",
"immich_integration": "Интеграция Immich",
"immich_integration_desc": "Подключите ваш сервер управления фотографиями Immich",
"localhost_note": "Примечание: localhost, скорее всего, не будет работать, если вы не настроили сети Docker соответствующим образом. Рекомендуется использовать IP-адрес сервера или доменное имя.",
"documentation": "Документация интеграции Immich",
"api_key_placeholder": "Введите ваш API ключ Immich",
"need_help": "Нужна помощь с настройкой? Посмотрите",
"copy_locally": "Копировать изображения локально",
@@ -718,14 +594,9 @@
"google_maps_integration_desc": "Подключите ваш аккаунт Google Maps для получения высококачественных результатов поиска местоположений и рекомендаций."
},
"recomendations": {
"address": "Адрес",
"phone": "Телефон",
"contact": "Контакт",
"website": "Веб-сайт",
"recommendation": "Рекомендация",
"recommendations": "Рекомендации",
"adventure_recommendations": "Рекомендации приключений",
"miles": "Мили",
"food": "Еда",
"tourism": "Туризм"
}