From 75ac9e8281ab230b613c24b5c9fb02bf31cc3f8c Mon Sep 17 00:00:00 2001 From: bankov4eto <90499490+bankov4eto@users.noreply.github.com> Date: Sun, 18 May 2025 10:39:29 +0300 Subject: [PATCH 01/11] Update translation.json Updated translations and added new missing strings. --- src/locales/bg/translation.json | 586 ++++++++++++++++++-------------- 1 file changed, 339 insertions(+), 247 deletions(-) diff --git a/src/locales/bg/translation.json b/src/locales/bg/translation.json index 4d91aa92..458b9e36 100644 --- a/src/locales/bg/translation.json +++ b/src/locales/bg/translation.json @@ -1,88 +1,88 @@ { "language_name": "Български", "app": { - "successfully_signed_in": "Успешно вписване" + "successfully_signed_in": "Успешно влизане" }, "home": { "featured": "Препоръчани", "surprise_me": "Изненадай ме", - "no_results": "Не са намерени резултати", - "start_typing": "Търсене...", - "hot": "Актуално сега", - "weekly": "📅 Най-доброто от седмицата", - "achievements": "🏆 Игри, които да победите" + "no_results": "Няма намерени резултати", + "start_typing": "Започнете да пишете за търсене...", + "hot": "Горещи сега", + "weekly": "📅 Топ игри на седмицата", + "achievements": "🏆 Игри които да победите" }, "sidebar": { "catalogue": "Каталог", "downloads": "Изтегляния", "settings": "Настройки", "my_library": "Моята библиотека", - "downloading_metadata": "{{title}} (Сваляне на метаданни…)", - "paused": "{{title}} (Пауза)", + "downloading_metadata": "{{title}} (Изтегляне на метаданни…)", + "paused": "{{title}} (На пауза)", "downloading": "{{title}} ({{percentage}} - Изтегляне…)", - "filter": "Търсене по име", + "filter": "Филтрирай библиотеката", "home": "Начало", - "queued": "{{title}} (Опашка)", - "game_has_no_executable": "Играта няма избран изпълним файл", - "sign_in": "Вписване", + "queued": "{{title}} (В опашката)", + "game_has_no_executable": "Няма избран изпълним файл за играта", + "sign_in": "Вход", "friends": "Приятели", - "need_help": "Имате нужда от помощ??", - "favorites": "Любими игри" + "need_help": "Нужда от помощ?", + "favorites": "Любими" }, "header": { - "search": "Търсене", + "search": "Търси игри", "home": "Начало", "catalogue": "Каталог", "downloads": "Изтегляния", - "search_results": "Резултати от търсене", + "search_results": "Резултати от търсенето", "settings": "Настройки", - "version_available_install": "Версия {{version}} е налична. Кликни тук, за да рестартирате и инсталирате.", - "version_available_download": "Версия {{version}} е налична. Кликни тук за изтегляне." + "version_available_install": "Версия {{version}} е налична. Кликнете тук за рестарт и инсталация.", + "version_available_download": "Версия {{version}} е налична. Кликнете тук за изтегляне." }, "bottom_panel": { - "no_downloads_in_progress": "Няма изтегляния в ход", - "downloading_metadata": "Сваляне на {{title}} метадата…", - "downloading": "Изтегляне на {{title}}… ({{percentage}} готово) - Остават {{eta}} - {{speed}}", - "calculating_eta": "Изтегляне на {{title}}… ({{percentage}} готово) - Изчисляване на оставащо време…", - "checking_files": "Проверка на {{title}} файловете… ({{percentage}} готово)" + "no_downloads_in_progress": "Няма текущи изтегляния", + "downloading_metadata": "Изтегляне на метаданни за {{title}}…", + "downloading": "Изтегля се {{title}}… ({{percentage}} завършено) - Завършване {{eta}} - {{speed}}", + "calculating_eta": "Изтегля се {{title}}… ({{percentage}} завършено) - Изчисляване на оставащо време…", + "checking_files": "Проверка на файловете за {{title}}… ({{percentage}} завършено)", + "installing_common_redist": "{{log}}…", + "installation_complete": "Инсталацията завършена", + "installation_complete_message": "Общите компоненти са инсталирани успешно" }, "catalogue": { - "search": "Филтър…", + "search": "Филтрирай…", "developers": "Разработчици", "genres": "Жанрове", "tags": "Тагове", "publishers": "Издатели", "download_sources": "Източници за изтегляне", - "result_count": "{{resultCount}} резултати", + "result_count": "{{resultCount}} резултата", "filter_count": "{{filterCount}} налични", "clear_filters": "Изчисти {{filterCount}} избрани" }, "game_details": { - "launch_options": "Опции за стартиране", - "launch_options_description": "Напредналите потребители могат да въведат модификации на своите опции за стартиране (экспериментальный)", - "launch_options_placeholder": "Няма зададен параметър", - "open_download_options": "Варианти за изтегляне", - "download_options_zero": "Няма варианти за изтегляне", - "download_options_one": "{{count}} варианти за изтегляне", - "download_options_other": "{{count}} варианти за изтегляне", + "open_download_options": "Отвори опциите за изтегляне", + "download_options_zero": "Няма опции за изтегляне", + "download_options_one": "{{count}} опция за изтегляне", + "download_options_other": "{{count}} опции за изтегляне", "updated_at": "Обновено на {{updated_at}}", "install": "Инсталирай", "resume": "Продължи", "pause": "Пауза", "cancel": "Отказ", "remove": "Премахни", - "space_left_on_disk": "{{space}} място на диска", - "eta": "Заклчение {{eta}}", - "calculating_eta": "Калкулиране на оставащо време…", - "downloading_metadata": "Изтегляне на метадата…", - "filter": "Филтрирай repacks", + "space_left_on_disk": "{{space}} свободно на диска", + "eta": "Завършване {{eta}}", + "calculating_eta": "Изчисляване на оставащо време…", + "downloading_metadata": "Изтегляне на метаданни…", + "filter": "Филтрирай репаковки", "requirements": "Системни изисквания", "minimum": "Минимални", "recommended": "Препоръчителни", - "paused": "Паузирано", - "release_date": "Издадено на {{date}}", - "publisher": "Публикувано от {{publisher}}", - "hours": "часове", + "paused": "На пауза", + "release_date": "Издадена на {{date}}", + "publisher": "Издател: {{publisher}}", + "hours": "часа", "minutes": "минути", "amount_hours": "{{amount}} часа", "amount_minutes": "{{amount}} минути", @@ -90,333 +90,425 @@ "add_to_library": "Добави в библиотеката", "remove_from_library": "Премахни от библиотеката", "no_downloads": "Няма налични изтегляния", - "play_time": "Игрално време {{amount}}", - "last_time_played": "Последно пускане {{period}}", - "not_played_yet": "Не сте играли {{title}} все още", + "play_time": "Играно: {{amount}}", + "last_time_played": "Последно играно: {{period}}", + "not_played_yet": "Все още не сте играли {{title}}", "next_suggestion": "Следващо предложение", - "play": "Пускане", - "deleting": "Изтриване на инсталация…", + "play": "Играй", + "deleting": "Изтриване на инсталатора…", "close": "Затвори", - "playing_now": "Играй сега", - "change": "Промяна", - "repacks_modal_description": "Избери repack който искаш да изтеглиш", - "select_folder_hint": "За да промените стандартната папка отидете в <0>Настройки", + "playing_now": "Играе се сега", + "change": "Промени", + "repacks_modal_description": "Изберете репак за изтегляне", + "select_folder_hint": "За да промените папката по подразбиране, отидете в <0>Настройки", "download_now": "Изтегли сега", - "no_shop_details": "Не може да се извлекат данни за магазина.", - "download_options": "Опции за сваляне", - "download_path": "Път за сваляне", - "previous_screenshot": "Предишна снимка", - "next_screenshot": "Следваща снимка", - "screenshot": "Снимка {{number}}", - "open_screenshot": "Отвори снимки {{number}}", - "download_settings": "Настройки за сваляне", - "downloader": "Downloader", + "no_shop_details": "Неуспешно извличане на детайли от магазина.", + "download_options": "Опции за изтегляне", + "download_path": "Път за изтегляне", + "previous_screenshot": "Предишен скрийншот", + "next_screenshot": "Следващ скрийншот", + "screenshot": "Скрийншот {{number}}", + "open_screenshot": "Отвори скрийншот {{number}}", + "download_settings": "Настройки за изтегляне", + "downloader": "Изтегляч", "select_executable": "Избери", - "no_executable_selected": "Няма избран стартиращ файл", + "no_executable_selected": "Няма избран изпълним файл", "open_folder": "Отвори папка", - "open_download_location": "Виж свалените файлове", - "create_shortcut": "Пряк път на Десктопа", + "open_download_location": "Виж изтеглените файлове", + "create_shortcut": "Създай пряк път на работния плот", + "clear": "Изчисти", "remove_files": "Премахни файловете", - "remove_from_library_title": "Сигурен ли си?", - "remove_from_library_description": "Това ще премахне {{game}} от Библиотеката", + "remove_from_library_title": "Сигурни ли сте?", + "remove_from_library_description": "Това ще премахне {{game}} от вашата библиотека", "options": "Опции", - "executable_section_title": "Стартиращ файл", - "executable_section_description": "Пътят на файла, който ще се изпълни, когато се щракне върху \"Пускане\"", - "downloads_section_title": "Свалени", - "downloads_section_description": "Вижте актуализации или други версии на тази игра", + "executable_section_title": "Изпълним файл", + "executable_section_description": "Пътят на файла, който ще се изпълни при \"Играй\"", + "downloads_section_title": "Изтегляния", + "downloads_section_description": "Вижте обновления или други версии на тази игра", "danger_zone_section_title": "Опасна зона", - "danger_zone_section_description": "Премахнете тази игра от библиотеката си или от файловете, изтеглени от Hydra", - "download_in_progress": "Изтегляне в ход", - "download_paused": "Изтеглянето е паузирано", - "last_downloaded_option": "Опция от последно изтегляне", + "danger_zone_section_description": "Премахнете тази игра от библиотеката или файловете, изтеглени от Hydra", + "download_in_progress": "Изтеглянето е в ход", + "download_paused": "Изтеглянето е на пауза", + "last_downloaded_option": "Последно изтеглена опция", + "create_steam_shortcut": "Създай пряк път за Steam", "create_shortcut_success": "Прекият път е създаден успешно", - "create_shortcut_error": "Грешка при създаването на пряк път", + "you_might_need_to_restart_steam": "Може да е необходимо да рестартирате Steam, за да видите промените", + "create_shortcut_error": "Грешка при създаване на пряк път", "nsfw_content_title": "Тази игра съдържа неподходящо съдържание", "nsfw_content_description": "{{title}} съдържа съдържание, което може да не е подходящо за всички възрасти. Сигурни ли сте, че искате да продължите?", "allow_nsfw_content": "Продължи", - "refuse_nsfw_content": "Назад", + "refuse_nsfw_content": "Върни се", "stats": "Статистики", - "download_count": "Сваляния", + "download_count": "Изтегляния", "player_count": "Активни играчи", "download_error": "Тази опция за изтегляне не е налична", - "download": "Свали", + "download": "Изтегли", "executable_path_in_use": "Изпълнимият файл вече се използва от \"{{game}}\"", "warning": "Внимание:", - "hydra_needs_to_remain_open": "за това изтегляне, Hydra трябва да остане отворена, когато е завършено. Ако Hydra се затвори преди завършването, ще загубите напредъка си..", + "hydra_needs_to_remain_open": "за това изтегляне, Hydra трябва да остане отворена до завършване. Ако затворите преди завършване, ще загубите прогреса.", "achievements": "Постижения", "achievements_count": "Постижения {{unlockedCount}}/{{achievementsCount}}", - "cloud_save": "Запазване в облака", - "cloud_save_description": "Запазете напредъка си в облака и продължете да играете на всяко устройство", - "backups": "Резервни копия", + "cloud_save": "Облачно запазване", + "cloud_save_description": "Запазете прогреса си в облака и продължете да играете на всяко устройство", + "backups": "Архиви", "install_backup": "Инсталирай", "delete_backup": "Изтрий", - "create_backup": "Ново копие", - "last_backup_date": "Последно копие от {{date}}", - "no_backup_preview": "Не бяха намерени запазени игри за това заглавие", - "restoring_backup": "Възстановяване на резервно копие ({{progress}} готово)…", - "uploading_backup": "Качване на резервно копие…", - "no_backups": "Все още не сте създали резервни копия за тази игра", - "backup_uploaded": "Качено резервно копие", - "backup_deleted": "Изтрито резервно копие", - "backup_restored": "Възстановен бекъп", - "see_all_achievements": "Вижте всички постижения", + "create_backup": "Нов архив", + "last_backup_date": "Последен архив на {{date}}", + "no_backup_preview": "Не са намерени запазени игри за това заглавие", + "restoring_backup": "Възстановяване на архив ({{progress}} завършено)…", + "uploading_backup": "Качване на архив…", + "no_backups": "Не сте създали архиви за тази игра", + "backup_uploaded": "Архивът е качен", + "backup_deleted": "Архивът е изтрит", + "backup_restored": "Архивът е възстановен", + "see_all_achievements": "Виж всички постижения", "sign_in_to_see_achievements": "Влезте, за да видите постиженията", "mapping_method_automatic": "Автоматично", "mapping_method_manual": "Ръчно", - "mapping_method_label": "Метод на картографиране", - "files_automatically_mapped": "Автоматично картографиране на файлове", - "no_backups_created": "Не са създадени резервни копия за тази игра", - "manage_files": "Управление на файлове", + "mapping_method_label": "Метод на съпоставяне", + "files_automatically_mapped": "Файловете са съпоставени автоматично", + "no_backups_created": "Няма създадени архиви за тази игра", + "manage_files": "Управлявай файлове", "loading_save_preview": "Търсене на запазени игри…", - "wine_prefix": "Wine Префикс", - "wine_prefix_description": "Wine prefix използван за тази игра", - "no_download_option_info": "Няма налични данни", - "backup_deletion_failed": "Неуспешно изтриване на резервно копие", - "max_number_of_artifacts_reached": "Достигнат максимален брой резервни копия за тази игра", - "achievements_not_sync": "Постиженията не са синхронизирани", - "manage_files_description": "Управлявайте кои файлове ще бъдат архивирани и възстановени", + "wine_prefix": "Wine префикс", + "wine_prefix_description": "Wine префикс, използван за стартиране на тази игра", + "launch_options": "Опции за стартиране", + "launch_options_description": "Напреднали потребители могат да въведат модификации (експериментална функция)", + "launch_options_placeholder": "Няма зададен параметър", + "no_download_option_info": "Няма налична информация", + "backup_deletion_failed": "Неуспешно изтриване на архив", + "max_number_of_artifacts_reached": "Достигнат е максималният брой архиви за тази игра", + "achievements_not_sync": "Вижте как да синхронизирате постиженията си", + "manage_files_description": "Управлявайте кои файлове ще се архивират и възстановяват", "select_folder": "Избери папка", - "backup_from": "Резервно копие от {{date}}", - "custom_backup_location_set": "Задаване на персонализирано местоположение за архивиране" + "backup_from": "Архив от {{date}}", + "automatic_backup_from": "Автоматичен архив от {{date}}", + "enable_automatic_cloud_sync": "Включи автоматична синхронизация с облака", + "custom_backup_location_set": "Зададено е персонализирано място за архив", + "no_directory_selected": "Няма избрана директория", + "no_write_permission": "Не може да се изтегли в тази директория. Кликнете тук за повече информация.", + "reset_achievements": "Нулирай постиженията", + "reset_achievements_description": "Това ще нулира всички постижения за {{game}}", + "reset_achievements_title": "Сигурни ли сте?", + "reset_achievements_success": "Постиженията са нулирани успешно", + "reset_achievements_error": "Неуспешно нулиране на постиженията", + "download_error_gofile_quota_exceeded": "Превишихте месечната си квота в Gofile. Моля, изчакайте тя да се възстанови.", + "download_error_real_debrid_account_not_authorized": "Вашият Real-Debrid акаунт не е упълномощен за нови изтегляния. Моля, проверете настройките на акаунта и опитайте отново.", + "download_error_not_cached_on_real_debrid": "Това изтегляне не е налично в Real-Debrid и не може да се следи статуса.", + "download_error_not_cached_on_torbox": "Това изтегляне не е налично в TorBox и не може да се следи статуса.", + "download_error_not_cached_on_hydra": "Това изтегляне не е налично в Nimbus.", + "game_removed_from_favorites": "Играта е премахната от любими", + "game_added_to_favorites": "Играта е добавена в любими", + "automatically_extract_downloaded_files": "Автоматично извличане на изтеглени файлове", + "create_start_menu_shortcut": "Създай пряк път в старт менюто", + "invalid_wine_prefix_path": "Невалиден път до Wine префикса", + "invalid_wine_prefix_path_description": "Пътят до Wine префикса е невалиден. Моля, проверете го и опитайте отново.", + "missing_wine_prefix": "Wine префикс е необходим за създаване на архив в Linux" }, "activation": { "title": "Активирай Hydra", - "installation_id": "Идентификатор на инсталацията:", - "enter_activation_code": "Въведете кода за активиране", - "message": "Ако не знаете къде да попитате за това, значи не трябва да го имате..", + "installation_id": "Инсталационен ID:", + "enter_activation_code": "Въведете активационен код", + "message": "Ако не знаете къде да попитате за това, не бива да го имате.", "activate": "Активирай", "loading": "Зареждане…" }, "downloads": { - "seeding": "Сийдване", - "stop_seeding": "Спри сийдването", - "resume_seeding": "Продължи сийдването", - "options": "Управление", "resume": "Продължи", "pause": "Пауза", - "eta": "Conclusion {{eta}}", - "paused": "Паузирано", + "eta": "Завършване {{eta}}", + "paused": "На пауза", "verifying": "Проверка…", - "completed": "Готово", - "removed": "Не е изтеглен", + "completed": "Завършено", + "removed": "Не е изтеглено", "cancel": "Отказ", - "filter": "Филтриране на изтеглени игри", + "filter": "Филтрирай изтеглените игри", "remove": "Премахни", "downloading_metadata": "Изтегляне на метаданни…", "deleting": "Изтриване на инсталатора…", - "delete": "Премахване на инсталатора", - "delete_modal_title": "Сигурени ли сте?", - "delete_modal_description": "Това ще премахне всички инсталационни файлове от компютъра ви.", + "delete": "Премахни инсталатора", + "delete_modal_title": "Сигурни ли сте?", + "delete_modal_description": "Това ще премахне всички инсталационни файлове от компютъра ви", "install": "Инсталирай", - "download_in_progress": "В процес на изпълнение", - "queued_downloads": "Изтеглени файлове в опашката", - "downloads_completed": "Приключени", - "queued": "В опашка", + "download_in_progress": "В процес", + "queued_downloads": "Изтегляния на опашка", + "downloads_completed": "Завършени", + "queued": "В опашката", "no_downloads_title": "Толкова е празно", - "no_downloads_description": "Все още не сте изтеглили нищо с Hydra, но никога не е късно да започнете...", - "checking_files": "Проверка на файлове…" + "no_downloads_description": "Все още не сте изтеглили нищо с Hydra, но никога не е късно да започнете.", + "checking_files": "Проверка на файлове…", + "seeding": "Сийдване", + "stop_seeding": "Спри сийдването", + "resume_seeding": "Продължи сийдването", + "options": "Управлявай", + "extract": "Извлечи файловете", + "extracting": "Извличане на файловете…" }, "settings": { - "seed_after_download_complete": "Сийд след завършване на изтеглянето", - "show_hidden_achievement_description": "Показвай описанието на скритите постижения преди отключването им", - "downloads_path": "Инсталационен път", - "change": "Актуализиране", + "downloads_path": "Път за изтегляния", + "change": "Обнови", "notifications": "Известия", - "enable_download_notifications": "Когато изтеглянето е завършено", - "enable_repack_list_notifications": "Когато се добави нов repack", + "enable_download_notifications": "Когато изтеглянето приключи", + "enable_repack_list_notifications": "Когато бъде добавен нов репак", "real_debrid_api_token_label": "Real-Debrid API токен", - "quit_app_instead_hiding": "Не скривайте Hydra при затваряне", - "launch_with_system": "Стартиране на Hydra при стартиране на системата", + "quit_app_instead_hiding": "Не скривай Hydra при затваряне", + "launch_with_system": "Стартирай Hydra при стартиране на системата", "general": "Общи", "behavior": "Поведение", "download_sources": "Източници за изтегляне", "language": "Език", - "api_token": "API Токен", + "api_token": "API токен", "enable_real_debrid": "Включи Real-Debrid", - "real_debrid_description": "Real-Debrid е неограничен даунлоудър, който ви позволява бързо да изтегляте файлове, ограничени само от скоростта на интернет..", + "real_debrid_description": "Real-Debrid е неограничен изтегляч, който ви позволява да теглите бързо, ограничено само от интернет връзката ви.", "debrid_invalid_token": "Невалиден API токен", - "debrid_api_token_hint": "Вземете своя API токен <0>тук", - "real_debrid_free_account_error": "Акаунтът \"{{username}}\" е безплатен акаунт. Моля абонирай се за Real-Debrid", - "debrid_linked_message": "Акаунтът \"{{username}}\" е свързан", + "debrid_api_token_hint": "Може да получите вашия API токен <0>тук", + "real_debrid_free_account_error": "Акаунтът \"{{username}}\" е безплатен. Моля, абонирайте се за Real-Debrid", + "debrid_linked_message": "Акаунт \"{{username}}\" е свързан", "save_changes": "Запази промените", - "changes_saved": "Промените са успешно запазни", - "download_sources_description": "Hydra ще извлича връзките за изтегляне от тези източници. URL адресът на източника трябва да е директна връзка към .json файл, съдържащ връзките за изтегляне.", - "validate_download_source": "Валидиране", + "changes_saved": "Промените са запазени успешно", + "download_sources_description": "Hydra ще взема линкове за изтегляне от тези източници. URL адресът трябва да сочи към .json файл с линкове.", + "validate_download_source": "Валидирай", "remove_download_source": "Премахни", "add_download_source": "Добави източник", - "download_count_zero": "Няма опции за сваляне", - "download_count_one": "{{countFormatted}} опции за сваляне", - "download_count_other": "{{countFormatted}} опции за сваляне", - "download_source_url": "URL адрес на източника за изтегляне", - "add_download_source_description": "Вмъкнете URL адреса на файла .json", - "download_source_up_to_date": "Актуален", - "download_source_errored": "Сгрешен", - "sync_download_sources": "Синхронизирай източниците", - "removed_download_source": "Източника за сваляне е премахнат", - "cancel_button_confirmation_delete_all_sources": "не", - "confirm_button_confirmation_delete_all_sources": "Да, удалить все", - "description_confirmation_delete_all_sources": "Вы удалите все источники загрузки", - "title_confirmation_delete_all_sources": "Удалить все источники загрузки", - "removed_download_sources": "Шрифты удалены", - "button_delete_all_sources": "Удалить все источники загрузки", - "added_download_source": "Добавен източник за сваляне", - "download_sources_synced": "Всички източници за сваляне са синхронизирани", - "insert_valid_json_url": "Добавете ваиден JSON линк", - "found_download_option_zero": "Няма намерени опции за сваляне", - "found_download_option_one": "Намерени {{countFormatted}} опции за сваляне", - "found_download_option_other": "Намерени {{countFormatted}} опции за сваляне", - "import": "Внеси", - "public": "Публичен", - "private": "Личен", + "download_count_zero": "Няма опции за изтегляне", + "download_count_one": "{{countFormatted}} опция за изтегляне", + "download_count_other": "{{countFormatted}} опции за изтегляне", + "download_source_url": "URL на източника", + "add_download_source_description": "Въведете URL на .json файла", + "download_source_up_to_date": "Актуализиран", + "download_source_errored": "Грешка", + "sync_download_sources": "Синхронизирай източници", + "removed_download_source": "Източникът е премахнат", + "removed_download_sources": "Източниците са премахнати", + "cancel_button_confirmation_delete_all_sources": "Не", + "confirm_button_confirmation_delete_all_sources": "Да, изтрий всичко", + "title_confirmation_delete_all_sources": "Изтрий всички източници", + "description_confirmation_delete_all_sources": "Ще изтриете всички източници", + "button_delete_all_sources": "Премахни всички", + "added_download_source": "Източникът е добавен", + "download_sources_synced": "Всички източници са синхронизирани", + "insert_valid_json_url": "Въведете валиден JSON url", + "found_download_option_zero": "Не е намерена опция за изтегляне", + "found_download_option_one": "Намерена е {{countFormatted}} опция за изтегляне", + "found_download_option_other": "Намерени са {{countFormatted}} опции за изтегляне", + "import": "Импортирай", + "public": "Публично", + "private": "Частно", "friends_only": "Само за приятели", "privacy": "Поверителност", "profile_visibility": "Видимост на профила", "profile_visibility_description": "Изберете кой може да вижда вашия профил и библиотека", "required_field": "Това поле е задължително", "source_already_exists": "Този източник вече е добавен", - "must_be_valid_url": "Източникът трябва да е валиден URL адрес.", + "must_be_valid_url": "Източникът трябва да е валиден URL", "blocked_users": "Блокирани потребители", - "user_unblocked": "Потребителят е бил деблокиран", - "enable_achievement_notifications": "Когато е отключено постижение", - "launch_minimized": "Стартиране на Hydra минимизирано", - "disable_nsfw_alert": "Деактивиране на предупреждението NSFW" + "user_unblocked": "Потребителят е деблокиран", + "enable_achievement_notifications": "Когато бъде отключено постижение", + "launch_minimized": "Стартирай Hydra минимизирано", + "disable_nsfw_alert": "Изключи NSFW предупреждението", + "seed_after_download_complete": "Сийдвай след завършване на изтеглянето", + "show_hidden_achievement_description": "Показвай описанието на скритите постижения преди отключване", + "account": "Акаунт", + "no_users_blocked": "Нямате блокирани потребители", + "subscription_active_until": "Hydra Cloud е активен до {{date}}", + "manage_subscription": "Управлявай абонамента", + "update_email": "Обнови имейл", + "update_password": "Обнови парола", + "current_email": "Текущ имейл:", + "no_email_account": "Все още не сте задали имейл", + "account_data_updated_successfully": "Данните на акаунта са обновени успешно", + "renew_subscription": "Поднови Hydra Cloud", + "subscription_expired_at": "Абонаментът изтече на {{date}}", + "no_subscription": "Наслаждавайте се на Hydra по най-добрия начин", + "become_subscriber": "Станете абонат на Hydra Cloud", + "subscription_renew_cancelled": "Автоматичното подновяване е изключено", + "subscription_renews_on": "Абонаментът се подновява на {{date}}", + "bill_sent_until": "Следващата фактура ще бъде изпратена до този ден", + "no_themes": "Изглежда, че все още нямате теми. Кликнете тук, за да създадете първата си.", + "editor_tab_code": "Код", + "editor_tab_info": "Информация", + "editor_tab_save": "Запази", + "web_store": "Уеб магазин", + "clear_themes": "Изчисти", + "create_theme": "Създай", + "create_theme_modal_title": "Създай персонализирана тема", + "create_theme_modal_description": "Създайте нова тема за персонализиране на външния вид на Hydra", + "theme_name": "Име", + "insert_theme_name": "Въведете име на тема", + "set_theme": "Задай тема", + "unset_theme": "Премахни тема", + "delete_theme": "Изтрий тема", + "edit_theme": "Редактирай тема", + "delete_all_themes": "Изтрий всички теми", + "delete_all_themes_description": "Това ще изтрие всички ваши персонализирани теми", + "delete_theme_description": "Това ще изтрие темата {{theme}}", + "cancel": "Отказ", + "appearance": "Външен вид", + "enable_torbox": "Включи TorBox", + "torbox_description": "TorBox е вашият премиум seedbox, съперничещ на най-добрите сървъри на пазара.", + "torbox_account_linked": "TorBox акаунтът е свързан", + "create_real_debrid_account": "Кликнете тук, ако все още нямате Real-Debrid акаунт", + "create_torbox_account": "Кликнете тук, ако все още нямате TorBox акаунт", + "real_debrid_account_linked": "Real-Debrid акаунтът е свързан", + "name_min_length": "Името на темата трябва да е поне 3 символа", + "import_theme": "Импортирай тема", + "import_theme_description": "Ще импортирате {{theme}} от магазина с теми", + "error_importing_theme": "Грешка при импортиране на тема", + "theme_imported": "Темата е импортирана успешно", + "enable_friend_request_notifications": "Когато получите заявка за приятелство", + "enable_auto_install": "Автоматично изтегляй обновления", + "common_redist": "Общи компоненти", + "common_redist_description": "Общите компоненти са нужни за някои игри. Препоръчва се инсталация.", + "install_common_redist": "Инсталирай", + "installing_common_redist": "Инсталиране…", + "show_download_speed_in_megabytes": "Показвай скоростта на изтегляне в MB/s", + "extract_files_by_default": "Извличай файловете по подразбиране след изтегляне" }, "notifications": { - "download_complete": "Изтеглянето е завършено", - "game_ready_to_install": "{{title}} е готово за инсталиране", - "repack_list_updated": "Repack лист е обновен", - "repack_count_one": "{{count}} repack е добавен", - "repack_count_other": "{{count}} repacks добавени", - "new_update_available": "Версия {{version}} е налична", - "restart_to_install_update": "Рестартирайте Hydra, за да инсталирате актуализацията", + "download_complete": "Изтеглянето завърши", + "game_ready_to_install": "{{title}} е готова за инсталация", + "repack_list_updated": "Списъкът с репаци е обновен", + "repack_count_one": "Добавен е {{count}} репак", + "repack_count_other": "Добавени са {{count}} репака", + "new_update_available": "Налична е версия {{version}}", + "restart_to_install_update": "Рестартирайте Hydra за инсталиране на обновлението", "notification_achievement_unlocked_title": "Отключено постижение за {{game}}", - "notification_achievement_unlocked_body": "{{achievement}} и други {{count}} са отклщчени" + "notification_achievement_unlocked_body": "{{achievement}} и още {{count}} бяха отключени", + "new_friend_request_description": "{{displayName}} ви изпрати заявка за приятелство", + "new_friend_request_title": "Нова заявка за приятелство", + "extraction_complete": "Извличането завърши", + "game_extracted": "{{title}} е извлечена успешно", + "friend_started_playing_game": "{{displayName}} започна да играе игра" }, "system_tray": { "open": "Отвори Hydra", "quit": "Изход" }, "game_card": { + "available_one": "Налично", + "available_other": "Налично", "no_downloads": "Няма налични изтегляния" }, "binary_not_found_modal": { - "title": "Не инсталирани програми", - "description": "Wine или Lutris изпълними файлове не бяха открити на вашата система", - "instructions": "Проверете правилния начин за инсталиране на някоя от тях на вашата дистрибуция на Linux, за да може играта да работи нормално" + "title": "Програмите не са инсталирани", + "description": "Wine или Lutris не са открити на вашата система", + "instructions": "Проверете как да инсталирате някоя от тях за вашата Linux дистрибуция, за да може играта да работи." }, "modal": { "close": "Бутон за затваряне" }, "forms": { - "toggle_password_visibility": "Превключване на видимостта на паролата" + "toggle_password_visibility": "Показване/скриване на паролата" }, "user_profile": { - "stats": "Статистики", - "achievements": "Постижения", - "games": "Игри", - "top_percentile": "Топ {{percentile}}%", - "ranking_updated_weekly": "Класацията се актуализира седмично", - "playing": "Играе {{game}}", - "achievements_unlocked": "Отключени постижения", - "earned_points": "Спечелени точки", - "show_achievements_on_profile": "Показвай своите постижения в профила", - "show_points_on_profile": "Показвай спечелените точки в профила", - "amount_hours": "{{amount}} часове", + "amount_hours": "{{amount}} часа", "amount_minutes": "{{amount}} минути", - "last_time_played": "Последно играно {{period}}", - "activity": "Скорошна активност", + "last_time_played": "Последно играно: {{period}}", + "activity": "Последна активност", "library": "Библиотека", "total_play_time": "Общо време за игра", - "no_recent_activity_title": "Хмм… няма нищо тук", - "no_recent_activity_description": "Не сте играли игри напоследък. Време е да промените това.!", - "display_name": "Показване на името", + "no_recent_activity_title": "Хммм… няма нищо тук", + "no_recent_activity_description": "Не сте играли игри наскоро. Време е да го промените!", + "display_name": "Показвано име", "saving": "Запазване", - "save": "Запис", - "edit_profile": "Редактиране на профила", - "saved_successfully": "Запазено успешно", - "try_again": "Моля, опитайте пак", + "save": "Запази", + "edit_profile": "Редактирай профил", + "saved_successfully": "Успешно запазено", + "try_again": "Моля, опитайте отново", "sign_out_modal_title": "Сигурни ли сте?", "cancel": "Отказ", - "successfully_signed_out": "Успешно се отписахте", - "sign_out": "Отписване", - "playing_for": "В игра от {{amount}}", - "sign_out_modal_text": "Вашата библиотека е свързана с текущата ви сметка. Когато се отпишете, библиотеката ви вече няма да е видима и напредъкът няма да бъде запазен. Продължете с отписването?", + "successfully_signed_out": "Успешно излязохте", + "sign_out": "Изход", + "playing_for": "Играе се от {{amount}}", + "sign_out_modal_text": "Библиотеката ви е свързана с този акаунт. При изход, тя няма да е видима, а прогресът няма да се запази. Продължавате ли?", "add_friends": "Добави приятели", "add": "Добави", - "friend_code": "Приятелски код", + "friend_code": "Код за приятелство", "see_profile": "Виж профила", "sending": "Изпращане", - "friend_request_sent": "Изпратена покана за приятелство", + "friend_request_sent": "Заявката е изпратена", "friends": "Приятели", "friends_list": "Списък с приятели", - "user_not_found": "Не е намерен потребител", + "user_not_found": "Потребителят не е намерен", "block_user": "Блокирай потребител", "add_friend": "Добави приятел", - "request_sent": "Изпратена покана", - "request_received": "Получена покана", - "accept_request": "Приеми поканата", - "ignore_request": "Игнирирай поканата", - "cancel_request": "Откажи поканата", - "undo_friendship": "Отмяна на приятелството", - "request_accepted": "Поканата е приета", + "request_sent": "Заявката е изпратена", + "request_received": "Получена заявка", + "accept_request": "Приеми заявката", + "ignore_request": "Игнорирай заявката", + "cancel_request": "Отмени заявката", + "undo_friendship": "Премахни приятелството", + "request_accepted": "Заявката е приета", "user_blocked_successfully": "Потребителят е блокиран успешно", "user_block_modal_text": "Това ще блокира {{displayName}}", "blocked_users": "Блокирани потребители", - "unblock": "Отблокирай", - "no_friends_added": "Не сте добавили приятели", + "unblock": "Деблокирай", + "no_friends_added": "Нямате добавени приятели", "pending": "Чакащи", "no_pending_invites": "Нямате чакащи покани", "no_blocked_users": "Нямате блокирани потребители", - "friend_code_copied": "Приятелския код е копиран", - "undo_friendship_modal_text": "Това ще отмени приятелството ви с {{displayName}}", - "privacy_hint": "За да настроите кой може да вижда това, отидете в <0>Настройки", - "locked_profile": "Този профил е личен", - "image_process_failure": "Грешка при обработката на изображението", + "friend_code_copied": "Кодът за приятелство е копиран", + "undo_friendship_modal_text": "Това ще премахне приятелството ви с {{displayName}}", + "privacy_hint": "За да промените кой вижда това, отидете в <0>Настройки", + "locked_profile": "Този профил е частен", + "image_process_failure": "Грешка при обработка на изображението", "required_field": "Това поле е задължително", - "displayname_min_length": "Името трябва да е дълго поне 3 символа", - "displayname_max_length": "Името трябва да е с дължина не повече от 50 символа.", + "displayname_min_length": "Показваното име трябва да съдържа поне 3 символа", + "displayname_max_length": "Показваното име трябва да съдържа най-много 50 символа", "report_profile": "Докладвай този профил", "report_reason": "Защо докладвате този профил?", "report_description": "Допълнителна информация", "report_description_placeholder": "Допълнителна информация", "report": "Докладвай", - "report_reason_hate": "Омразна реч", + "report_reason_hate": "Реч на омразата", "report_reason_sexual_content": "Сексуално съдържание", - "report_reason_violence": "Насилия", + "report_reason_violence": "Насилие", "report_reason_spam": "Спам", "report_reason_other": "Друго", "profile_reported": "Профилът е докладван", - "your_friend_code": "Вашия приятелски код:", + "your_friend_code": "Вашият код за приятелство:", "upload_banner": "Качи банер", - "uploading_banner": "Качване на банер…", - "background_image_updated": "Обновено фоново изображение" + "uploading_banner": "Качване на банера…", + "background_image_updated": "Фоновото изображение е обновено", + "stats": "Статистики", + "achievements": "постижения", + "games": "Игри", + "top_percentile": "Топ {{percentile}}%", + "ranking_updated_weekly": "Класацията се обновява седмично", + "playing": "Играе {{game}}", + "achievements_unlocked": "Отключени постижения", + "earned_points": "Спечелени точки", + "show_achievements_on_profile": "Показвай постиженията в профила", + "show_points_on_profile": "Показвай спечелените точки в профила" }, "achievement": { + "achievement_unlocked": "Отключено постижение", + "user_achievements": "Постижения на {{displayName}}", + "your_achievements": "Вашите постижения", + "unlocked_at": "Отключено на: {{date}}", + "subscription_needed": "Изисква се абонамент за Hydra Cloud за този съдържание", + "new_achievements_unlocked": "Отключени {{achievementCount}} нови постижения от {{gameCount}} игри", + "achievement_progress": "{{unlockedCount}}/{{totalCount}} постижения", + "achievements_unlocked_for_game": "Отключени {{achievementCount}} нови постижения за {{gameTitle}}", "hidden_achievement_tooltip": "Това е скрито постижение", - "achievement_earn_points": "Спечели {{points}} точки с това постижение", + "achievement_earn_points": "Спечелете {{points}} точки с това постижение", "earned_points": "Спечелени точки:", "available_points": "Налични точки:", - "how_to_earn_achievements_points": "Как да спечелиш точки за постижения?", - "achievement_unlocked": "Постижението е отключено", - "user_achievements": "Постиженията на {{displayName}} ", - "your_achievements": "Вашите Постижения", - "unlocked_at": "Отключено на: {{date}}", - "subscription_needed": "Необходим е абонамент за Hydra Cloud, за да видите това съдържание", - "new_achievements_unlocked": "Отключени {{achievementCount}} нови постижения от {{gameCount}} игра", - "achievement_progress": "{{unlockedCount}}/{{totalCount}} постижения", - "achievements_unlocked_for_game": "Отключени {{achievementCount}} нови постижения за {{gameTitle}}" + "how_to_earn_achievements_points": "Как се печелят точки от постижения?" }, "hydra_cloud": { + "subscription_tour_title": "Абонамент за Hydra Cloud", + "subscribe_now": "Абонирай се сега", + "cloud_saving": "Облачно запазване", + "cloud_achievements": "Запазете постиженията си в облака", + "animated_profile_picture": "Анимирани профилни снимки", + "premium_support": "Премиум поддръжка", + "show_and_compare_achievements": "Показвайте и сравнявайте постиженията си с други потребители", + "animated_profile_banner": "Анимирани профилни банери", "hydra_cloud": "Hydra Cloud", "hydra_cloud_feature_found": "Открихте функция на Hydra Cloud!", "learn_more": "Научете повече", - "subscription_tour_title": "Hydra Cloud Абонамент", - "subscribe_now": "Абонирай се сега", - "cloud_saving": "Запазване в облака", - "cloud_achievements": "Запазете постиженията си в облака", - "animated_profile_picture": "Анимирана профилна снимка", - "premium_support": "Премиум поддръжка", - "show_and_compare_achievements": "Показвайте и сравнявайте постиженията си с тези на други потребители", - "animated_profile_banner": "Анимиран профилен банер" + "debrid_description": "Изтегляйте до 4 пъти по-бързо с Nimbus" } } From 6bc2d83ffb9fda3d7ff96d0c84b765621d4ac3de Mon Sep 17 00:00:00 2001 From: rexobo Date: Sun, 18 May 2025 17:07:03 +0200 Subject: [PATCH 02/11] feat: Add Swedish translation --- src/locales/index.ts | 2 + src/locales/sv/translation.json | 532 ++++++++++++++++++++++++++++++++ 2 files changed, 534 insertions(+) create mode 100644 src/locales/sv/translation.json diff --git a/src/locales/index.ts b/src/locales/index.ts index 24ab202c..f71e8f0e 100644 --- a/src/locales/index.ts +++ b/src/locales/index.ts @@ -26,6 +26,7 @@ import nb from "./nb/translation.json"; import et from "./et/translation.json"; import bg from "./bg/translation.json"; import uz from "./uz/translation.json"; +import sv from "./sv/translation.json"; export default { "pt-BR": ptBR, @@ -56,4 +57,5 @@ export default { nb, et, uz, + sv, }; diff --git a/src/locales/sv/translation.json b/src/locales/sv/translation.json new file mode 100644 index 00000000..82041a4d --- /dev/null +++ b/src/locales/sv/translation.json @@ -0,0 +1,532 @@ +{ + "language_name": "Svenska", + "app": { + "successfully_signed_in": "Inloggningen lyckades" + }, + "home": { + "featured": "Utvalt", + "surprise_me": "Överraska mig", + "no_results": "Inga resultat hittades", + "start_typing": "Börja skriva för att söka...", + "hot": "Hetast just nu", + "weekly": "📅 Veckans topplista", + "achievements": "🏆 Spel att klara av" + }, + "sidebar": { + "catalogue": "Katalog", + "downloads": "Nedladdningar", + "settings": "Inställningar", + "my_library": "Mitt bibliotek", + "downloading_metadata": "{{title}} (Hämtar metadata…)", + "paused": "{{title}} (Pausad)", + "downloading": "{{title}} ({{percentage}} - Hämtar…)", + "filter": "Filtrera bibliotek", + "home": "Hem", + "queued": "{{title}} (I kö)", + "game_has_no_executable": "Spelet har ingen vald körbar fil", + "sign_in": "Logga in", + "friends": "Vänner", + "need_help": "Behöver du hjälp?", + "favorites": "Favoriter" + }, + "header": { + "search": "Sök spel", + "home": "Hem", + "catalogue": "Katalog", + "downloads": "Nedladdningar", + "search_results": "Sökresultat", + "settings": "Inställningar", + "version_available_install": "Version {{version}} är tillgänglig. Klicka här för att starta om och installera.", + "version_available_download": "Version {{version}} är tillgänglig. Klicka här för att ladda ner." + }, + "bottom_panel": { + "no_downloads_in_progress": "Inga nedladdningar pågår", + "downloading_metadata": "Laddar ner metadata för {{title}}…", + "downloading": "Laddar ner {{title}}… ({{percentage}} klart) - Klart om {{eta}} - {{speed}}", + "calculating_eta": "Laddar ner {{title}}… ({{percentage}} klart) - Beräknar återstående tid…", + "checking_files": "Kontrollerar filer för {{title}}… ({{percentage}} klart)", + "installing_common_redist": "{{log}}…", + "installation_complete": "Installation klar", + "installation_complete_message": "Nödvändiga systemkomponenter installerade framgångsrikt" + }, + "catalogue": { + "search": "Filter…", + "developers": "Utvecklare", + "genres": "Genrer", + "tags": "Taggar", + "publishers": "Utgivare", + "download_sources": "Nedladdningskällor", + "result_count": "{{resultCount}} resultat", + "filter_count": "{{filterCount}} tillgängliga", + "clear_filters": "Rensa {{filterCount}} valda" + }, + "game_details": { + "open_download_options": "Öppna nedladdningsalternativ", + "download_options_zero": "Inget nedladdningsalternativ", + "download_options_one": "{{count}} nedladdningsalternativ", + "download_options_other": "{{count}} nedladdningsalternativ", + "updated_at": "Uppdaterad {{updated_at}}", + "install": "Installera", + "resume": "Återuppta", + "pause": "Pausa", + "cancel": "Avbryt", + "remove": "Ta bort", + "space_left_on_disk": "{{space}} ledigt på disken", + "eta": "Klart om {{eta}}", + "calculating_eta": "Beräknar återstående tid…", + "downloading_metadata": "Laddar ner metadata…", + "filter": "Filtrera repacks", + "requirements": "Systemkrav", + "minimum": "Minimum", + "recommended": "Rekommenderat", + "paused": "Pausat", + "release_date": "Släpptes den {{date}}", + "publisher": "Utgiven av {{publisher}}", + "hours": "timmar", + "minutes": "minuter", + "amount_hours": "{{amount}} timmar", + "amount_minutes": "{{amount}} minuter", + "accuracy": "{{accuracy}}% träffsäkerhet", + "add_to_library": "Lägg till i biblioteket", + "remove_from_library": "Ta bort från biblioteket", + "no_downloads": "Inga nedladdningar tillgängliga", + "play_time": "Spelad i {{amount}}", + "last_time_played": "Senast spelad {{period}}", + "not_played_yet": "Du har inte spelat {{title}} än", + "next_suggestion": "Nästa förslag", + "play": "Spela", + "deleting": "Tar bort installationsfil…", + "close": "Stäng", + "playing_now": "Spelar nu", + "change": "Byt", + "repacks_modal_description": "Välj den repack du vill ladda ner", + "select_folder_hint": "För att ändra standardmappen, gå till <0>Inställningar", + "download_now": "Ladda ner nu", + "no_shop_details": "Kunde inte hämta butikens information.", + "download_options": "Nedladdningsalternativ", + "download_path": "Nedladdningsplats", + "previous_screenshot": "Föregående skärmdump", + "next_screenshot": "Nästa skärmdump", + "screenshot": "Skärmdump {{number}}", + "open_screenshot": "Öppna skärmdump {{number}}", + "download_settings": "Nedladdningsinställningar", + "downloader": "Nedladdare", + "select_executable": "Välj", + "no_executable_selected": "Ingen körbar fil vald", + "open_folder": "Öppna mapp", + "open_download_location": "Visa nedladdade filer", + "create_shortcut": "Skapa genväg på skrivbordet", + "clear": "Rensa", + "remove_files": "Ta bort filer", + "remove_from_library_title": "Är du säker?", + "remove_from_library_description": "Detta kommer ta bort {{game}} från ditt bibliotek", + "options": "Alternativ", + "executable_section_title": "Körbar fil", + "executable_section_description": "Sökväg till filen som körs när du klickar på \"Spela\"", + "downloads_section_title": "Nedladdningar", + "downloads_section_description": "Kolla uppdateringar eller andra versioner av detta spel", + "danger_zone_section_title": "Danger zone", + "danger_zone_section_description": "Ta bort detta spel från ditt bibliotek eller filer nedladdade av Hydra", + "download_in_progress": "Nedladdning pågår", + "download_paused": "Nedladdning pausad", + "last_downloaded_option": "Senast nedladdade alternativ", + "create_steam_shortcut": "Skapa Steam-genväg", + "create_shortcut_success": "Genväg skapad", + "you_might_need_to_restart_steam": "Du kan behöva starta om Steam för att se ändringarna", + "create_shortcut_error": "Fel vid skapande av genväg", + "nsfw_content_title": "Det här spelet innehåller olämpligt innehåll", + "nsfw_content_description": "{{title}} innehåller innehåll som kanske inte är lämpligt för alla åldrar. Vill du fortsätta?", + "allow_nsfw_content": "Fortsätt", + "refuse_nsfw_content": "Gå tillbaka", + "stats": "Statistik", + "download_count": "Nedladdningar", + "player_count": "Aktiva spelare", + "download_error": "Det här nedladdningsalternativet är inte tillgängligt", + "download": "Ladda ner", + "executable_path_in_use": "Körbar fil används redan av \"{{game}}\"", + "warning": "Varning:", + "hydra_needs_to_remain_open": "för denna nedladdning behöver Hydra vara öppen tills den är klar. Om Hydra stängs innan nedladdningen är klar förlorar du dina framsteg.", + "achievements": "Prestationer", + "achievements_count": "Prestationer {{unlockedCount}}/{{achievementsCount}}", + "cloud_save": "Molnspara", + "cloud_save_description": "Spara dina framsteg i molnet och fortsätt spela på vilken enhet som helst", + "backups": "Säkerhetskopior", + "install_backup": "Installera", + "delete_backup": "Ta bort", + "create_backup": "Ny säkerhetskopia", + "last_backup_date": "Senaste säkerhetskopia {{date}}", + "no_backup_preview": "Inga sparfiler hittades för detta spel", + "restoring_backup": "Återställer säkerhetskopia ({{progress}} klart)…", + "uploading_backup": "Laddar upp säkerhetskopia…", + "no_backups": "Du har inte skapat några säkerhetskopior för detta spel än", + "backup_uploaded": "Säkerhetskopia uppladdad", + "backup_deleted": "Säkerhetskopia borttagen", + "backup_restored": "Säkerhetskopia återställd", + "see_all_achievements": "Se alla prestationer", + "sign_in_to_see_achievements": "Logga in för att se prestationer", + "mapping_method_automatic": "Automatisk", + "mapping_method_manual": "Manuell", + "mapping_method_label": "Kartläggningsmetod", + "files_automatically_mapped": "Filer kartlagda automatiskt", + "no_backups_created": "Inga säkerhetskopior skapade för detta spel", + "manage_files": "Hantera filer", + "loading_save_preview": "Söker efter sparfiler…", + "wine_prefix": "Wine-prefix", + "wine_prefix_description": "Wine-prefixet som används för att köra detta spel", + "launch_options": "Startalternativ", + "launch_options_description": "Avancerade användare kan lägga till modifieringar till sina startalternativ (experimentell funktion)", + "launch_options_placeholder": "Inga parametrar angivna", + "no_download_option_info": "Ingen information tillgänglig", + "backup_deletion_failed": "Misslyckades med att ta bort säkerhetskopian", + "max_number_of_artifacts_reached": "Maximalt antal säkerhetskopior nått för detta spel", + "achievements_not_sync": "Se hur du synkroniserar dina prestationer", + "manage_files_description": "Hantera vilka filer som ska säkerhetskopieras och återställas", + "select_folder": "Välj mapp", + "backup_from": "Säkerhetskopia från {{date}}", + "automatic_backup_from": "Automatisk säkerhetskopia från {{date}}", + "enable_automatic_cloud_sync": "Aktivera automatisk molnsynkronisering", + "custom_backup_location_set": "Anpassad plats för säkerhetskopior inställd", + "no_directory_selected": "Ingen mapp vald", + "no_write_permission": "Kan inte ladda ner till denna mapp. Klicka här för att läsa mer.", + "reset_achievements": "Återställ prestationer", + "reset_achievements_description": "Detta kommer att återställa alla prestationer för {{game}}", + "reset_achievements_title": "Är du säker?", + "reset_achievements_success": "Prestationer återställda", + "reset_achievements_error": "Misslyckades med att återställa prestationer", + "download_error_gofile_quota_exceeded": "Du har överskridit din månadsgräns för Gofile. Vänta tills kvoten återställs.", + "download_error_real_debrid_account_not_authorized": "Ditt Real-Debrid-konto är inte auktoriserat att göra nya nedladdningar. Kontrollera dina kontoinställningar och försök igen.", + "download_error_not_cached_on_real_debrid": "Denna nedladdning finns inte på Real-Debrid och statusövervakning från Real-Debrid är ännu inte tillgänglig.", + "download_error_not_cached_on_torbox": "Denna nedladdning finns inte på TorBox och statusövervakning från TorBox är ännu inte tillgänglig.", + "download_error_not_cached_on_hydra": "Denna nedladdning finns inte på Nimbus.", + "game_removed_from_favorites": "Spelet togs bort från favoriter", + "game_added_to_favorites": "Spelet lades till i favoriter", + "automatically_extract_downloaded_files": "Extrahera nedladdade filer automatiskt", + "create_start_menu_shortcut": "Skapa genväg i Startmenyn", + "invalid_wine_prefix_path": "Ogiltig sökväg för Wine-prefix", + "invalid_wine_prefix_path_description": "Sökvägen till Wine-prefixet är ogiltig. Kontrollera sökvägen och försök igen.", + "missing_wine_prefix": "Wine-prefix krävs för att skapa en säkerhetskopia på Linux" + }, + "activation": { + "title": "Aktivera Hydra", + "installation_id": "Installations ID:", + "enter_activation_code": "Ange din aktiveringskod", + "message": "Om du inte vet var du ska fråga efter denna, borde du inte ha den.", + "activate": "Aktivera", + "loading": "Laddar…" + }, + "downloads": { + "resume": "Fortsätt", + "pause": "Pausa", + "eta": "Slutförs {{eta}}", + "paused": "Pausad", + "verifying": "Verifierar…", + "completed": "Slutförd", + "removed": "Ej nedladdad", + "cancel": "Avbryt", + "filter": "Filtrera nedladdade spel", + "remove": "Ta bort", + "downloading_metadata": "Laddar metadata…", + "deleting": "Tar bort installationsfil…", + "delete": "Ta bort installationsfil", + "delete_modal_title": "Är du säker?", + "delete_modal_description": "Detta tar bort alla installationsfiler från din dator", + "install": "Installera", + "download_in_progress": "Pågår", + "queued_downloads": "Köade nedladdningar", + "downloads_completed": "Klart", + "queued": "I kö", + "no_downloads_title": "Så tomt", + "no_downloads_description": "Du har inte laddat ner något med Hydra än, men det är aldrig för sent att börja.", + "checking_files": "Kontrollerar filer…", + "seeding": "Delar", + "stop_seeding": "Sluta dela", + "resume_seeding": "Fortsätt dela", + "options": "Hantera", + "extract": "Packa upp filer", + "extracting": "Packar upp filer…" + }, + "settings": { + "downloads_path": "Nedladdningssökväg", + "change": "Uppdatera", + "notifications": "Aviseringar", + "enable_download_notifications": "När en nedladdning är klar", + "enable_repack_list_notifications": "När en ny repack läggs till", + "real_debrid_api_token_label": "Real-Debrid API-token", + "quit_app_instead_hiding": "Stäng Hydra istället för att minimera", + "launch_with_system": "Starta Hydra vid systemstart", + "general": "Allmänt", + "behavior": "Beteende", + "download_sources": "Nedladdningskällor", + "language": "Språk", + "api_token": "API-token", + "enable_real_debrid": "Aktivera Real-Debrid", + "real_debrid_description": "Real-Debrid är en obegränsad nedladdningstjänst som låter dig ladda ner filer snabbt, endast begränsad av din internetanslutning.", + "debrid_invalid_token": "Ogiltig API-token", + "debrid_api_token_hint": "Du kan hämta din API-token <0>här", + "real_debrid_free_account_error": "Kontot \"{{username}}\" är ett gratiskonto. Prenumerera på Real-Debrid", + "debrid_linked_message": "Kontot \"{{username}}\" kopplat", + "save_changes": "Spara ändringar", + "changes_saved": "Ändringar sparades", + "download_sources_description": "Hydra hämtar nedladdningslänkar från dessa källor. Källans URL måste vara en direktlänk till en .json-fil med nedladdningslänkar.", + "validate_download_source": "Validera", + "remove_download_source": "Ta bort", + "add_download_source": "Lägg till källa", + "download_count_zero": "Inga nedladdningsalternativ", + "download_count_one": "{{countFormatted}} nedladdningsalternativ", + "download_count_other": "{{countFormatted}} nedladdningsalternativ", + "download_source_url": "URL till nedladdningskälla", + "add_download_source_description": "Ange URL:en till .json-filen", + "download_source_up_to_date": "Uppdaterad", + "download_source_errored": "Fel uppstod", + "sync_download_sources": "Synkronisera källor", + "removed_download_source": "Nedladdningskälla borttagen", + "removed_download_sources": "Nedladdningskällor borttagna", + "cancel_button_confirmation_delete_all_sources": "Nej", + "confirm_button_confirmation_delete_all_sources": "Ja, ta bort allt", + "title_confirmation_delete_all_sources": "Ta bort alla nedladdningskällor", + "description_confirmation_delete_all_sources": "Du kommer att ta bort alla nedladdningskällor", + "button_delete_all_sources": "Ta bort alla", + "added_download_source": "Nedladdningskälla tillagd", + "download_sources_synced": "Alla nedladdningskällor är synkroniserade", + "insert_valid_json_url": "Ange en giltig JSON-URL", + "found_download_option_zero": "Inga nedladdningsalternativ hittades", + "found_download_option_one": "Hittade {{countFormatted}} nedladdningsalternativ", + "found_download_option_other": "Hittade {{countFormatted}} nedladdningsalternativ", + "import": "Importera", + "public": "Offentlig", + "private": "Privat", + "friends_only": "Endast vänner", + "privacy": "Integritet", + "profile_visibility": "Profilens synlighet", + "profile_visibility_description": "Välj vem som kan se din profil och ditt bibliotek", + "required_field": "Detta fält är obligatoriskt", + "source_already_exists": "Denna källa har redan lagts till", + "must_be_valid_url": "Källan måste vara en giltig URL", + "blocked_users": "Blockerade användare", + "user_unblocked": "Användaren har avblockerats", + "enable_achievement_notifications": "När en prestation låses upp", + "launch_minimized": "Starta Hydra minimerad", + "disable_nsfw_alert": "Inaktivera NSFW-varning", + "seed_after_download_complete": "Dela efter att nedladdningen är klar", + "show_hidden_achievement_description": "Visa beskrivning av dolda prestationer innan de låses upp", + "account": "Konto", + "no_users_blocked": "Du har inga blockerade användare", + "subscription_active_until": "Ditt Hydra Cloud är aktivt till {{date}}", + "manage_subscription": "Hantera prenumeration", + "update_email": "Uppdatera e-postadress", + "update_password": "Uppdatera lösenord", + "current_email": "Nuvarande e-postadress:", + "no_email_account": "Du har ännu inte angett någon e-postadress", + "account_data_updated_successfully": "Kontoinformationen har uppdaterats", + "renew_subscription": "Förnya Hydra Cloud", + "subscription_expired_at": "Din prenumeration gick ut den {{date}}", + "no_subscription": "Njut av Hydra på bästa möjliga sätt", + "become_subscriber": "Bli Hydra Cloud-prenumerant", + "subscription_renew_cancelled": "Automatisk förnyelse är inaktiverad", + "subscription_renews_on": "Din prenumeration förnyas den {{date}}", + "bill_sent_until": "Din nästa faktura skickas senast detta datum", + "no_themes": "Det verkar som att du inte har några teman ännu, men ingen fara – klicka här för att skapa ditt första mästerverk.", + "editor_tab_code": "Kod", + "editor_tab_info": "Info", + "editor_tab_save": "Spara", + "web_store": "Webbutik", + "clear_themes": "Rensa", + "create_theme": "Skapa", + "create_theme_modal_title": "Skapa eget tema", + "create_theme_modal_description": "Skapa ett nytt tema för att anpassa Hydras utseende", + "theme_name": "Namn", + "insert_theme_name": "Ange temats namn", + "set_theme": "Aktivera tema", + "unset_theme": "Avaktivera tema", + "delete_theme": "Ta bort tema", + "edit_theme": "Redigera tema", + "delete_all_themes": "Ta bort alla teman", + "delete_all_themes_description": "Detta kommer att ta bort alla dina egna teman", + "delete_theme_description": "Detta kommer att ta bort temat {{theme}}", + "cancel": "Avbryt", + "appearance": "Utseende", + "enable_torbox": "Aktivera TorBox", + "torbox_description": "TorBox är din premium seedbox-tjänst som konkurrerar med de bästa servrarna på marknaden.", + "torbox_account_linked": "TorBox-konto kopplat", + "create_real_debrid_account": "Klicka här om du ännu inte har ett Real-Debrid-konto", + "create_torbox_account": "Klicka här om du ännu inte har ett TorBox-konto", + "real_debrid_account_linked": "Real-Debrid-konto kopplat", + "name_min_length": "Temanamnet måste innehålla minst 3 tecken", + "import_theme": "Importera tema", + "import_theme_description": "Du kommer att importera {{theme}} från temabutiken", + "error_importing_theme": "Fel vid import av tema", + "theme_imported": "Temat har importerats", + "enable_friend_request_notifications": "När en vänförfrågan tas emot", + "enable_auto_install": "Ladda ner uppdateringar automatiskt", + "common_redist": "Nödvändiga systemkomponenter", + "common_redist_description": "Nödvändiga systemkomponenter krävs för att vissa spel ska fungera. Det rekommenderas att installera dem för att undvika problem.", + "install_common_redist": "Installera", + "installing_common_redist": "Installerar…", + "show_download_speed_in_megabytes": "Visa nedladdningshastighet i megabyte per sekund", + "extract_files_by_default": "Extrahera filer automatiskt efter nedladdning", + "achievement_custom_notification_position": "Anpassad position för prestationmeddelande", + "top-left": "Övre vänster", + "top-center": "Övre mitten", + "top-right": "Övre höger", + "bottom-left": "Nedre vänster", + "bottom-center": "Nedre mitten", + "bottom-right": "Nedre höger", + "enable_achievement_custom_notifications": "Aktivera anpassade prestationmeddelanden", + "alignment": "Justering", + "variation": "Variation", + "default": "Standard", + "rare": "Sällsynt", + "platinum": "Platina", + "hidden": "Dold", + "test_notification": "Testa meddelande", + "notification_preview": "Förhandsvisning av prestationmeddelande" + }, + "notifications": { + "download_complete": "Nedladdning klar", + "game_ready_to_install": "{{title}} är redo att installeras", + "repack_list_updated": "Repack-listan har uppdaterats", + "repack_count_one": "{{count}} repack tillagd", + "repack_count_other": "{{count}} repacks tillagda", + "new_update_available": "Version {{version}} tillgänglig", + "restart_to_install_update": "Starta om Hydra för att installera uppdateringen", + "notification_achievement_unlocked_title": "Prestation upplåst för {{game}}", + "notification_achievement_unlocked_body": "{{achievement}} och {{count}} andra har låsts upp", + "new_friend_request_description": "{{displayName}} har skickat en vänförfrågan", + "new_friend_request_title": "Ny vänförfrågan", + "extraction_complete": "Extrahering slutförd", + "game_extracted": "{{title}} har extraherats", + "friend_started_playing_game": "{{displayName}} började spela ett spel", + "test_achievement_notification_title": "Detta är ett testmeddelande", + "test_achievement_notification_description": "Ganska coolt, eller hur?" + }, + "system_tray": { + "open": "Öppna Hydra", + "quit": "Avsluta" + }, + "game_card": { + "available_one": "Tillgänglig", + "available_other": "Tillgänglig", + "no_downloads": "Inga nedladdningar tillgängliga" + }, + "binary_not_found_modal": { + "title": "Program inte installerade", + "description": "Wine- eller Lutris-körbara filer hittades inte på ditt system", + "instructions": "Kontrollera hur du installerar dem korrekt på din Linux-distribution så att spelet kan köras normalt" + }, + "modal": { + "close": "Stäng-knapp" + }, + "forms": { + "toggle_password_visibility": "Visa/dölj lösenord" + }, + "user_profile": { + "amount_hours": "{{amount}} timmar", + "amount_minutes": "{{amount}} minuter", + "last_time_played": "Senast spelad {{period}}", + "activity": "Senaste aktivitet", + "library": "Bibliotek", + "total_play_time": "Total speltid", + "no_recent_activity_title": "Hmmm… ingenting här", + "no_recent_activity_description": "Du har inte spelat några spel nyligen. Dags att ändra på det!", + "display_name": "Visningsnamn", + "saving": "Sparar", + "save": "Spara", + "edit_profile": "Redigera profil", + "saved_successfully": "Sparat", + "try_again": "Försök igen", + "sign_out_modal_title": "Är du säker?", + "cancel": "Avbryt", + "successfully_signed_out": "Utloggningen lyckades", + "sign_out": "Logga ut", + "playing_for": "Spelar sedan {{amount}}", + "sign_out_modal_text": "Ditt bibliotek är kopplat till det aktuella kontot. När du loggar ut kommer biblioteket inte längre vara synligt, och framstegen kommer inte att sparas. Vill du fortsätta logga ut?", + "add_friends": "Lägg till vänner", + "add": "Lägg till", + "friend_code": "Vänkod", + "see_profile": "Visa profil", + "sending": "Skickar", + "friend_request_sent": "Vänförfrågan skickad", + "friends": "Vänner", + "friends_list": "Vänlista", + "user_not_found": "Användare hittades inte", + "block_user": "Blockera användare", + "add_friend": "Lägg till vän", + "request_sent": "Förfrågan skickad", + "request_received": "Förfrågan mottagen", + "accept_request": "Acceptera förfrågan", + "ignore_request": "Ignorera förfrågan", + "cancel_request": "Avbryt förfrågan", + "undo_friendship": "Ta bort vänskap", + "request_accepted": "Förfrågan accepterad", + "user_blocked_successfully": "Användaren har blockerats", + "user_block_modal_text": "Detta kommer att blockera {{displayName}}", + "blocked_users": "Blockerade användare", + "unblock": "Avblockera", + "no_friends_added": "Du har inte lagt till några vänner", + "pending": "Väntande", + "no_pending_invites": "Du har inga väntande inbjudningar", + "no_blocked_users": "Du har inga blockerade användare", + "friend_code_copied": "Vänkod kopierad", + "undo_friendship_modal_text": "Detta kommer att ta bort din vänskap med {{displayName}}", + "privacy_hint": "För att justera vem som kan se detta, gå till <0>Inställningar", + "locked_profile": "Denna profil är privat", + "image_process_failure": "Fel vid bildbehandling", + "required_field": "Detta fält är obligatoriskt", + "displayname_min_length": "Visningsnamnet måste vara minst 3 tecken långt", + "displayname_max_length": "Visningsnamnet får vara högst 50 tecken långt", + "report_profile": "Anmäl denna profil", + "report_reason": "Varför anmäler du denna profil?", + "report_description": "Ytterligare information", + "report_description_placeholder": "Ytterligare information", + "report": "Anmäl", + "report_reason_hate": "Hatretorik", + "report_reason_sexual_content": "Sexuellt innehåll", + "report_reason_violence": "Våld", + "report_reason_spam": "Spam", + "report_reason_other": "Annat", + "profile_reported": "Profil anmäld", + "your_friend_code": "Din vänkod:", + "upload_banner": "Ladda upp banner", + "uploading_banner": "Laddar upp banner…", + "background_image_updated": "Bakgrundsbild uppdaterad", + "stats": "Statistik", + "achievements": "prestationer", + "games": "Spel", + "top_percentile": "Topp {{percentile}}%", + "ranking_updated_weekly": "Rankingen uppdateras varje vecka", + "playing": "Spelar {{game}}", + "achievements_unlocked": "Prestationer upplåsta", + "earned_points": "Intjänade poäng", + "show_achievements_on_profile": "Visa dina prestationer på profilen", + "show_points_on_profile": "Visa dina intjänade poäng på din profil" + }, + "achievement": { + "achievement_unlocked": "Prestationer upplåst", + "user_achievements": "Prestationer för {{displayName}}", + "your_achievements": "Dina prestationer", + "unlocked_at": "Upplåst den: {{date}}", + "subscription_needed": "Ett Hydra Cloud-abonnemang krävs för att se detta innehåll", + "new_achievements_unlocked": "Upplåste {{achievementCount}} nya prestationer från {{gameCount}} spel", + "achievement_progress": "{{unlockedCount}}/{{totalCount}} prestationer", + "achievements_unlocked_for_game": "Upplåste {{achievementCount}} nya prestationer för {{gameTitle}}", + "hidden_achievement_tooltip": "Detta är en dold prestation", + "achievement_earn_points": "Tjäna {{points}} poäng med denna prestation", + "earned_points": "Tjänade poäng:", + "available_points": "Tillgängliga poäng:", + "how_to_earn_achievements_points": "Hur tjänar man poäng på prestationer?" + }, + "hydra_cloud": { + "subscription_tour_title": "Hydra Cloud-abonnemang", + "subscribe_now": "Prenumerera nu", + "cloud_saving": "Spara i molnet", + "cloud_achievements": "Spara dina prestationer i molnet", + "animated_profile_picture": "Animerade profilbilder", + "premium_support": "Premium-support", + "show_and_compare_achievements": "Visa och jämför dina prestationer med andra användare", + "animated_profile_banner": "Animerad profilbanner", + "hydra_cloud": "Hydra Cloud", + "hydra_cloud_feature_found": "Du har just upptäckt en Hydra Cloud-funktion!", + "learn_more": "Läs mer", + "debrid_description": "Ladda ner upp till 4x snabbare med Nimbus" + } +} From 5e51877660eba797da3947d1709bf883097869ec Mon Sep 17 00:00:00 2001 From: rexobo Date: Sun, 18 May 2025 18:21:25 +0200 Subject: [PATCH 03/11] fix: Resolve formatting issues in Swedish translation --- src/locales/sv/translation.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/locales/sv/translation.json b/src/locales/sv/translation.json index 82041a4d..dbd48699 100644 --- a/src/locales/sv/translation.json +++ b/src/locales/sv/translation.json @@ -8,9 +8,9 @@ "surprise_me": "Överraska mig", "no_results": "Inga resultat hittades", "start_typing": "Börja skriva för att söka...", - "hot": "Hetast just nu", - "weekly": "📅 Veckans topplista", - "achievements": "🏆 Spel att klara av" + "hot": "Hetast just nu", + "weekly": "📅 Veckans topplista", + "achievements": "🏆 Spel att klara av" }, "sidebar": { "catalogue": "Katalog", From f19391200ca9eb5b68e6b17c4ec7d21a5c2b1506 Mon Sep 17 00:00:00 2001 From: rexobo <38284495+rexobo@users.noreply.github.com> Date: Sun, 18 May 2025 18:25:23 +0200 Subject: [PATCH 04/11] Update translation.json --- src/locales/sv/translation.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/locales/sv/translation.json b/src/locales/sv/translation.json index dbd48699..8bc6ba26 100644 --- a/src/locales/sv/translation.json +++ b/src/locales/sv/translation.json @@ -8,9 +8,9 @@ "surprise_me": "Överraska mig", "no_results": "Inga resultat hittades", "start_typing": "Börja skriva för att söka...", - "hot": "Hetast just nu", - "weekly": "📅 Veckans topplista", - "achievements": "🏆 Spel att klara av" + "hot": "Hetast just nu", + "weekly": "📅 Veckans topplista", + "achievements": "🏆 Spel att klara av" }, "sidebar": { "catalogue": "Katalog", From 9172098027b4b4a864907ceaa09058f31993cff1 Mon Sep 17 00:00:00 2001 From: rexobo <38284495+rexobo@users.noreply.github.com> Date: Sun, 18 May 2025 18:39:56 +0200 Subject: [PATCH 05/11] Update translation.json --- src/locales/sv/translation.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/locales/sv/translation.json b/src/locales/sv/translation.json index 8bc6ba26..770d9367 100644 --- a/src/locales/sv/translation.json +++ b/src/locales/sv/translation.json @@ -8,9 +8,9 @@ "surprise_me": "Överraska mig", "no_results": "Inga resultat hittades", "start_typing": "Börja skriva för att söka...", - "hot": "Hetast just nu", - "weekly": "📅 Veckans topplista", - "achievements": "🏆 Spel att klara av" + "hot": "Hetast just nu", + "weekly": "📅 Veckans topplista", + "achievements": "🏆 Spel att klara av" }, "sidebar": { "catalogue": "Katalog", From 73de69b5a68ddf071fa0fdfbd966421713de67e2 Mon Sep 17 00:00:00 2001 From: Zamitto <167933696+zamitto@users.noreply.github.com> Date: Sun, 18 May 2025 21:28:45 -0300 Subject: [PATCH 06/11] feat: use shadow dom on theme editor for achievement notifications --- src/main/services/window-manager.ts | 11 +++++- .../src/pages/theme-editor/theme-editor.tsx | 39 +++++++++++++------ src/shared/index.ts | 9 +++-- 3 files changed, 43 insertions(+), 16 deletions(-) diff --git a/src/main/services/window-manager.ts b/src/main/services/window-manager.ts index 8014c240..2a07e3fe 100644 --- a/src/main/services/window-manager.ts +++ b/src/main/services/window-manager.ts @@ -395,7 +395,16 @@ export class WindowManager { this.notificationWindow?.webContents.send( "on-achievement-unlocked", userPreferences.achievementCustomNotificationPosition ?? "top-left", - [generateAchievementCustomNotificationTest(t, language)] + [ + generateAchievementCustomNotificationTest(t, language), + generateAchievementCustomNotificationTest(t, language, { + isRare: true, + isHidden: true, + }), + generateAchievementCustomNotificationTest(t, language, { + isPlatinum: true, + }), + ] ); } diff --git a/src/renderer/src/pages/theme-editor/theme-editor.tsx b/src/renderer/src/pages/theme-editor/theme-editor.tsx index 94ad2e79..844c9a1c 100644 --- a/src/renderer/src/pages/theme-editor/theme-editor.tsx +++ b/src/renderer/src/pages/theme-editor/theme-editor.tsx @@ -11,6 +11,9 @@ import { injectCustomCss } from "@renderer/helpers"; import { AchievementNotificationItem } from "@renderer/components/achievements/notification/achievement-notification"; import { generateAchievementCustomNotificationTest } from "@shared"; import { CollapsedMenu } from "@renderer/components/collapsed-menu/collapsed-menu"; +import app from "../../app.scss?inline"; +import styles from "../../components/achievements/notification/achievement-notification.scss?inline"; +import root from "react-shadow"; const notificationVariations = { default: "default", @@ -36,14 +39,15 @@ export default function ThemeEditor() { const [notificationAlignment, setNotificationAlignment] = useState("top-left"); + const [shadowRootRef, setShadowRootRef] = useState(null); + const achievementPreview = useMemo(() => { return { - achievement: { - ...generateAchievementCustomNotificationTest(t, i18n.language), + achievement: generateAchievementCustomNotificationTest(t, i18n.language, { isRare: notificationVariation === "rare", isHidden: notificationVariation === "hidden", isPlatinum: notificationVariation === "platinum", - }, + }), position: notificationAlignment, }; }, [t, i18n.language, notificationVariation, notificationAlignment]); @@ -58,10 +62,13 @@ export default function ThemeEditor() { if (loadedTheme) { setTheme(loadedTheme); setCode(loadedTheme.code); + if (shadowRootRef) { + injectCustomCss(loadedTheme.code, shadowRootRef); + } } }); } - }, [themeId]); + }, [themeId, shadowRootRef]); const handleSave = useCallback(async () => { if (theme) { @@ -69,11 +76,14 @@ export default function ThemeEditor() { setHasUnsavedChanges(false); setIsClosingNotifications(true); setTimeout(() => { - injectCustomCss(code); + if (shadowRootRef) { + injectCustomCss(code, shadowRootRef); + } + setIsClosingNotifications(false); }, 450); } - }, [code, theme]); + }, [code, theme, shadowRootRef]); useEffect(() => { const handleKeyDown = (event: KeyboardEvent) => { @@ -185,11 +195,18 @@ export default function ThemeEditor() { />
- + + +
setShadowRootRef(ref)}> + +
+
diff --git a/src/shared/index.ts b/src/shared/index.ts index 98b20f10..2f35692f 100644 --- a/src/shared/index.ts +++ b/src/shared/index.ts @@ -179,7 +179,8 @@ export const formatDate = ( export const generateAchievementCustomNotificationTest = ( t: any, - language?: string + language?: string, + options: { isHidden?: boolean; isRare?: boolean; isPlatinum?: boolean } = {} ): AchievementNotificationInfo => { return { title: t("test_achievement_notification_title", { @@ -192,8 +193,8 @@ export const generateAchievementCustomNotificationTest = ( }), iconUrl: "https://cdn.losbroxas.org/favicon.svg", points: 2440, - isHidden: false, - isRare: false, - isPlatinum: false, + isHidden: options.isHidden ?? false, + isRare: options.isRare ?? false, + isPlatinum: options.isPlatinum ?? false, }; }; From e85d08422ec7282dc8b286a4fb81acfc4db07d4f Mon Sep 17 00:00:00 2001 From: Zamitto <167933696+zamitto@users.noreply.github.com> Date: Mon, 19 May 2025 07:23:46 -0300 Subject: [PATCH 07/11] feat: add option to disable friend starting game notification --- src/locales/en/translation.json | 3 ++- src/locales/pt-BR/translation.json | 3 ++- .../events/library/open-game-installer-path.ts | 6 ++---- .../services/ws/events/friend-game-session.ts | 16 +++++++++++++--- .../notification/achievement-notification.tsx | 2 +- src/renderer/src/declaration.d.ts | 5 +---- .../src/pages/settings/settings-general.tsx | 14 ++++++++++++++ src/types/level.types.ts | 1 + 8 files changed, 36 insertions(+), 14 deletions(-) diff --git a/src/locales/en/translation.json b/src/locales/en/translation.json index 93e18f17..af371fb7 100644 --- a/src/locales/en/translation.json +++ b/src/locales/en/translation.json @@ -379,7 +379,8 @@ "platinum": "Platinum", "hidden": "Hidden", "test_notification": "Test notification", - "notification_preview": "Achievement Notification Preview" + "notification_preview": "Achievement Notification Preview", + "enable_friend_start_game_notifications": "When a friend starts play a game" }, "notifications": { "download_complete": "Download complete", diff --git a/src/locales/pt-BR/translation.json b/src/locales/pt-BR/translation.json index c99fab6f..6b9546ec 100644 --- a/src/locales/pt-BR/translation.json +++ b/src/locales/pt-BR/translation.json @@ -365,7 +365,8 @@ "platinum": "Platina", "hidden": "Oculta", "test_notification": "Testar notificação", - "notification_preview": "Prévia da Notificação de Conquistas" + "notification_preview": "Prévia da Notificação de Conquistas", + "enable_friend_start_game_notifications": "Quando um amigo iniciar um jogo" }, "notifications": { "download_complete": "Download concluído", diff --git a/src/main/events/library/open-game-installer-path.ts b/src/main/events/library/open-game-installer-path.ts index b61246fa..0bbe96de 100644 --- a/src/main/events/library/open-game-installer-path.ts +++ b/src/main/events/library/open-game-installer-path.ts @@ -12,16 +12,14 @@ const openGameInstallerPath = async ( ) => { const download = await downloadsSublevel.get(levelKeys.game(shop, objectId)); - if (!download || !download.folderName || !download.downloadPath) return true; + if (!download?.folderName || !download.downloadPath) return; const gamePath = path.join( download.downloadPath ?? (await getDownloadsPath()), - download.folderName! + download.folderName ); shell.showItemInFolder(gamePath); - - return true; }; registerEvent("openGameInstallerPath", openGameInstallerPath); diff --git a/src/main/services/ws/events/friend-game-session.ts b/src/main/services/ws/events/friend-game-session.ts index 930b4885..47d8164e 100644 --- a/src/main/services/ws/events/friend-game-session.ts +++ b/src/main/services/ws/events/friend-game-session.ts @@ -1,15 +1,25 @@ import type { FriendGameSession } from "@main/generated/envelope"; +import { db, levelKeys } from "@main/level"; import { HydraApi } from "@main/services/hydra-api"; import { publishFriendStartedPlayingGameNotification } from "@main/services/notifications"; -import { GameStats } from "@types"; +import type { GameStats, UserPreferences, UserProfile } from "@types"; export const friendGameSessionEvent = async (payload: FriendGameSession) => { + const userPreferences = await db.get( + levelKeys.userPreferences, + { + valueEncoding: "json", + } + ); + + if (userPreferences?.friendStartGameNotificationsEnabled === false) return; + const [friend, gameStats] = await Promise.all([ - HydraApi.get(`/users/${payload.friendId}`), + HydraApi.get(`/users/${payload.friendId}`), HydraApi.get( `/games/stats?objectId=${payload.objectId}&shop=steam` ), - ]); + ]).catch(() => [null, null]); if (friend && gameStats) { publishFriendStartedPlayingGameNotification(friend, gameStats); diff --git a/src/renderer/src/components/achievements/notification/achievement-notification.tsx b/src/renderer/src/components/achievements/notification/achievement-notification.tsx index 7bb681fe..bcc22047 100644 --- a/src/renderer/src/components/achievements/notification/achievement-notification.tsx +++ b/src/renderer/src/components/achievements/notification/achievement-notification.tsx @@ -31,7 +31,7 @@ export function AchievementNotificationItem({ [`${baseClassName}--platinum`]: achievement.isPlatinum, })} > - {achievement.points && ( + {achievement.points !== undefined && (
diff --git a/src/renderer/src/declaration.d.ts b/src/renderer/src/declaration.d.ts index 3290d798..05d0cad0 100644 --- a/src/renderer/src/declaration.d.ts +++ b/src/renderer/src/declaration.d.ts @@ -139,10 +139,7 @@ declare global { verifyExecutablePathInUse: (executablePath: string) => Promise; getLibrary: () => Promise; openGameInstaller: (shop: GameShop, objectId: string) => Promise; - openGameInstallerPath: ( - shop: GameShop, - objectId: string - ) => Promise; + openGameInstallerPath: (shop: GameShop, objectId: string) => Promise; openGameExecutablePath: (shop: GameShop, objectId: string) => Promise; openGame: ( shop: GameShop, diff --git a/src/renderer/src/pages/settings/settings-general.tsx b/src/renderer/src/pages/settings/settings-general.tsx index ad4f1b82..c698440d 100644 --- a/src/renderer/src/pages/settings/settings-general.tsx +++ b/src/renderer/src/pages/settings/settings-general.tsx @@ -38,6 +38,7 @@ export function SettingsGeneral() { downloadNotificationsEnabled: false, repackUpdatesNotificationsEnabled: false, friendRequestNotificationsEnabled: false, + friendStartGameNotificationsEnabled: true, achievementNotificationsEnabled: true, achievementCustomNotificationsEnabled: true, achievementCustomNotificationPosition: @@ -111,6 +112,8 @@ export function SettingsGeneral() { userPreferences.achievementCustomNotificationPosition ?? "top-left", friendRequestNotificationsEnabled: userPreferences.friendRequestNotificationsEnabled ?? false, + friendStartGameNotificationsEnabled: + userPreferences.friendStartGameNotificationsEnabled ?? true, language: language ?? "en", })); } @@ -248,6 +251,17 @@ export function SettingsGeneral() { } /> + + handleChange({ + friendStartGameNotificationsEnabled: + !form.friendStartGameNotificationsEnabled, + }) + } + /> + Date: Mon, 19 May 2025 07:28:55 -0300 Subject: [PATCH 08/11] feat: open dev tools for theme editor --- src/main/services/window-manager.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/main/services/window-manager.ts b/src/main/services/window-manager.ts index 2a07e3fe..3d84d6f3 100644 --- a/src/main/services/window-manager.ts +++ b/src/main/services/window-manager.ts @@ -469,9 +469,8 @@ export class WindowManager { } }); - editorWindow.webContents.on("before-input-event", (event, input) => { + editorWindow.webContents.on("before-input-event", (_event, input) => { if (input.key === "F12") { - event.preventDefault(); this.mainWindow?.webContents.toggleDevTools(); } }); From f7b88b6d313d4bd367a312bd71f168e9173440ca Mon Sep 17 00:00:00 2001 From: Zamitto <167933696+zamitto@users.noreply.github.com> Date: Mon, 19 May 2025 10:59:54 -0300 Subject: [PATCH 09/11] chore: bump version --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index a802c6d1..27958b3f 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "hydralauncher", - "version": "3.5.1", + "version": "3.5.2", "description": "Hydra", "main": "./out/main/index.js", "author": "Los Broxas", From 9a0e3bfc6506d2ce116e6e017c784f29b996052c Mon Sep 17 00:00:00 2001 From: Zamitto <167933696+zamitto@users.noreply.github.com> Date: Mon, 19 May 2025 11:14:42 -0300 Subject: [PATCH 10/11] Update src/locales/en/translation.json Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com> --- src/locales/en/translation.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/locales/en/translation.json b/src/locales/en/translation.json index af371fb7..4adc5585 100644 --- a/src/locales/en/translation.json +++ b/src/locales/en/translation.json @@ -380,7 +380,7 @@ "hidden": "Hidden", "test_notification": "Test notification", "notification_preview": "Achievement Notification Preview", - "enable_friend_start_game_notifications": "When a friend starts play a game" + "enable_friend_start_game_notifications": "When a friend starts playing a game" }, "notifications": { "download_complete": "Download complete", From 7bb7d2e388dd7f31f0a9c14baff7c0ebc9ab48e6 Mon Sep 17 00:00:00 2001 From: Zamitto <167933696+zamitto@users.noreply.github.com> Date: Mon, 19 May 2025 11:33:41 -0300 Subject: [PATCH 11/11] feat: missing change on PR (update ref on shadow dom section) --- .../achievements/notification/achievement-notification.tsx | 2 +- src/renderer/src/pages/theme-editor/theme-editor.tsx | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/renderer/src/pages/achievements/notification/achievement-notification.tsx b/src/renderer/src/pages/achievements/notification/achievement-notification.tsx index ff727f66..dcbdc4ac 100644 --- a/src/renderer/src/pages/achievements/notification/achievement-notification.tsx +++ b/src/renderer/src/pages/achievements/notification/achievement-notification.tsx @@ -164,7 +164,7 @@ export function AchievementNotification() { -
setShadowRootRef(ref)}> +
{isVisible && currentAchievement && ( {app} {styles} -
setShadowRootRef(ref)}> +