From fe8d405a56112f9fef5885015644af74cd1a7170 Mon Sep 17 00:00:00 2001 From: edde746 <86283021+edde746@users.noreply.github.com> Date: Sun, 12 Jul 2026 12:36:17 +0200 Subject: [PATCH] fix(i18n): enforce complete localized coverage --- .github/workflows/ci.yml | 3 + lib/i18n/bg.i18n.json | 86 ++++----- lib/i18n/da.i18n.json | 86 ++++----- lib/i18n/de.i18n.json | 86 ++++----- lib/i18n/en.i18n.json | 48 ++--- lib/i18n/es.i18n.json | 86 ++++----- lib/i18n/fr.i18n.json | 86 ++++----- lib/i18n/it.i18n.json | 96 ++++----- lib/i18n/ja.i18n.json | 96 ++++----- lib/i18n/ko.i18n.json | 60 +++--- lib/i18n/nb.i18n.json | 96 ++++----- lib/i18n/nl.i18n.json | 96 ++++----- lib/i18n/pl.i18n.json | 86 ++++----- lib/i18n/pt.i18n.json | 86 ++++----- lib/i18n/ru.i18n.json | 86 ++++----- lib/i18n/strings.g.dart | 2 +- lib/i18n/strings_bg.g.dart | 160 ++++++--------- lib/i18n/strings_da.g.dart | 160 ++++++--------- lib/i18n/strings_de.g.dart | 160 ++++++--------- lib/i18n/strings_en.g.dart | 182 +++++------------- lib/i18n/strings_es.g.dart | 160 ++++++--------- lib/i18n/strings_fr.g.dart | 160 ++++++--------- lib/i18n/strings_it.g.dart | 176 +++++++---------- lib/i18n/strings_ja.g.dart | 176 +++++++---------- lib/i18n/strings_ko.g.dart | 120 ++++-------- lib/i18n/strings_nb.g.dart | 176 +++++++---------- lib/i18n/strings_nl.g.dart | 176 +++++++---------- lib/i18n/strings_pl.g.dart | 160 ++++++--------- lib/i18n/strings_pt.g.dart | 160 ++++++--------- lib/i18n/strings_ru.g.dart | 160 ++++++--------- lib/i18n/strings_sv.g.dart | 160 ++++++--------- lib/i18n/strings_zh.g.dart | 160 ++++++--------- lib/i18n/sv.i18n.json | 86 ++++----- lib/i18n/zh.i18n.json | 86 ++++----- lib/providers/companion_remote_provider.dart | 23 ++- .../companion_remote_peer_service.dart | 41 ++-- lib/utils/live_tv_player_navigation.dart | 5 +- .../remote_session_dialog.dart | 12 +- lib/widgets/tv_color_picker.dart | 16 +- lib/widgets/tv_number_spinner.dart | 5 +- scripts/ci_checks.sh | 9 + scripts/clean_translations.py | 118 ++++++++---- scripts/test_clean_translations.py | 121 ++++++++++++ .../companion_remote_provider_test.dart | 24 ++- .../companion_remote_peer_service_test.dart | 13 ++ .../utils/live_tv_player_navigation_test.dart | 67 +++++++ .../tv_accessibility_localization_test.dart | 54 ++++++ 47 files changed, 1944 insertions(+), 2527 deletions(-) create mode 100644 scripts/test_clean_translations.py create mode 100644 test/utils/live_tv_player_navigation_test.dart create mode 100644 test/widgets/tv_accessibility_localization_test.dart diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 30c4d7b3..cdf70799 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -42,6 +42,9 @@ jobs: - name: Verify generated files committed run: scripts/codegen.sh --check + - name: Verify translation hygiene + run: python3 scripts/clean_translations.py --check --strict + - name: Verify formatting run: | paths=(lib) diff --git a/lib/i18n/bg.i18n.json b/lib/i18n/bg.i18n.json index 88799412..be6f52de 100644 --- a/lib/i18n/bg.i18n.json +++ b/lib/i18n/bg.i18n.json @@ -3,7 +3,6 @@ "title": "Plezy" }, "auth": { - "signIn": "Вход", "signInWithPlex": "Вход с Plex", "showQRCode": "Покажи QR код", "authenticate": "Удостовери", @@ -56,10 +55,8 @@ "episodeNumberTitle": "Епизод ${number} - ${title}", "chapterNumber": "Глава ${number}", "reconnect": "Свържи отново", - "exit": "Изход", "viewAll": "Виж всички", "checkingNetwork": "Проверка на мрежата...", - "refreshingServers": "Опресняване на сървърите...", "loadingServers": "Зареждане на сървърите...", "connectingToServers": "Свързване със сървърите...", "startingOfflineMode": "Стартиране на офлайн режим...", @@ -139,6 +136,12 @@ "tvFullCardLayoutDescription": "Използвай TV карти само с изображения, с насложени имена на актьорите", "focusGlow": "Сияние при фокус", "focusGlowDescription": "Показвай меко сияние около фокусираната карта", + "visualEffects": "Визуални ефекти", + "visualEffectsAuto": "Автоматично", + "visualEffectsAutoDescription": "Автоматично намалявай ефектите на по-слаби устройства", + "visualEffectsFull": "Пълни", + "visualEffectsReduced": "Намалени", + "visualEffectsReducedDescription": "По-малко анимации и изображения с по-ниска резолюция", "hideSpoilers": "Скривай спойлери за негледани епизоди", "hideSpoilersDescription": "Замазвай миниатюри и описания за негледани епизоди", "playerBackend": "Енджин на плеъра", @@ -151,7 +154,7 @@ "bufferSizeAuto": "Автоматично (препоръчително)", "bufferSizeWarning": "Налична памет ${heap}MB. Буфер ${size}MB може да повлияе на възпроизвеждането.", "defaultQualityTitle": "Качество по подразбиране", - "defaultQualityDescription": "Използва се при стартиране на възпроизвеждане. По-ниските стойности намаляват трафика.", + "musicQualityTitle": "Качество на музиката", "subtitleStyling": "Стил на субтитрите", "subtitleStylingDescription": "Настройване на вида на субтитрите", "smallSkipDuration": "Малко прескачане", @@ -245,10 +248,9 @@ "maxVolumePercent": "${percent}%", "discordRichPresence": "Discord Rich Presence", "discordRichPresenceDescription": "Показвай какво гледате в Discord", - "trakt": "Trakt", - "traktDescription": "Синхронизирай историята на гледане с Trakt", "services": "Услуги", "servicesDescription": "Свържи Trakt, MyAnimeList, Seerr и още", + "manageLibrariesDescription": "Пренареждай и скривай библиотеки", "companionRemoteServer": "Сървър за дистанционно управление", "companionRemoteServerDescription": "Позволи на мобилни устройства във вашата мрежа да управляват това приложение", "autoPip": "Автоматичен режим картина в картината", @@ -311,7 +313,6 @@ "showNavBarLabels": "Показвай етикети в навигационната лента", "showNavBarLabelsDescription": "Показвай текстови етикети под иконите в навигационната лента", "startupSection": "Начален раздел", - "startupSectionDescription": "Изберете кой раздел да отваря Plezy при стартиране", "liveTvDefaultFavorites": "По подразбиране към любими канали", "liveTvDefaultFavoritesDescription": "Показвай само любими канали при отваряне на телевизия на живо", "display": "Дисплей", @@ -322,14 +323,7 @@ "player": "Плейър", "subtitlesAndConfig": "Субтитри и конфигурация", "seekAndTiming": "Търсене и време", - "behavior": "Поведение", - "manageLibrariesDescription": "Пренареждай и скривай библиотеки", - "visualEffects": "Визуални ефекти", - "visualEffectsAuto": "Автоматично", - "visualEffectsAutoDescription": "Автоматично намалявай ефектите на по-слаби устройства", - "visualEffectsFull": "Пълни", - "visualEffectsReduced": "Намалени", - "visualEffectsReducedDescription": "По-малко анимации и изображения с по-ниска резолюция" + "behavior": "Поведение" }, "search": { "hint": "Търсене на филми, сериали, музика...", @@ -418,14 +412,11 @@ "rateSheet": { "title": "Оцени", "server": "Сървър", - "starValue": "${rating} / 5", - "scoreValue": "${score} / 10", - "setScore": "Задай оценка", + "favorite": "Добави в любими", + "favorited": "Добавено в любими", "saved": "Запазено", "notAvailable": "Няма намерено съвпадение", - "noConnectedServices": "Свържи услуга в Настройки, за да оценяваш там.", - "favorite": "Добави в любими", - "favorited": "Добавено в любими" + "noConnectedServices": "Свържи услуга в Настройки, за да оценяваш там." }, "accessibility": { "mediaCardMovie": "${title}, филм", @@ -435,7 +426,15 @@ "mediaCardWatched": "гледано", "mediaCardPartiallyWatched": "${percent} процента изгледано", "mediaCardUnwatched": "негледано", - "tapToPlay": "Докоснете за възпроизвеждане" + "tapToPlay": "Докоснете за възпроизвеждане", + "decrease": "Намали", + "increase": "Увеличи", + "decreaseValue": "Намали ${label}", + "increaseValue": "Увеличи ${label}", + "hue": "Нюанс", + "saturation": "Наситеност", + "brightness": "Яркост", + "hexColor": "Шестнадесетичен цвят" }, "tooltips": { "shufflePlay": "Разбъркано възпроизвеждане", @@ -481,13 +480,11 @@ "settingsButton": "Настройки на възпроизвеждането", "tracksButton": "Аудио и субтитри", "chaptersButton": "Глави", - "versionsButton": "Видео версии", "versionQualityButton": "Версия и качество", "versionColumnHeader": "Версия", "qualityColumnHeader": "Качество", "qualityOriginal": "Оригинал", "qualityPresetLabel": "${resolution}p ${bitrate} Mbps", - "qualityBandwidthEstimate": "~${bitrate} Mbps", "transcodeUnavailableFallback": "Транскодирането не е налично — пуска се оригиналното качество", "pipButton": "Режим картина в картината", "aspectRatioButton": "Съотношение на страните", @@ -530,12 +527,7 @@ "subtitleDownloadFailed": "Неуспешно изтегляне на субтитър", "searchLanguages": "Търсене на езици..." }, - "userStatus": { - "admin": "Администратор", - "restricted": "Ограничен", - "protected": "Защитен", - "current": "ТЕКУЩ" - }, + "userStatus": {}, "messages": { "markedAsWatched": "Маркирано като гледано", "markedAsUnwatched": "Маркирано като негледано", @@ -676,8 +668,7 @@ "pinProtectionOptional": "PIN защита (по желание)", "pinExplain": "Изисква се 4-цифрен PIN за смяна на профили.", "continueButton": "Продължи", - "pinsDontMatch": "PIN кодовете не съвпадат", - "initializeServicesFailed": "Неуспешно инициализиране на услугите за профили" + "pinsDontMatch": "PIN кодовете не съвпадат" }, "connections": { "sectionTitle": "Връзки", @@ -692,7 +683,6 @@ }, "discover": { "title": "Открий", - "switchProfile": "Смяна на профил", "noContentAvailable": "Няма налично съдържание", "addMediaToLibraries": "Добавете медия към библиотеките си", "continueWatching": "Продължи гледането", @@ -721,8 +711,6 @@ "connectionFailed": "Не може да се осъществи връзка с медиен сървър", "failedToLoad": "Неуспешно зареждане на ${context}: ${error}", "noClientAvailable": "Няма наличен клиент", - "authenticationFailed": "Удостоверяването е неуспешно: ${error}", - "couldNotLaunchUrl": "URL адресът за удостоверяване не може да бъде отворен", "pleaseEnterToken": "Моля, въведете токен", "invalidToken": "Невалиден токен", "failedToVerifyToken": "Неуспешна проверка на токена: ${error}", @@ -749,6 +737,8 @@ "allLibrariesHidden": "Всички библиотеки са скрити", "hiddenLibrariesCount": "Скрити библиотеки (${count})", "thisLibraryIsEmpty": "Тази библиотека е празна", + "noItemsMatchFilters": "Няма елементи, съответстващи на активните филтри", + "resetFilters": "Нулирай филтрите", "all": "Всички", "clearAll": "Изчисти всички", "scanLibraryConfirm": "Сигурни ли сте, че искате да сканирате \"${title}\"?", @@ -804,7 +794,6 @@ "communityRating": "Оценка от общността", "criticRating": "Оценка от критиците", "userRating": "Потребителска оценка", - "lastPlayed": "Последно възпроизведено", "datePlayed": "Дата на възпроизвеждане", "playCount": "Брой възпроизвеждания", "productionYear": "Година на производство", @@ -818,9 +807,7 @@ "dateShared": "Дата на споделяне", "latestEpisodeAirDate": "Дата на излъчване на последния епизод", "lastEpisodeDateAdded": "Дата на добавяне на последния епизод" - }, - "noItemsMatchFilters": "Няма елементи, съответстващи на активните филтри", - "resetFilters": "Нулирай филтрите" + } }, "about": { "title": "Относно", @@ -830,7 +817,6 @@ "viewLicensesDescription": "Виж лицензите на библиотеки на трети страни" }, "serverSelection": { - "allServerConnectionsFailed": "Не може да се осъществи връзка с нито един сървър. Проверете мрежата.", "noServersFoundForAccount": "Не са намерени сървъри за ${username} (${email})", "failedToLoadServers": "Неуспешно зареждане на сървъри: ${error}" }, @@ -893,7 +879,6 @@ "watchlistUpdateFailed": "Неуспешно обновяване на списъка за гледане", "notInLibrary": "Не е в твоята библиотека", "inTheseLibraries": "В тези библиотеки", - "availableOn": "Налично на ${server}", "checkingLibrary": "Проверка на твоята библиотека...", "emptyTitle": "Тук все още няма нищо", "emptyMessage": "Редовете от ${source} ще се появят тук, когато има съдържание.", @@ -907,6 +892,8 @@ "guide": "ТВ програма", "noChannels": "Няма налични канали", "noDvr": "Няма конфигуриран DVR на нито един сървър", + "serverUnavailable": "Сървърът за телевизия на живо не е наличен.", + "serverNotConnected": "Сървърът за телевизия на живо не е свързан.", "noPrograms": "Няма налични програмни данни", "liveStreamFailed": "Потокът на живо се провали", "unknownProgram": "Неизвестна програма", @@ -942,7 +929,6 @@ "scheduledRecordings": "Планирани", "recordingRules": "Правила за запис", "noScheduledRecordings": "Няма планирани записи", - "noRecordingRules": "Все още няма правила за запис", "manageRecording": "Управление на запис", "cancelRecording": "Отмени запис", "cancelRecordingTitle": "Да се отмени ли този запис?", @@ -959,7 +945,6 @@ "recordingCancelled": "Записът е отменен", "recordingRuleDeleted": "Правилото за запис е изтрито", "processRecordingRules": "Преоцени правилата", - "loadingRecordings": "Зареждане на записи...", "recordingInProgress": "Записва се сега", "recordingsCount": "${count} планирани", "editRule": "Редактирай правило", @@ -973,7 +958,6 @@ "title": "Колекции", "collection": "Колекция", "empty": "Колекцията е празна", - "unknownLibrarySection": "Не може да се изтрие: неизвестна секция на библиотеката", "deleteCollection": "Изтрий колекция", "deleteConfirm": "Да се изтрие ли \"${title}\"? Това не може да бъде отменено.", "deleted": "Колекцията е изтрита", @@ -1013,6 +997,7 @@ "itemAdded": "Добавено към плейлист", "itemRemoved": "Премахнато от плейлист", "selectPlaylist": "Избери плейлист", + "searchPlaylists": "Търсене в плейлисти...", "errorCreating": "Неуспешно създаване на плейлист", "errorDeleting": "Неуспешно изтриване на плейлист", "errorLoading": "Неуспешно зареждане на плейлисти", @@ -1102,15 +1087,15 @@ "participantResumed": "${name} продължи", "participantSeeked": "${name} превъртя", "participantBuffering": "${name} буферира", + "participantNeedsUpdate": "${name} е с по-стара версия на приложението — синхронизирането не е налично", + "resumingWithout": "Продължаване без ${name}", "waitingForParticipants": "Изчакване другите да заредят...", + "waitingForName": "Изчакване на ${name}...", "recentRooms": "Скорошни стаи", "renameRoom": "Преименувай стая", "removeRoom": "Премахни", "guestSwitchUnavailable": "Превключването не е възможно — сървърът е недостъпен за синхронизация", - "guestSwitchFailed": "Превключването не е възможно — съдържанието не е намерено на този сървър", - "participantNeedsUpdate": "${name} е с по-стара версия на приложението — синхронизирането не е налично", - "resumingWithout": "Продължаване без ${name}", - "waitingForName": "Изчакване на ${name}..." + "guestSwitchFailed": "Превключването не е възможно — съдържанието не е намерено на този сървър" }, "downloads": { "title": "Изтегляния", @@ -1155,7 +1140,6 @@ "customAmount": "Персонален брой...", "includeSpecials": "Включи специалните", "howManyEpisodes": "Колко епизода?", - "itemsQueued": "${count} елемента са добавени в опашката за изтегляне", "keepSynced": "Поддържай синхронизирано", "downloadOnce": "Изтегли еднократно", "keepNUnwatched": "Пази ${count} негледани", @@ -1204,7 +1188,6 @@ "unknownDevice": "Непознато устройство", "session": { "startingServer": "Стартиране на сървър за дистанционно управление...", - "failedToCreate": "Неуспешно стартиране на сървър за дистанционно управление:", "hostAddress": "Адрес на хоста", "connected": "Свързан", "serverRunning": "Сървърът за дистанционно управление е активен", @@ -1265,6 +1248,8 @@ "errors": { "noNetworkInterface": "Не е намерен мрежов интерфейс", "authenticationFailed": "Неуспешно удостоверяване", + "serverStartFailed": "Неуспешно стартиране на отдалечения сървър: ${error}", + "commandFailed": "Неуспешно изпращане на отдалечена команда: ${error}", "joinTimedOut": "Времето за присъединяване към сесията изтече", "failedToConnectAnyAddress": "Неуспешно свързване към който и да е адрес", "connectionLostAfterAttempts": "Връзката е загубена след ${attempts} опита", @@ -1538,7 +1523,6 @@ "quickConnectFailed": "Quick Connect е неуспешен: ${error}", "addPlexTitle": "Вход с Plex", "pinExpired": "PIN-ът изтече преди вход. Моля, опитайте отново.", - "duplicatePlexAccount": "Вече сте влезли в Plex. Излезте, за да смените акаунта.", "failedToRegisterAccount": "Неуспешна регистрация на акаунт: ${error}", "enterJellyfinUrlError": "Въведете URL адреса на вашия Jellyfin сървър", "addConnectionTitle": "Добави връзка", diff --git a/lib/i18n/da.i18n.json b/lib/i18n/da.i18n.json index c88760a0..807e3ab2 100644 --- a/lib/i18n/da.i18n.json +++ b/lib/i18n/da.i18n.json @@ -3,7 +3,6 @@ "title": "Plezy" }, "auth": { - "signIn": "Log ind", "signInWithPlex": "Log ind med Plex", "showQRCode": "Vis QR-kode", "authenticate": "Godkend", @@ -56,10 +55,8 @@ "episodeNumberTitle": "Episode ${number} - ${title}", "chapterNumber": "Kapitel ${number}", "reconnect": "Genopret forbindelse", - "exit": "Afslut", "viewAll": "Vis alle", "checkingNetwork": "Tjekker netværk...", - "refreshingServers": "Opdaterer servere...", "loadingServers": "Indlæser servere...", "connectingToServers": "Forbinder til servere...", "startingOfflineMode": "Starter offlinetilstand...", @@ -139,6 +136,12 @@ "tvFullCardLayoutDescription": "Brug TV-kort kun med billeder og skuespillernavne ovenpå", "focusGlow": "Fokusglød", "focusGlowDescription": "Vis en blød glød omkring det fokuserede kort", + "visualEffects": "Visuelle effekter", + "visualEffectsAuto": "Automatisk", + "visualEffectsAutoDescription": "Reducer automatisk effekter på enheder med lav ydeevne", + "visualEffectsFull": "Fuld", + "visualEffectsReduced": "Reduceret", + "visualEffectsReducedDescription": "Færre animationer og illustrationer i lavere opløsning", "hideSpoilers": "Skjul spoilere for usete episoder", "hideSpoilersDescription": "Slør miniaturebilleder og beskrivelser for usete episoder", "playerBackend": "Afspillerbackend", @@ -151,7 +154,7 @@ "bufferSizeAuto": "Auto (Anbefalet)", "bufferSizeWarning": "${heap}MB hukommelse tilgængelig. En buffer på ${size}MB kan påvirke afspilning.", "defaultQualityTitle": "Standardkvalitet", - "defaultQualityDescription": "Bruges ved start af afspilning. Lavere værdier reducerer båndbredden.", + "musicQualityTitle": "Musikkvalitet", "subtitleStyling": "Undertekststil", "subtitleStylingDescription": "Tilpas underteksters udseende", "smallSkipDuration": "Kort spring-varighed", @@ -245,10 +248,9 @@ "maxVolumePercent": "${percent}%", "discordRichPresence": "Discord Rich Presence", "discordRichPresenceDescription": "Vis hvad du ser på Discord", - "trakt": "Trakt", - "traktDescription": "Synkroniser visningshistorik med Trakt", "services": "Tjenester", "servicesDescription": "Forbind Trakt, MyAnimeList, Seerr og mere", + "manageLibrariesDescription": "Omarranger og skjul biblioteker", "companionRemoteServer": "Companion Remote Server", "companionRemoteServerDescription": "Tillad mobilenheder på dit netværk at styre denne app", "autoPip": "Auto billede-i-billede", @@ -311,7 +313,6 @@ "showNavBarLabels": "Vis navigationsbarlabels", "showNavBarLabelsDescription": "Vis tekstlabels under navigationsbarikoner", "startupSection": "Startsektion", - "startupSectionDescription": "Vælg hvilken sektion Plezy åbner ved start", "liveTvDefaultFavorites": "Standard til favoritkanaler", "liveTvDefaultFavoritesDescription": "Vis kun favoritkanaler ved åbning af Live TV", "display": "Skærm", @@ -322,14 +323,7 @@ "player": "Afspiller", "subtitlesAndConfig": "Undertekster og konfiguration", "seekAndTiming": "Søgning og timing", - "behavior": "Adfærd", - "manageLibrariesDescription": "Omarranger og skjul biblioteker", - "visualEffects": "Visuelle effekter", - "visualEffectsAuto": "Automatisk", - "visualEffectsAutoDescription": "Reducer automatisk effekter på enheder med lav ydeevne", - "visualEffectsFull": "Fuld", - "visualEffectsReduced": "Reduceret", - "visualEffectsReducedDescription": "Færre animationer og illustrationer i lavere opløsning" + "behavior": "Adfærd" }, "search": { "hint": "Søg film, serier, musik...", @@ -418,14 +412,11 @@ "rateSheet": { "title": "Bedøm", "server": "Server", - "starValue": "${rating} / 5", - "scoreValue": "${score} / 10", - "setScore": "Angiv en score", + "favorite": "Favorit", + "favorited": "Føjet til favoritter", "saved": "Gemt", "notAvailable": "Intet match fundet", - "noConnectedServices": "Forbind en tjeneste i Indstillinger for at bedømme der.", - "favorite": "Favorit", - "favorited": "Føjet til favoritter" + "noConnectedServices": "Forbind en tjeneste i Indstillinger for at bedømme der." }, "accessibility": { "mediaCardMovie": "${title}, film", @@ -435,7 +426,15 @@ "mediaCardWatched": "set", "mediaCardPartiallyWatched": "${percent} procent set", "mediaCardUnwatched": "uset", - "tapToPlay": "Tryk for at afspille" + "tapToPlay": "Tryk for at afspille", + "decrease": "Formindsk", + "increase": "Forøg", + "decreaseValue": "Formindsk ${label}", + "increaseValue": "Forøg ${label}", + "hue": "Farvetone", + "saturation": "Mætning", + "brightness": "Lysstyrke", + "hexColor": "Hexfarve" }, "tooltips": { "shufflePlay": "Afspil tilfældigt", @@ -481,13 +480,11 @@ "settingsButton": "Afspilningsindstillinger", "tracksButton": "Lyd og undertekster", "chaptersButton": "Kapitler", - "versionsButton": "Videoversioner", "versionQualityButton": "Version og kvalitet", "versionColumnHeader": "Version", "qualityColumnHeader": "Kvalitet", "qualityOriginal": "Original", "qualityPresetLabel": "${resolution}p ${bitrate} Mbps", - "qualityBandwidthEstimate": "~${bitrate} Mbps", "transcodeUnavailableFallback": "Transkodning utilgængelig — afspiller original kvalitet", "pipButton": "Billede-i-billede-tilstand", "aspectRatioButton": "Billedformat", @@ -530,12 +527,7 @@ "subtitleDownloadFailed": "Kunne ikke downloade undertekst", "searchLanguages": "Søg sprog..." }, - "userStatus": { - "admin": "Administrator", - "restricted": "Begrænset", - "protected": "Beskyttet", - "current": "NUVÆRENDE" - }, + "userStatus": {}, "messages": { "markedAsWatched": "Markeret som set", "markedAsUnwatched": "Markeret som uset", @@ -676,8 +668,7 @@ "pinProtectionOptional": "PIN-beskyttelse (valgfri)", "pinExplain": "4-cifret PIN kræves for at skifte profiler.", "continueButton": "Fortsæt", - "pinsDontMatch": "PIN-koder matcher ikke", - "initializeServicesFailed": "Kunne ikke initialisere profiltjenester" + "pinsDontMatch": "PIN-koder matcher ikke" }, "connections": { "sectionTitle": "Forbindelser", @@ -692,7 +683,6 @@ }, "discover": { "title": "Opdag", - "switchProfile": "Skift profil", "noContentAvailable": "Intet indhold tilgængeligt", "addMediaToLibraries": "Tilføj medier til dine biblioteker", "continueWatching": "Fortsæt med at se", @@ -721,8 +711,6 @@ "connectionFailed": "Kan ikke oprette forbindelse til medieserver", "failedToLoad": "Kunne ikke indlæse ${context}: ${error}", "noClientAvailable": "Ingen klient tilgængelig", - "authenticationFailed": "Godkendelse mislykkedes: ${error}", - "couldNotLaunchUrl": "Kunne ikke åbne godkendelses-URL", "pleaseEnterToken": "Indtast et token", "invalidToken": "Ugyldigt token", "failedToVerifyToken": "Kunne ikke verificere token: ${error}", @@ -749,6 +737,8 @@ "allLibrariesHidden": "Alle biblioteker er skjult", "hiddenLibrariesCount": "Skjulte biblioteker (${count})", "thisLibraryIsEmpty": "Dette bibliotek er tomt", + "noItemsMatchFilters": "Ingen elementer matcher de aktive filtre", + "resetFilters": "Nulstil filtre", "all": "Alle", "clearAll": "Ryd alle", "scanLibraryConfirm": "Er du sikker på, at du vil scanne \"${title}\"?", @@ -804,7 +794,6 @@ "communityRating": "Fællesskabsvurdering", "criticRating": "Kritikerbedømmelse", "userRating": "Brugerbedømmelse", - "lastPlayed": "Sidst afspillet", "datePlayed": "Afspilningsdato", "playCount": "Antal afspilninger", "productionYear": "Produktionsår", @@ -818,9 +807,7 @@ "dateShared": "Delt dato", "latestEpisodeAirDate": "Seneste episodes premieredato", "lastEpisodeDateAdded": "Dato for senest tilføjede episode" - }, - "noItemsMatchFilters": "Ingen elementer matcher de aktive filtre", - "resetFilters": "Nulstil filtre" + } }, "about": { "title": "Om", @@ -830,7 +817,6 @@ "viewLicensesDescription": "Se licenser for tredjepartsbiblioteker" }, "serverSelection": { - "allServerConnectionsFailed": "Kunne ikke oprette forbindelse til nogen servere. Tjek dit netværk.", "noServersFoundForAccount": "Ingen servere fundet for ${username} (${email})", "failedToLoadServers": "Kunne ikke indlæse servere: ${error}" }, @@ -893,7 +879,6 @@ "watchlistUpdateFailed": "Kunne ikke opdatere ønskelisten", "notInLibrary": "Ikke i dit bibliotek", "inTheseLibraries": "I disse biblioteker", - "availableOn": "Tilgængelig på ${server}", "checkingLibrary": "Tjekker dit bibliotek...", "emptyTitle": "Der er ikke noget her endnu", "emptyMessage": "Rækker fra ${source} vises her, når de har indhold.", @@ -907,6 +892,8 @@ "guide": "Guide", "noChannels": "Ingen kanaler tilgængelige", "noDvr": "Ingen DVR konfigureret på nogen server", + "serverUnavailable": "Live-tv-serveren er ikke tilgængelig.", + "serverNotConnected": "Live-tv-serveren er ikke forbundet.", "noPrograms": "Ingen programdata tilgængelig", "liveStreamFailed": "Livestream mislykkedes", "unknownProgram": "Ukendt program", @@ -942,7 +929,6 @@ "scheduledRecordings": "Planlagt", "recordingRules": "Optagelsesregler", "noScheduledRecordings": "Ingen optagelser planlagt", - "noRecordingRules": "Ingen optagelsesregler endnu", "manageRecording": "Administrer optagelse", "cancelRecording": "Annullér optagelse", "cancelRecordingTitle": "Annullér denne optagelse?", @@ -959,7 +945,6 @@ "recordingCancelled": "Optagelse annulleret", "recordingRuleDeleted": "Optagelsesregel slettet", "processRecordingRules": "Genberegn regler", - "loadingRecordings": "Indlæser optagelser ...", "recordingInProgress": "Optager nu", "recordingsCount": "${count} planlagt", "editRule": "Rediger regel", @@ -973,7 +958,6 @@ "title": "Samlinger", "collection": "Samling", "empty": "Samlingen er tom", - "unknownLibrarySection": "Kan ikke slette: Ukendt bibliotekssektion", "deleteCollection": "Slet samling", "deleteConfirm": "Slet \"${title}\"? Dette kan ikke fortrydes.", "deleted": "Samling slettet", @@ -1013,6 +997,7 @@ "itemAdded": "Tilføjet til playliste", "itemRemoved": "Fjernet fra playliste", "selectPlaylist": "Vælg playliste", + "searchPlaylists": "Søg i playlister...", "errorCreating": "Kunne ikke oprette playliste", "errorDeleting": "Kunne ikke slette playliste", "errorLoading": "Kunne ikke indlæse playlister", @@ -1102,15 +1087,15 @@ "participantResumed": "${name} genoptog", "participantSeeked": "${name} spoled", "participantBuffering": "${name} bufferer", + "participantNeedsUpdate": "${name} bruger en ældre appversion — synkronisering er ikke tilgængelig", + "resumingWithout": "Fortsætter uden ${name}", "waitingForParticipants": "Venter på at andre indlæser...", + "waitingForName": "Venter på ${name}...", "recentRooms": "Seneste rum", "renameRoom": "Omdøb rum", "removeRoom": "Fjern", "guestSwitchUnavailable": "Kunne ikke skifte — server ikke tilgængelig for synkronisering", - "guestSwitchFailed": "Kunne ikke skifte — indhold blev ikke fundet på denne server", - "participantNeedsUpdate": "${name} bruger en ældre appversion — synkronisering er ikke tilgængelig", - "resumingWithout": "Fortsætter uden ${name}", - "waitingForName": "Venter på ${name}..." + "guestSwitchFailed": "Kunne ikke skifte — indhold blev ikke fundet på denne server" }, "downloads": { "title": "Downloads", @@ -1155,7 +1140,6 @@ "customAmount": "Angiv antal...", "includeSpecials": "Inkludér specials", "howManyEpisodes": "Hvor mange episoder?", - "itemsQueued": "${count} elementer sat i kø til download", "keepSynced": "Hold synkroniseret", "downloadOnce": "Download én gang", "keepNUnwatched": "Behold ${count} usete", @@ -1204,7 +1188,6 @@ "unknownDevice": "Ukendt enhed", "session": { "startingServer": "Starter fjernserver...", - "failedToCreate": "Kunne ikke starte fjernserver:", "hostAddress": "Værtsadresse", "connected": "Forbundet", "serverRunning": "Fjernserver aktiv", @@ -1265,6 +1248,8 @@ "errors": { "noNetworkInterface": "Ingen netværksgrænseflade fundet", "authenticationFailed": "Godkendelse mislykkedes", + "serverStartFailed": "Kunne ikke starte fjernserveren: ${error}", + "commandFailed": "Kunne ikke sende fjernkommando: ${error}", "joinTimedOut": "Tidsgrænse for deltagelse i session overskredet", "failedToConnectAnyAddress": "Kunne ikke oprette forbindelse til nogen adresse", "connectionLostAfterAttempts": "Forbindelse mistet efter ${attempts} forsøg", @@ -1538,7 +1523,6 @@ "quickConnectFailed": "Quick Connect mislykkedes: ${error}", "addPlexTitle": "Log ind med Plex", "pinExpired": "PIN udløb før login. Prøv igen.", - "duplicatePlexAccount": "Allerede logget ind på Plex. Log ud for at skifte konto.", "failedToRegisterAccount": "Kunne ikke registrere kontoen: ${error}", "enterJellyfinUrlError": "Angiv URL'en til din Jellyfin-server", "addConnectionTitle": "Tilføj forbindelse", diff --git a/lib/i18n/de.i18n.json b/lib/i18n/de.i18n.json index a749d00d..35346d49 100644 --- a/lib/i18n/de.i18n.json +++ b/lib/i18n/de.i18n.json @@ -3,7 +3,6 @@ "title": "Plezy" }, "auth": { - "signIn": "Anmelden", "signInWithPlex": "Mit Plex anmelden", "showQRCode": "QR-Code anzeigen", "authenticate": "Authentifizieren", @@ -56,10 +55,8 @@ "episodeNumberTitle": "Episode ${number} - ${title}", "chapterNumber": "Kapitel ${number}", "reconnect": "Erneut verbinden", - "exit": "Beenden", "viewAll": "Alle anzeigen", "checkingNetwork": "Netzwerk wird geprüft...", - "refreshingServers": "Server werden aktualisiert...", "loadingServers": "Server werden geladen...", "connectingToServers": "Verbindung zu Servern...", "startingOfflineMode": "Offlinemodus wird gestartet...", @@ -139,6 +136,12 @@ "tvFullCardLayoutDescription": "TV-Karten nur mit Bild verwenden und Darstellernamen einblenden", "focusGlow": "Fokus-Leuchten", "focusGlowDescription": "Sanftes Leuchten um die fokussierte Karte anzeigen", + "visualEffects": "Visuelle Effekte", + "visualEffectsAuto": "Automatisch", + "visualEffectsAutoDescription": "Effekte auf leistungsschwachen Geräten automatisch reduzieren", + "visualEffectsFull": "Vollständig", + "visualEffectsReduced": "Reduziert", + "visualEffectsReducedDescription": "Weniger Animationen und Grafiken mit niedrigerer Auflösung", "hideSpoilers": "Spoiler für nicht gesehene Episoden verbergen", "hideSpoilersDescription": "Vorschaubilder und Beschreibungen ungesehener Episoden verwischen", "playerBackend": "Player-Backend", @@ -151,7 +154,7 @@ "bufferSizeAuto": "Auto (Empfohlen)", "bufferSizeWarning": "${heap}MB Speicher verfügbar. Ein ${size}MB-Puffer kann die Wiedergabe beeinträchtigen.", "defaultQualityTitle": "Standardqualität", - "defaultQualityDescription": "Wird beim Starten der Wiedergabe verwendet. Niedrigere Werte reduzieren die Bandbreite.", + "musicQualityTitle": "Musikqualität", "subtitleStyling": "Untertitel-Stil", "subtitleStylingDescription": "Aussehen von Untertiteln anpassen", "smallSkipDuration": "Kleine Sprungdauer", @@ -245,10 +248,9 @@ "maxVolumePercent": "${percent}%", "discordRichPresence": "Discord Rich Presence", "discordRichPresenceDescription": "Zeige auf Discord, was du gerade schaust", - "trakt": "Trakt", - "traktDescription": "Wiedergabeverlauf mit Trakt synchronisieren", "services": "Dienste", "servicesDescription": "Trakt, MyAnimeList, Seerr und mehr verbinden", + "manageLibrariesDescription": "Mediatheken neu anordnen und ausblenden", "companionRemoteServer": "Companion Remote Server", "companionRemoteServerDescription": "Mobilgeräten in deinem Netzwerk erlauben, diese App zu steuern", "autoPip": "Automatisches Bild-in-Bild", @@ -311,7 +313,6 @@ "showNavBarLabels": "Navigationsleisten-Beschriftungen anzeigen", "showNavBarLabelsDescription": "Textbeschriftungen unter den Symbolen der Navigationsleiste anzeigen", "startupSection": "Startbereich", - "startupSectionDescription": "Legt fest, welchen Bereich Plezy beim Start öffnet", "liveTvDefaultFavorites": "Standardmäßig Favoritenkanäle", "liveTvDefaultFavoritesDescription": "Beim Öffnen von Live TV nur Favoritenkanäle anzeigen", "display": "Anzeige", @@ -322,14 +323,7 @@ "player": "Wiedergabe", "subtitlesAndConfig": "Untertitel & Konfiguration", "seekAndTiming": "Spulen & Timing", - "behavior": "Verhalten", - "manageLibrariesDescription": "Mediatheken neu anordnen und ausblenden", - "visualEffects": "Visuelle Effekte", - "visualEffectsAuto": "Automatisch", - "visualEffectsAutoDescription": "Effekte auf leistungsschwachen Geräten automatisch reduzieren", - "visualEffectsFull": "Vollständig", - "visualEffectsReduced": "Reduziert", - "visualEffectsReducedDescription": "Weniger Animationen und Grafiken mit niedrigerer Auflösung" + "behavior": "Verhalten" }, "search": { "hint": "Filme, Serien, Musik suchen...", @@ -418,14 +412,11 @@ "rateSheet": { "title": "Bewerten", "server": "Server", - "starValue": "${rating} / 5", - "scoreValue": "${score} / 10", - "setScore": "Eine Wertung festlegen", + "favorite": "Favorit", + "favorited": "Favorisiert", "saved": "Gespeichert", "notAvailable": "Keine Übereinstimmung gefunden", - "noConnectedServices": "Verbinde einen Dienst in den Einstellungen, um dort zu bewerten.", - "favorite": "Favorit", - "favorited": "Favorisiert" + "noConnectedServices": "Verbinde einen Dienst in den Einstellungen, um dort zu bewerten." }, "accessibility": { "mediaCardMovie": "${title}, Film", @@ -435,7 +426,15 @@ "mediaCardWatched": "angesehen", "mediaCardPartiallyWatched": "${percent} Prozent angesehen", "mediaCardUnwatched": "ungeschaut", - "tapToPlay": "Zum Abspielen tippen" + "tapToPlay": "Zum Abspielen tippen", + "decrease": "Verringern", + "increase": "Erhöhen", + "decreaseValue": "${label} verringern", + "increaseValue": "${label} erhöhen", + "hue": "Farbton", + "saturation": "Sättigung", + "brightness": "Helligkeit", + "hexColor": "Hex-Farbe" }, "tooltips": { "shufflePlay": "Zufallswiedergabe", @@ -481,13 +480,11 @@ "settingsButton": "Wiedergabeeinstellungen", "tracksButton": "Audio und Untertitel", "chaptersButton": "Kapitel", - "versionsButton": "Videoversionen", "versionQualityButton": "Version & Qualität", "versionColumnHeader": "Version", "qualityColumnHeader": "Qualität", "qualityOriginal": "Original", "qualityPresetLabel": "${resolution}p ${bitrate} Mbps", - "qualityBandwidthEstimate": "~${bitrate} Mbps", "transcodeUnavailableFallback": "Transkodierung nicht verfügbar — Wiedergabe in Originalqualität", "pipButton": "Bild-in-Bild Modus", "aspectRatioButton": "Seitenverhältnis", @@ -530,12 +527,7 @@ "subtitleDownloadFailed": "Untertitel konnte nicht heruntergeladen werden", "searchLanguages": "Sprachen suchen..." }, - "userStatus": { - "admin": "Eigentümer", - "restricted": "Eingeschränkt", - "protected": "Geschützt", - "current": "AKTUELL" - }, + "userStatus": {}, "messages": { "markedAsWatched": "Als gesehen markiert", "markedAsUnwatched": "Als ungesehen markiert", @@ -676,8 +668,7 @@ "pinProtectionOptional": "PIN-Schutz (optional)", "pinExplain": "4-stellige PIN zum Profilwechsel erforderlich.", "continueButton": "Weiter", - "pinsDontMatch": "PINs stimmen nicht überein", - "initializeServicesFailed": "Profildienste konnten nicht initialisiert werden" + "pinsDontMatch": "PINs stimmen nicht überein" }, "connections": { "sectionTitle": "Verbindungen", @@ -692,7 +683,6 @@ }, "discover": { "title": "Entdecken", - "switchProfile": "Profil wechseln", "noContentAvailable": "Kein Inhalt verfügbar", "addMediaToLibraries": "Medien zur Mediathek hinzufügen", "continueWatching": "Weiterschauen", @@ -721,8 +711,6 @@ "connectionFailed": "Keine Verbindung zum Medienserver möglich", "failedToLoad": "Fehler beim Laden von ${context}: ${error}", "noClientAvailable": "Kein Client verfügbar", - "authenticationFailed": "Authentifizierung fehlgeschlagen: ${error}", - "couldNotLaunchUrl": "Auth-URL konnte nicht geöffnet werden", "pleaseEnterToken": "Bitte Token eingeben", "invalidToken": "Ungültiges Token", "failedToVerifyToken": "Token-Verifizierung fehlgeschlagen: ${error}", @@ -749,6 +737,8 @@ "allLibrariesHidden": "Alle Mediatheken sind ausgeblendet", "hiddenLibrariesCount": "Ausgeblendete Mediatheken (${count})", "thisLibraryIsEmpty": "Diese Mediathek ist leer", + "noItemsMatchFilters": "Keine Elemente entsprechen den aktiven Filtern", + "resetFilters": "Filter zurücksetzen", "all": "Alle", "clearAll": "Alle löschen", "scanLibraryConfirm": "„${title}“ wirklich scannen?", @@ -804,7 +794,6 @@ "communityRating": "Community-Bewertung", "criticRating": "Kritikerbewertung", "userRating": "Benutzerbewertung", - "lastPlayed": "Zuletzt abgespielt", "datePlayed": "Wiedergabedatum", "playCount": "Wiedergaben", "productionYear": "Produktionsjahr", @@ -818,9 +807,7 @@ "dateShared": "Datum geteilt", "latestEpisodeAirDate": "Letztes Folgenausstrahlungsdatum", "lastEpisodeDateAdded": "Datum der zuletzt hinzugefügten Folge" - }, - "noItemsMatchFilters": "Keine Elemente entsprechen den aktiven Filtern", - "resetFilters": "Filter zurücksetzen" + } }, "about": { "title": "Über", @@ -830,7 +817,6 @@ "viewLicensesDescription": "Lizenzen von Drittanbieter-Bibliotheken anzeigen" }, "serverSelection": { - "allServerConnectionsFailed": "Keine Verbindung zu Servern möglich. Prüfe dein Netzwerk.", "noServersFoundForAccount": "Keine Server gefunden für ${username} (${email})", "failedToLoadServers": "Server konnten nicht geladen werden: ${error}" }, @@ -893,7 +879,6 @@ "watchlistUpdateFailed": "Merkliste konnte nicht aktualisiert werden", "notInLibrary": "Nicht in deiner Mediathek", "inTheseLibraries": "In diesen Mediatheken", - "availableOn": "Verfügbar auf ${server}", "checkingLibrary": "Deine Mediathek wird überprüft...", "emptyTitle": "Hier ist noch nichts", "emptyMessage": "Zeilen aus ${source} erscheinen hier, sobald sie Inhalte enthalten.", @@ -907,6 +892,8 @@ "guide": "Programmführer", "noChannels": "Keine Kanäle verfügbar", "noDvr": "Kein DVR auf einem Server konfiguriert", + "serverUnavailable": "Der Live-TV-Server ist nicht verfügbar.", + "serverNotConnected": "Der Live-TV-Server ist nicht verbunden.", "noPrograms": "Keine Programmdaten verfügbar", "liveStreamFailed": "Livestream fehlgeschlagen", "unknownProgram": "Unbekannte Sendung", @@ -942,7 +929,6 @@ "scheduledRecordings": "Geplant", "recordingRules": "Aufnahmeregeln", "noScheduledRecordings": "Keine geplanten Aufnahmen", - "noRecordingRules": "Noch keine Aufnahmeregeln", "manageRecording": "Aufnahme verwalten", "cancelRecording": "Aufnahme abbrechen", "cancelRecordingTitle": "Diese Aufnahme abbrechen?", @@ -959,7 +945,6 @@ "recordingCancelled": "Aufnahme abgebrochen", "recordingRuleDeleted": "Aufnahmeregel gelöscht", "processRecordingRules": "Regeln neu bewerten", - "loadingRecordings": "Aufnahmen werden geladen ...", "recordingInProgress": "Wird jetzt aufgenommen", "recordingsCount": "${count} geplant", "editRule": "Regel bearbeiten", @@ -973,7 +958,6 @@ "title": "Sammlungen", "collection": "Sammlung", "empty": "Sammlung ist leer", - "unknownLibrarySection": "Löschen nicht möglich: Unbekannte Bibliothekssektion", "deleteCollection": "Sammlung löschen", "deleteConfirm": "\"${title}\" löschen? Dies kann nicht rückgängig gemacht werden.", "deleted": "Sammlung gelöscht", @@ -1013,6 +997,7 @@ "itemAdded": "Zur Wiedergabeliste hinzugefügt", "itemRemoved": "Aus Wiedergabeliste entfernt", "selectPlaylist": "Wiedergabeliste auswählen", + "searchPlaylists": "Wiedergabelisten durchsuchen...", "errorCreating": "Wiedergabeliste konnte nicht erstellt werden", "errorDeleting": "Wiedergabeliste konnte nicht gelöscht werden", "errorLoading": "Wiedergabelisten konnten nicht geladen werden", @@ -1102,15 +1087,15 @@ "participantResumed": "${name} hat fortgesetzt", "participantSeeked": "${name} hat gespult", "participantBuffering": "${name} puffert", + "participantNeedsUpdate": "${name} verwendet eine ältere Appversion — Synchronisierung nicht verfügbar", + "resumingWithout": "Fortfahren ohne ${name}", "waitingForParticipants": "Warte auf andere zum Laden...", + "waitingForName": "Warten auf ${name}...", "recentRooms": "Letzte Räume", "renameRoom": "Raum umbenennen", "removeRoom": "Entfernen", "guestSwitchUnavailable": "Wechsel fehlgeschlagen — Server nicht für Synchronisierung verfügbar", - "guestSwitchFailed": "Wechsel fehlgeschlagen — Inhalt auf diesem Server nicht gefunden", - "participantNeedsUpdate": "${name} verwendet eine ältere Appversion — Synchronisierung nicht verfügbar", - "resumingWithout": "Fortfahren ohne ${name}", - "waitingForName": "Warten auf ${name}..." + "guestSwitchFailed": "Wechsel fehlgeschlagen — Inhalt auf diesem Server nicht gefunden" }, "downloads": { "title": "Downloads", @@ -1155,7 +1140,6 @@ "customAmount": "Eigene Anzahl...", "includeSpecials": "Specials einschließen", "howManyEpisodes": "Wie viele Episoden?", - "itemsQueued": "${count} Elemente zum Download eingereiht", "keepSynced": "Synchronisiert halten", "downloadOnce": "Einmal herunterladen", "keepNUnwatched": "${count} ungesehene behalten", @@ -1204,7 +1188,6 @@ "unknownDevice": "Unbekanntes Gerät", "session": { "startingServer": "Remote-Server wird gestartet...", - "failedToCreate": "Remote-Server konnte nicht gestartet werden:", "hostAddress": "Host-Adresse", "connected": "Verbunden", "serverRunning": "Remote-Server aktiv", @@ -1265,6 +1248,8 @@ "errors": { "noNetworkInterface": "Keine Netzwerkschnittstelle gefunden", "authenticationFailed": "Authentifizierung fehlgeschlagen", + "serverStartFailed": "Remote-Server konnte nicht gestartet werden: ${error}", + "commandFailed": "Remote-Befehl konnte nicht gesendet werden: ${error}", "joinTimedOut": "Zeitüberschreitung beim Beitreten zur Sitzung", "failedToConnectAnyAddress": "Keine Verbindung zu einer Adresse möglich", "connectionLostAfterAttempts": "Verbindung nach ${attempts} Versuchen verloren", @@ -1538,7 +1523,6 @@ "quickConnectFailed": "Quick Connect fehlgeschlagen: ${error}", "addPlexTitle": "Mit Plex anmelden", "pinExpired": "PIN ist vor der Anmeldung abgelaufen. Bitte erneut versuchen.", - "duplicatePlexAccount": "Bereits bei Plex angemeldet. Melde dich ab, um Konten zu wechseln.", "failedToRegisterAccount": "Konto konnte nicht registriert werden: ${error}", "enterJellyfinUrlError": "Gib die URL deines Jellyfin-Servers ein", "addConnectionTitle": "Verbindung hinzufügen", diff --git a/lib/i18n/en.i18n.json b/lib/i18n/en.i18n.json index e7193acb..6002d66a 100644 --- a/lib/i18n/en.i18n.json +++ b/lib/i18n/en.i18n.json @@ -3,7 +3,6 @@ "title": "Plezy" }, "auth": { - "signIn": "Sign in", "signInWithPlex": "Sign in with Plex", "showQRCode": "Show QR Code", "authenticate": "Authenticate", @@ -56,10 +55,8 @@ "episodeNumberTitle": "Episode ${number} - ${title}", "chapterNumber": "Chapter ${number}", "reconnect": "Reconnect", - "exit": "Exit", "viewAll": "View All", "checkingNetwork": "Checking network...", - "refreshingServers": "Refreshing servers...", "loadingServers": "Loading servers...", "connectingToServers": "Connecting to servers...", "startingOfflineMode": "Starting offline mode...", @@ -157,7 +154,6 @@ "bufferSizeAuto": "Auto (Recommended)", "bufferSizeWarning": "${heap}MB memory available. A ${size}MB buffer may affect playback.", "defaultQualityTitle": "Default Quality", - "defaultQualityDescription": "Used when starting playback. Lower values reduce bandwidth.", "musicQualityTitle": "Music Quality", "subtitleStyling": "Subtitle Styling", "subtitleStylingDescription": "Customize subtitle appearance", @@ -252,8 +248,6 @@ "maxVolumePercent": "${percent}%", "discordRichPresence": "Discord Rich Presence", "discordRichPresenceDescription": "Show what you're watching on Discord", - "trakt": "Trakt", - "traktDescription": "Sync watch history with Trakt", "services": "Services", "servicesDescription": "Connect Trakt, MyAnimeList, Seerr, and more", "manageLibrariesDescription": "Reorder and hide libraries", @@ -319,7 +313,6 @@ "showNavBarLabels": "Show Navigation Bar Labels", "showNavBarLabelsDescription": "Display text labels under navigation bar icons", "startupSection": "Startup Section", - "startupSectionDescription": "Choose which section Plezy opens to when it starts", "liveTvDefaultFavorites": "Default to Favorite Channels", "liveTvDefaultFavoritesDescription": "Show only favorite channels when opening Live TV", "display": "Display", @@ -419,9 +412,6 @@ "rateSheet": { "title": "Rate", "server": "Server", - "starValue": "${rating} / 5", - "scoreValue": "${score} / 10", - "setScore": "Set a score", "favorite": "Favorite", "favorited": "Favorited", "saved": "Saved", @@ -436,7 +426,15 @@ "mediaCardWatched": "watched", "mediaCardPartiallyWatched": "${percent} percent watched", "mediaCardUnwatched": "unwatched", - "tapToPlay": "Tap to play" + "tapToPlay": "Tap to play", + "decrease": "Decrease", + "increase": "Increase", + "decreaseValue": "Decrease ${label}", + "increaseValue": "Increase ${label}", + "hue": "Hue", + "saturation": "Saturation", + "brightness": "Brightness", + "hexColor": "Hex color" }, "tooltips": { "shufflePlay": "Shuffle play", @@ -482,13 +480,11 @@ "settingsButton": "Playback Settings", "tracksButton": "Audio & Subtitles", "chaptersButton": "Chapters", - "versionsButton": "Video versions", "versionQualityButton": "Version & Quality", "versionColumnHeader": "Version", "qualityColumnHeader": "Quality", "qualityOriginal": "Original", "qualityPresetLabel": "${resolution}p ${bitrate} Mbps", - "qualityBandwidthEstimate": "~${bitrate} Mbps", "transcodeUnavailableFallback": "Transcoding unavailable — playing original quality", "pipButton": "Picture-in-Picture mode", "aspectRatioButton": "Aspect ratio", @@ -531,12 +527,7 @@ "subtitleDownloadFailed": "Failed to download subtitle", "searchLanguages": "Search languages..." }, - "userStatus": { - "admin": "Admin", - "restricted": "Restricted", - "protected": "Protected", - "current": "CURRENT" - }, + "userStatus": {}, "messages": { "markedAsWatched": "Marked as watched", "markedAsUnwatched": "Marked as unwatched", @@ -677,8 +668,7 @@ "pinProtectionOptional": "PIN protection (optional)", "pinExplain": "4-digit PIN required to switch profiles.", "continueButton": "Continue", - "pinsDontMatch": "PINs don't match", - "initializeServicesFailed": "Failed to initialize profile services" + "pinsDontMatch": "PINs don't match" }, "connections": { "sectionTitle": "Connections", @@ -693,7 +683,6 @@ }, "discover": { "title": "Discover", - "switchProfile": "Switch Profile", "noContentAvailable": "No content available", "addMediaToLibraries": "Add some media to your libraries", "continueWatching": "Continue Watching", @@ -722,8 +711,6 @@ "connectionFailed": "Unable to connect to media server", "failedToLoad": "Failed to load ${context}: ${error}", "noClientAvailable": "No client available", - "authenticationFailed": "Authentication failed: ${error}", - "couldNotLaunchUrl": "Could not launch auth URL", "pleaseEnterToken": "Please enter a token", "invalidToken": "Invalid token", "failedToVerifyToken": "Failed to verify token: ${error}", @@ -807,7 +794,6 @@ "communityRating": "Community Rating", "criticRating": "Critic Rating", "userRating": "User Rating", - "lastPlayed": "Last Played", "datePlayed": "Date Played", "playCount": "Play Count", "productionYear": "Production Year", @@ -831,7 +817,6 @@ "viewLicensesDescription": "View licenses of third-party libraries" }, "serverSelection": { - "allServerConnectionsFailed": "Couldn't connect to any servers. Check your network.", "noServersFoundForAccount": "No servers found for ${username} (${email})", "failedToLoadServers": "Failed to load servers: ${error}" }, @@ -894,7 +879,6 @@ "watchlistUpdateFailed": "Couldn't update watchlist", "notInLibrary": "Not in your library", "inTheseLibraries": "In these libraries", - "availableOn": "Available on ${server}", "checkingLibrary": "Checking your library...", "emptyTitle": "Nothing here yet", "emptyMessage": "Rows from ${source} will appear here once they have content.", @@ -908,6 +892,8 @@ "guide": "Guide", "noChannels": "No channels available", "noDvr": "No DVR configured on any server", + "serverUnavailable": "Live TV server is not available.", + "serverNotConnected": "Live TV server is not connected.", "noPrograms": "No program data available", "liveStreamFailed": "Live stream failed", "unknownProgram": "Unknown Program", @@ -943,7 +929,6 @@ "scheduledRecordings": "Scheduled", "recordingRules": "Recording Rules", "noScheduledRecordings": "Nothing scheduled to record", - "noRecordingRules": "No recording rules yet", "manageRecording": "Manage recording", "cancelRecording": "Cancel recording", "cancelRecordingTitle": "Cancel this recording?", @@ -960,7 +945,6 @@ "recordingCancelled": "Recording cancelled", "recordingRuleDeleted": "Recording rule deleted", "processRecordingRules": "Re-evaluate rules", - "loadingRecordings": "Loading recordings...", "recordingInProgress": "Recording now", "recordingsCount": "${count} scheduled", "editRule": "Edit rule", @@ -974,7 +958,6 @@ "title": "Collections", "collection": "Collection", "empty": "Collection is empty", - "unknownLibrarySection": "Cannot delete: Unknown library section", "deleteCollection": "Delete Collection", "deleteConfirm": "Delete \"${title}\"? This can't be undone.", "deleted": "Collection deleted", @@ -1157,7 +1140,6 @@ "customAmount": "Custom amount...", "includeSpecials": "Include Specials", "howManyEpisodes": "How many episodes?", - "itemsQueued": "${count} items queued for download", "keepSynced": "Keep synced", "downloadOnce": "Download once", "keepNUnwatched": "Keep ${count} unwatched", @@ -1206,7 +1188,6 @@ "unknownDevice": "Unknown Device", "session": { "startingServer": "Starting remote server...", - "failedToCreate": "Failed to start remote server:", "hostAddress": "Host Address", "connected": "Connected", "serverRunning": "Remote server active", @@ -1267,6 +1248,8 @@ "errors": { "noNetworkInterface": "No network interface found", "authenticationFailed": "Authentication failed", + "serverStartFailed": "Failed to start remote server: ${error}", + "commandFailed": "Failed to send remote command: ${error}", "joinTimedOut": "Timed out joining session", "failedToConnectAnyAddress": "Failed to connect to any address", "connectionLostAfterAttempts": "Connection lost after ${attempts} attempts", @@ -1540,7 +1523,6 @@ "quickConnectFailed": "Quick Connect failed: ${error}", "addPlexTitle": "Sign in with Plex", "pinExpired": "PIN expired before sign-in. Please try again.", - "duplicatePlexAccount": "Already signed in to Plex. Sign out to switch accounts.", "failedToRegisterAccount": "Failed to register account: ${error}", "enterJellyfinUrlError": "Enter your Jellyfin server URL", "addConnectionTitle": "Add connection", diff --git a/lib/i18n/es.i18n.json b/lib/i18n/es.i18n.json index f07b1d25..10a2cf97 100644 --- a/lib/i18n/es.i18n.json +++ b/lib/i18n/es.i18n.json @@ -3,7 +3,6 @@ "title": "Plezy" }, "auth": { - "signIn": "Iniciar sesión", "signInWithPlex": "Inicia sesión con Plex", "showQRCode": "Mostrar código QR", "authenticate": "Autenticar", @@ -56,10 +55,8 @@ "episodeNumberTitle": "Episodio ${number} - ${title}", "chapterNumber": "Capítulo ${number}", "reconnect": "Reconectar", - "exit": "Salir", "viewAll": "Ver todo", "checkingNetwork": "Comprobando red...", - "refreshingServers": "Actualizando servidores...", "loadingServers": "Cargando servidores...", "connectingToServers": "Conectando a servidores...", "startingOfflineMode": "Iniciando modo sin conexión...", @@ -139,6 +136,12 @@ "tvFullCardLayoutDescription": "Usar tarjetas TV solo con imagen y nombres de actores superpuestos", "focusGlow": "Brillo de foco", "focusGlowDescription": "Mostrar un brillo suave alrededor de la tarjeta con foco", + "visualEffects": "Efectos visuales", + "visualEffectsAuto": "Automático", + "visualEffectsAutoDescription": "Reduce automáticamente los efectos en dispositivos de bajo consumo", + "visualEffectsFull": "Completos", + "visualEffectsReduced": "Reducidos", + "visualEffectsReducedDescription": "Menos animaciones e ilustraciones de menor resolución", "hideSpoilers": "Ocultar spoilers de episodios no vistos", "hideSpoilersDescription": "Desenfocar miniaturas y descripciones de episodios no vistos", "playerBackend": "Reproductor", @@ -151,7 +154,7 @@ "bufferSizeAuto": "Auto (Recomendado)", "bufferSizeWarning": "${heap}MB de memoria disponible. Un búfer de ${size}MB puede afectar la reproducción.", "defaultQualityTitle": "Calidad predeterminada", - "defaultQualityDescription": "Se utiliza al iniciar la reproducción. Los valores más bajos reducen el ancho de banda.", + "musicQualityTitle": "Calidad de música", "subtitleStyling": "Estilo de Subtítulos", "subtitleStylingDescription": "Personalizar la apariencia de los subtítulos", "smallSkipDuration": "Salto pequeño", @@ -245,10 +248,9 @@ "maxVolumePercent": "${percent}%", "discordRichPresence": "Presencia de Discord", "discordRichPresenceDescription": "Mostrar lo que estás viendo en Discord", - "trakt": "Trakt", - "traktDescription": "Sincronizar historial de visualización con Trakt", "services": "Servicios", "servicesDescription": "Conecta Trakt, MyAnimeList, Seerr y más", + "manageLibrariesDescription": "Reordena y oculta bibliotecas", "companionRemoteServer": "Servidor de control remoto", "companionRemoteServerDescription": "Permitir que dispositivos móviles en tu red controlen esta aplicación", "autoPip": "Imagen en imagen automática", @@ -311,7 +313,6 @@ "showNavBarLabels": "Mostrar etiquetas de la barra de navegación", "showNavBarLabelsDescription": "Mostrar etiquetas de texto bajo los iconos de la barra de navegación", "startupSection": "Sección de inicio", - "startupSectionDescription": "Elige qué sección abre Plezy al iniciarse", "liveTvDefaultFavorites": "Canales favoritos por defecto", "liveTvDefaultFavoritesDescription": "Mostrar solo canales favoritos al abrir TV en vivo", "display": "Pantalla", @@ -322,14 +323,7 @@ "player": "Reproductor", "subtitlesAndConfig": "Subtítulos y configuración", "seekAndTiming": "Búsqueda y tiempo", - "behavior": "Comportamiento", - "manageLibrariesDescription": "Reordena y oculta bibliotecas", - "visualEffects": "Efectos visuales", - "visualEffectsAuto": "Automático", - "visualEffectsAutoDescription": "Reduce automáticamente los efectos en dispositivos de bajo consumo", - "visualEffectsFull": "Completos", - "visualEffectsReduced": "Reducidos", - "visualEffectsReducedDescription": "Menos animaciones e ilustraciones de menor resolución" + "behavior": "Comportamiento" }, "search": { "hint": "Buscar películas, series, música...", @@ -418,14 +412,11 @@ "rateSheet": { "title": "Calificar", "server": "Servidor", - "starValue": "${rating} / 5", - "scoreValue": "${score} / 10", - "setScore": "Establecer puntuación", + "favorite": "Favorito", + "favorited": "Marcado como favorito", "saved": "Guardado", "notAvailable": "No se encontró coincidencia", - "noConnectedServices": "Conecta un servicio en Configuración para calificar ahí.", - "favorite": "Favorito", - "favorited": "Marcado como favorito" + "noConnectedServices": "Conecta un servicio en Configuración para calificar ahí." }, "accessibility": { "mediaCardMovie": "${title}, película", @@ -435,7 +426,15 @@ "mediaCardWatched": "visto", "mediaCardPartiallyWatched": "${percent} por ciento visto", "mediaCardUnwatched": "no visto", - "tapToPlay": "Toca para reproducir" + "tapToPlay": "Toca para reproducir", + "decrease": "Disminuir", + "increase": "Aumentar", + "decreaseValue": "Disminuir ${label}", + "increaseValue": "Aumentar ${label}", + "hue": "Tono", + "saturation": "Saturación", + "brightness": "Brillo", + "hexColor": "Color hexadecimal" }, "tooltips": { "shufflePlay": "Reproducción aleatoria", @@ -481,13 +480,11 @@ "settingsButton": "Ajustes de reproducción", "tracksButton": "Audio y subtítulos", "chaptersButton": "Capítulos", - "versionsButton": "Versiones de video", "versionQualityButton": "Versión y calidad", "versionColumnHeader": "Versión", "qualityColumnHeader": "Calidad", "qualityOriginal": "Original", "qualityPresetLabel": "${resolution}p ${bitrate} Mbps", - "qualityBandwidthEstimate": "~${bitrate} Mbps", "transcodeUnavailableFallback": "Transcodificación no disponible — reproduciendo calidad original", "pipButton": "Modo PiP (Imagen en Imagen)", "aspectRatioButton": "Relación de aspecto", @@ -530,12 +527,7 @@ "subtitleDownloadFailed": "Error al descargar subtítulo", "searchLanguages": "Buscar idiomas..." }, - "userStatus": { - "admin": "Administrador", - "restricted": "Restringido", - "protected": "Protegido", - "current": "ACTUAL" - }, + "userStatus": {}, "messages": { "markedAsWatched": "Marcado como visto", "markedAsUnwatched": "Marcado como no visto", @@ -676,8 +668,7 @@ "pinProtectionOptional": "Protección con PIN (opcional)", "pinExplain": "Se requiere PIN de 4 dígitos para cambiar de perfil.", "continueButton": "Continuar", - "pinsDontMatch": "Los PIN no coinciden", - "initializeServicesFailed": "No se pudieron inicializar los servicios de perfil" + "pinsDontMatch": "Los PIN no coinciden" }, "connections": { "sectionTitle": "Conexiones", @@ -692,7 +683,6 @@ }, "discover": { "title": "Descubrir", - "switchProfile": "Cambiar Perfil", "noContentAvailable": "No hay contenido disponible", "addMediaToLibraries": "Añade contenido a tus bibliotecas", "continueWatching": "Seguir Viendo", @@ -721,8 +711,6 @@ "connectionFailed": "No se puede conectar al servidor multimedia", "failedToLoad": "Error al cargar ${context}: ${error}", "noClientAvailable": "No hay cliente disponible", - "authenticationFailed": "Error de autenticación: ${error}", - "couldNotLaunchUrl": "No se pudo abrir la URL de autenticación", "pleaseEnterToken": "Por favor, introduce un token", "invalidToken": "Token no válido", "failedToVerifyToken": "Error al verificar el token: ${error}", @@ -749,6 +737,8 @@ "allLibrariesHidden": "Todas las bibliotecas están ocultas", "hiddenLibrariesCount": "Bibliotecas ocultas (${count})", "thisLibraryIsEmpty": "Esta biblioteca está vacía", + "noItemsMatchFilters": "Ningún elemento coincide con los filtros activos", + "resetFilters": "Restablecer filtros", "all": "Todos", "clearAll": "Borrar Todo", "scanLibraryConfirm": "¿Estás seguro de que quieres escanear \"${title}\"?", @@ -804,7 +794,6 @@ "communityRating": "Calificación de comunidad", "criticRating": "Calificación de crítica", "userRating": "Calificación del usuario", - "lastPlayed": "Última reproducción", "datePlayed": "Fecha de reproducción", "playCount": "Reproducciones", "productionYear": "Año de producción", @@ -818,9 +807,7 @@ "dateShared": "Fecha de compartición", "latestEpisodeAirDate": "Última fecha de emisión del episodio", "lastEpisodeDateAdded": "Fecha de adición del último episodio" - }, - "noItemsMatchFilters": "Ningún elemento coincide con los filtros activos", - "resetFilters": "Restablecer filtros" + } }, "about": { "title": "Acerca de", @@ -830,7 +817,6 @@ "viewLicensesDescription": "Ver licencias de librerías de terceros" }, "serverSelection": { - "allServerConnectionsFailed": "No se pudo conectar a ningún servidor. Revisa tu red.", "noServersFoundForAccount": "No se encontraron servidores para ${username} (${email})", "failedToLoadServers": "Error al cargar servidores: ${error}" }, @@ -893,7 +879,6 @@ "watchlistUpdateFailed": "No se pudo actualizar la lista de seguimiento", "notInLibrary": "No está en tu biblioteca", "inTheseLibraries": "En estas bibliotecas", - "availableOn": "Disponible en ${server}", "checkingLibrary": "Comprobando tu biblioteca...", "emptyTitle": "Aquí no hay nada todavía", "emptyMessage": "Las filas de ${source} aparecerán aquí cuando tengan contenido.", @@ -907,6 +892,8 @@ "guide": "Guía", "noChannels": "No hay canales disponibles", "noDvr": "No hay DVR configurado en ningún servidor", + "serverUnavailable": "El servidor de TV en directo no está disponible.", + "serverNotConnected": "El servidor de TV en directo no está conectado.", "noPrograms": "No hay datos de programación disponibles", "liveStreamFailed": "Falló la transmisión en vivo", "unknownProgram": "Programa desconocido", @@ -942,7 +929,6 @@ "scheduledRecordings": "Programadas", "recordingRules": "Reglas de grabación", "noScheduledRecordings": "No hay grabaciones programadas", - "noRecordingRules": "Aún no hay reglas de grabación", "manageRecording": "Gestionar grabación", "cancelRecording": "Cancelar grabación", "cancelRecordingTitle": "¿Cancelar esta grabación?", @@ -959,7 +945,6 @@ "recordingCancelled": "Grabación cancelada", "recordingRuleDeleted": "Regla de grabación eliminada", "processRecordingRules": "Reevaluar reglas", - "loadingRecordings": "Cargando grabaciones...", "recordingInProgress": "Grabando ahora", "recordingsCount": "${count} programadas", "editRule": "Editar regla", @@ -973,7 +958,6 @@ "title": "Colecciones", "collection": "Colección", "empty": "La colección está vacía", - "unknownLibrarySection": "No se puede eliminar: Sección de biblioteca desconocida", "deleteCollection": "Eliminar Colección", "deleteConfirm": "¿Eliminar \"${title}\"? No se puede deshacer.", "deleted": "Colección eliminada", @@ -1013,6 +997,7 @@ "itemAdded": "Añadido a la lista", "itemRemoved": "Eliminado de la lista", "selectPlaylist": "Seleccionar Lista", + "searchPlaylists": "Buscar listas...", "errorCreating": "Error al crear la lista", "errorDeleting": "Error al eliminar la lista", "errorLoading": "Error al cargar las listas", @@ -1102,15 +1087,15 @@ "participantResumed": "${name} reanudó", "participantSeeked": "${name} avanzó", "participantBuffering": "${name} está cargando", + "participantNeedsUpdate": "${name} usa una versión anterior de la app — sincronización no disponible", + "resumingWithout": "Reanudando sin ${name}", "waitingForParticipants": "Esperando a que otros carguen...", + "waitingForName": "Esperando a ${name}...", "recentRooms": "Salas recientes", "renameRoom": "Renombrar sala", "removeRoom": "Eliminar", "guestSwitchUnavailable": "No se pudo cambiar — servidor no disponible para sincronización", - "guestSwitchFailed": "No se pudo cambiar — contenido no encontrado en este servidor", - "participantNeedsUpdate": "${name} usa una versión anterior de la app — sincronización no disponible", - "resumingWithout": "Reanudando sin ${name}", - "waitingForName": "Esperando a ${name}..." + "guestSwitchFailed": "No se pudo cambiar — contenido no encontrado en este servidor" }, "downloads": { "title": "Descargas", @@ -1155,7 +1140,6 @@ "customAmount": "Cantidad personalizada...", "includeSpecials": "Incluir especiales", "howManyEpisodes": "¿Cuántos episodios?", - "itemsQueued": "${count} elementos en cola de descarga", "keepSynced": "Mantener sincronizado", "downloadOnce": "Descargar una vez", "keepNUnwatched": "Mantener ${count} sin ver", @@ -1204,7 +1188,6 @@ "unknownDevice": "Dispositivo desconocido", "session": { "startingServer": "Iniciando servidor remoto...", - "failedToCreate": "Error al iniciar el servidor remoto:", "hostAddress": "Dirección del host", "connected": "Conectado", "serverRunning": "Servidor remoto activo", @@ -1265,6 +1248,8 @@ "errors": { "noNetworkInterface": "No se encontró ninguna interfaz de red", "authenticationFailed": "Autenticación fallida", + "serverStartFailed": "No se pudo iniciar el servidor remoto: ${error}", + "commandFailed": "No se pudo enviar el comando remoto: ${error}", "joinTimedOut": "Se agotó el tiempo al unirse a la sesión", "failedToConnectAnyAddress": "No se pudo conectar a ninguna dirección", "connectionLostAfterAttempts": "Conexión perdida tras ${attempts} intentos", @@ -1538,7 +1523,6 @@ "quickConnectFailed": "Quick Connect ha fallado: ${error}", "addPlexTitle": "Iniciar sesión con Plex", "pinExpired": "El PIN caducó antes de iniciar sesión. Inténtalo de nuevo.", - "duplicatePlexAccount": "Ya iniciaste sesión en Plex. Cierra sesión para cambiar de cuenta.", "failedToRegisterAccount": "No se pudo registrar la cuenta: ${error}", "enterJellyfinUrlError": "Introduce la URL de tu servidor Jellyfin", "addConnectionTitle": "Añadir conexión", diff --git a/lib/i18n/fr.i18n.json b/lib/i18n/fr.i18n.json index 735d6b19..f13ad38a 100644 --- a/lib/i18n/fr.i18n.json +++ b/lib/i18n/fr.i18n.json @@ -3,7 +3,6 @@ "title": "Plezy" }, "auth": { - "signIn": "Se connecter", "signInWithPlex": "S'inscrire avec Plex", "showQRCode": "Afficher le QR Code", "authenticate": "S'authentifier", @@ -56,10 +55,8 @@ "episodeNumberTitle": "Épisode ${number} - ${title}", "chapterNumber": "Chapitre ${number}", "reconnect": "Reconnecter", - "exit": "Quitter", "viewAll": "Tout afficher", "checkingNetwork": "Vérification du réseau...", - "refreshingServers": "Actualisation des serveurs...", "loadingServers": "Chargement des serveurs...", "connectingToServers": "Connexion aux serveurs...", "startingOfflineMode": "Démarrage en mode hors-ligne...", @@ -139,6 +136,12 @@ "tvFullCardLayoutDescription": "Utiliser des cartes TV avec image seule et noms des acteurs superposés", "focusGlow": "Halo de sélection", "focusGlowDescription": "Afficher un léger halo autour de la carte sélectionnée", + "visualEffects": "Effets visuels", + "visualEffectsAuto": "Automatique", + "visualEffectsAutoDescription": "Réduire automatiquement les effets sur les appareils peu puissants", + "visualEffectsFull": "Complets", + "visualEffectsReduced": "Réduits", + "visualEffectsReducedDescription": "Moins d’animations et d’illustrations de plus faible résolution", "hideSpoilers": "Masquer les spoilers des épisodes non vus", "hideSpoilersDescription": "Flouter les miniatures et descriptions des épisodes non vus", "playerBackend": "Moteur de lecture", @@ -151,7 +154,7 @@ "bufferSizeAuto": "Auto (Recommandé)", "bufferSizeWarning": "${heap}MB de mémoire disponible. Un tampon de ${size}MB peut affecter la lecture.", "defaultQualityTitle": "Qualité par défaut", - "defaultQualityDescription": "Utilisé au démarrage de la lecture. Les valeurs plus basses réduisent la bande passante.", + "musicQualityTitle": "Qualité de la musique", "subtitleStyling": "Stylisation des sous-titres", "subtitleStylingDescription": "Personnaliser l'apparence des sous-titres", "smallSkipDuration": "Durée du petit saut", @@ -245,10 +248,9 @@ "maxVolumePercent": "${percent}%", "discordRichPresence": "Discord Rich Presence", "discordRichPresenceDescription": "Montrez ce que vous regardez sur Discord", - "trakt": "Trakt", - "traktDescription": "Synchroniser l'historique de visionnage avec Trakt", "services": "Services", "servicesDescription": "Connectez Trakt, MyAnimeList, Seerr et plus", + "manageLibrariesDescription": "Réorganiser et masquer les bibliothèques", "companionRemoteServer": "Serveur de télécommande", "companionRemoteServerDescription": "Autoriser les appareils mobiles de votre réseau à contrôler cette application", "autoPip": "Image dans l'image automatique", @@ -311,7 +313,6 @@ "showNavBarLabels": "Afficher les libellés de la barre de navigation", "showNavBarLabelsDescription": "Afficher les libellés sous les icônes de la barre de navigation", "startupSection": "Section de démarrage", - "startupSectionDescription": "Choisissez la section que Plezy ouvre au démarrage", "liveTvDefaultFavorites": "Chaînes favorites par défaut", "liveTvDefaultFavoritesDescription": "Afficher uniquement les chaînes favorites à l'ouverture de la TV en direct", "display": "Affichage", @@ -322,14 +323,7 @@ "player": "Lecteur", "subtitlesAndConfig": "Sous-titres et configuration", "seekAndTiming": "Recherche et minutage", - "behavior": "Comportement", - "manageLibrariesDescription": "Réorganiser et masquer les bibliothèques", - "visualEffects": "Effets visuels", - "visualEffectsAuto": "Automatique", - "visualEffectsAutoDescription": "Réduire automatiquement les effets sur les appareils peu puissants", - "visualEffectsFull": "Complets", - "visualEffectsReduced": "Réduits", - "visualEffectsReducedDescription": "Moins d’animations et d’illustrations de plus faible résolution" + "behavior": "Comportement" }, "search": { "hint": "Rechercher des films, des séries, de la musique...", @@ -418,14 +412,11 @@ "rateSheet": { "title": "Noter", "server": "Serveur", - "starValue": "${rating} / 5", - "scoreValue": "${score} / 10", - "setScore": "Définir une note", + "favorite": "Favori", + "favorited": "Ajouté aux favoris", "saved": "Enregistré", "notAvailable": "Aucune correspondance trouvée", - "noConnectedServices": "Connectez un service dans les Réglages pour noter ici.", - "favorite": "Favori", - "favorited": "Ajouté aux favoris" + "noConnectedServices": "Connectez un service dans les Réglages pour noter ici." }, "accessibility": { "mediaCardMovie": "${title}, film", @@ -435,7 +426,15 @@ "mediaCardWatched": "visionné", "mediaCardPartiallyWatched": "${percent} pourcentage visionné", "mediaCardUnwatched": "non visionné", - "tapToPlay": "Appuyez pour lire" + "tapToPlay": "Appuyez pour lire", + "decrease": "Diminuer", + "increase": "Augmenter", + "decreaseValue": "Diminuer ${label}", + "increaseValue": "Augmenter ${label}", + "hue": "Teinte", + "saturation": "Saturation", + "brightness": "Luminosité", + "hexColor": "Couleur hexadécimale" }, "tooltips": { "shufflePlay": "Lecture aléatoire", @@ -481,13 +480,11 @@ "settingsButton": "Paramètres de lecture", "tracksButton": "Audio et sous-titres", "chaptersButton": "Chapitres", - "versionsButton": "Versions vidéo", "versionQualityButton": "Version et qualité", "versionColumnHeader": "Version", "qualityColumnHeader": "Qualité", "qualityOriginal": "Originale", "qualityPresetLabel": "${resolution}p ${bitrate} Mbps", - "qualityBandwidthEstimate": "~${bitrate} Mbps", "transcodeUnavailableFallback": "Transcodage indisponible — lecture en qualité originale", "pipButton": "Mode PiP (Picture-in-Picture)", "aspectRatioButton": "Format d'image", @@ -530,12 +527,7 @@ "subtitleDownloadFailed": "Échec du téléchargement du sous-titre", "searchLanguages": "Rechercher des langues..." }, - "userStatus": { - "admin": "Admin", - "restricted": "Restreint", - "protected": "Protégé", - "current": "ACTUEL" - }, + "userStatus": {}, "messages": { "markedAsWatched": "Marqué comme vu", "markedAsUnwatched": "Marqué comme non vu", @@ -676,8 +668,7 @@ "pinProtectionOptional": "Protection par PIN (optionnelle)", "pinExplain": "PIN à 4 chiffres requis pour changer de profil.", "continueButton": "Continuer", - "pinsDontMatch": "Les PIN ne correspondent pas", - "initializeServicesFailed": "Impossible d’initialiser les services de profil" + "pinsDontMatch": "Les PIN ne correspondent pas" }, "connections": { "sectionTitle": "Connexions", @@ -692,7 +683,6 @@ }, "discover": { "title": "Découvrez", - "switchProfile": "Changer de profil", "noContentAvailable": "Aucun contenu disponible", "addMediaToLibraries": "Ajoutez des médias à votre bibliothèque", "continueWatching": "Continuer à regarder", @@ -721,8 +711,6 @@ "connectionFailed": "Impossible de se connecter au serveur multimédia", "failedToLoad": "Échec du chargement ${context}: ${error}", "noClientAvailable": "Aucun client disponible", - "authenticationFailed": "Échec de l'authentification: ${error}", - "couldNotLaunchUrl": "Impossible de lancer l'URL d'authentification", "pleaseEnterToken": "Veuillez saisir un token", "invalidToken": "Token invalide", "failedToVerifyToken": "Échec de la vérification du token: ${error}", @@ -749,6 +737,8 @@ "allLibrariesHidden": "Toutes les bibliothèques sont masquées", "hiddenLibrariesCount": "Bibliothèques masquées (${count})", "thisLibraryIsEmpty": "Cette bibliothèque est vide", + "noItemsMatchFilters": "Aucun élément ne correspond aux filtres actifs", + "resetFilters": "Réinitialiser les filtres", "all": "Tout", "clearAll": "Tout effacer", "scanLibraryConfirm": "Êtes-vous sûr de vouloir lancer le scan de \"${title}\"?", @@ -804,7 +794,6 @@ "communityRating": "Note communautaire", "criticRating": "Note critique", "userRating": "Note utilisateur", - "lastPlayed": "Dernière lecture", "datePlayed": "Date de lecture", "playCount": "Lectures", "productionYear": "Année de production", @@ -818,9 +807,7 @@ "dateShared": "Date de partage", "latestEpisodeAirDate": "Dernière date de diffusion", "lastEpisodeDateAdded": "Date d'ajout du dernier épisode" - }, - "noItemsMatchFilters": "Aucun élément ne correspond aux filtres actifs", - "resetFilters": "Réinitialiser les filtres" + } }, "about": { "title": "À propos", @@ -830,7 +817,6 @@ "viewLicensesDescription": "Afficher les licences des bibliothèques tierces" }, "serverSelection": { - "allServerConnectionsFailed": "Connexion impossible à tous les serveurs. Vérifiez votre réseau.", "noServersFoundForAccount": "Aucun serveur trouvé pour ${username} (${email})", "failedToLoadServers": "Échec du chargement des serveurs: ${error}" }, @@ -893,7 +879,6 @@ "watchlistUpdateFailed": "Impossible de mettre à jour la liste de suivi", "notInLibrary": "Absent de votre bibliothèque", "inTheseLibraries": "Dans ces bibliothèques", - "availableOn": "Disponible sur ${server}", "checkingLibrary": "Vérification de votre bibliothèque...", "emptyTitle": "Rien ici pour l'instant", "emptyMessage": "Les rangées de ${source} apparaîtront ici une fois qu'elles auront du contenu.", @@ -907,6 +892,8 @@ "guide": "Guide", "noChannels": "Aucune chaîne disponible", "noDvr": "Aucun DVR configuré sur les serveurs", + "serverUnavailable": "Le serveur de TV en direct n’est pas disponible.", + "serverNotConnected": "Le serveur de TV en direct n’est pas connecté.", "noPrograms": "Aucune donnée de programme disponible", "liveStreamFailed": "Échec du direct", "unknownProgram": "Programme inconnu", @@ -942,7 +929,6 @@ "scheduledRecordings": "Programmés", "recordingRules": "Règles d'enregistrement", "noScheduledRecordings": "Aucun enregistrement programmé", - "noRecordingRules": "Aucune règle d'enregistrement", "manageRecording": "Gérer l'enregistrement", "cancelRecording": "Annuler l'enregistrement", "cancelRecordingTitle": "Annuler cet enregistrement ?", @@ -959,7 +945,6 @@ "recordingCancelled": "Enregistrement annulé", "recordingRuleDeleted": "Règle d'enregistrement supprimée", "processRecordingRules": "Réévaluer les règles", - "loadingRecordings": "Chargement des enregistrements...", "recordingInProgress": "Enregistrement en cours", "recordingsCount": "${count} programmés", "editRule": "Modifier la règle", @@ -973,7 +958,6 @@ "title": "Collections", "collection": "Collection", "empty": "La collection est vide", - "unknownLibrarySection": "Impossible de supprimer : section de bibliothèque inconnue", "deleteCollection": "Supprimer la collection", "deleteConfirm": "Supprimer \"${title}\" ? Action irréversible.", "deleted": "Collection supprimée", @@ -1013,6 +997,7 @@ "itemAdded": "Ajouté à la playlist", "itemRemoved": "Retiré de la playlist", "selectPlaylist": "Sélectionner une playlist", + "searchPlaylists": "Rechercher des playlists...", "errorCreating": "Échec de la création de playlist", "errorDeleting": "Échec de suppression de playlist", "errorLoading": "Échec de chargement de playlists", @@ -1102,15 +1087,15 @@ "participantResumed": "${name} a repris", "participantSeeked": "${name} a avancé", "participantBuffering": "${name} met en mémoire tampon", + "participantNeedsUpdate": "${name} utilise une ancienne version de l’app — synchronisation indisponible", + "resumingWithout": "Reprise sans ${name}", "waitingForParticipants": "En attente du chargement des autres...", + "waitingForName": "En attente de ${name}...", "recentRooms": "Salons récents", "renameRoom": "Renommer le salon", "removeRoom": "Supprimer", "guestSwitchUnavailable": "Impossible de changer — serveur indisponible pour la synchronisation", - "guestSwitchFailed": "Impossible de changer — contenu introuvable sur ce serveur", - "participantNeedsUpdate": "${name} utilise une ancienne version de l’app — synchronisation indisponible", - "resumingWithout": "Reprise sans ${name}", - "waitingForName": "En attente de ${name}..." + "guestSwitchFailed": "Impossible de changer — contenu introuvable sur ce serveur" }, "downloads": { "title": "Téléchargements", @@ -1155,7 +1140,6 @@ "customAmount": "Quantité personnalisée...", "includeSpecials": "Inclure les spéciaux", "howManyEpisodes": "Combien d'épisodes ?", - "itemsQueued": "${count} éléments mis en file d'attente", "keepSynced": "Garder synchronisé", "downloadOnce": "Télécharger une fois", "keepNUnwatched": "Garder ${count} non vus", @@ -1204,7 +1188,6 @@ "unknownDevice": "Appareil inconnu", "session": { "startingServer": "Démarrage du serveur distant...", - "failedToCreate": "Échec du démarrage du serveur distant :", "hostAddress": "Adresse de l'hôte", "connected": "Connecté", "serverRunning": "Serveur distant actif", @@ -1265,6 +1248,8 @@ "errors": { "noNetworkInterface": "Aucune interface réseau trouvée", "authenticationFailed": "Échec de l’authentification", + "serverStartFailed": "Impossible de démarrer le serveur distant : ${error}", + "commandFailed": "Impossible d’envoyer la commande à distance : ${error}", "joinTimedOut": "Délai dépassé lors de la connexion à la session", "failedToConnectAnyAddress": "Impossible de se connecter à une adresse", "connectionLostAfterAttempts": "Connexion perdue après ${attempts} tentatives", @@ -1538,7 +1523,6 @@ "quickConnectFailed": "Échec de Quick Connect : ${error}", "addPlexTitle": "Se connecter avec Plex", "pinExpired": "Le PIN a expiré avant la connexion. Veuillez réessayer.", - "duplicatePlexAccount": "Déjà connecté à Plex. Déconnectez-vous pour changer de compte.", "failedToRegisterAccount": "Échec de l'enregistrement du compte : ${error}", "enterJellyfinUrlError": "Saisissez l'URL de votre serveur Jellyfin", "addConnectionTitle": "Ajouter une connexion", diff --git a/lib/i18n/it.i18n.json b/lib/i18n/it.i18n.json index d473bd79..a168b005 100644 --- a/lib/i18n/it.i18n.json +++ b/lib/i18n/it.i18n.json @@ -3,7 +3,6 @@ "title": "Plezy" }, "auth": { - "signIn": "Accedi", "signInWithPlex": "Accedi con Plex", "showQRCode": "Mostra QR Code", "authenticate": "Autenticazione", @@ -56,10 +55,8 @@ "episodeNumberTitle": "Episodio ${number} - ${title}", "chapterNumber": "Capitolo ${number}", "reconnect": "Riconnetti", - "exit": "Esci", "viewAll": "Mostra tutto", "checkingNetwork": "Verifica rete...", - "refreshingServers": "Aggiornamento server...", "loadingServers": "Caricamento server...", "connectingToServers": "Connessione ai server...", "startingOfflineMode": "Avvio modalità offline...", @@ -139,6 +136,12 @@ "tvFullCardLayoutDescription": "Usa schede TV solo immagine con i nomi degli attori sovrapposti", "focusGlow": "Bagliore di selezione", "focusGlowDescription": "Mostra un leggero bagliore attorno alla scheda selezionata", + "visualEffects": "Effetti visivi", + "visualEffectsAuto": "Automatico", + "visualEffectsAutoDescription": "Riduci automaticamente gli effetti sui dispositivi a basso consumo", + "visualEffectsFull": "Completi", + "visualEffectsReduced": "Ridotti", + "visualEffectsReducedDescription": "Meno animazioni e immagini a risoluzione inferiore", "hideSpoilers": "Nascondi spoiler per episodi non visti", "hideSpoilersDescription": "Sfoca miniature e descrizioni degli episodi non visti", "playerBackend": "Motore di riproduzione", @@ -151,7 +154,7 @@ "bufferSizeAuto": "Auto (Consigliato)", "bufferSizeWarning": "${heap}MB di memoria disponibile. Un buffer di ${size}MB può influire sulla riproduzione.", "defaultQualityTitle": "Qualità predefinita", - "defaultQualityDescription": "Utilizzato all'avvio della riproduzione. Valori più bassi riducono la larghezza di banda.", + "musicQualityTitle": "Qualità musicale", "subtitleStyling": "Stile sottotitoli", "subtitleStylingDescription": "Personalizza l'aspetto dei sottotitoli", "smallSkipDuration": "Durata skip breve", @@ -245,10 +248,9 @@ "maxVolumePercent": "${percent}%", "discordRichPresence": "Discord Rich Presence", "discordRichPresenceDescription": "Mostra su Discord cosa stai guardando", - "trakt": "Trakt", - "traktDescription": "Sincronizza la cronologia di visione con Trakt", "services": "Servizi", "servicesDescription": "Connetti Trakt, MyAnimeList, Seerr e altro", + "manageLibrariesDescription": "Riordina e nascondi le librerie", "companionRemoteServer": "Server telecomando", "companionRemoteServerDescription": "Consenti ai dispositivi mobili nella tua rete di controllare questa app", "autoPip": "Picture-in-Picture automatico", @@ -311,7 +313,6 @@ "showNavBarLabels": "Mostra etichette barra di navigazione", "showNavBarLabelsDescription": "Mostra le etichette sotto le icone della barra di navigazione", "startupSection": "Sezione di avvio", - "startupSectionDescription": "Scegli quale sezione apre Plezy all'avvio", "liveTvDefaultFavorites": "Canali preferiti predefiniti", "liveTvDefaultFavoritesDescription": "Mostra solo i canali preferiti all'apertura della TV dal vivo", "display": "Schermo", @@ -322,14 +323,7 @@ "player": "Lettore", "subtitlesAndConfig": "Sottotitoli e configurazione", "seekAndTiming": "Ricerca e tempistica", - "behavior": "Comportamento", - "manageLibrariesDescription": "Riordina e nascondi le librerie", - "visualEffects": "Effetti visivi", - "visualEffectsAuto": "Automatico", - "visualEffectsAutoDescription": "Riduci automaticamente gli effetti sui dispositivi a basso consumo", - "visualEffectsFull": "Completi", - "visualEffectsReduced": "Ridotti", - "visualEffectsReducedDescription": "Meno animazioni e immagini a risoluzione inferiore" + "behavior": "Comportamento" }, "search": { "hint": "Cerca film. spettacoli, musica...", @@ -418,14 +412,11 @@ "rateSheet": { "title": "Valuta", "server": "Server", - "starValue": "${rating} / 5", - "scoreValue": "${score} / 10", - "setScore": "Imposta un punteggio", + "favorite": "Preferito", + "favorited": "Aggiunto ai preferiti", "saved": "Salvato", "notAvailable": "Nessuna corrispondenza trovata", - "noConnectedServices": "Connetti un servizio nelle Impostazioni per valutare lì.", - "favorite": "Preferito", - "favorited": "Aggiunto ai preferiti" + "noConnectedServices": "Connetti un servizio nelle Impostazioni per valutare lì." }, "accessibility": { "mediaCardMovie": "${title}, film", @@ -435,7 +426,15 @@ "mediaCardWatched": "visto", "mediaCardPartiallyWatched": "${percent} percento visto", "mediaCardUnwatched": "non visto", - "tapToPlay": "Tocca per riprodurre" + "tapToPlay": "Tocca per riprodurre", + "decrease": "Diminuisci", + "increase": "Aumenta", + "decreaseValue": "Diminuisci ${label}", + "increaseValue": "Aumenta ${label}", + "hue": "Tonalità", + "saturation": "Saturazione", + "brightness": "Luminosità", + "hexColor": "Colore esadecimale" }, "tooltips": { "shufflePlay": "Riproduzione casuale", @@ -481,13 +480,11 @@ "settingsButton": "Impostazioni di riproduzione", "tracksButton": "Audio e sottotitoli", "chaptersButton": "Capitoli", - "versionsButton": "Versioni video", "versionQualityButton": "Versione e qualità", "versionColumnHeader": "Versione", "qualityColumnHeader": "Qualità", "qualityOriginal": "Originale", "qualityPresetLabel": "${resolution}p ${bitrate} Mbps", - "qualityBandwidthEstimate": "~${bitrate} Mbps", "transcodeUnavailableFallback": "Transcodifica non disponibile — riproduzione in qualità originale", "pipButton": "Modalità Picture-in-Picture", "aspectRatioButton": "Proporzioni", @@ -530,12 +527,7 @@ "subtitleDownloadFailed": "Impossibile scaricare il sottotitolo", "searchLanguages": "Cerca lingue..." }, - "userStatus": { - "admin": "Admin", - "restricted": "Limitato", - "protected": "Protetto", - "current": "ATTUALE" - }, + "userStatus": {}, "messages": { "markedAsWatched": "Segna come visto", "markedAsUnwatched": "Segna come non visto", @@ -676,8 +668,7 @@ "pinProtectionOptional": "Protezione PIN (opzionale)", "pinExplain": "PIN a 4 cifre richiesto per cambiare profilo.", "continueButton": "Continua", - "pinsDontMatch": "I PIN non corrispondono", - "initializeServicesFailed": "Impossibile inizializzare i servizi profilo" + "pinsDontMatch": "I PIN non corrispondono" }, "connections": { "sectionTitle": "Connessioni", @@ -692,7 +683,6 @@ }, "discover": { "title": "Esplora", - "switchProfile": "Cambia profilo", "noContentAvailable": "Nessun contenuto disponibile", "addMediaToLibraries": "Aggiungi alcuni file multimediali alle tue librerie", "continueWatching": "Continua a guardare", @@ -721,8 +711,6 @@ "connectionFailed": "Impossibile connettersi al server multimediale", "failedToLoad": "Impossibile caricare ${context}: ${error}", "noClientAvailable": "Nessun client disponibile", - "authenticationFailed": "Autenticazione fallita: ${error}", - "couldNotLaunchUrl": "Impossibile avviare URL di autenticazione", "pleaseEnterToken": "Inserisci token", "invalidToken": "Token non valido", "failedToVerifyToken": "Verifica token fallita: ${error}", @@ -749,6 +737,8 @@ "allLibrariesHidden": "Tutte le librerie sono nascoste", "hiddenLibrariesCount": "Librerie nascoste (${count})", "thisLibraryIsEmpty": "Questa libreria è vuota", + "noItemsMatchFilters": "Nessun elemento corrisponde ai filtri attivi", + "resetFilters": "Reimposta filtri", "all": "Tutto", "clearAll": "Cancella tutto", "scanLibraryConfirm": "Sei sicuro di voler scansionare \"${title}\"?", @@ -804,7 +794,6 @@ "communityRating": "Valutazione della community", "criticRating": "Valutazione critica", "userRating": "Valutazione utente", - "lastPlayed": "Ultima riproduzione", "datePlayed": "Data di riproduzione", "playCount": "Riproduzioni", "productionYear": "Anno di produzione", @@ -818,9 +807,7 @@ "dateShared": "Data di condivisione", "latestEpisodeAirDate": "Data ultima messa in onda", "lastEpisodeDateAdded": "Data aggiunta ultimo episodio" - }, - "noItemsMatchFilters": "Nessun elemento corrisponde ai filtri attivi", - "resetFilters": "Reimposta filtri" + } }, "about": { "title": "Informazioni", @@ -830,7 +817,6 @@ "viewLicensesDescription": "Visualizza le licenze delle librerie di terze parti" }, "serverSelection": { - "allServerConnectionsFailed": "Impossibile connettersi ai server. Controlla la rete.", "noServersFoundForAccount": "Nessun server trovato per ${username} (${email})", "failedToLoadServers": "Impossibile caricare i server: ${error}" }, @@ -876,10 +862,6 @@ "upcomingMovies": "Film in arrivo", "upcomingShows": "Serie TV in arrivo" }, - "searchHint": "Cerca su ${source}", - "searchEmpty": "Nessun risultato per \"${query}\"", - "searchPrompt": "Cerca film e serie TV su ${source}.", - "searchFailed": "Ricerca fallita. Controlla la connessione e riprova.", "status": { "airing": "In onda", "ended": "Conclusa", @@ -897,16 +879,21 @@ "watchlistUpdateFailed": "Impossibile aggiornare la Watchlist", "notInLibrary": "Non è nella tua libreria", "inTheseLibraries": "In queste librerie", - "availableOn": "Disponibile su ${server}", "checkingLibrary": "Controllo della tua libreria...", "emptyTitle": "Ancora niente qui", - "emptyMessage": "Le righe da ${source} appariranno qui una volta che avranno dei contenuti." + "emptyMessage": "Le righe da ${source} appariranno qui una volta che avranno dei contenuti.", + "searchHint": "Cerca su ${source}", + "searchEmpty": "Nessun risultato per \"${query}\"", + "searchPrompt": "Cerca film e serie TV su ${source}.", + "searchFailed": "Ricerca fallita. Controlla la connessione e riprova." }, "liveTv": { "title": "TV in diretta", "guide": "Guida", "noChannels": "Nessun canale disponibile", "noDvr": "Nessun DVR configurato su nessun server", + "serverUnavailable": "Il server TV in diretta non è disponibile.", + "serverNotConnected": "Il server TV in diretta non è connesso.", "noPrograms": "Nessun dato di programma disponibile", "liveStreamFailed": "Streaming live non riuscito", "unknownProgram": "Programma sconosciuto", @@ -942,7 +929,6 @@ "scheduledRecordings": "Programmate", "recordingRules": "Regole di registrazione", "noScheduledRecordings": "Nessuna registrazione programmata", - "noRecordingRules": "Nessuna regola di registrazione", "manageRecording": "Gestisci registrazione", "cancelRecording": "Annulla registrazione", "cancelRecordingTitle": "Annullare questa registrazione?", @@ -959,7 +945,6 @@ "recordingCancelled": "Registrazione annullata", "recordingRuleDeleted": "Regola di registrazione eliminata", "processRecordingRules": "Rivaluta regole", - "loadingRecordings": "Caricamento registrazioni...", "recordingInProgress": "Registrazione in corso", "recordingsCount": "${count} programmate", "editRule": "Modifica regola", @@ -973,7 +958,6 @@ "title": "Raccolte", "collection": "Raccolta", "empty": "La raccolta è vuota", - "unknownLibrarySection": "Impossibile eliminare: sezione libreria sconosciuta", "deleteCollection": "Elimina raccolta", "deleteConfirm": "Eliminare \"${title}\"? Non si può annullare.", "deleted": "Raccolta eliminata", @@ -1013,6 +997,7 @@ "itemAdded": "Aggiunto alla playlist", "itemRemoved": "Rimosso dalla playlist", "selectPlaylist": "Seleziona playlist", + "searchPlaylists": "Cerca playlist...", "errorCreating": "Errore durante la creazione della playlist", "errorDeleting": "Errore durante l'eliminazione della playlist", "errorLoading": "Errore durante il caricamento delle playlist", @@ -1102,15 +1087,15 @@ "participantResumed": "${name} ha ripreso", "participantSeeked": "${name} ha cercato", "participantBuffering": "${name} sta caricando", + "participantNeedsUpdate": "${name} usa una versione precedente dell'app — sincronizzazione non disponibile", + "resumingWithout": "Ripresa senza ${name}", "waitingForParticipants": "In attesa che gli altri carichino...", + "waitingForName": "In attesa di ${name}...", "recentRooms": "Stanze recenti", "renameRoom": "Rinomina stanza", "removeRoom": "Rimuovi", "guestSwitchUnavailable": "Impossibile cambiare — server non disponibile per la sincronizzazione", - "guestSwitchFailed": "Impossibile cambiare — contenuto non trovato su questo server", - "participantNeedsUpdate": "${name} usa una versione precedente dell'app — sincronizzazione non disponibile", - "resumingWithout": "Ripresa senza ${name}", - "waitingForName": "In attesa di ${name}..." + "guestSwitchFailed": "Impossibile cambiare — contenuto non trovato su questo server" }, "downloads": { "title": "Download", @@ -1155,7 +1140,6 @@ "customAmount": "Quantità personalizzata...", "includeSpecials": "Includi gli speciali", "howManyEpisodes": "Quanti episodi?", - "itemsQueued": "${count} elementi in coda per il download", "keepSynced": "Mantieni sincronizzato", "downloadOnce": "Scarica una volta", "keepNUnwatched": "Mantieni ${count} non visti", @@ -1204,7 +1188,6 @@ "unknownDevice": "Dispositivo sconosciuto", "session": { "startingServer": "Avvio del server remoto...", - "failedToCreate": "Impossibile avviare il server remoto:", "hostAddress": "Indirizzo host", "connected": "Connesso", "serverRunning": "Server remoto attivo", @@ -1265,6 +1248,8 @@ "errors": { "noNetworkInterface": "Nessuna interfaccia di rete trovata", "authenticationFailed": "Autenticazione non riuscita", + "serverStartFailed": "Impossibile avviare il server remoto: ${error}", + "commandFailed": "Impossibile inviare il comando remoto: ${error}", "joinTimedOut": "Tempo scaduto durante l’accesso alla sessione", "failedToConnectAnyAddress": "Impossibile connettersi a qualsiasi indirizzo", "connectionLostAfterAttempts": "Connessione persa dopo ${attempts} tentativi", @@ -1538,7 +1523,6 @@ "quickConnectFailed": "Quick Connect non riuscito: ${error}", "addPlexTitle": "Accedi con Plex", "pinExpired": "PIN scaduto prima dell'accesso. Riprova.", - "duplicatePlexAccount": "Accesso a Plex già effettuato. Esci per cambiare account.", "failedToRegisterAccount": "Registrazione account non riuscita: ${error}", "enterJellyfinUrlError": "Inserisci l'URL del tuo server Jellyfin", "addConnectionTitle": "Aggiungi connessione", diff --git a/lib/i18n/ja.i18n.json b/lib/i18n/ja.i18n.json index 616da2cb..4158914c 100644 --- a/lib/i18n/ja.i18n.json +++ b/lib/i18n/ja.i18n.json @@ -3,7 +3,6 @@ "title": "Plezy" }, "auth": { - "signIn": "サインイン", "signInWithPlex": "Plexでサインイン", "showQRCode": "QRコードを表示", "authenticate": "認証", @@ -56,10 +55,8 @@ "episodeNumberTitle": "エピソード${number} - ${title}", "chapterNumber": "チャプター${number}", "reconnect": "再接続", - "exit": "終了", "viewAll": "すべて表示", "checkingNetwork": "ネットワークを確認中...", - "refreshingServers": "サーバーを更新中...", "loadingServers": "サーバーを読み込み中...", "connectingToServers": "サーバーに接続中...", "startingOfflineMode": "オフラインモードを開始中...", @@ -139,6 +136,12 @@ "tvFullCardLayoutDescription": "TVカードを画像のみで表示し、俳優名を重ねて表示します", "focusGlow": "フォーカス時の光彩", "focusGlowDescription": "フォーカス中のカードの周りに柔らかい光彩を表示します", + "visualEffects": "視覚効果", + "visualEffectsAuto": "自動", + "visualEffectsAutoDescription": "低性能なデバイスでは効果を自動的に減らします", + "visualEffectsFull": "フル", + "visualEffectsReduced": "軽減", + "visualEffectsReducedDescription": "アニメーションを減らし、低解像度のアートワークを使用します", "hideSpoilers": "未視聴エピソードのネタバレを非表示", "hideSpoilersDescription": "未視聴エピソードのサムネイルと説明をぼかします", "playerBackend": "プレーヤーバックエンド", @@ -151,7 +154,7 @@ "bufferSizeAuto": "自動(推奨)", "bufferSizeWarning": "${heap}MBのメモリが利用可能です。${size}MBのバッファは再生に影響する可能性があります。", "defaultQualityTitle": "デフォルト画質", - "defaultQualityDescription": "再生開始時に使用。低い値ほど帯域幅が削減されます。", + "musicQualityTitle": "音楽の音質", "subtitleStyling": "字幕スタイル", "subtitleStylingDescription": "字幕の外観をカスタマイズ", "smallSkipDuration": "短いスキップ時間", @@ -245,10 +248,9 @@ "maxVolumePercent": "${percent}%", "discordRichPresence": "Discord Rich Presence", "discordRichPresenceDescription": "Discordで視聴中の内容を表示", - "trakt": "Trakt", - "traktDescription": "視聴履歴を Trakt と同期", "services": "サービス", "servicesDescription": "Trakt、MyAnimeList、Seerr などを接続", + "manageLibrariesDescription": "ライブラリを並べ替えたり非表示にしたりできます", "companionRemoteServer": "コンパニオンリモートサーバー", "companionRemoteServerDescription": "ネットワーク上のモバイルデバイスからこのアプリを操作できるようにする", "autoPip": "自動ピクチャーインピクチャー", @@ -311,7 +313,6 @@ "showNavBarLabels": "ナビゲーションバーラベルを表示", "showNavBarLabelsDescription": "ナビゲーションバーアイコンの下にテキストラベルを表示", "startupSection": "起動時のセクション", - "startupSectionDescription": "起動時に Plezy が開くセクションを選択します", "liveTvDefaultFavorites": "お気に入りチャンネルをデフォルトに", "liveTvDefaultFavoritesDescription": "ライブTV を開いたときにお気に入りチャンネルのみ表示", "display": "ディスプレイ", @@ -322,14 +323,7 @@ "player": "プレーヤー", "subtitlesAndConfig": "字幕と設定", "seekAndTiming": "シークとタイミング", - "behavior": "動作", - "manageLibrariesDescription": "ライブラリを並べ替えたり非表示にしたりできます", - "visualEffects": "視覚効果", - "visualEffectsAuto": "自動", - "visualEffectsAutoDescription": "低性能なデバイスでは効果を自動的に減らします", - "visualEffectsFull": "フル", - "visualEffectsReduced": "軽減", - "visualEffectsReducedDescription": "アニメーションを減らし、低解像度のアートワークを使用します" + "behavior": "動作" }, "search": { "hint": "映画、番組、音楽を検索...", @@ -418,14 +412,11 @@ "rateSheet": { "title": "評価", "server": "サーバー", - "starValue": "${rating} / 5", - "scoreValue": "${score} / 10", - "setScore": "スコアを設定", + "favorite": "お気に入り", + "favorited": "お気に入りに追加済み", "saved": "保存済み", "notAvailable": "一致なし", - "noConnectedServices": "評価するには、設定でサービスを接続してください。", - "favorite": "お気に入り", - "favorited": "お気に入りに追加済み" + "noConnectedServices": "評価するには、設定でサービスを接続してください。" }, "accessibility": { "mediaCardMovie": "${title}、映画", @@ -435,7 +426,15 @@ "mediaCardWatched": "視聴済み", "mediaCardPartiallyWatched": "${percent}パーセント視聴済み", "mediaCardUnwatched": "未視聴", - "tapToPlay": "タップして再生" + "tapToPlay": "タップして再生", + "decrease": "下げる", + "increase": "上げる", + "decreaseValue": "${label}を下げる", + "increaseValue": "${label}を上げる", + "hue": "色相", + "saturation": "彩度", + "brightness": "明るさ", + "hexColor": "16進カラー" }, "tooltips": { "shufflePlay": "シャッフル再生", @@ -481,13 +480,11 @@ "settingsButton": "再生設定", "tracksButton": "音声と字幕", "chaptersButton": "チャプター", - "versionsButton": "動画バージョン", "versionQualityButton": "バージョンと画質", "versionColumnHeader": "バージョン", "qualityColumnHeader": "画質", "qualityOriginal": "オリジナル", "qualityPresetLabel": "${resolution}p ${bitrate} Mbps", - "qualityBandwidthEstimate": "~${bitrate} Mbps", "transcodeUnavailableFallback": "トランスコードは利用できません — オリジナル画質で再生中", "pipButton": "ピクチャーインピクチャーモード", "aspectRatioButton": "アスペクト比", @@ -530,12 +527,7 @@ "subtitleDownloadFailed": "字幕のダウンロードに失敗しました", "searchLanguages": "言語を検索..." }, - "userStatus": { - "admin": "管理者", - "restricted": "制限付き", - "protected": "保護済み", - "current": "現在" - }, + "userStatus": {}, "messages": { "markedAsWatched": "視聴済みにしました", "markedAsUnwatched": "未視聴にしました", @@ -676,8 +668,7 @@ "pinProtectionOptional": "PIN保護(オプション)", "pinExplain": "プロフィール切り替えには4桁のPINが必要です。", "continueButton": "続ける", - "pinsDontMatch": "PINが一致しません", - "initializeServicesFailed": "プロフィールサービスの初期化に失敗しました" + "pinsDontMatch": "PINが一致しません" }, "connections": { "sectionTitle": "接続", @@ -692,7 +683,6 @@ }, "discover": { "title": "探す", - "switchProfile": "プロフィール切替", "noContentAvailable": "コンテンツがありません", "addMediaToLibraries": "ライブラリにメディアを追加してください", "continueWatching": "視聴を続ける", @@ -721,8 +711,6 @@ "connectionFailed": "メディアサーバーに接続できません", "failedToLoad": "${context}の読み込みに失敗しました: ${error}", "noClientAvailable": "クライアントが利用できません", - "authenticationFailed": "認証に失敗しました: ${error}", - "couldNotLaunchUrl": "認証URLを開けませんでした", "pleaseEnterToken": "トークンを入力してください", "invalidToken": "無効なトークン", "failedToVerifyToken": "トークンの検証に失敗しました: ${error}", @@ -749,6 +737,8 @@ "allLibrariesHidden": "すべてのライブラリが非表示です", "hiddenLibrariesCount": "非表示のライブラリ (${count})", "thisLibraryIsEmpty": "このライブラリは空です", + "noItemsMatchFilters": "有効なフィルターに一致する項目はありません", + "resetFilters": "フィルターをリセット", "all": "すべて", "clearAll": "すべてクリア", "scanLibraryConfirm": "\"${title}\"をスキャンしてもよろしいですか?", @@ -804,7 +794,6 @@ "communityRating": "コミュニティ評価", "criticRating": "批評家評価", "userRating": "ユーザー評価", - "lastPlayed": "最終再生", "datePlayed": "再生日", "playCount": "再生回数", "productionYear": "製作年", @@ -818,9 +807,7 @@ "dateShared": "共有日", "latestEpisodeAirDate": "最新エピソード放送日", "lastEpisodeDateAdded": "最新エピソード追加日" - }, - "noItemsMatchFilters": "有効なフィルターに一致する項目はありません", - "resetFilters": "フィルターをリセット" + } }, "about": { "title": "アプリについて", @@ -830,7 +817,6 @@ "viewLicensesDescription": "サードパーティライブラリのライセンスを表示" }, "serverSelection": { - "allServerConnectionsFailed": "どのサーバーにも接続できませんでした。ネットワークを確認してください。", "noServersFoundForAccount": "${username} (${email})のサーバーが見つかりません", "failedToLoadServers": "サーバーの読み込みに失敗しました: ${error}" }, @@ -876,10 +862,6 @@ "upcomingMovies": "近日公開の映画", "upcomingShows": "放送予定の番組" }, - "searchHint": "${source} で検索", - "searchEmpty": "「${query}」の結果が見つかりません", - "searchPrompt": "${source} で映画やテレビ番組を検索します。", - "searchFailed": "検索に失敗しました。接続を確認してもう一度お試しください。", "status": { "airing": "放送中", "ended": "放送終了", @@ -896,16 +878,21 @@ "watchlistUpdateFailed": "ウォッチリストを更新できませんでした", "notInLibrary": "ライブラリにありません", "inTheseLibraries": "これらのライブラリにあります", - "availableOn": "${server}で視聴可能", "checkingLibrary": "ライブラリを確認中...", "emptyTitle": "まだ何もありません", - "emptyMessage": "${source}にコンテンツが追加されると、ここに表示されます。" + "emptyMessage": "${source}にコンテンツが追加されると、ここに表示されます。", + "searchHint": "${source} で検索", + "searchEmpty": "「${query}」の結果が見つかりません", + "searchPrompt": "${source} で映画やテレビ番組を検索します。", + "searchFailed": "検索に失敗しました。接続を確認してもう一度お試しください。" }, "liveTv": { "title": "ライブTV", "guide": "番組表", "noChannels": "チャンネルがありません", "noDvr": "どのサーバーにもDVRが設定されていません", + "serverUnavailable": "ライブTVサーバーを利用できません。", + "serverNotConnected": "ライブTVサーバーに接続されていません。", "noPrograms": "番組データがありません", "liveStreamFailed": "ライブストリームに失敗しました", "unknownProgram": "不明な番組", @@ -941,7 +928,6 @@ "scheduledRecordings": "予約", "recordingRules": "録画ルール", "noScheduledRecordings": "予約された録画はありません", - "noRecordingRules": "録画ルールはまだありません", "manageRecording": "録画を管理", "cancelRecording": "録画をキャンセル", "cancelRecordingTitle": "この録画をキャンセルしますか?", @@ -958,7 +944,6 @@ "recordingCancelled": "録画をキャンセルしました", "recordingRuleDeleted": "録画ルールを削除しました", "processRecordingRules": "ルールを再評価", - "loadingRecordings": "録画を読み込み中...", "recordingInProgress": "録画中", "recordingsCount": "${count} 件予約済み", "editRule": "ルールを編集", @@ -972,7 +957,6 @@ "title": "コレクション", "collection": "コレクション", "empty": "コレクションは空です", - "unknownLibrarySection": "削除できません:不明なライブラリセクション", "deleteCollection": "コレクションを削除", "deleteConfirm": "「${title}」を削除しますか?元に戻せません。", "deleted": "コレクションを削除しました", @@ -1012,6 +996,7 @@ "itemAdded": "プレイリストに追加しました", "itemRemoved": "プレイリストから削除しました", "selectPlaylist": "プレイリストを選択", + "searchPlaylists": "プレイリストを検索...", "errorCreating": "プレイリストの作成に失敗しました", "errorDeleting": "プレイリストの削除に失敗しました", "errorLoading": "プレイリストの読み込みに失敗しました", @@ -1100,15 +1085,15 @@ "participantResumed": "${name}が再開しました", "participantSeeked": "${name}がシークしました", "participantBuffering": "${name}がバッファリング中", + "participantNeedsUpdate": "${name} は古いバージョンのアプリを使用しているため、同期できません", + "resumingWithout": "${name} なしで再開", "waitingForParticipants": "他の参加者の読み込みを待っています...", + "waitingForName": "${name}を待っています...", "recentRooms": "最近のルーム", "renameRoom": "ルーム名を変更", "removeRoom": "削除", "guestSwitchUnavailable": "切り替えできません — サーバーが同期できません", - "guestSwitchFailed": "切り替えできません — このサーバーにコンテンツが見つかりません", - "participantNeedsUpdate": "${name} は古いバージョンのアプリを使用しているため、同期できません", - "resumingWithout": "${name} なしで再開", - "waitingForName": "${name}を待っています..." + "guestSwitchFailed": "切り替えできません — このサーバーにコンテンツが見つかりません" }, "downloads": { "title": "ダウンロード", @@ -1153,7 +1138,6 @@ "customAmount": "数を指定...", "includeSpecials": "スペシャルを含める", "howManyEpisodes": "何エピソード?", - "itemsQueued": "${count}件をダウンロードキューに追加", "keepSynced": "同期を維持", "downloadOnce": "一度だけダウンロード", "keepNUnwatched": "未視聴を${count}件保持", @@ -1202,7 +1186,6 @@ "unknownDevice": "不明なデバイス", "session": { "startingServer": "リモートサーバーを起動中...", - "failedToCreate": "リモートサーバーの起動に失敗しました:", "hostAddress": "ホストアドレス", "connected": "接続済み", "serverRunning": "リモートサーバー稼働中", @@ -1263,6 +1246,8 @@ "errors": { "noNetworkInterface": "ネットワークインターフェースが見つかりません", "authenticationFailed": "認証に失敗しました", + "serverStartFailed": "リモートサーバーを起動できませんでした: ${error}", + "commandFailed": "リモートコマンドを送信できませんでした: ${error}", "joinTimedOut": "セッション参加がタイムアウトしました", "failedToConnectAnyAddress": "どのアドレスにも接続できませんでした", "connectionLostAfterAttempts": "${attempts}回試行後に接続が切断されました", @@ -1536,7 +1521,6 @@ "quickConnectFailed": "Quick Connectに失敗しました: ${error}", "addPlexTitle": "Plexでサインイン", "pinExpired": "サインイン前にPINの有効期限が切れました。もう一度お試しください。", - "duplicatePlexAccount": "すでにPlexにサインインしています。アカウントを切り替えるにはサインアウトしてください。", "failedToRegisterAccount": "アカウントの登録に失敗しました: ${error}", "enterJellyfinUrlError": "JellyfinサーバーのURLを入力してください", "addConnectionTitle": "接続を追加", diff --git a/lib/i18n/ko.i18n.json b/lib/i18n/ko.i18n.json index 986dccc6..e87ca171 100644 --- a/lib/i18n/ko.i18n.json +++ b/lib/i18n/ko.i18n.json @@ -3,7 +3,6 @@ "title": "Plezy" }, "auth": { - "signIn": "로그인", "signInWithPlex": "Plex 계정으로 로그인", "showQRCode": "QR 코드", "authenticate": "인증", @@ -56,10 +55,8 @@ "episodeNumberTitle": "${number}화 - ${title}", "chapterNumber": "챕터 ${number}", "reconnect": "다시 연결", - "exit": "종료", "viewAll": "모두 보기", "checkingNetwork": "네트워크 확인 중...", - "refreshingServers": "서버 새로고침 중...", "loadingServers": "서버 로딩 중...", "connectingToServers": "서버 연결 중...", "startingOfflineMode": "오프라인 모드 시작 중...", @@ -157,7 +154,7 @@ "bufferSizeAuto": "자동 (권장)", "bufferSizeWarning": "${heap}MB 메모리를 사용할 수 있습니다. ${size}MB 버퍼는 재생에 영향을 줄 수 있습니다.", "defaultQualityTitle": "기본 화질", - "defaultQualityDescription": "재생 시작 시 사용됩니다. 낮은 값은 대역폭을 줄입니다.", + "musicQualityTitle": "음악 음질", "subtitleStyling": "자막 스타일", "subtitleStylingDescription": "자막의 외형을 사용자 설정", "smallSkipDuration": "짧은 건너뛰기 시간", @@ -251,8 +248,6 @@ "maxVolumePercent": "${percent}%", "discordRichPresence": "Discord Rich Presence", "discordRichPresenceDescription": "Discord에서 시청 중인 콘텐츠 표시", - "trakt": "Trakt", - "traktDescription": "Trakt와 시청 기록 동기화", "services": "서비스", "servicesDescription": "Trakt, MyAnimeList, Seerr 등 연결", "manageLibrariesDescription": "라이브러리 순서를 변경하거나 숨깁니다", @@ -318,7 +313,6 @@ "showNavBarLabels": "내비게이션 바 라벨 표시", "showNavBarLabelsDescription": "내비게이션 바 아이콘 아래에 텍스트 라벨을 표시합니다", "startupSection": "시작 섹션", - "startupSectionDescription": "Plezy 실행 시 열릴 섹션을 선택합니다", "liveTvDefaultFavorites": "즐겨찾기 채널 기본 설정", "liveTvDefaultFavoritesDescription": "라이브 TV를 열 때 즐겨찾기 채널만 표시", "display": "디스플레이", @@ -418,9 +412,6 @@ "rateSheet": { "title": "평가", "server": "서버", - "starValue": "${rating} / 5", - "scoreValue": "${score} / 10", - "setScore": "점수 설정", "favorite": "즐겨찾기", "favorited": "즐겨찾기됨", "saved": "저장됨", @@ -435,7 +426,15 @@ "mediaCardWatched": "시청 완료", "mediaCardPartiallyWatched": "${percent} 퍼센트 시청 완료", "mediaCardUnwatched": "미시청", - "tapToPlay": "터치 하여 재생" + "tapToPlay": "터치 하여 재생", + "decrease": "낮추기", + "increase": "높이기", + "decreaseValue": "${label} 낮추기", + "increaseValue": "${label} 높이기", + "hue": "색조", + "saturation": "채도", + "brightness": "밝기", + "hexColor": "16진수 색상" }, "tooltips": { "shufflePlay": "무작위 재생", @@ -481,13 +480,11 @@ "settingsButton": "재생 설정", "tracksButton": "오디오 및 자막", "chaptersButton": "챕터", - "versionsButton": "동영상 버전", "versionQualityButton": "버전 및 화질", "versionColumnHeader": "버전", "qualityColumnHeader": "화질", "qualityOriginal": "원본", "qualityPresetLabel": "${resolution}p ${bitrate} Mbps", - "qualityBandwidthEstimate": "~${bitrate} Mbps", "transcodeUnavailableFallback": "트랜스코딩을 사용할 수 없음 — 원본 화질로 재생", "pipButton": "픽처 인 픽처 모드", "aspectRatioButton": "화면비율", @@ -530,12 +527,7 @@ "subtitleDownloadFailed": "자막 다운로드에 실패했습니다", "searchLanguages": "언어 검색..." }, - "userStatus": { - "admin": "관리자", - "restricted": "제한됨", - "protected": "보호됨", - "current": "현재" - }, + "userStatus": {}, "messages": { "markedAsWatched": "시청 완료로 표시됨", "markedAsUnwatched": "시청 안 함으로 표시됨", @@ -676,8 +668,7 @@ "pinProtectionOptional": "PIN 보호 (선택 사항)", "pinExplain": "프로필 전환에는 4자리 PIN이 필요합니다.", "continueButton": "계속", - "pinsDontMatch": "PIN이 일치하지 않습니다", - "initializeServicesFailed": "프로필 서비스를 초기화하지 못했습니다" + "pinsDontMatch": "PIN이 일치하지 않습니다" }, "connections": { "sectionTitle": "연결", @@ -692,7 +683,6 @@ }, "discover": { "title": "발견", - "switchProfile": "사용자 전환", "noContentAvailable": "사용 가능한 콘텐츠가 없습니다", "addMediaToLibraries": "미디어 라이브러리에 미디어를 추가해 주세요", "continueWatching": "계속 시청", @@ -721,8 +711,6 @@ "connectionFailed": "미디어 서버에 연결할 수 없습니다", "failedToLoad": "${context} 로드 실패: ${error}", "noClientAvailable": "사용 가능한 클라이언트가 없습니다", - "authenticationFailed": "인증 실패: ${error}", - "couldNotLaunchUrl": "인증 URL을 열 수 없습니다", "pleaseEnterToken": "토큰을 입력해 주세요", "invalidToken": "토큰이 유효하지 않습니다", "failedToVerifyToken": "토큰을 확인할 수 없습니다: ${error}", @@ -806,7 +794,6 @@ "communityRating": "커뮤니티 평점", "criticRating": "평론가 평점", "userRating": "사용자 평점", - "lastPlayed": "마지막 재생", "datePlayed": "재생일", "playCount": "재생 횟수", "productionYear": "제작 연도", @@ -830,7 +817,6 @@ "viewLicensesDescription": "타사 라이브러리 라이선스 보기" }, "serverSelection": { - "allServerConnectionsFailed": "서버에 연결할 수 없습니다. 네트워크를 확인하세요.", "noServersFoundForAccount": "${username} (${email})의 서버를 찾을 수 없습니다.", "failedToLoadServers": "서버를 로드할 수 없습니다: ${error}" }, @@ -876,10 +862,6 @@ "upcomingMovies": "개봉 예정 영화", "upcomingShows": "방영 예정 TV 프로그램" }, - "searchHint": "${source}에서 검색", - "searchEmpty": "「${query}」에 대한 결과가 없습니다", - "searchPrompt": "${source}에서 영화와 TV 프로그램을 검색하세요.", - "searchFailed": "검색에 실패했습니다. 연결을 확인하고 다시 시도하세요.", "status": { "airing": "방영 중", "ended": "종영", @@ -896,16 +878,21 @@ "watchlistUpdateFailed": "관심 목록을 업데이트하지 못했습니다", "notInLibrary": "라이브러리에 없음", "inTheseLibraries": "이 라이브러리에 있음", - "availableOn": "${server}에서 이용 가능", "checkingLibrary": "라이브러리 확인 중...", "emptyTitle": "아직 아무것도 없습니다", - "emptyMessage": "${source}에 콘텐츠가 추가되면 여기에 표시됩니다." + "emptyMessage": "${source}에 콘텐츠가 추가되면 여기에 표시됩니다.", + "searchHint": "${source}에서 검색", + "searchEmpty": "「${query}」에 대한 결과가 없습니다", + "searchPrompt": "${source}에서 영화와 TV 프로그램을 검색하세요.", + "searchFailed": "검색에 실패했습니다. 연결을 확인하고 다시 시도하세요." }, "liveTv": { "title": "실시간 TV", "guide": "편성표", "noChannels": "사용 가능한 채널이 없습니다", "noDvr": "서버에 DVR이 구성되어 있지 않습니다", + "serverUnavailable": "라이브 TV 서버를 사용할 수 없습니다.", + "serverNotConnected": "라이브 TV 서버에 연결되어 있지 않습니다.", "noPrograms": "프로그램 데이터가 없습니다", "liveStreamFailed": "라이브 스트림 실패", "unknownProgram": "알 수 없는 프로그램", @@ -941,7 +928,6 @@ "scheduledRecordings": "예약됨", "recordingRules": "녹화 규칙", "noScheduledRecordings": "예약된 녹화 없음", - "noRecordingRules": "녹화 규칙 없음", "manageRecording": "녹화 관리", "cancelRecording": "녹화 취소", "cancelRecordingTitle": "이 녹화를 취소할까요?", @@ -958,7 +944,6 @@ "recordingCancelled": "녹화 취소됨", "recordingRuleDeleted": "녹화 규칙 삭제됨", "processRecordingRules": "규칙 재평가", - "loadingRecordings": "녹화 불러오는 중...", "recordingInProgress": "녹화 중", "recordingsCount": "${count}개 예약됨", "editRule": "규칙 편집", @@ -972,7 +957,6 @@ "title": "컬렉션", "collection": "컬렉션", "empty": "컬렉션이 비어 있습니다", - "unknownLibrarySection": "삭제할 수 없습니다: 알 수 없는 미디어 라이브러리 섹션입니다", "deleteCollection": "컬렉션 삭제", "deleteConfirm": "\"${title}\"을(를) 삭제할까요? 되돌릴 수 없습니다.", "deleted": "컬렉션 삭제됨", @@ -1012,6 +996,7 @@ "itemAdded": "재생 목록에 추가 되었습니다", "itemRemoved": "재생 목록에서 제거됨", "selectPlaylist": "재생 목록 선택", + "searchPlaylists": "재생 목록 검색...", "errorCreating": "재생 목록 생성 실패", "errorDeleting": "재생 목록 삭제 실패", "errorLoading": "재생 목록 로드 실패", @@ -1153,7 +1138,6 @@ "customAmount": "직접 입력...", "includeSpecials": "스페셜 포함", "howManyEpisodes": "몇 개의 에피소드?", - "itemsQueued": "${count}개 항목이 다운로드 대기열에 추가됨", "keepSynced": "동기화 유지", "downloadOnce": "한 번만 다운로드", "keepNUnwatched": "미시청 ${count}개 유지", @@ -1202,7 +1186,6 @@ "unknownDevice": "알 수 없는 기기", "session": { "startingServer": "원격 서버 시작 중...", - "failedToCreate": "원격 서버를 시작하지 못했습니다:", "hostAddress": "호스트 주소", "connected": "연결됨", "serverRunning": "원격 서버 활성", @@ -1263,6 +1246,8 @@ "errors": { "noNetworkInterface": "네트워크 인터페이스를 찾을 수 없습니다", "authenticationFailed": "인증 실패", + "serverStartFailed": "원격 서버를 시작하지 못했습니다: ${error}", + "commandFailed": "원격 명령을 보내지 못했습니다: ${error}", "joinTimedOut": "세션 참가 시간이 초과되었습니다", "failedToConnectAnyAddress": "어떤 주소에도 연결하지 못했습니다", "connectionLostAfterAttempts": "${attempts}회 시도 후 연결이 끊어졌습니다", @@ -1536,7 +1521,6 @@ "quickConnectFailed": "Quick Connect 실패: ${error}", "addPlexTitle": "Plex로 로그인", "pinExpired": "로그인 전에 PIN이 만료되었습니다. 다시 시도하세요.", - "duplicatePlexAccount": "이미 Plex에 로그인되어 있습니다. 계정을 전환하려면 로그아웃하세요.", "failedToRegisterAccount": "계정 등록 실패: ${error}", "enterJellyfinUrlError": "Jellyfin 서버 URL을 입력하세요", "addConnectionTitle": "연결 추가", diff --git a/lib/i18n/nb.i18n.json b/lib/i18n/nb.i18n.json index fc4e07d6..a02e565d 100644 --- a/lib/i18n/nb.i18n.json +++ b/lib/i18n/nb.i18n.json @@ -3,7 +3,6 @@ "title": "Plezy" }, "auth": { - "signIn": "Logg på", "signInWithPlex": "Logg inn med Plex", "showQRCode": "Vis QR-kode", "authenticate": "Autentiser", @@ -56,10 +55,8 @@ "episodeNumberTitle": "Episode ${number} - ${title}", "chapterNumber": "Kapittel ${number}", "reconnect": "Koble til på nytt", - "exit": "Avslutt", "viewAll": "Vis alle", "checkingNetwork": "Sjekker nettverk...", - "refreshingServers": "Oppdaterer servere...", "loadingServers": "Laster servere...", "connectingToServers": "Kobler til servere...", "startingOfflineMode": "Starter frakoblet modus...", @@ -139,6 +136,12 @@ "tvFullCardLayoutDescription": "Bruk bildebaserte TV-kort med skuespillernavn lagt over", "focusGlow": "Fokusglød", "focusGlowDescription": "Vis en myk glød rundt kortet i fokus", + "visualEffects": "Visuelle effekter", + "visualEffectsAuto": "Automatisk", + "visualEffectsAutoDescription": "Reduser effekter automatisk på enheter med lavt strømforbruk", + "visualEffectsFull": "Full", + "visualEffectsReduced": "Redusert", + "visualEffectsReducedDescription": "Færre animasjoner og grafikk med lavere oppløsning", "hideSpoilers": "Skjul spoilere for usette episoder", "hideSpoilersDescription": "Slør miniatyrbilder og beskrivelser for usette episoder", "playerBackend": "Spillermotor", @@ -151,7 +154,7 @@ "bufferSizeAuto": "Auto (Anbefalt)", "bufferSizeWarning": "${heap}MB minne tilgjengelig. En buffer på ${size}MB kan påvirke avspilling.", "defaultQualityTitle": "Standardkvalitet", - "defaultQualityDescription": "Brukes ved start av avspilling. Lavere verdier reduserer båndbredden.", + "musicQualityTitle": "Musikkvalitet", "subtitleStyling": "Undertekststil", "subtitleStylingDescription": "Tilpass utseendet på undertekster", "smallSkipDuration": "Kort hoppvarighet", @@ -245,10 +248,9 @@ "maxVolumePercent": "${percent}%", "discordRichPresence": "Discord Rich Presence", "discordRichPresenceDescription": "Vis hva du ser på Discord", - "trakt": "Trakt", - "traktDescription": "Synkroniser visningshistorikk med Trakt", "services": "Tjenester", "servicesDescription": "Koble til Trakt, MyAnimeList, Seerr og mer", + "manageLibrariesDescription": "Omorganiser og skjul biblioteker", "companionRemoteServer": "Companion Remote-server", "companionRemoteServerDescription": "Tillat mobilenheter på nettverket ditt å styre denne appen", "autoPip": "Auto bilde-i-bilde", @@ -311,7 +313,6 @@ "showNavBarLabels": "Vis navigasjonsfeltlabeler", "showNavBarLabelsDescription": "Vis tekstlabeler under navigasjonsfeltikoner", "startupSection": "Oppstartsseksjon", - "startupSectionDescription": "Velg hvilken seksjon Plezy åpner ved oppstart", "liveTvDefaultFavorites": "Standard til favorittkanaler", "liveTvDefaultFavoritesDescription": "Vis kun favorittkanaler når du åpner Live TV", "display": "Skjerm", @@ -322,14 +323,7 @@ "player": "Spiller", "subtitlesAndConfig": "Undertekster og konfigurasjon", "seekAndTiming": "Søk og tidtaking", - "behavior": "Atferd", - "manageLibrariesDescription": "Omorganiser og skjul biblioteker", - "visualEffects": "Visuelle effekter", - "visualEffectsAuto": "Automatisk", - "visualEffectsAutoDescription": "Reduser effekter automatisk på enheter med lavt strømforbruk", - "visualEffectsFull": "Full", - "visualEffectsReduced": "Redusert", - "visualEffectsReducedDescription": "Færre animasjoner og grafikk med lavere oppløsning" + "behavior": "Atferd" }, "search": { "hint": "Søk i filmer, serier, musikk...", @@ -418,14 +412,11 @@ "rateSheet": { "title": "Vurder", "server": "Server", - "starValue": "${rating} / 5", - "scoreValue": "${score} / 10", - "setScore": "Sett en poengsum", + "favorite": "Favoritt", + "favorited": "Lagt til i favoritter", "saved": "Lagret", "notAvailable": "Ingen treff", - "noConnectedServices": "Koble til en tjeneste i Innstillinger for å vurdere her.", - "favorite": "Favoritt", - "favorited": "Lagt til i favoritter" + "noConnectedServices": "Koble til en tjeneste i Innstillinger for å vurdere her." }, "accessibility": { "mediaCardMovie": "${title}, film", @@ -435,7 +426,15 @@ "mediaCardWatched": "sett", "mediaCardPartiallyWatched": "${percent} prosent sett", "mediaCardUnwatched": "usett", - "tapToPlay": "Trykk for å spille" + "tapToPlay": "Trykk for å spille", + "decrease": "Reduser", + "increase": "Øk", + "decreaseValue": "Reduser ${label}", + "increaseValue": "Øk ${label}", + "hue": "Fargetone", + "saturation": "Metning", + "brightness": "Lysstyrke", + "hexColor": "Heksadesimal farge" }, "tooltips": { "shufflePlay": "Tilfeldig avspilling", @@ -481,13 +480,11 @@ "settingsButton": "Avspillingsinnstillinger", "tracksButton": "Lyd og undertekster", "chaptersButton": "Kapitler", - "versionsButton": "Videoversjoner", "versionQualityButton": "Versjon og kvalitet", "versionColumnHeader": "Versjon", "qualityColumnHeader": "Kvalitet", "qualityOriginal": "Original", "qualityPresetLabel": "${resolution}p ${bitrate} Mbps", - "qualityBandwidthEstimate": "~${bitrate} Mbps", "transcodeUnavailableFallback": "Transkoding utilgjengelig — spiller av i original kvalitet", "pipButton": "Bilde-i-bilde-modus", "aspectRatioButton": "Sideforhold", @@ -530,12 +527,7 @@ "subtitleDownloadFailed": "Kunne ikke laste ned undertekst", "searchLanguages": "Søk etter språk..." }, - "userStatus": { - "admin": "Administrator", - "restricted": "Begrenset", - "protected": "Beskyttet", - "current": "GJELDENDE" - }, + "userStatus": {}, "messages": { "markedAsWatched": "Merket som sett", "markedAsUnwatched": "Merket som usett", @@ -676,8 +668,7 @@ "pinProtectionOptional": "PIN-beskyttelse (valgfri)", "pinExplain": "4-sifret PIN kreves for å bytte profiler.", "continueButton": "Fortsett", - "pinsDontMatch": "PIN-ene samsvarer ikke", - "initializeServicesFailed": "Kunne ikke initialisere profiltjenester" + "pinsDontMatch": "PIN-ene samsvarer ikke" }, "connections": { "sectionTitle": "Tilkoblinger", @@ -692,7 +683,6 @@ }, "discover": { "title": "Oppdag", - "switchProfile": "Bytt profil", "noContentAvailable": "Ingen innhold tilgjengelig", "addMediaToLibraries": "Legg til medier i bibliotekene dine", "continueWatching": "Fortsett å se", @@ -721,8 +711,6 @@ "connectionFailed": "Kan ikke koble til medieserver", "failedToLoad": "Kunne ikke laste ${context}: ${error}", "noClientAvailable": "Ingen klient tilgjengelig", - "authenticationFailed": "Autentisering mislyktes: ${error}", - "couldNotLaunchUrl": "Kunne ikke åpne autentiserings-URL", "pleaseEnterToken": "Vennligst skriv inn et token", "invalidToken": "Ugyldig token", "failedToVerifyToken": "Kunne ikke verifisere token: ${error}", @@ -749,6 +737,8 @@ "allLibrariesHidden": "Alle biblioteker er skjult", "hiddenLibrariesCount": "Skjulte biblioteker (${count})", "thisLibraryIsEmpty": "Dette biblioteket er tomt", + "noItemsMatchFilters": "Ingen elementer samsvarer med de aktive filtrene", + "resetFilters": "Tilbakestill filtre", "all": "Alle", "clearAll": "Tøm alle", "scanLibraryConfirm": "Er du sikker på at du vil skanne \"${title}\"?", @@ -804,7 +794,6 @@ "communityRating": "Fellesskapsvurdering", "criticRating": "Kritikervurdering", "userRating": "Brukervurdering", - "lastPlayed": "Sist spilt", "datePlayed": "Avspillingsdato", "playCount": "Avspillinger", "productionYear": "Produksjonsår", @@ -818,9 +807,7 @@ "dateShared": "Delingsdato", "latestEpisodeAirDate": "Siste episodes sendedato", "lastEpisodeDateAdded": "Dato for sist lagt til episode" - }, - "noItemsMatchFilters": "Ingen elementer samsvarer med de aktive filtrene", - "resetFilters": "Tilbakestill filtre" + } }, "about": { "title": "Om", @@ -830,7 +817,6 @@ "viewLicensesDescription": "Vis lisenser for tredjepartsbiblioteker" }, "serverSelection": { - "allServerConnectionsFailed": "Kunne ikke koble til noen servere. Sjekk nettverket ditt.", "noServersFoundForAccount": "Ingen servere funnet for ${username} (${email})", "failedToLoadServers": "Kunne ikke laste servere: ${error}" }, @@ -876,10 +862,6 @@ "upcomingMovies": "Kommende filmer", "upcomingShows": "Kommende serier" }, - "searchHint": "Søk i ${source}", - "searchEmpty": "Ingen treff for \"${query}\"", - "searchPrompt": "Søk etter filmer og serier på ${source}.", - "searchFailed": "Søk mislyktes. Sjekk tilkoblingen og prøv igjen.", "status": { "airing": "Sendes", "ended": "Avsluttet", @@ -897,16 +879,21 @@ "watchlistUpdateFailed": "Kunne ikke oppdatere ønskelisten", "notInLibrary": "Ikke i biblioteket ditt", "inTheseLibraries": "I disse bibliotekene", - "availableOn": "Tilgjengelig på ${server}", "checkingLibrary": "Sjekker biblioteket ditt...", "emptyTitle": "Ingenting her ennå", - "emptyMessage": "Rader fra ${source} vises her når de har innhold." + "emptyMessage": "Rader fra ${source} vises her når de har innhold.", + "searchHint": "Søk i ${source}", + "searchEmpty": "Ingen treff for \"${query}\"", + "searchPrompt": "Søk etter filmer og serier på ${source}.", + "searchFailed": "Søk mislyktes. Sjekk tilkoblingen og prøv igjen." }, "liveTv": { "title": "Direkte-TV", "guide": "Programguide", "noChannels": "Ingen kanaler tilgjengelig", "noDvr": "Ingen DVR konfigurert på noen server", + "serverUnavailable": "Direkte-TV-serveren er ikke tilgjengelig.", + "serverNotConnected": "Direkte-TV-serveren er ikke tilkoblet.", "noPrograms": "Ingen programdata tilgjengelig", "liveStreamFailed": "Direktesending mislyktes", "unknownProgram": "Ukjent program", @@ -942,7 +929,6 @@ "scheduledRecordings": "Planlagt", "recordingRules": "Opptaksregler", "noScheduledRecordings": "Ingen planlagte opptak", - "noRecordingRules": "Ingen opptaksregler ennå", "manageRecording": "Administrer opptak", "cancelRecording": "Avbryt opptak", "cancelRecordingTitle": "Avbryte dette opptaket?", @@ -959,7 +945,6 @@ "recordingCancelled": "Opptak avbrutt", "recordingRuleDeleted": "Opptaksregel slettet", "processRecordingRules": "Vurder regler på nytt", - "loadingRecordings": "Laster opptak ...", "recordingInProgress": "Tar opp nå", "recordingsCount": "${count} planlagt", "editRule": "Rediger regel", @@ -973,7 +958,6 @@ "title": "Samlinger", "collection": "Samling", "empty": "Samlingen er tom", - "unknownLibrarySection": "Kan ikke slette: Ukjent bibliotekseksjon", "deleteCollection": "Slett samling", "deleteConfirm": "Slette \"${title}\"? Dette kan ikke angres.", "deleted": "Samling slettet", @@ -1013,6 +997,7 @@ "itemAdded": "Lagt til i spilleliste", "itemRemoved": "Fjernet fra spilleliste", "selectPlaylist": "Velg spilleliste", + "searchPlaylists": "Søk i spillelister...", "errorCreating": "Kunne ikke opprette spilleliste", "errorDeleting": "Kunne ikke slette spilleliste", "errorLoading": "Kunne ikke laste spillelister", @@ -1102,15 +1087,15 @@ "participantResumed": "${name} gjenopptok", "participantSeeked": "${name} spolet", "participantBuffering": "${name} buffrer", + "participantNeedsUpdate": "${name} bruker en eldre appversjon — synkronisering er ikke tilgjengelig", + "resumingWithout": "Fortsetter uten ${name}", "waitingForParticipants": "Venter på at andre laster inn...", + "waitingForName": "Venter på ${name}...", "recentRooms": "Nylige rom", "renameRoom": "Gi nytt navn til rom", "removeRoom": "Fjern", "guestSwitchUnavailable": "Kunne ikke bytte — server ikke tilgjengelig for synkronisering", - "guestSwitchFailed": "Kunne ikke bytte — innhold ble ikke funnet på denne serveren", - "participantNeedsUpdate": "${name} bruker en eldre appversjon — synkronisering er ikke tilgjengelig", - "resumingWithout": "Fortsetter uten ${name}", - "waitingForName": "Venter på ${name}..." + "guestSwitchFailed": "Kunne ikke bytte — innhold ble ikke funnet på denne serveren" }, "downloads": { "title": "Nedlastinger", @@ -1155,7 +1140,6 @@ "customAmount": "Egendefinert antall...", "includeSpecials": "Inkluder spesialepisoder", "howManyEpisodes": "Hvor mange episoder?", - "itemsQueued": "${count} elementer i nedlastingskø", "keepSynced": "Hold synkronisert", "downloadOnce": "Last ned én gang", "keepNUnwatched": "Behold ${count} usette", @@ -1204,7 +1188,6 @@ "unknownDevice": "Ukjent enhet", "session": { "startingServer": "Starter fjernserver...", - "failedToCreate": "Kunne ikke starte fjernserver:", "hostAddress": "Vertsadresse", "connected": "Tilkoblet", "serverRunning": "Fjernserver aktiv", @@ -1265,6 +1248,8 @@ "errors": { "noNetworkInterface": "Fant ingen nettverksgrensesnitt", "authenticationFailed": "Autentisering mislyktes", + "serverStartFailed": "Kunne ikke starte fjernserveren: ${error}", + "commandFailed": "Kunne ikke sende fjernkommando: ${error}", "joinTimedOut": "Tidsavbrudd ved tilkobling til økt", "failedToConnectAnyAddress": "Kunne ikke koble til noen adresse", "connectionLostAfterAttempts": "Tilkobling mistet etter ${attempts} forsøk", @@ -1538,7 +1523,6 @@ "quickConnectFailed": "Quick Connect mislyktes: ${error}", "addPlexTitle": "Logg på med Plex", "pinExpired": "PIN-koden gikk ut før pålogging. Prøv igjen.", - "duplicatePlexAccount": "Allerede logget inn på Plex. Logg ut for å bytte konto.", "failedToRegisterAccount": "Kunne ikke registrere kontoen: ${error}", "enterJellyfinUrlError": "Oppgi URL-en til Jellyfin-serveren din", "addConnectionTitle": "Legg til tilkobling", diff --git a/lib/i18n/nl.i18n.json b/lib/i18n/nl.i18n.json index 257c5d18..ffa98845 100644 --- a/lib/i18n/nl.i18n.json +++ b/lib/i18n/nl.i18n.json @@ -3,7 +3,6 @@ "title": "Plezy" }, "auth": { - "signIn": "Inloggen", "signInWithPlex": "Inloggen met Plex", "showQRCode": "Toon QR-code", "authenticate": "Authenticeren", @@ -56,10 +55,8 @@ "episodeNumberTitle": "Aflevering ${number} - ${title}", "chapterNumber": "Hoofdstuk ${number}", "reconnect": "Opnieuw verbinden", - "exit": "Afsluiten", "viewAll": "Alles weergeven", "checkingNetwork": "Netwerk controleren...", - "refreshingServers": "Servers vernieuwen...", "loadingServers": "Servers laden...", "connectingToServers": "Verbinden met servers...", "startingOfflineMode": "Offlinemodus starten...", @@ -139,6 +136,12 @@ "tvFullCardLayoutDescription": "Gebruik tv-kaarten met alleen afbeeldingen en namen van acteurs als overlay", "focusGlow": "Focusgloed", "focusGlowDescription": "Toon een zachte gloed rond de kaart met focus", + "visualEffects": "Visuele effecten", + "visualEffectsAuto": "Automatisch", + "visualEffectsAutoDescription": "Effecten automatisch verminderen op apparaten met laag vermogen", + "visualEffectsFull": "Volledig", + "visualEffectsReduced": "Verminderd", + "visualEffectsReducedDescription": "Minder animaties en illustraties met lagere resolutie", "hideSpoilers": "Spoilers voor ongekeken afleveringen verbergen", "hideSpoilersDescription": "Vervaag miniaturen en beschrijvingen voor niet-bekeken afleveringen", "playerBackend": "Speler backend", @@ -151,7 +154,7 @@ "bufferSizeAuto": "Auto (Aanbevolen)", "bufferSizeWarning": "${heap}MB geheugen beschikbaar. Een buffer van ${size}MB kan afspelen beïnvloeden.", "defaultQualityTitle": "Standaardkwaliteit", - "defaultQualityDescription": "Wordt gebruikt bij het starten van de weergave. Lagere waarden verminderen de bandbreedte.", + "musicQualityTitle": "Muziekkwaliteit", "subtitleStyling": "Ondertitel opmaak", "subtitleStylingDescription": "Pas ondertitel uiterlijk aan", "smallSkipDuration": "Korte skip duur", @@ -245,10 +248,9 @@ "maxVolumePercent": "${percent}%", "discordRichPresence": "Discord Rich Presence", "discordRichPresenceDescription": "Toon op Discord wat je aan het kijken bent", - "trakt": "Trakt", - "traktDescription": "Kijkgeschiedenis synchroniseren met Trakt", "services": "Services", "servicesDescription": "Verbind Trakt, MyAnimeList, Seerr en meer", + "manageLibrariesDescription": "Bibliotheken herordenen en verbergen", "companionRemoteServer": "Companion Remote-server", "companionRemoteServerDescription": "Sta mobiele apparaten op je netwerk toe om deze app te bedienen", "autoPip": "Automatische beeld-in-beeld", @@ -311,7 +313,6 @@ "showNavBarLabels": "Navigatiebalk labels tonen", "showNavBarLabelsDescription": "Tekstlabels onder de pictogrammen van de navigatiebalk weergeven", "startupSection": "Opstartsectie", - "startupSectionDescription": "Kies welke sectie Plezy opent bij het opstarten", "liveTvDefaultFavorites": "Standaard favoriete zenders", "liveTvDefaultFavoritesDescription": "Toon alleen favoriete zenders bij het openen van Live TV", "display": "Weergave", @@ -322,14 +323,7 @@ "player": "Speler", "subtitlesAndConfig": "Ondertitels en configuratie", "seekAndTiming": "Zoeken en timing", - "behavior": "Gedrag", - "manageLibrariesDescription": "Bibliotheken herordenen en verbergen", - "visualEffects": "Visuele effecten", - "visualEffectsAuto": "Automatisch", - "visualEffectsAutoDescription": "Effecten automatisch verminderen op apparaten met laag vermogen", - "visualEffectsFull": "Volledig", - "visualEffectsReduced": "Verminderd", - "visualEffectsReducedDescription": "Minder animaties en illustraties met lagere resolutie" + "behavior": "Gedrag" }, "search": { "hint": "Zoek films, series, muziek...", @@ -418,14 +412,11 @@ "rateSheet": { "title": "Beoordelen", "server": "Server", - "starValue": "${rating} / 5", - "scoreValue": "${score} / 10", - "setScore": "Score instellen", + "favorite": "Favoriet", + "favorited": "Toegevoegd aan favorieten", "saved": "Opgeslagen", "notAvailable": "Geen match gevonden", - "noConnectedServices": "Verbind een service in Instellingen om daar te beoordelen.", - "favorite": "Favoriet", - "favorited": "Toegevoegd aan favorieten" + "noConnectedServices": "Verbind een service in Instellingen om daar te beoordelen." }, "accessibility": { "mediaCardMovie": "${title}, film", @@ -435,7 +426,15 @@ "mediaCardWatched": "bekeken", "mediaCardPartiallyWatched": "${percent} procent bekeken", "mediaCardUnwatched": "niet bekeken", - "tapToPlay": "Tik om af te spelen" + "tapToPlay": "Tik om af te spelen", + "decrease": "Verlagen", + "increase": "Verhogen", + "decreaseValue": "${label} verlagen", + "increaseValue": "${label} verhogen", + "hue": "Tint", + "saturation": "Verzadiging", + "brightness": "Helderheid", + "hexColor": "Hexkleur" }, "tooltips": { "shufflePlay": "Willekeurig afspelen", @@ -481,13 +480,11 @@ "settingsButton": "Afspeelinstellingen", "tracksButton": "Audio en ondertitels", "chaptersButton": "Hoofdstukken", - "versionsButton": "Videoversies", "versionQualityButton": "Versie en kwaliteit", "versionColumnHeader": "Versie", "qualityColumnHeader": "Kwaliteit", "qualityOriginal": "Origineel", "qualityPresetLabel": "${resolution}p ${bitrate} Mbps", - "qualityBandwidthEstimate": "~${bitrate} Mbps", "transcodeUnavailableFallback": "Transcoderen niet beschikbaar — originele kwaliteit wordt afgespeeld", "pipButton": "Beeld-in-beeld modus", "aspectRatioButton": "Beeldverhouding", @@ -530,12 +527,7 @@ "subtitleDownloadFailed": "Ondertitel downloaden mislukt", "searchLanguages": "Talen zoeken..." }, - "userStatus": { - "admin": "Beheerder", - "restricted": "Beperkt", - "protected": "Beschermd", - "current": "HUIDIG" - }, + "userStatus": {}, "messages": { "markedAsWatched": "Gemarkeerd als gekeken", "markedAsUnwatched": "Gemarkeerd als ongekeken", @@ -676,8 +668,7 @@ "pinProtectionOptional": "PIN-beveiliging (optioneel)", "pinExplain": "4-cijferige PIN vereist om profielen te wisselen.", "continueButton": "Doorgaan", - "pinsDontMatch": "PIN-codes komen niet overeen", - "initializeServicesFailed": "Kan profielservices niet initialiseren" + "pinsDontMatch": "PIN-codes komen niet overeen" }, "connections": { "sectionTitle": "Verbindingen", @@ -692,7 +683,6 @@ }, "discover": { "title": "Ontdekken", - "switchProfile": "Wissel van profiel", "noContentAvailable": "Geen inhoud beschikbaar", "addMediaToLibraries": "Voeg wat media toe aan je bibliotheken", "continueWatching": "Verder kijken", @@ -721,8 +711,6 @@ "connectionFailed": "Kan geen verbinding maken met mediaserver", "failedToLoad": "Kon ${context} niet laden: ${error}", "noClientAvailable": "Geen client beschikbaar", - "authenticationFailed": "Authenticatie mislukt: ${error}", - "couldNotLaunchUrl": "Kon auth URL niet openen", "pleaseEnterToken": "Voer een token in", "invalidToken": "Ongeldig token", "failedToVerifyToken": "Kon token niet verifiëren: ${error}", @@ -749,6 +737,8 @@ "allLibrariesHidden": "Alle bibliotheken zijn verborgen", "hiddenLibrariesCount": "Verborgen bibliotheken (${count})", "thisLibraryIsEmpty": "Deze bibliotheek is leeg", + "noItemsMatchFilters": "Geen items komen overeen met de actieve filters", + "resetFilters": "Filters opnieuw instellen", "all": "Alles", "clearAll": "Alles wissen", "scanLibraryConfirm": "Weet je zeker dat je \"${title}\" wilt scannen?", @@ -804,7 +794,6 @@ "communityRating": "Communitybeoordeling", "criticRating": "Criticusbeoordeling", "userRating": "Gebruikersbeoordeling", - "lastPlayed": "Laatst afgespeeld", "datePlayed": "Afspeeldatum", "playCount": "Aantal afspelingen", "productionYear": "Productiejaar", @@ -818,9 +807,7 @@ "dateShared": "Gedeeld op", "latestEpisodeAirDate": "Laatste afleveringsuitzending", "lastEpisodeDateAdded": "Datum laatst toegevoegde aflevering" - }, - "noItemsMatchFilters": "Geen items komen overeen met de actieve filters", - "resetFilters": "Filters opnieuw instellen" + } }, "about": { "title": "Over", @@ -830,7 +817,6 @@ "viewLicensesDescription": "Bekijk licenties van third-party bibliotheken" }, "serverSelection": { - "allServerConnectionsFailed": "Kon met geen enkele server verbinden. Controleer je netwerk.", "noServersFoundForAccount": "Geen servers gevonden voor ${username} (${email})", "failedToLoadServers": "Kon servers niet laden: ${error}" }, @@ -876,10 +862,6 @@ "upcomingMovies": "Aankomende films", "upcomingShows": "Aankomende series" }, - "searchHint": "Zoeken in ${source}", - "searchEmpty": "Geen resultaten voor \"${query}\"", - "searchPrompt": "Zoek naar films en series op ${source}.", - "searchFailed": "Zoeken mislukt. Controleer je verbinding en probeer opnieuw.", "status": { "airing": "Lopend", "ended": "Afgelopen", @@ -897,16 +879,21 @@ "watchlistUpdateFailed": "Kon kijklijst niet bijwerken", "notInLibrary": "Niet in je bibliotheek", "inTheseLibraries": "In deze bibliotheken", - "availableOn": "Beschikbaar op ${server}", "checkingLibrary": "Je bibliotheek controleren...", "emptyTitle": "Hier is nog niets", - "emptyMessage": "Rijen van ${source} verschijnen hier zodra ze inhoud hebben." + "emptyMessage": "Rijen van ${source} verschijnen hier zodra ze inhoud hebben.", + "searchHint": "Zoeken in ${source}", + "searchEmpty": "Geen resultaten voor \"${query}\"", + "searchPrompt": "Zoek naar films en series op ${source}.", + "searchFailed": "Zoeken mislukt. Controleer je verbinding en probeer opnieuw." }, "liveTv": { "title": "Live TV", "guide": "Gids", "noChannels": "Geen zenders beschikbaar", "noDvr": "Geen DVR geconfigureerd op een server", + "serverUnavailable": "De live-tv-server is niet beschikbaar.", + "serverNotConnected": "De live-tv-server is niet verbonden.", "noPrograms": "Geen programmagegevens beschikbaar", "liveStreamFailed": "Livestream mislukt", "unknownProgram": "Onbekend programma", @@ -942,7 +929,6 @@ "scheduledRecordings": "Gepland", "recordingRules": "Opnameregels", "noScheduledRecordings": "Geen geplande opnames", - "noRecordingRules": "Nog geen opnameregels", "manageRecording": "Opname beheren", "cancelRecording": "Opname annuleren", "cancelRecordingTitle": "Deze opname annuleren?", @@ -959,7 +945,6 @@ "recordingCancelled": "Opname geannuleerd", "recordingRuleDeleted": "Opnameregel verwijderd", "processRecordingRules": "Regels opnieuw evalueren", - "loadingRecordings": "Opnames laden...", "recordingInProgress": "Nu aan het opnemen", "recordingsCount": "${count} gepland", "editRule": "Regel bewerken", @@ -973,7 +958,6 @@ "title": "Collecties", "collection": "Collectie", "empty": "Collectie is leeg", - "unknownLibrarySection": "Kan niet verwijderen: onbekende bibliotheeksectie", "deleteCollection": "Collectie verwijderen", "deleteConfirm": "\"${title}\" verwijderen? Dit kan niet ongedaan worden gemaakt.", "deleted": "Collectie verwijderd", @@ -1013,6 +997,7 @@ "itemAdded": "Toegevoegd aan afspeellijst", "itemRemoved": "Verwijderd uit afspeellijst", "selectPlaylist": "Selecteer afspeellijst", + "searchPlaylists": "Afspeellijsten zoeken...", "errorCreating": "Fout bij maken afspeellijst", "errorDeleting": "Fout bij verwijderen afspeellijst", "errorLoading": "Fout bij laden afspeellijsten", @@ -1102,15 +1087,15 @@ "participantResumed": "${name} heeft hervat", "participantSeeked": "${name} heeft gespoeld", "participantBuffering": "${name} is aan het bufferen", + "participantNeedsUpdate": "${name} gebruikt een oudere appversie — synchronisatie niet beschikbaar", + "resumingWithout": "Hervatten zonder ${name}", "waitingForParticipants": "Wachten tot anderen geladen zijn...", + "waitingForName": "Wachten op ${name}...", "recentRooms": "Recente kamers", "renameRoom": "Kamer hernoemen", "removeRoom": "Verwijderen", "guestSwitchUnavailable": "Kon niet schakelen — server niet beschikbaar voor synchronisatie", - "guestSwitchFailed": "Kon niet schakelen — inhoud niet gevonden op deze server", - "participantNeedsUpdate": "${name} gebruikt een oudere appversie — synchronisatie niet beschikbaar", - "resumingWithout": "Hervatten zonder ${name}", - "waitingForName": "Wachten op ${name}..." + "guestSwitchFailed": "Kon niet schakelen — inhoud niet gevonden op deze server" }, "downloads": { "title": "Downloads", @@ -1155,7 +1140,6 @@ "customAmount": "Aangepast aantal...", "includeSpecials": "Specials opnemen", "howManyEpisodes": "Hoeveel afleveringen?", - "itemsQueued": "${count} items in downloadwachtrij", "keepSynced": "Gesynchroniseerd houden", "downloadOnce": "Eenmalig downloaden", "keepNUnwatched": "${count} onbekeken behouden", @@ -1204,7 +1188,6 @@ "unknownDevice": "Onbekend apparaat", "session": { "startingServer": "Externe server starten...", - "failedToCreate": "Kan externe server niet starten:", "hostAddress": "Hostadres", "connected": "Verbonden", "serverRunning": "Externe server actief", @@ -1265,6 +1248,8 @@ "errors": { "noNetworkInterface": "Geen netwerkinterface gevonden", "authenticationFailed": "Authenticatie mislukt", + "serverStartFailed": "Kan de externe server niet starten: ${error}", + "commandFailed": "Kan de externe opdracht niet verzenden: ${error}", "joinTimedOut": "Time-out bij deelnemen aan sessie", "failedToConnectAnyAddress": "Kan met geen enkel adres verbinden", "connectionLostAfterAttempts": "Verbinding verloren na ${attempts} pogingen", @@ -1538,7 +1523,6 @@ "quickConnectFailed": "Quick Connect mislukt: ${error}", "addPlexTitle": "Inloggen met Plex", "pinExpired": "PIN verlopen vóór inloggen. Probeer opnieuw.", - "duplicatePlexAccount": "Al aangemeld bij Plex. Meld je af om van account te wisselen.", "failedToRegisterAccount": "Account registreren mislukt: ${error}", "enterJellyfinUrlError": "Voer de URL van je Jellyfin-server in", "addConnectionTitle": "Verbinding toevoegen", diff --git a/lib/i18n/pl.i18n.json b/lib/i18n/pl.i18n.json index ec8f1d09..0dd2d480 100644 --- a/lib/i18n/pl.i18n.json +++ b/lib/i18n/pl.i18n.json @@ -3,7 +3,6 @@ "title": "Plezy" }, "auth": { - "signIn": "Zaloguj się", "signInWithPlex": "Zaloguj się przez Plex", "showQRCode": "Pokaż kod QR", "authenticate": "Uwierzytelnienie", @@ -56,10 +55,8 @@ "episodeNumberTitle": "Odcinek ${number} - ${title}", "chapterNumber": "Rozdział ${number}", "reconnect": "Połącz ponownie", - "exit": "Wyjdź", "viewAll": "Pokaż wszystko", "checkingNetwork": "Sprawdzanie sieci...", - "refreshingServers": "Odświeżanie serwerów...", "loadingServers": "Ładowanie serwerów...", "connectingToServers": "Łączenie z serwerami...", "startingOfflineMode": "Uruchamianie trybu offline...", @@ -139,6 +136,12 @@ "tvFullCardLayoutDescription": "Używaj kart TV tylko z obrazem i nałożonymi nazwiskami aktorów", "focusGlow": "Poświata zaznaczenia", "focusGlowDescription": "Wyświetlaj delikatną poświatę wokół zaznaczonej karty", + "visualEffects": "Efekty wizualne", + "visualEffectsAuto": "Automatycznie", + "visualEffectsAutoDescription": "Automatycznie ograniczaj efekty na urządzeniach o niższej wydajności", + "visualEffectsFull": "Pełne", + "visualEffectsReduced": "Ograniczone", + "visualEffectsReducedDescription": "Mniej animacji i grafiki o niższej rozdzielczości", "hideSpoilers": "Ukryj spoilery nieobejrzanych odcinków", "hideSpoilersDescription": "Rozmywaj miniatury i opisy nieobejrzanych odcinków", "playerBackend": "Backend odtwarzacza", @@ -151,7 +154,7 @@ "bufferSizeAuto": "Automatyczny (Zalecany)", "bufferSizeWarning": "Dostępna pamięć: ${heap}MB. Bufor ${size}MB może wpłynąć na odtwarzanie.", "defaultQualityTitle": "Domyślna jakość", - "defaultQualityDescription": "Używane podczas rozpoczynania odtwarzania. Niższe wartości zmniejszają przepustowość.", + "musicQualityTitle": "Jakość muzyki", "subtitleStyling": "Styl napisów", "subtitleStylingDescription": "Dostosuj wygląd napisów", "smallSkipDuration": "Krótki skok", @@ -245,10 +248,9 @@ "maxVolumePercent": "${percent}%", "discordRichPresence": "Discord Rich Presence", "discordRichPresenceDescription": "Pokaż, co oglądasz na Discordzie", - "trakt": "Trakt", - "traktDescription": "Synchronizuj historię oglądania z Trakt", "services": "Usługi", "servicesDescription": "Połącz Trakt, MyAnimeList, Seerr i inne", + "manageLibrariesDescription": "Zmieniaj kolejność i ukrywaj biblioteki", "companionRemoteServer": "Serwer zdalnego sterowania", "companionRemoteServerDescription": "Pozwól urządzeniom mobilnym w sieci sterować tą aplikacją", "autoPip": "Automatyczny obraz w obrazie", @@ -311,7 +313,6 @@ "showNavBarLabels": "Pokaż etykiety paska nawigacji", "showNavBarLabelsDescription": "Wyświetl tekstowe etykiety pod ikonami paska nawigacji", "startupSection": "Sekcja startowa", - "startupSectionDescription": "Wybierz, którą sekcję Plezy otwiera przy uruchomieniu", "liveTvDefaultFavorites": "Domyślnie ulubione kanały", "liveTvDefaultFavoritesDescription": "Pokaż tylko ulubione kanały po otwarciu telewizji na żywo", "display": "Ekran", @@ -322,14 +323,7 @@ "player": "Odtwarzacz", "subtitlesAndConfig": "Napisy i konfiguracja", "seekAndTiming": "Przewijanie i czas", - "behavior": "Zachowanie", - "manageLibrariesDescription": "Zmieniaj kolejność i ukrywaj biblioteki", - "visualEffects": "Efekty wizualne", - "visualEffectsAuto": "Automatycznie", - "visualEffectsAutoDescription": "Automatycznie ograniczaj efekty na urządzeniach o niższej wydajności", - "visualEffectsFull": "Pełne", - "visualEffectsReduced": "Ograniczone", - "visualEffectsReducedDescription": "Mniej animacji i grafiki o niższej rozdzielczości" + "behavior": "Zachowanie" }, "search": { "hint": "Szukaj filmów, seriali, muzyki...", @@ -418,14 +412,11 @@ "rateSheet": { "title": "Oceń", "server": "Serwer", - "starValue": "${rating} / 5", - "scoreValue": "${score} / 10", - "setScore": "Ustaw ocenę", + "favorite": "Dodaj do ulubionych", + "favorited": "Dodano do ulubionych", "saved": "Zapisano", "notAvailable": "Nie znaleziono dopasowania", - "noConnectedServices": "Połącz usługę w Ustawieniach, aby tam oceniać.", - "favorite": "Dodaj do ulubionych", - "favorited": "Dodano do ulubionych" + "noConnectedServices": "Połącz usługę w Ustawieniach, aby tam oceniać." }, "accessibility": { "mediaCardMovie": "${title}, film", @@ -435,7 +426,15 @@ "mediaCardWatched": "obejrzane", "mediaCardPartiallyWatched": "${percent} procent obejrzane", "mediaCardUnwatched": "nieobejrzane", - "tapToPlay": "Dotknij, aby odtworzyć" + "tapToPlay": "Dotknij, aby odtworzyć", + "decrease": "Zmniejsz", + "increase": "Zwiększ", + "decreaseValue": "Zmniejsz ${label}", + "increaseValue": "Zwiększ ${label}", + "hue": "Odcień", + "saturation": "Nasycenie", + "brightness": "Jasność", + "hexColor": "Kolor szesnastkowy" }, "tooltips": { "shufflePlay": "Odtwarzanie losowe", @@ -481,13 +480,11 @@ "settingsButton": "Ustawienia odtwarzania", "tracksButton": "Audio i napisy", "chaptersButton": "Rozdziały", - "versionsButton": "Wersje wideo", "versionQualityButton": "Wersja i jakość", "versionColumnHeader": "Wersja", "qualityColumnHeader": "Jakość", "qualityOriginal": "Oryginalna", "qualityPresetLabel": "${resolution}p ${bitrate} Mbps", - "qualityBandwidthEstimate": "~${bitrate} Mbps", "transcodeUnavailableFallback": "Transkodowanie niedostępne — odtwarzanie w oryginalnej jakości", "pipButton": "Tryb obraz w obrazie", "aspectRatioButton": "Proporcje", @@ -530,12 +527,7 @@ "subtitleDownloadFailed": "Nie udało się pobrać napisów", "searchLanguages": "Szukaj języków..." }, - "userStatus": { - "admin": "Administrator", - "restricted": "Ograniczony", - "protected": "Chroniony", - "current": "BIEŻĄCY" - }, + "userStatus": {}, "messages": { "markedAsWatched": "Oznaczono jako obejrzane", "markedAsUnwatched": "Oznaczono jako nieobejrzane", @@ -676,8 +668,7 @@ "pinProtectionOptional": "Ochrona PIN-em (opcjonalnie)", "pinExplain": "Do przełączania profili wymagany jest 4-cyfrowy PIN.", "continueButton": "Kontynuuj", - "pinsDontMatch": "PIN-y nie pasują", - "initializeServicesFailed": "Nie udało się zainicjować usług profilu" + "pinsDontMatch": "PIN-y nie pasują" }, "connections": { "sectionTitle": "Połączenia", @@ -692,7 +683,6 @@ }, "discover": { "title": "Odkryj", - "switchProfile": "Zmień profil", "noContentAvailable": "Brak dostępnych treści", "addMediaToLibraries": "Dodaj multimedia do swoich bibliotek", "continueWatching": "Kontynuuj oglądanie", @@ -721,8 +711,6 @@ "connectionFailed": "Nie można połączyć się z serwerem multimediów", "failedToLoad": "Nie udało się załadować ${context}: ${error}", "noClientAvailable": "Brak dostępnego klienta", - "authenticationFailed": "Uwierzytelnienie nie powiodło się: ${error}", - "couldNotLaunchUrl": "Nie można otworzyć URL uwierzytelniania", "pleaseEnterToken": "Wprowadź token", "invalidToken": "Nieprawidłowy token", "failedToVerifyToken": "Nie udało się zweryfikować tokena: ${error}", @@ -749,6 +737,8 @@ "allLibrariesHidden": "Wszystkie biblioteki są ukryte", "hiddenLibrariesCount": "Ukryte biblioteki (${count})", "thisLibraryIsEmpty": "Ta biblioteka jest pusta", + "noItemsMatchFilters": "Żadne elementy nie pasują do aktywnych filtrów", + "resetFilters": "Resetuj filtry", "all": "Wszystkie", "clearAll": "Wyczyść wszystko", "scanLibraryConfirm": "Czy na pewno chcesz zeskanować \"${title}\"?", @@ -804,7 +794,6 @@ "communityRating": "Ocena społeczności", "criticRating": "Ocena krytyków", "userRating": "Ocena użytkownika", - "lastPlayed": "Ostatnio odtwarzane", "datePlayed": "Data odtworzenia", "playCount": "Liczba odtworzeń", "productionYear": "Rok produkcji", @@ -818,9 +807,7 @@ "dateShared": "Data udostępnienia", "latestEpisodeAirDate": "Data emisji ostatniego odcinka", "lastEpisodeDateAdded": "Data dodania ostatniego odcinka" - }, - "noItemsMatchFilters": "Żadne elementy nie pasują do aktywnych filtrów", - "resetFilters": "Resetuj filtry" + } }, "about": { "title": "O aplikacji", @@ -830,7 +817,6 @@ "viewLicensesDescription": "Zobacz licencje bibliotek zewnętrznych" }, "serverSelection": { - "allServerConnectionsFailed": "Nie udało się połączyć z żadnym serwerem. Sprawdź sieć.", "noServersFoundForAccount": "Nie znaleziono serwerów dla ${username} (${email})", "failedToLoadServers": "Nie udało się załadować serwerów: ${error}" }, @@ -895,7 +881,6 @@ "watchlistUpdateFailed": "Nie udało się zaktualizować listy do obejrzenia", "notInLibrary": "Nie ma tego w Twojej bibliotece", "inTheseLibraries": "W tych bibliotekach", - "availableOn": "Dostępne na ${server}", "checkingLibrary": "Sprawdzanie Twojej biblioteki...", "emptyTitle": "Jeszcze nic tu nie ma", "emptyMessage": "Wiersze z ${source} pojawią się tutaj, gdy będą zawierać treści.", @@ -909,6 +894,8 @@ "guide": "Przewodnik", "noChannels": "Brak dostępnych kanałów", "noDvr": "Brak skonfigurowanego DVR na żadnym serwerze", + "serverUnavailable": "Serwer telewizji na żywo jest niedostępny.", + "serverNotConnected": "Serwer telewizji na żywo nie jest połączony.", "noPrograms": "Brak danych o programach", "liveStreamFailed": "Transmisja na żywo nie powiodła się", "unknownProgram": "Nieznany program", @@ -944,7 +931,6 @@ "scheduledRecordings": "Zaplanowane", "recordingRules": "Reguły nagrywania", "noScheduledRecordings": "Brak zaplanowanych nagrań", - "noRecordingRules": "Brak reguł nagrywania", "manageRecording": "Zarządzaj nagraniem", "cancelRecording": "Anuluj nagrywanie", "cancelRecordingTitle": "Anulować to nagrywanie?", @@ -961,7 +947,6 @@ "recordingCancelled": "Nagrywanie anulowane", "recordingRuleDeleted": "Reguła nagrywania usunięta", "processRecordingRules": "Ponów ocenę reguł", - "loadingRecordings": "Wczytywanie nagrań...", "recordingInProgress": "Trwa nagrywanie", "recordingsCount": "${count} zaplanowanych", "editRule": "Edytuj regułę", @@ -975,7 +960,6 @@ "title": "Kolekcje", "collection": "Kolekcja", "empty": "Kolekcja jest pusta", - "unknownLibrarySection": "Nie można usunąć: Nieznana sekcja biblioteki", "deleteCollection": "Usuń kolekcję", "deleteConfirm": "Usunąć \"${title}\"? Tego nie można cofnąć.", "deleted": "Kolekcja usunięta", @@ -1015,6 +999,7 @@ "itemAdded": "Dodano do playlisty", "itemRemoved": "Usunięto z playlisty", "selectPlaylist": "Wybierz playlistę", + "searchPlaylists": "Szukaj playlist...", "errorCreating": "Nie udało się utworzyć playlisty", "errorDeleting": "Nie udało się usunąć playlisty", "errorLoading": "Nie udało się załadować playlist", @@ -1106,15 +1091,15 @@ "participantResumed": "${name} wznowił", "participantSeeked": "${name} przewinął", "participantBuffering": "${name} buforuje", + "participantNeedsUpdate": "${name} używa starszej wersji aplikacji — synchronizacja jest niedostępna", + "resumingWithout": "Wznawianie bez ${name}", "waitingForParticipants": "Oczekiwanie na załadowanie u innych...", + "waitingForName": "Oczekiwanie na ${name}...", "recentRooms": "Ostatnie pokoje", "renameRoom": "Zmień nazwę pokoju", "removeRoom": "Usuń", "guestSwitchUnavailable": "Nie można przełączyć — serwer niedostępny do synchronizacji", - "guestSwitchFailed": "Nie można przełączyć — nie znaleziono treści na tym serwerze", - "participantNeedsUpdate": "${name} używa starszej wersji aplikacji — synchronizacja jest niedostępna", - "resumingWithout": "Wznawianie bez ${name}", - "waitingForName": "Oczekiwanie na ${name}..." + "guestSwitchFailed": "Nie można przełączyć — nie znaleziono treści na tym serwerze" }, "downloads": { "title": "Pobrania", @@ -1159,7 +1144,6 @@ "customAmount": "Własna ilość...", "includeSpecials": "Uwzględnij odcinki specjalne", "howManyEpisodes": "Ile odcinków?", - "itemsQueued": "${count} elementów dodanych do kolejki pobierania", "keepSynced": "Synchronizuj na bieżąco", "downloadOnce": "Pobierz raz", "keepNUnwatched": "Zachowaj ${count} nieobejrzanych", @@ -1208,7 +1192,6 @@ "unknownDevice": "Nieznane urządzenie", "session": { "startingServer": "Uruchamianie serwera zdalnego...", - "failedToCreate": "Nie udało się uruchomić serwera zdalnego:", "hostAddress": "Adres hosta", "connected": "Połączono", "serverRunning": "Serwer zdalny aktywny", @@ -1269,6 +1252,8 @@ "errors": { "noNetworkInterface": "Nie znaleziono interfejsu sieciowego", "authenticationFailed": "Uwierzytelnianie nie powiodło się", + "serverStartFailed": "Nie udało się uruchomić serwera zdalnego: ${error}", + "commandFailed": "Nie udało się wysłać polecenia zdalnego: ${error}", "joinTimedOut": "Upłynął limit czasu dołączania do sesji", "failedToConnectAnyAddress": "Nie udało się połączyć z żadnym adresem", "connectionLostAfterAttempts": "Połączenie utracone po ${attempts} próbach", @@ -1542,7 +1527,6 @@ "quickConnectFailed": "Quick Connect nie powiodło się: ${error}", "addPlexTitle": "Zaloguj się przez Plex", "pinExpired": "PIN wygasł przed zalogowaniem. Spróbuj ponownie.", - "duplicatePlexAccount": "Już zalogowano do Plex. Wyloguj się, aby zmienić konto.", "failedToRegisterAccount": "Nie udało się zarejestrować konta: ${error}", "enterJellyfinUrlError": "Podaj URL serwera Jellyfin", "addConnectionTitle": "Dodaj połączenie", diff --git a/lib/i18n/pt.i18n.json b/lib/i18n/pt.i18n.json index cebca14b..46b297ec 100644 --- a/lib/i18n/pt.i18n.json +++ b/lib/i18n/pt.i18n.json @@ -3,7 +3,6 @@ "title": "Plezy" }, "auth": { - "signIn": "Entrar", "signInWithPlex": "Entrar com Plex", "showQRCode": "Mostrar QR Code", "authenticate": "Autenticar", @@ -56,10 +55,8 @@ "episodeNumberTitle": "Episódio ${number} - ${title}", "chapterNumber": "Capítulo ${number}", "reconnect": "Reconectar", - "exit": "Sair", "viewAll": "Ver Tudo", "checkingNetwork": "Verificando rede...", - "refreshingServers": "Atualizando servidores...", "loadingServers": "Carregando servidores...", "connectingToServers": "Conectando aos servidores...", "startingOfflineMode": "Iniciando modo offline...", @@ -139,6 +136,12 @@ "tvFullCardLayoutDescription": "Usar cartões de TV só com imagem e nomes dos atores sobrepostos", "focusGlow": "Brilho de foco", "focusGlowDescription": "Mostrar um brilho suave à volta do cartão em foco", + "visualEffects": "Efeitos visuais", + "visualEffectsAuto": "Automático", + "visualEffectsAutoDescription": "Reduza automaticamente os efeitos em dispositivos de baixo consumo", + "visualEffectsFull": "Completos", + "visualEffectsReduced": "Reduzidos", + "visualEffectsReducedDescription": "Menos animações e artes em menor resolução", "hideSpoilers": "Ocultar Spoilers de Episódios Não Assistidos", "hideSpoilersDescription": "Desfocar miniaturas e descrições de episódios não vistos", "playerBackend": "Backend do Player", @@ -151,7 +154,7 @@ "bufferSizeAuto": "Automático (Recomendado)", "bufferSizeWarning": "${heap}MB de memória disponível. Um buffer de ${size}MB pode afetar a reprodução.", "defaultQualityTitle": "Qualidade padrão", - "defaultQualityDescription": "Usado ao iniciar a reprodução. Valores menores reduzem a largura de banda.", + "musicQualityTitle": "Qualidade da música", "subtitleStyling": "Estilo de Legendas", "subtitleStylingDescription": "Personalizar aparência das legendas", "smallSkipDuration": "Duração do Avanço Curto", @@ -245,10 +248,9 @@ "maxVolumePercent": "${percent}%", "discordRichPresence": "Discord Rich Presence", "discordRichPresenceDescription": "Mostrar o que você está assistindo no Discord", - "trakt": "Trakt", - "traktDescription": "Sincronizar histórico de exibição com Trakt", "services": "Serviços", "servicesDescription": "Conecte Trakt, MyAnimeList, Seerr e mais", + "manageLibrariesDescription": "Reordene e oculte bibliotecas", "companionRemoteServer": "Servidor de controlo remoto", "companionRemoteServerDescription": "Permitir que dispositivos móveis na sua rede controlem esta aplicação", "autoPip": "Picture-in-Picture Automático", @@ -311,7 +313,6 @@ "showNavBarLabels": "Mostrar Rótulos da Barra de Navegação", "showNavBarLabelsDescription": "Exibir rótulos de texto sob os ícones da barra de navegação", "startupSection": "Seção inicial", - "startupSectionDescription": "Escolha qual seção o Plezy abre ao iniciar", "liveTvDefaultFavorites": "Canais favoritos por padrão", "liveTvDefaultFavoritesDescription": "Mostrar apenas canais favoritos ao abrir TV ao vivo", "display": "Tela", @@ -322,14 +323,7 @@ "player": "Reprodutor", "subtitlesAndConfig": "Legendas e configuração", "seekAndTiming": "Busca e tempo", - "behavior": "Comportamento", - "manageLibrariesDescription": "Reordene e oculte bibliotecas", - "visualEffects": "Efeitos visuais", - "visualEffectsAuto": "Automático", - "visualEffectsAutoDescription": "Reduza automaticamente os efeitos em dispositivos de baixo consumo", - "visualEffectsFull": "Completos", - "visualEffectsReduced": "Reduzidos", - "visualEffectsReducedDescription": "Menos animações e artes em menor resolução" + "behavior": "Comportamento" }, "search": { "hint": "Buscar filmes, séries, músicas...", @@ -418,14 +412,11 @@ "rateSheet": { "title": "Avaliar", "server": "Servidor", - "starValue": "${rating} / 5", - "scoreValue": "${score} / 10", - "setScore": "Definir pontuação", + "favorite": "Favorito", + "favorited": "Adicionado aos favoritos", "saved": "Salvo", "notAvailable": "Nenhuma correspondência encontrada", - "noConnectedServices": "Conecte um serviço nas Configurações para avaliar por lá.", - "favorite": "Favorito", - "favorited": "Adicionado aos favoritos" + "noConnectedServices": "Conecte um serviço nas Configurações para avaliar por lá." }, "accessibility": { "mediaCardMovie": "${title}, filme", @@ -435,7 +426,15 @@ "mediaCardWatched": "assistido", "mediaCardPartiallyWatched": "${percent} por cento assistido", "mediaCardUnwatched": "não assistido", - "tapToPlay": "Toque para reproduzir" + "tapToPlay": "Toque para reproduzir", + "decrease": "Diminuir", + "increase": "Aumentar", + "decreaseValue": "Diminuir ${label}", + "increaseValue": "Aumentar ${label}", + "hue": "Matiz", + "saturation": "Saturação", + "brightness": "Brilho", + "hexColor": "Cor hexadecimal" }, "tooltips": { "shufflePlay": "Reprodução aleatória", @@ -481,13 +480,11 @@ "settingsButton": "Configurações de Reprodução", "tracksButton": "Áudio e Legendas", "chaptersButton": "Capítulos", - "versionsButton": "Versões do vídeo", "versionQualityButton": "Versão e qualidade", "versionColumnHeader": "Versão", "qualityColumnHeader": "Qualidade", "qualityOriginal": "Original", "qualityPresetLabel": "${resolution}p ${bitrate} Mbps", - "qualityBandwidthEstimate": "~${bitrate} Mbps", "transcodeUnavailableFallback": "Transcodificação indisponível — reproduzindo qualidade original", "pipButton": "Modo Picture-in-Picture", "aspectRatioButton": "Proporção", @@ -530,12 +527,7 @@ "subtitleDownloadFailed": "Falha ao baixar legenda", "searchLanguages": "Pesquisar idiomas..." }, - "userStatus": { - "admin": "Admin", - "restricted": "Restrito", - "protected": "Protegido", - "current": "ATUAL" - }, + "userStatus": {}, "messages": { "markedAsWatched": "Marcado como assistido", "markedAsUnwatched": "Marcado como não assistido", @@ -676,8 +668,7 @@ "pinProtectionOptional": "Proteção por PIN (opcional)", "pinExplain": "PIN de 4 dígitos necessário para trocar perfis.", "continueButton": "Continuar", - "pinsDontMatch": "Os PINs não correspondem", - "initializeServicesFailed": "Falha ao inicializar serviços de perfil" + "pinsDontMatch": "Os PINs não correspondem" }, "connections": { "sectionTitle": "Conexões", @@ -692,7 +683,6 @@ }, "discover": { "title": "Descobrir", - "switchProfile": "Trocar Perfil", "noContentAvailable": "Nenhum conteúdo disponível", "addMediaToLibraries": "Adicione mídias às suas bibliotecas", "continueWatching": "Continuar Assistindo", @@ -721,8 +711,6 @@ "connectionFailed": "Não foi possível conectar ao servidor de mídia", "failedToLoad": "Falha ao carregar ${context}: ${error}", "noClientAvailable": "Nenhum cliente disponível", - "authenticationFailed": "Falha na autenticação: ${error}", - "couldNotLaunchUrl": "Não foi possível abrir a URL de autenticação", "pleaseEnterToken": "Insira um token", "invalidToken": "Token inválido", "failedToVerifyToken": "Falha ao verificar token: ${error}", @@ -749,6 +737,8 @@ "allLibrariesHidden": "Todas as bibliotecas estão ocultas", "hiddenLibrariesCount": "Bibliotecas ocultas (${count})", "thisLibraryIsEmpty": "Esta biblioteca está vazia", + "noItemsMatchFilters": "Nenhum item corresponde aos filtros ativos", + "resetFilters": "Redefinir filtros", "all": "Todos", "clearAll": "Limpar Tudo", "scanLibraryConfirm": "Tem certeza que deseja escanear \"${title}\"?", @@ -804,7 +794,6 @@ "communityRating": "Avaliação da comunidade", "criticRating": "Avaliação da crítica", "userRating": "Avaliação do usuário", - "lastPlayed": "Última reprodução", "datePlayed": "Data de reprodução", "playCount": "Reproduções", "productionYear": "Ano de produção", @@ -818,9 +807,7 @@ "dateShared": "Data de compartilhamento", "latestEpisodeAirDate": "Última data de exibição do episódio", "lastEpisodeDateAdded": "Data de adição do último episódio" - }, - "noItemsMatchFilters": "Nenhum item corresponde aos filtros ativos", - "resetFilters": "Redefinir filtros" + } }, "about": { "title": "Sobre", @@ -830,7 +817,6 @@ "viewLicensesDescription": "Ver licenças de bibliotecas de terceiros" }, "serverSelection": { - "allServerConnectionsFailed": "Não foi possível conectar a nenhum servidor. Verifique sua rede.", "noServersFoundForAccount": "Nenhum servidor encontrado para ${username} (${email})", "failedToLoadServers": "Falha ao carregar servidores: ${error}" }, @@ -893,7 +879,6 @@ "watchlistUpdateFailed": "Não foi possível atualizar a lista para ver", "notInLibrary": "Não está na sua biblioteca", "inTheseLibraries": "Nestas bibliotecas", - "availableOn": "Disponível em ${server}", "checkingLibrary": "Verificando a sua biblioteca...", "emptyTitle": "Ainda não há nada aqui", "emptyMessage": "As linhas de ${source} aparecerão aqui quando tiverem conteúdo.", @@ -907,6 +892,8 @@ "guide": "Guia", "noChannels": "Nenhum canal disponível", "noDvr": "Nenhum DVR configurado em nenhum servidor", + "serverUnavailable": "O servidor de TV em direto não está disponível.", + "serverNotConnected": "O servidor de TV em direto não está ligado.", "noPrograms": "Nenhum dado de programação disponível", "liveStreamFailed": "Falha no stream ao vivo", "unknownProgram": "Programa desconhecido", @@ -942,7 +929,6 @@ "scheduledRecordings": "Agendadas", "recordingRules": "Regras de gravação", "noScheduledRecordings": "Sem gravações agendadas", - "noRecordingRules": "Sem regras de gravação", "manageRecording": "Gerenciar gravação", "cancelRecording": "Cancelar gravação", "cancelRecordingTitle": "Cancelar esta gravação?", @@ -959,7 +945,6 @@ "recordingCancelled": "Gravação cancelada", "recordingRuleDeleted": "Regra de gravação excluída", "processRecordingRules": "Reavaliar regras", - "loadingRecordings": "Carregando gravações...", "recordingInProgress": "Gravando agora", "recordingsCount": "${count} agendadas", "editRule": "Editar regra", @@ -973,7 +958,6 @@ "title": "Coleções", "collection": "Coleção", "empty": "A coleção está vazia", - "unknownLibrarySection": "Não é possível excluir: Seção de biblioteca desconhecida", "deleteCollection": "Excluir Coleção", "deleteConfirm": "Excluir \"${title}\"? Não pode ser desfeito.", "deleted": "Coleção excluída", @@ -1013,6 +997,7 @@ "itemAdded": "Adicionado à playlist", "itemRemoved": "Removido da playlist", "selectPlaylist": "Selecionar Playlist", + "searchPlaylists": "Pesquisar playlists...", "errorCreating": "Falha ao criar playlist", "errorDeleting": "Falha ao excluir playlist", "errorLoading": "Falha ao carregar playlists", @@ -1102,15 +1087,15 @@ "participantResumed": "${name} retomou", "participantSeeked": "${name} avançou", "participantBuffering": "${name} está carregando", + "participantNeedsUpdate": "${name} está em uma versão mais antiga do aplicativo — sincronização indisponível", + "resumingWithout": "Retomando sem ${name}", "waitingForParticipants": "Aguardando outros carregarem...", + "waitingForName": "Aguardando ${name}...", "recentRooms": "Salas recentes", "renameRoom": "Renomear sala", "removeRoom": "Remover", "guestSwitchUnavailable": "Não foi possível trocar — servidor indisponível para sincronização", - "guestSwitchFailed": "Não foi possível trocar — conteúdo não encontrado neste servidor", - "participantNeedsUpdate": "${name} está em uma versão mais antiga do aplicativo — sincronização indisponível", - "resumingWithout": "Retomando sem ${name}", - "waitingForName": "Aguardando ${name}..." + "guestSwitchFailed": "Não foi possível trocar — conteúdo não encontrado neste servidor" }, "downloads": { "title": "Downloads", @@ -1155,7 +1140,6 @@ "customAmount": "Quantidade personalizada...", "includeSpecials": "Incluir especiais", "howManyEpisodes": "Quantos episódios?", - "itemsQueued": "${count} itens na fila de download", "keepSynced": "Manter sincronizado", "downloadOnce": "Baixar uma vez", "keepNUnwatched": "Manter ${count} não assistidos", @@ -1204,7 +1188,6 @@ "unknownDevice": "Dispositivo desconhecido", "session": { "startingServer": "A iniciar servidor remoto...", - "failedToCreate": "Falha ao iniciar o servidor remoto:", "hostAddress": "Endereço do host", "connected": "Conectado", "serverRunning": "Servidor remoto ativo", @@ -1265,6 +1248,8 @@ "errors": { "noNetworkInterface": "Nenhuma interface de rede encontrada", "authenticationFailed": "Falha na autenticação", + "serverStartFailed": "Falha ao iniciar o servidor remoto: ${error}", + "commandFailed": "Falha ao enviar o comando remoto: ${error}", "joinTimedOut": "Tempo esgotado ao entrar na sessão", "failedToConnectAnyAddress": "Falha ao conectar a qualquer endereço", "connectionLostAfterAttempts": "Conexão perdida após ${attempts} tentativas", @@ -1538,7 +1523,6 @@ "quickConnectFailed": "Quick Connect falhou: ${error}", "addPlexTitle": "Entrar com Plex", "pinExpired": "O PIN expirou antes do login. Tente novamente.", - "duplicatePlexAccount": "Você já entrou no Plex. Saia para trocar de conta.", "failedToRegisterAccount": "Falha ao registrar a conta: ${error}", "enterJellyfinUrlError": "Insira a URL do seu servidor Jellyfin", "addConnectionTitle": "Adicionar conexão", diff --git a/lib/i18n/ru.i18n.json b/lib/i18n/ru.i18n.json index e2c53628..8d2b19be 100644 --- a/lib/i18n/ru.i18n.json +++ b/lib/i18n/ru.i18n.json @@ -3,7 +3,6 @@ "title": "Plezy" }, "auth": { - "signIn": "Войти", "signInWithPlex": "Войти через Plex", "showQRCode": "Показать QR-код", "authenticate": "Аутентификация", @@ -56,10 +55,8 @@ "episodeNumberTitle": "Эпизод ${number} - ${title}", "chapterNumber": "Глава ${number}", "reconnect": "Переподключить", - "exit": "Выход", "viewAll": "Показать все", "checkingNetwork": "Проверка сети...", - "refreshingServers": "Обновление серверов...", "loadingServers": "Загрузка серверов...", "connectingToServers": "Подключение к серверам...", "startingOfflineMode": "Запуск автономного режима...", @@ -139,6 +136,12 @@ "tvFullCardLayoutDescription": "Использовать TV-карточки только с изображением и именами актёров поверх него", "focusGlow": "Свечение при фокусе", "focusGlowDescription": "Показывать мягкое свечение вокруг карточки в фокусе", + "visualEffects": "Визуальные эффекты", + "visualEffectsAuto": "Автоматически", + "visualEffectsAutoDescription": "Автоматически уменьшать эффекты на маломощных устройствах", + "visualEffectsFull": "Полные", + "visualEffectsReduced": "Уменьшенные", + "visualEffectsReducedDescription": "Меньше анимаций и графика с более низким разрешением", "hideSpoilers": "Скрыть спойлеры непросмотренных эпизодов", "hideSpoilersDescription": "Размывать миниатюры и описания непросмотренных серий", "playerBackend": "Бэкенд плеера", @@ -151,7 +154,7 @@ "bufferSizeAuto": "Авто (Рекомендуется)", "bufferSizeWarning": "Доступно памяти: ${heap}MB. Буфер ${size}MB может повлиять на воспроизведение.", "defaultQualityTitle": "Качество по умолчанию", - "defaultQualityDescription": "Используется при запуске воспроизведения. Более низкие значения снижают пропускную способность.", + "musicQualityTitle": "Качество музыки", "subtitleStyling": "Стиль субтитров", "subtitleStylingDescription": "Настроить внешний вид субтитров", "smallSkipDuration": "Малая перемотка", @@ -245,10 +248,9 @@ "maxVolumePercent": "${percent}%", "discordRichPresence": "Discord Rich Presence", "discordRichPresenceDescription": "Показывать, что вы смотрите, в Discord", - "trakt": "Trakt", - "traktDescription": "Синхронизировать историю просмотров с Trakt", "services": "Сервисы", "servicesDescription": "Подключите Trakt, MyAnimeList, Seerr и другие", + "manageLibrariesDescription": "Изменять порядок и скрывать библиотеки", "companionRemoteServer": "Сервер удалённого управления", "companionRemoteServerDescription": "Разрешить мобильным устройствам в сети управлять этим приложением", "autoPip": "Автоматический «картинка в картинке»", @@ -311,7 +313,6 @@ "showNavBarLabels": "Показывать подписи панели навигации", "showNavBarLabelsDescription": "Отображать текстовые подписи под иконками панели навигации", "startupSection": "Начальный раздел", - "startupSectionDescription": "Выберите, какой раздел Plezy открывает при запуске", "liveTvDefaultFavorites": "Избранные каналы по умолчанию", "liveTvDefaultFavoritesDescription": "Показывать только избранные каналы при открытии ТВ", "display": "Экран", @@ -322,14 +323,7 @@ "player": "Плеер", "subtitlesAndConfig": "Субтитры и конфигурация", "seekAndTiming": "Перемотка и время", - "behavior": "Поведение", - "manageLibrariesDescription": "Изменять порядок и скрывать библиотеки", - "visualEffects": "Визуальные эффекты", - "visualEffectsAuto": "Автоматически", - "visualEffectsAutoDescription": "Автоматически уменьшать эффекты на маломощных устройствах", - "visualEffectsFull": "Полные", - "visualEffectsReduced": "Уменьшенные", - "visualEffectsReducedDescription": "Меньше анимаций и графика с более низким разрешением" + "behavior": "Поведение" }, "search": { "hint": "Поиск фильмов, сериалов, музыки...", @@ -418,14 +412,11 @@ "rateSheet": { "title": "Оценить", "server": "Сервер", - "starValue": "${rating} / 5", - "scoreValue": "${score} / 10", - "setScore": "Установить оценку", + "favorite": "Добавить в избранное", + "favorited": "Добавлено в избранное", "saved": "Сохранено", "notAvailable": "Совпадений не найдено", - "noConnectedServices": "Подключите сервис в настройках, чтобы оценивать здесь.", - "favorite": "Добавить в избранное", - "favorited": "Добавлено в избранное" + "noConnectedServices": "Подключите сервис в настройках, чтобы оценивать здесь." }, "accessibility": { "mediaCardMovie": "${title}, фильм", @@ -435,7 +426,15 @@ "mediaCardWatched": "просмотрено", "mediaCardPartiallyWatched": "просмотрено ${percent} процентов", "mediaCardUnwatched": "не просмотрено", - "tapToPlay": "Нажмите для воспроизведения" + "tapToPlay": "Нажмите для воспроизведения", + "decrease": "Уменьшить", + "increase": "Увеличить", + "decreaseValue": "Уменьшить ${label}", + "increaseValue": "Увеличить ${label}", + "hue": "Цветовой тон", + "saturation": "Насыщенность", + "brightness": "Яркость", + "hexColor": "Шестнадцатеричный цвет" }, "tooltips": { "shufflePlay": "Случайное воспроизведение", @@ -481,13 +480,11 @@ "settingsButton": "Настройки воспроизведения", "tracksButton": "Аудио и субтитры", "chaptersButton": "Главы", - "versionsButton": "Версии видео", "versionQualityButton": "Версия и качество", "versionColumnHeader": "Версия", "qualityColumnHeader": "Качество", "qualityOriginal": "Оригинал", "qualityPresetLabel": "${resolution}p ${bitrate} Mbps", - "qualityBandwidthEstimate": "~${bitrate} Mbps", "transcodeUnavailableFallback": "Транскодирование недоступно — воспроизведение в оригинальном качестве", "pipButton": "Режим «картинка в картинке»", "aspectRatioButton": "Соотношение сторон", @@ -530,12 +527,7 @@ "subtitleDownloadFailed": "Не удалось загрузить субтитры", "searchLanguages": "Поиск языков..." }, - "userStatus": { - "admin": "Администратор", - "restricted": "Ограниченный", - "protected": "Защищённый", - "current": "ТЕКУЩИЙ" - }, + "userStatus": {}, "messages": { "markedAsWatched": "Отмечено как просмотренное", "markedAsUnwatched": "Отмечено как непросмотренное", @@ -676,8 +668,7 @@ "pinProtectionOptional": "Защита PIN-кодом (необязательно)", "pinExplain": "Для переключения профилей нужен 4-значный PIN.", "continueButton": "Продолжить", - "pinsDontMatch": "PIN-коды не совпадают", - "initializeServicesFailed": "Не удалось инициализировать службы профиля" + "pinsDontMatch": "PIN-коды не совпадают" }, "connections": { "sectionTitle": "Подключения", @@ -692,7 +683,6 @@ }, "discover": { "title": "Обзор", - "switchProfile": "Сменить профиль", "noContentAvailable": "Контент недоступен", "addMediaToLibraries": "Добавьте медиафайлы в ваши библиотеки", "continueWatching": "Продолжить просмотр", @@ -721,8 +711,6 @@ "connectionFailed": "Не удалось подключиться к медиасерверу", "failedToLoad": "Не удалось загрузить ${context}: ${error}", "noClientAvailable": "Клиент недоступен", - "authenticationFailed": "Ошибка аутентификации: ${error}", - "couldNotLaunchUrl": "Не удалось открыть URL аутентификации", "pleaseEnterToken": "Введите токен", "invalidToken": "Недействительный токен", "failedToVerifyToken": "Не удалось проверить токен: ${error}", @@ -749,6 +737,8 @@ "allLibrariesHidden": "Все библиотеки скрыты", "hiddenLibrariesCount": "Скрытые библиотеки (${count})", "thisLibraryIsEmpty": "Эта библиотека пуста", + "noItemsMatchFilters": "Нет элементов, соответствующих активным фильтрам", + "resetFilters": "Сбросить фильтры", "all": "Все", "clearAll": "Очистить все", "scanLibraryConfirm": "Вы уверены, что хотите сканировать \"${title}\"?", @@ -804,7 +794,6 @@ "communityRating": "Оценка сообщества", "criticRating": "Оценка критиков", "userRating": "Пользовательская оценка", - "lastPlayed": "Последний просмотр", "datePlayed": "Дата просмотра", "playCount": "Количество просмотров", "productionYear": "Год производства", @@ -818,9 +807,7 @@ "dateShared": "Дата открытия доступа", "latestEpisodeAirDate": "Дата выхода последнего эпизода", "lastEpisodeDateAdded": "Дата добавления последнего эпизода" - }, - "noItemsMatchFilters": "Нет элементов, соответствующих активным фильтрам", - "resetFilters": "Сбросить фильтры" + } }, "about": { "title": "О приложении", @@ -830,7 +817,6 @@ "viewLicensesDescription": "Просмотр лицензий сторонних библиотек" }, "serverSelection": { - "allServerConnectionsFailed": "Не удалось подключиться ни к одному серверу. Проверьте сеть.", "noServersFoundForAccount": "Серверы не найдены для ${username} (${email})", "failedToLoadServers": "Не удалось загрузить серверы: ${error}" }, @@ -895,7 +881,6 @@ "watchlistUpdateFailed": "Не удалось обновить список для просмотра", "notInLibrary": "Нет в вашей библиотеке", "inTheseLibraries": "В этих библиотеках", - "availableOn": "Доступно на ${server}", "checkingLibrary": "Проверка вашей библиотеки...", "emptyTitle": "Здесь пока ничего нет", "emptyMessage": "Строки из ${source} появятся здесь, когда в них будет контент.", @@ -909,6 +894,8 @@ "guide": "Программа", "noChannels": "Нет доступных каналов", "noDvr": "DVR не настроен ни на одном сервере", + "serverUnavailable": "Сервер прямого эфира недоступен.", + "serverNotConnected": "Сервер прямого эфира не подключён.", "noPrograms": "Нет данных о программах", "liveStreamFailed": "Не удалось запустить прямой эфир", "unknownProgram": "Неизвестная программа", @@ -944,7 +931,6 @@ "scheduledRecordings": "Запланировано", "recordingRules": "Правила записи", "noScheduledRecordings": "Нет запланированных записей", - "noRecordingRules": "Правил записи пока нет", "manageRecording": "Управление записью", "cancelRecording": "Отменить запись", "cancelRecordingTitle": "Отменить эту запись?", @@ -961,7 +947,6 @@ "recordingCancelled": "Запись отменена", "recordingRuleDeleted": "Правило записи удалено", "processRecordingRules": "Пересчитать правила", - "loadingRecordings": "Загрузка записей...", "recordingInProgress": "Идёт запись", "recordingsCount": "Запланировано: ${count}", "editRule": "Изменить правило", @@ -975,7 +960,6 @@ "title": "Коллекции", "collection": "Коллекция", "empty": "Коллекция пуста", - "unknownLibrarySection": "Невозможно удалить: неизвестный раздел библиотеки", "deleteCollection": "Удалить коллекцию", "deleteConfirm": "Удалить \"${title}\"? Это нельзя отменить.", "deleted": "Коллекция удалена", @@ -1015,6 +999,7 @@ "itemAdded": "Добавлено в плейлист", "itemRemoved": "Удалено из плейлиста", "selectPlaylist": "Выбрать плейлист", + "searchPlaylists": "Поиск плейлистов...", "errorCreating": "Не удалось создать плейлист", "errorDeleting": "Не удалось удалить плейлист", "errorLoading": "Не удалось загрузить плейлисты", @@ -1106,15 +1091,15 @@ "participantResumed": "${name} возобновил", "participantSeeked": "${name} перемотал", "participantBuffering": "${name} буферизует", + "participantNeedsUpdate": "${name} использует старую версию приложения — синхронизация недоступна", + "resumingWithout": "Возобновление без ${name}", "waitingForParticipants": "Ожидание загрузки у других...", + "waitingForName": "Ожидание ${name}...", "recentRooms": "Недавние комнаты", "renameRoom": "Переименовать комнату", "removeRoom": "Удалить", "guestSwitchUnavailable": "Не удалось переключиться — сервер недоступен для синхронизации", - "guestSwitchFailed": "Не удалось переключиться — содержимое не найдено на этом сервере", - "participantNeedsUpdate": "${name} использует старую версию приложения — синхронизация недоступна", - "resumingWithout": "Возобновление без ${name}", - "waitingForName": "Ожидание ${name}..." + "guestSwitchFailed": "Не удалось переключиться — содержимое не найдено на этом сервере" }, "downloads": { "title": "Загрузки", @@ -1159,7 +1144,6 @@ "customAmount": "Указать количество...", "includeSpecials": "Включить спецвыпуски", "howManyEpisodes": "Сколько эпизодов?", - "itemsQueued": "${count} элементов добавлено в очередь загрузки", "keepSynced": "Синхронизировать", "downloadOnce": "Скачать один раз", "keepNUnwatched": "Хранить ${count} непросмотренных", @@ -1208,7 +1192,6 @@ "unknownDevice": "Неизвестное устройство", "session": { "startingServer": "Запуск удалённого сервера...", - "failedToCreate": "Не удалось запустить удалённый сервер:", "hostAddress": "Адрес хоста", "connected": "Подключено", "serverRunning": "Удалённый сервер активен", @@ -1269,6 +1252,8 @@ "errors": { "noNetworkInterface": "Сетевой интерфейс не найден", "authenticationFailed": "Ошибка аутентификации", + "serverStartFailed": "Не удалось запустить удалённый сервер: ${error}", + "commandFailed": "Не удалось отправить удалённую команду: ${error}", "joinTimedOut": "Время подключения к сеансу истекло", "failedToConnectAnyAddress": "Не удалось подключиться ни к одному адресу", "connectionLostAfterAttempts": "Соединение потеряно после ${attempts} попыток", @@ -1542,7 +1527,6 @@ "quickConnectFailed": "Quick Connect не удался: ${error}", "addPlexTitle": "Войти через Plex", "pinExpired": "Срок действия PIN истёк до входа. Попробуйте снова.", - "duplicatePlexAccount": "В Plex уже выполнен вход. Выйдите, чтобы сменить аккаунт.", "failedToRegisterAccount": "Не удалось зарегистрировать учётную запись: ${error}", "enterJellyfinUrlError": "Введите URL вашего сервера Jellyfin", "addConnectionTitle": "Добавить подключение", diff --git a/lib/i18n/strings.g.dart b/lib/i18n/strings.g.dart index 6e94d0ee..5dbfb92d 100644 --- a/lib/i18n/strings.g.dart +++ b/lib/i18n/strings.g.dart @@ -4,7 +4,7 @@ /// To regenerate, run: `dart run slang` /// /// Locales: 16 -/// Strings: 22708 (1419 per locale) +/// Strings: 22466 (1404 per locale) // coverage:ignore-file // ignore_for_file: type=lint, unused_import diff --git a/lib/i18n/strings_bg.g.dart b/lib/i18n/strings_bg.g.dart index ff786af3..ed685946 100644 --- a/lib/i18n/strings_bg.g.dart +++ b/lib/i18n/strings_bg.g.dart @@ -53,7 +53,6 @@ class TranslationsBg extends Translations with BaseTranslations 'Вход'; @override String get signInWithPlex => 'Вход с Plex'; @override String get showQRCode => 'Покажи QR код'; @override String get authenticate => 'Удостовери'; @@ -167,10 +165,8 @@ class _TranslationsCommonBg extends TranslationsCommonEn { @override String episodeNumberTitle({required Object number, required Object title}) => 'Епизод ${number} - ${title}'; @override String chapterNumber({required Object number}) => 'Глава ${number}'; @override String get reconnect => 'Свържи отново'; - @override String get exit => 'Изход'; @override String get viewAll => 'Виж всички'; @override String get checkingNetwork => 'Проверка на мрежата...'; - @override String get refreshingServers => 'Опресняване на сървърите...'; @override String get loadingServers => 'Зареждане на сървърите...'; @override String get connectingToServers => 'Свързване със сървърите...'; @override String get startingOfflineMode => 'Стартиране на офлайн режим...'; @@ -271,6 +267,12 @@ class _TranslationsSettingsBg extends TranslationsSettingsEn { @override String get tvFullCardLayoutDescription => 'Използвай TV карти само с изображения, с насложени имена на актьорите'; @override String get focusGlow => 'Сияние при фокус'; @override String get focusGlowDescription => 'Показвай меко сияние около фокусираната карта'; + @override String get visualEffects => 'Визуални ефекти'; + @override String get visualEffectsAuto => 'Автоматично'; + @override String get visualEffectsAutoDescription => 'Автоматично намалявай ефектите на по-слаби устройства'; + @override String get visualEffectsFull => 'Пълни'; + @override String get visualEffectsReduced => 'Намалени'; + @override String get visualEffectsReducedDescription => 'По-малко анимации и изображения с по-ниска резолюция'; @override String get hideSpoilers => 'Скривай спойлери за негледани епизоди'; @override String get hideSpoilersDescription => 'Замазвай миниатюри и описания за негледани епизоди'; @override String get playerBackend => 'Енджин на плеъра'; @@ -283,7 +285,7 @@ class _TranslationsSettingsBg extends TranslationsSettingsEn { @override String get bufferSizeAuto => 'Автоматично (препоръчително)'; @override String bufferSizeWarning({required Object heap, required Object size}) => 'Налична памет ${heap}MB. Буфер ${size}MB може да повлияе на възпроизвеждането.'; @override String get defaultQualityTitle => 'Качество по подразбиране'; - @override String get defaultQualityDescription => 'Използва се при стартиране на възпроизвеждане. По-ниските стойности намаляват трафика.'; + @override String get musicQualityTitle => 'Качество на музиката'; @override String get subtitleStyling => 'Стил на субтитрите'; @override String get subtitleStylingDescription => 'Настройване на вида на субтитрите'; @override String get smallSkipDuration => 'Малко прескачане'; @@ -377,10 +379,9 @@ class _TranslationsSettingsBg extends TranslationsSettingsEn { @override String maxVolumePercent({required Object percent}) => '${percent}%'; @override String get discordRichPresence => 'Discord Rich Presence'; @override String get discordRichPresenceDescription => 'Показвай какво гледате в Discord'; - @override String get trakt => 'Trakt'; - @override String get traktDescription => 'Синхронизирай историята на гледане с Trakt'; @override String get services => 'Услуги'; @override String get servicesDescription => 'Свържи Trakt, MyAnimeList, Seerr и още'; + @override String get manageLibrariesDescription => 'Пренареждай и скривай библиотеки'; @override String get companionRemoteServer => 'Сървър за дистанционно управление'; @override String get companionRemoteServerDescription => 'Позволи на мобилни устройства във вашата мрежа да управляват това приложение'; @override String get autoPip => 'Автоматичен режим картина в картината'; @@ -443,7 +444,6 @@ class _TranslationsSettingsBg extends TranslationsSettingsEn { @override String get showNavBarLabels => 'Показвай етикети в навигационната лента'; @override String get showNavBarLabelsDescription => 'Показвай текстови етикети под иконите в навигационната лента'; @override String get startupSection => 'Начален раздел'; - @override String get startupSectionDescription => 'Изберете кой раздел да отваря Plezy при стартиране'; @override String get liveTvDefaultFavorites => 'По подразбиране към любими канали'; @override String get liveTvDefaultFavoritesDescription => 'Показвай само любими канали при отваряне на телевизия на живо'; @override String get display => 'Дисплей'; @@ -455,13 +455,6 @@ class _TranslationsSettingsBg extends TranslationsSettingsEn { @override String get subtitlesAndConfig => 'Субтитри и конфигурация'; @override String get seekAndTiming => 'Търсене и време'; @override String get behavior => 'Поведение'; - @override String get manageLibrariesDescription => 'Пренареждай и скривай библиотеки'; - @override String get visualEffects => 'Визуални ефекти'; - @override String get visualEffectsAuto => 'Автоматично'; - @override String get visualEffectsAutoDescription => 'Автоматично намалявай ефектите на по-слаби устройства'; - @override String get visualEffectsFull => 'Пълни'; - @override String get visualEffectsReduced => 'Намалени'; - @override String get visualEffectsReducedDescription => 'По-малко анимации и изображения с по-ниска резолюция'; } // Path: search @@ -559,14 +552,11 @@ class _TranslationsRateSheetBg extends TranslationsRateSheetEn { // Translations @override String get title => 'Оцени'; @override String get server => 'Сървър'; - @override String starValue({required Object rating}) => '${rating} / 5'; - @override String scoreValue({required Object score}) => '${score} / 10'; - @override String get setScore => 'Задай оценка'; + @override String get favorite => 'Добави в любими'; + @override String get favorited => 'Добавено в любими'; @override String get saved => 'Запазено'; @override String get notAvailable => 'Няма намерено съвпадение'; @override String get noConnectedServices => 'Свържи услуга в Настройки, за да оценяваш там.'; - @override String get favorite => 'Добави в любими'; - @override String get favorited => 'Добавено в любими'; } // Path: accessibility @@ -584,6 +574,14 @@ class _TranslationsAccessibilityBg extends TranslationsAccessibilityEn { @override String mediaCardPartiallyWatched({required Object percent}) => '${percent} процента изгледано'; @override String get mediaCardUnwatched => 'негледано'; @override String get tapToPlay => 'Докоснете за възпроизвеждане'; + @override String get decrease => 'Намали'; + @override String get increase => 'Увеличи'; + @override String decreaseValue({required Object label}) => 'Намали ${label}'; + @override String increaseValue({required Object label}) => 'Увеличи ${label}'; + @override String get hue => 'Нюанс'; + @override String get saturation => 'Наситеност'; + @override String get brightness => 'Яркост'; + @override String get hexColor => 'Шестнадесетичен цвят'; } // Path: tooltips @@ -643,13 +641,11 @@ class _TranslationsVideoControlsBg extends TranslationsVideoControlsEn { @override String get settingsButton => 'Настройки на възпроизвеждането'; @override String get tracksButton => 'Аудио и субтитри'; @override String get chaptersButton => 'Глави'; - @override String get versionsButton => 'Видео версии'; @override String get versionQualityButton => 'Версия и качество'; @override String get versionColumnHeader => 'Версия'; @override String get qualityColumnHeader => 'Качество'; @override String get qualityOriginal => 'Оригинал'; @override String qualityPresetLabel({required Object resolution, required Object bitrate}) => '${resolution}p ${bitrate} Mbps'; - @override String qualityBandwidthEstimate({required Object bitrate}) => '~${bitrate} Mbps'; @override String get transcodeUnavailableFallback => 'Транскодирането не е налично — пуска се оригиналното качество'; @override String get pipButton => 'Режим картина в картината'; @override String get aspectRatioButton => 'Съотношение на страните'; @@ -685,19 +681,6 @@ class _TranslationsVideoControlsBg extends TranslationsVideoControlsEn { @override String get searchLanguages => 'Търсене на езици...'; } -// Path: userStatus -class _TranslationsUserStatusBg extends TranslationsUserStatusEn { - _TranslationsUserStatusBg._(TranslationsBg root) : this._root = root, super.internal(root); - - final TranslationsBg _root; // ignore: unused_field - - // Translations - @override String get admin => 'Администратор'; - @override String get restricted => 'Ограничен'; - @override String get protected => 'Защитен'; - @override String get current => 'ТЕКУЩ'; -} - // Path: messages class _TranslationsMessagesBg extends TranslationsMessagesEn { _TranslationsMessagesBg._(TranslationsBg root) : this._root = root, super.internal(root); @@ -873,7 +856,6 @@ class _TranslationsProfilesBg extends TranslationsProfilesEn { @override String get pinExplain => 'Изисква се 4-цифрен PIN за смяна на профили.'; @override String get continueButton => 'Продължи'; @override String get pinsDontMatch => 'PIN кодовете не съвпадат'; - @override String get initializeServicesFailed => 'Неуспешно инициализиране на услугите за профили'; } // Path: connections @@ -902,7 +884,6 @@ class _TranslationsDiscoverBg extends TranslationsDiscoverEn { // Translations @override String get title => 'Открий'; - @override String get switchProfile => 'Смяна на профил'; @override String get noContentAvailable => 'Няма налично съдържание'; @override String get addMediaToLibraries => 'Добавете медия към библиотеките си'; @override String get continueWatching => 'Продължи гледането'; @@ -938,8 +919,6 @@ class _TranslationsErrorsBg extends TranslationsErrorsEn { @override String get connectionFailed => 'Не може да се осъществи връзка с медиен сървър'; @override String failedToLoad({required Object context, required Object error}) => 'Неуспешно зареждане на ${context}: ${error}'; @override String get noClientAvailable => 'Няма наличен клиент'; - @override String authenticationFailed({required Object error}) => 'Удостоверяването е неуспешно: ${error}'; - @override String get couldNotLaunchUrl => 'URL адресът за удостоверяване не може да бъде отворен'; @override String get pleaseEnterToken => 'Моля, въведете токен'; @override String get invalidToken => 'Невалиден токен'; @override String failedToVerifyToken({required Object error}) => 'Неуспешна проверка на токена: ${error}'; @@ -973,6 +952,8 @@ class _TranslationsLibrariesBg extends TranslationsLibrariesEn { @override String get allLibrariesHidden => 'Всички библиотеки са скрити'; @override String hiddenLibrariesCount({required Object count}) => 'Скрити библиотеки (${count})'; @override String get thisLibraryIsEmpty => 'Тази библиотека е празна'; + @override String get noItemsMatchFilters => 'Няма елементи, съответстващи на активните филтри'; + @override String get resetFilters => 'Нулирай филтрите'; @override String get all => 'Всички'; @override String get clearAll => 'Изчисти всички'; @override String scanLibraryConfirm({required Object title}) => 'Сигурни ли сте, че искате да сканирате "${title}"?'; @@ -998,8 +979,6 @@ class _TranslationsLibrariesBg extends TranslationsLibrariesEn { @override late final _TranslationsLibrariesGroupingsBg groupings = _TranslationsLibrariesGroupingsBg._(_root); @override late final _TranslationsLibrariesFilterCategoriesBg filterCategories = _TranslationsLibrariesFilterCategoriesBg._(_root); @override late final _TranslationsLibrariesSortLabelsBg sortLabels = _TranslationsLibrariesSortLabelsBg._(_root); - @override String get noItemsMatchFilters => 'Няма елементи, съответстващи на активните филтри'; - @override String get resetFilters => 'Нулирай филтрите'; } // Path: about @@ -1023,7 +1002,6 @@ class _TranslationsServerSelectionBg extends TranslationsServerSelectionEn { final TranslationsBg _root; // ignore: unused_field // Translations - @override String get allServerConnectionsFailed => 'Не може да се осъществи връзка с нито един сървър. Проверете мрежата.'; @override String noServersFoundForAccount({required Object username, required Object email}) => 'Не са намерени сървъри за ${username} (${email})'; @override String failedToLoadServers({required Object error}) => 'Неуспешно зареждане на сървъри: ${error}'; } @@ -1102,7 +1080,6 @@ class _TranslationsExploreBg extends TranslationsExploreEn { @override String get watchlistUpdateFailed => 'Неуспешно обновяване на списъка за гледане'; @override String get notInLibrary => 'Не е в твоята библиотека'; @override String get inTheseLibraries => 'В тези библиотеки'; - @override String availableOn({required Object server}) => 'Налично на ${server}'; @override String get checkingLibrary => 'Проверка на твоята библиотека...'; @override String get emptyTitle => 'Тук все още няма нищо'; @override String emptyMessage({required Object source}) => 'Редовете от ${source} ще се появят тук, когато има съдържание.'; @@ -1123,6 +1100,8 @@ class _TranslationsLiveTvBg extends TranslationsLiveTvEn { @override String get guide => 'ТВ програма'; @override String get noChannels => 'Няма налични канали'; @override String get noDvr => 'Няма конфигуриран DVR на нито един сървър'; + @override String get serverUnavailable => 'Сървърът за телевизия на живо не е наличен.'; + @override String get serverNotConnected => 'Сървърът за телевизия на живо не е свързан.'; @override String get noPrograms => 'Няма налични програмни данни'; @override String get liveStreamFailed => 'Потокът на живо се провали'; @override String get unknownProgram => 'Неизвестна програма'; @@ -1158,7 +1137,6 @@ class _TranslationsLiveTvBg extends TranslationsLiveTvEn { @override String get scheduledRecordings => 'Планирани'; @override String get recordingRules => 'Правила за запис'; @override String get noScheduledRecordings => 'Няма планирани записи'; - @override String get noRecordingRules => 'Все още няма правила за запис'; @override String get manageRecording => 'Управление на запис'; @override String get cancelRecording => 'Отмени запис'; @override String get cancelRecordingTitle => 'Да се отмени ли този запис?'; @@ -1175,7 +1153,6 @@ class _TranslationsLiveTvBg extends TranslationsLiveTvEn { @override String get recordingCancelled => 'Записът е отменен'; @override String get recordingRuleDeleted => 'Правилото за запис е изтрито'; @override String get processRecordingRules => 'Преоцени правилата'; - @override String get loadingRecordings => 'Зареждане на записи...'; @override String get recordingInProgress => 'Записва се сега'; @override String recordingsCount({required Object count}) => '${count} планирани'; @override String get editRule => 'Редактирай правило'; @@ -1196,7 +1173,6 @@ class _TranslationsCollectionsBg extends TranslationsCollectionsEn { @override String get title => 'Колекции'; @override String get collection => 'Колекция'; @override String get empty => 'Колекцията е празна'; - @override String get unknownLibrarySection => 'Не може да се изтрие: неизвестна секция на библиотеката'; @override String get deleteCollection => 'Изтрий колекция'; @override String deleteConfirm({required Object title}) => 'Да се изтрие ли "${title}"? Това не може да бъде отменено.'; @override String get deleted => 'Колекцията е изтрита'; @@ -1243,6 +1219,7 @@ class _TranslationsPlaylistsBg extends TranslationsPlaylistsEn { @override String get itemAdded => 'Добавено към плейлист'; @override String get itemRemoved => 'Премахнато от плейлист'; @override String get selectPlaylist => 'Избери плейлист'; + @override String get searchPlaylists => 'Търсене в плейлисти...'; @override String get errorCreating => 'Неуспешно създаване на плейлист'; @override String get errorDeleting => 'Неуспешно изтриване на плейлист'; @override String get errorLoading => 'Неуспешно зареждане на плейлисти'; @@ -1346,15 +1323,15 @@ class _TranslationsWatchTogetherBg extends TranslationsWatchTogetherEn { @override String participantResumed({required Object name}) => '${name} продължи'; @override String participantSeeked({required Object name}) => '${name} превъртя'; @override String participantBuffering({required Object name}) => '${name} буферира'; + @override String participantNeedsUpdate({required Object name}) => '${name} е с по-стара версия на приложението — синхронизирането не е налично'; + @override String resumingWithout({required Object name}) => 'Продължаване без ${name}'; @override String get waitingForParticipants => 'Изчакване другите да заредят...'; + @override String waitingForName({required Object name}) => 'Изчакване на ${name}...'; @override String get recentRooms => 'Скорошни стаи'; @override String get renameRoom => 'Преименувай стая'; @override String get removeRoom => 'Премахни'; @override String get guestSwitchUnavailable => 'Превключването не е възможно — сървърът е недостъпен за синхронизация'; @override String get guestSwitchFailed => 'Превключването не е възможно — съдържанието не е намерено на този сървър'; - @override String participantNeedsUpdate({required Object name}) => '${name} е с по-стара версия на приложението — синхронизирането не е налично'; - @override String resumingWithout({required Object name}) => 'Продължаване без ${name}'; - @override String waitingForName({required Object name}) => 'Изчакване на ${name}...'; } // Path: downloads @@ -1406,7 +1383,6 @@ class _TranslationsDownloadsBg extends TranslationsDownloadsEn { @override String get customAmount => 'Персонален брой...'; @override String get includeSpecials => 'Включи специалните'; @override String get howManyEpisodes => 'Колко епизода?'; - @override String itemsQueued({required Object count}) => '${count} елемента са добавени в опашката за изтегляне'; @override String get keepSynced => 'Поддържай синхронизирано'; @override String get downloadOnce => 'Изтегли еднократно'; @override String keepNUnwatched({required Object count}) => 'Пази ${count} негледани'; @@ -1780,7 +1756,6 @@ class _TranslationsAddServerBg extends TranslationsAddServerEn { @override String quickConnectFailed({required Object error}) => 'Quick Connect е неуспешен: ${error}'; @override String get addPlexTitle => 'Вход с Plex'; @override String get pinExpired => 'PIN-ът изтече преди вход. Моля, опитайте отново.'; - @override String get duplicatePlexAccount => 'Вече сте влезли в Plex. Излезте, за да смените акаунта.'; @override String failedToRegisterAccount({required Object error}) => 'Неуспешна регистрация на акаунт: ${error}'; @override String get enterJellyfinUrlError => 'Въведете URL адреса на вашия Jellyfin сървър'; @override String get addConnectionTitle => 'Добави връзка'; @@ -1906,7 +1881,6 @@ class _TranslationsLibrariesSortLabelsBg extends TranslationsLibrariesSortLabels @override String get communityRating => 'Оценка от общността'; @override String get criticRating => 'Оценка от критиците'; @override String get userRating => 'Потребителска оценка'; - @override String get lastPlayed => 'Последно възпроизведено'; @override String get datePlayed => 'Дата на възпроизвеждане'; @override String get playCount => 'Брой възпроизвеждания'; @override String get productionYear => 'Година на производство'; @@ -1965,7 +1939,6 @@ class _TranslationsCompanionRemoteSessionBg extends TranslationsCompanionRemoteS // Translations @override String get startingServer => 'Стартиране на сървър за дистанционно управление...'; - @override String get failedToCreate => 'Неуспешно стартиране на сървър за дистанционно управление:'; @override String get hostAddress => 'Адрес на хоста'; @override String get connected => 'Свързан'; @override String get serverRunning => 'Сървърът за дистанционно управление е активен'; @@ -2047,6 +2020,8 @@ class _TranslationsCompanionRemoteErrorsBg extends TranslationsCompanionRemoteEr // Translations @override String get noNetworkInterface => 'Не е намерен мрежов интерфейс'; @override String get authenticationFailed => 'Неуспешно удостоверяване'; + @override String serverStartFailed({required Object error}) => 'Неуспешно стартиране на отдалечения сървър: ${error}'; + @override String commandFailed({required Object error}) => 'Неуспешно изпращане на отдалечена команда: ${error}'; @override String get joinTimedOut => 'Времето за присъединяване към сесията изтече'; @override String get failedToConnectAnyAddress => 'Неуспешно свързване към който и да е адрес'; @override String connectionLostAfterAttempts({required Object attempts}) => 'Връзката е загубена след ${attempts} опита'; @@ -2123,7 +2098,6 @@ extension on TranslationsBg { dynamic _flatMapFunction(String path) { return switch (path) { 'app.title' => 'Plezy', - 'auth.signIn' => 'Вход', 'auth.signInWithPlex' => 'Вход с Plex', 'auth.showQRCode' => 'Покажи QR код', 'auth.authenticate' => 'Удостовери', @@ -2174,10 +2148,8 @@ extension on TranslationsBg { 'common.episodeNumberTitle' => ({required Object number, required Object title}) => 'Епизод ${number} - ${title}', 'common.chapterNumber' => ({required Object number}) => 'Глава ${number}', 'common.reconnect' => 'Свържи отново', - 'common.exit' => 'Изход', 'common.viewAll' => 'Виж всички', 'common.checkingNetwork' => 'Проверка на мрежата...', - 'common.refreshingServers' => 'Опресняване на сървърите...', 'common.loadingServers' => 'Зареждане на сървърите...', 'common.connectingToServers' => 'Свързване със сървърите...', 'common.startingOfflineMode' => 'Стартиране на офлайн режим...', @@ -2251,6 +2223,12 @@ extension on TranslationsBg { 'settings.tvFullCardLayoutDescription' => 'Използвай TV карти само с изображения, с насложени имена на актьорите', 'settings.focusGlow' => 'Сияние при фокус', 'settings.focusGlowDescription' => 'Показвай меко сияние около фокусираната карта', + 'settings.visualEffects' => 'Визуални ефекти', + 'settings.visualEffectsAuto' => 'Автоматично', + 'settings.visualEffectsAutoDescription' => 'Автоматично намалявай ефектите на по-слаби устройства', + 'settings.visualEffectsFull' => 'Пълни', + 'settings.visualEffectsReduced' => 'Намалени', + 'settings.visualEffectsReducedDescription' => 'По-малко анимации и изображения с по-ниска резолюция', 'settings.hideSpoilers' => 'Скривай спойлери за негледани епизоди', 'settings.hideSpoilersDescription' => 'Замазвай миниатюри и описания за негледани епизоди', 'settings.playerBackend' => 'Енджин на плеъра', @@ -2263,7 +2241,7 @@ extension on TranslationsBg { 'settings.bufferSizeAuto' => 'Автоматично (препоръчително)', 'settings.bufferSizeWarning' => ({required Object heap, required Object size}) => 'Налична памет ${heap}MB. Буфер ${size}MB може да повлияе на възпроизвеждането.', 'settings.defaultQualityTitle' => 'Качество по подразбиране', - 'settings.defaultQualityDescription' => 'Използва се при стартиране на възпроизвеждане. По-ниските стойности намаляват трафика.', + 'settings.musicQualityTitle' => 'Качество на музиката', 'settings.subtitleStyling' => 'Стил на субтитрите', 'settings.subtitleStylingDescription' => 'Настройване на вида на субтитрите', 'settings.smallSkipDuration' => 'Малко прескачане', @@ -2357,10 +2335,9 @@ extension on TranslationsBg { 'settings.maxVolumePercent' => ({required Object percent}) => '${percent}%', 'settings.discordRichPresence' => 'Discord Rich Presence', 'settings.discordRichPresenceDescription' => 'Показвай какво гледате в Discord', - 'settings.trakt' => 'Trakt', - 'settings.traktDescription' => 'Синхронизирай историята на гледане с Trakt', 'settings.services' => 'Услуги', 'settings.servicesDescription' => 'Свържи Trakt, MyAnimeList, Seerr и още', + 'settings.manageLibrariesDescription' => 'Пренареждай и скривай библиотеки', 'settings.companionRemoteServer' => 'Сървър за дистанционно управление', 'settings.companionRemoteServerDescription' => 'Позволи на мобилни устройства във вашата мрежа да управляват това приложение', 'settings.autoPip' => 'Автоматичен режим картина в картината', @@ -2423,7 +2400,6 @@ extension on TranslationsBg { 'settings.showNavBarLabels' => 'Показвай етикети в навигационната лента', 'settings.showNavBarLabelsDescription' => 'Показвай текстови етикети под иконите в навигационната лента', 'settings.startupSection' => 'Начален раздел', - 'settings.startupSectionDescription' => 'Изберете кой раздел да отваря Plezy при стартиране', 'settings.liveTvDefaultFavorites' => 'По подразбиране към любими канали', 'settings.liveTvDefaultFavoritesDescription' => 'Показвай само любими канали при отваряне на телевизия на живо', 'settings.display' => 'Дисплей', @@ -2435,13 +2411,6 @@ extension on TranslationsBg { 'settings.subtitlesAndConfig' => 'Субтитри и конфигурация', 'settings.seekAndTiming' => 'Търсене и време', 'settings.behavior' => 'Поведение', - 'settings.manageLibrariesDescription' => 'Пренареждай и скривай библиотеки', - 'settings.visualEffects' => 'Визуални ефекти', - 'settings.visualEffectsAuto' => 'Автоматично', - 'settings.visualEffectsAutoDescription' => 'Автоматично намалявай ефектите на по-слаби устройства', - 'settings.visualEffectsFull' => 'Пълни', - 'settings.visualEffectsReduced' => 'Намалени', - 'settings.visualEffectsReducedDescription' => 'По-малко анимации и изображения с по-ниска резолюция', 'search.hint' => 'Търсене на филми, сериали, музика...', 'search.tryDifferentTerm' => 'Опитайте с различна дума за търсене', 'search.searchYourMedia' => 'Търсете във вашата медия', @@ -2518,14 +2487,11 @@ extension on TranslationsBg { 'mediaMenu.playVersion' => 'Пусни версия...', 'rateSheet.title' => 'Оцени', 'rateSheet.server' => 'Сървър', - 'rateSheet.starValue' => ({required Object rating}) => '${rating} / 5', - 'rateSheet.scoreValue' => ({required Object score}) => '${score} / 10', - 'rateSheet.setScore' => 'Задай оценка', + 'rateSheet.favorite' => 'Добави в любими', + 'rateSheet.favorited' => 'Добавено в любими', 'rateSheet.saved' => 'Запазено', 'rateSheet.notAvailable' => 'Няма намерено съвпадение', 'rateSheet.noConnectedServices' => 'Свържи услуга в Настройки, за да оценяваш там.', - 'rateSheet.favorite' => 'Добави в любими', - 'rateSheet.favorited' => 'Добавено в любими', 'accessibility.mediaCardMovie' => ({required Object title}) => '${title}, филм', 'accessibility.mediaCardShow' => ({required Object title}) => '${title}, ТВ сериал', 'accessibility.mediaCardEpisode' => ({required Object title, required Object episodeInfo}) => '${title}, ${episodeInfo}', @@ -2534,6 +2500,14 @@ extension on TranslationsBg { 'accessibility.mediaCardPartiallyWatched' => ({required Object percent}) => '${percent} процента изгледано', 'accessibility.mediaCardUnwatched' => 'негледано', 'accessibility.tapToPlay' => 'Докоснете за възпроизвеждане', + 'accessibility.decrease' => 'Намали', + 'accessibility.increase' => 'Увеличи', + 'accessibility.decreaseValue' => ({required Object label}) => 'Намали ${label}', + 'accessibility.increaseValue' => ({required Object label}) => 'Увеличи ${label}', + 'accessibility.hue' => 'Нюанс', + 'accessibility.saturation' => 'Наситеност', + 'accessibility.brightness' => 'Яркост', + 'accessibility.hexColor' => 'Шестнадесетичен цвят', 'tooltips.shufflePlay' => 'Разбъркано възпроизвеждане', 'tooltips.playTrailer' => 'Пусни трейлър', 'tooltips.markAsWatched' => 'Маркирай като гледано', @@ -2575,13 +2549,11 @@ extension on TranslationsBg { 'videoControls.settingsButton' => 'Настройки на възпроизвеждането', 'videoControls.tracksButton' => 'Аудио и субтитри', 'videoControls.chaptersButton' => 'Глави', - 'videoControls.versionsButton' => 'Видео версии', 'videoControls.versionQualityButton' => 'Версия и качество', 'videoControls.versionColumnHeader' => 'Версия', 'videoControls.qualityColumnHeader' => 'Качество', 'videoControls.qualityOriginal' => 'Оригинал', 'videoControls.qualityPresetLabel' => ({required Object resolution, required Object bitrate}) => '${resolution}p ${bitrate} Mbps', - 'videoControls.qualityBandwidthEstimate' => ({required Object bitrate}) => '~${bitrate} Mbps', 'videoControls.transcodeUnavailableFallback' => 'Транскодирането не е налично — пуска се оригиналното качество', 'videoControls.pipButton' => 'Режим картина в картината', 'videoControls.aspectRatioButton' => 'Съотношение на страните', @@ -2621,10 +2593,6 @@ extension on TranslationsBg { 'videoControls.subtitleDownloaded' => 'Субтитърът е изтеглен', 'videoControls.subtitleDownloadFailed' => 'Неуспешно изтегляне на субтитър', 'videoControls.searchLanguages' => 'Търсене на езици...', - 'userStatus.admin' => 'Администратор', - 'userStatus.restricted' => 'Ограничен', - 'userStatus.protected' => 'Защитен', - 'userStatus.current' => 'ТЕКУЩ', 'messages.markedAsWatched' => 'Маркирано като гледано', 'messages.markedAsUnwatched' => 'Маркирано като негледано', 'messages.markedAsWatchedOffline' => 'Маркирано като гледано (ще се синхронизира, когато сте онлайн)', @@ -2634,8 +2602,6 @@ extension on TranslationsBg { 'messages.errorLoading' => ({required Object error}) => 'Грешка: ${error}', 'messages.streamInterrupted' => 'Потокът прекъсна. Натиснете „Пусни“ или превъртете, за да опитате отново.', 'messages.fileInfoNotAvailable' => 'Информацията за файла не е налична', - _ => null, - } ?? switch (path) { 'messages.errorLoadingFileInfo' => ({required Object error}) => 'Грешка при зареждане на информация за файла: ${error}', 'messages.errorLoadingSeries' => 'Грешка при зареждане на сериала', 'messages.musicNotSupported' => 'Възпроизвеждането на музика все още не се поддържа', @@ -2643,6 +2609,8 @@ extension on TranslationsBg { 'messages.noProfilesAvailable' => 'Няма налични профили', 'messages.contactAdminForProfiles' => 'Свържете се с администратора на сървъра, за да добави профили', 'messages.unableToDetermineLibrarySection' => 'Не може да се определи секцията на библиотеката за този елемент', + _ => null, + } ?? switch (path) { 'messages.logsCleared' => 'Логовете са изчистени', 'messages.logsCopied' => 'Логовете са копирани в клипборда', 'messages.noLogsAvailable' => 'Няма налични логове', @@ -2759,7 +2727,6 @@ extension on TranslationsBg { 'profiles.pinExplain' => 'Изисква се 4-цифрен PIN за смяна на профили.', 'profiles.continueButton' => 'Продължи', 'profiles.pinsDontMatch' => 'PIN кодовете не съвпадат', - 'profiles.initializeServicesFailed' => 'Неуспешно инициализиране на услугите за профили', 'connections.sectionTitle' => 'Връзки', 'connections.addConnection' => 'Добави връзка', 'connections.addConnectionSubtitleNoProfile' => 'Влезте с Plex или свържете Jellyfin сървър', @@ -2770,7 +2737,6 @@ extension on TranslationsBg { 'connections.editJellyfinTitle' => 'Редактиране на Jellyfin връзка', 'connections.editJellyfinIntro' => ({required Object serverName}) => 'Добавете или премахнете URL адреси за ${serverName}. Plezy ще използва достъпния URL адрес с най-ниска латентност.', 'discover.title' => 'Открий', - 'discover.switchProfile' => 'Смяна на профил', 'discover.noContentAvailable' => 'Няма налично съдържание', 'discover.addMediaToLibraries' => 'Добавете медия към библиотеките си', 'discover.continueWatching' => 'Продължи гледането', @@ -2797,8 +2763,6 @@ extension on TranslationsBg { 'errors.connectionFailed' => 'Не може да се осъществи връзка с медиен сървър', 'errors.failedToLoad' => ({required Object context, required Object error}) => 'Неуспешно зареждане на ${context}: ${error}', 'errors.noClientAvailable' => 'Няма наличен клиент', - 'errors.authenticationFailed' => ({required Object error}) => 'Удостоверяването е неуспешно: ${error}', - 'errors.couldNotLaunchUrl' => 'URL адресът за удостоверяване не може да бъде отворен', 'errors.pleaseEnterToken' => 'Моля, въведете токен', 'errors.invalidToken' => 'Невалиден токен', 'errors.failedToVerifyToken' => ({required Object error}) => 'Неуспешна проверка на токена: ${error}', @@ -2823,6 +2787,8 @@ extension on TranslationsBg { 'libraries.allLibrariesHidden' => 'Всички библиотеки са скрити', 'libraries.hiddenLibrariesCount' => ({required Object count}) => 'Скрити библиотеки (${count})', 'libraries.thisLibraryIsEmpty' => 'Тази библиотека е празна', + 'libraries.noItemsMatchFilters' => 'Няма елементи, съответстващи на активните филтри', + 'libraries.resetFilters' => 'Нулирай филтрите', 'libraries.all' => 'Всички', 'libraries.clearAll' => 'Изчисти всички', 'libraries.scanLibraryConfirm' => ({required Object title}) => 'Сигурни ли сте, че искате да сканирате "${title}"?', @@ -2871,7 +2837,6 @@ extension on TranslationsBg { 'libraries.sortLabels.communityRating' => 'Оценка от общността', 'libraries.sortLabels.criticRating' => 'Оценка от критиците', 'libraries.sortLabels.userRating' => 'Потребителска оценка', - 'libraries.sortLabels.lastPlayed' => 'Последно възпроизведено', 'libraries.sortLabels.datePlayed' => 'Дата на възпроизвеждане', 'libraries.sortLabels.playCount' => 'Брой възпроизвеждания', 'libraries.sortLabels.productionYear' => 'Година на производство', @@ -2885,14 +2850,11 @@ extension on TranslationsBg { 'libraries.sortLabels.dateShared' => 'Дата на споделяне', 'libraries.sortLabels.latestEpisodeAirDate' => 'Дата на излъчване на последния епизод', 'libraries.sortLabels.lastEpisodeDateAdded' => 'Дата на добавяне на последния епизод', - 'libraries.noItemsMatchFilters' => 'Няма елементи, съответстващи на активните филтри', - 'libraries.resetFilters' => 'Нулирай филтрите', 'about.title' => 'Относно', 'about.openSourceLicenses' => 'Лицензи с отворен код', 'about.versionLabel' => ({required Object version}) => 'Версия ${version}', 'about.appDescription' => 'Красив Plex и Jellyfin клиент за Flutter', 'about.viewLicensesDescription' => 'Виж лицензите на библиотеки на трети страни', - 'serverSelection.allServerConnectionsFailed' => 'Не може да се осъществи връзка с нито един сървър. Проверете мрежата.', 'serverSelection.noServersFoundForAccount' => ({required Object username, required Object email}) => 'Не са намерени сървъри за ${username} (${email})', 'serverSelection.failedToLoadServers' => ({required Object error}) => 'Неуспешно зареждане на сървъри: ${error}', 'hubDetail.title' => 'Заглавие', @@ -2938,7 +2900,6 @@ extension on TranslationsBg { 'explore.watchlistUpdateFailed' => 'Неуспешно обновяване на списъка за гледане', 'explore.notInLibrary' => 'Не е в твоята библиотека', 'explore.inTheseLibraries' => 'В тези библиотеки', - 'explore.availableOn' => ({required Object server}) => 'Налично на ${server}', 'explore.checkingLibrary' => 'Проверка на твоята библиотека...', 'explore.emptyTitle' => 'Тук все още няма нищо', 'explore.emptyMessage' => ({required Object source}) => 'Редовете от ${source} ще се появят тук, когато има съдържание.', @@ -2950,6 +2911,8 @@ extension on TranslationsBg { 'liveTv.guide' => 'ТВ програма', 'liveTv.noChannels' => 'Няма налични канали', 'liveTv.noDvr' => 'Няма конфигуриран DVR на нито един сървър', + 'liveTv.serverUnavailable' => 'Сървърът за телевизия на живо не е наличен.', + 'liveTv.serverNotConnected' => 'Сървърът за телевизия на живо не е свързан.', 'liveTv.noPrograms' => 'Няма налични програмни данни', 'liveTv.liveStreamFailed' => 'Потокът на живо се провали', 'liveTv.unknownProgram' => 'Неизвестна програма', @@ -2985,7 +2948,6 @@ extension on TranslationsBg { 'liveTv.scheduledRecordings' => 'Планирани', 'liveTv.recordingRules' => 'Правила за запис', 'liveTv.noScheduledRecordings' => 'Няма планирани записи', - 'liveTv.noRecordingRules' => 'Все още няма правила за запис', 'liveTv.manageRecording' => 'Управление на запис', 'liveTv.cancelRecording' => 'Отмени запис', 'liveTv.cancelRecordingTitle' => 'Да се отмени ли този запис?', @@ -3002,7 +2964,6 @@ extension on TranslationsBg { 'liveTv.recordingCancelled' => 'Записът е отменен', 'liveTv.recordingRuleDeleted' => 'Правилото за запис е изтрито', 'liveTv.processRecordingRules' => 'Преоцени правилата', - 'liveTv.loadingRecordings' => 'Зареждане на записи...', 'liveTv.recordingInProgress' => 'Записва се сега', 'liveTv.recordingsCount' => ({required Object count}) => '${count} планирани', 'liveTv.editRule' => 'Редактирай правило', @@ -3014,7 +2975,6 @@ extension on TranslationsBg { 'collections.title' => 'Колекции', 'collections.collection' => 'Колекция', 'collections.empty' => 'Колекцията е празна', - 'collections.unknownLibrarySection' => 'Не може да се изтрие: неизвестна секция на библиотеката', 'collections.deleteCollection' => 'Изтрий колекция', 'collections.deleteConfirm' => ({required Object title}) => 'Да се изтрие ли "${title}"? Това не може да бъде отменено.', 'collections.deleted' => 'Колекцията е изтрита', @@ -3052,6 +3012,7 @@ extension on TranslationsBg { 'playlists.itemAdded' => 'Добавено към плейлист', 'playlists.itemRemoved' => 'Премахнато от плейлист', 'playlists.selectPlaylist' => 'Избери плейлист', + 'playlists.searchPlaylists' => 'Търсене в плейлисти...', 'playlists.errorCreating' => 'Неуспешно създаване на плейлист', 'playlists.errorDeleting' => 'Неуспешно изтриване на плейлист', 'playlists.errorLoading' => 'Неуспешно зареждане на плейлисти', @@ -3134,22 +3095,20 @@ extension on TranslationsBg { 'watchTogether.participantResumed' => ({required Object name}) => '${name} продължи', 'watchTogether.participantSeeked' => ({required Object name}) => '${name} превъртя', 'watchTogether.participantBuffering' => ({required Object name}) => '${name} буферира', + 'watchTogether.participantNeedsUpdate' => ({required Object name}) => '${name} е с по-стара версия на приложението — синхронизирането не е налично', + 'watchTogether.resumingWithout' => ({required Object name}) => 'Продължаване без ${name}', 'watchTogether.waitingForParticipants' => 'Изчакване другите да заредят...', + 'watchTogether.waitingForName' => ({required Object name}) => 'Изчакване на ${name}...', 'watchTogether.recentRooms' => 'Скорошни стаи', 'watchTogether.renameRoom' => 'Преименувай стая', 'watchTogether.removeRoom' => 'Премахни', 'watchTogether.guestSwitchUnavailable' => 'Превключването не е възможно — сървърът е недостъпен за синхронизация', 'watchTogether.guestSwitchFailed' => 'Превключването не е възможно — съдържанието не е намерено на този сървър', - 'watchTogether.participantNeedsUpdate' => ({required Object name}) => '${name} е с по-стара версия на приложението — синхронизирането не е налично', - 'watchTogether.resumingWithout' => ({required Object name}) => 'Продължаване без ${name}', - 'watchTogether.waitingForName' => ({required Object name}) => 'Изчакване на ${name}...', 'downloads.title' => 'Изтегляния', 'downloads.manage' => 'Управление', 'downloads.tvShows' => 'ТВ сериали', 'downloads.movies' => 'Филми', 'downloads.music' => 'Музика', - _ => null, - } ?? switch (path) { 'downloads.tracksQueued' => ({required Object count}) => '${count} песни в опашката за изтегляне', 'downloads.noDownloads' => 'Все още няма изтегляния', 'downloads.noDownloadsDescription' => 'Изтегленото съдържание ще се показва тук за офлайн гледане', @@ -3164,6 +3123,8 @@ extension on TranslationsBg { 'downloads.deleteConfirm' => ({required Object title}) => 'Да се изтрие ли "${title}" от това устройство?', 'downloads.cancelledDownloadTitle' => 'Отменено изтегляне', 'downloads.cancelledDownloadMessage' => 'Това изтегляне беше отменено. Какво искате да направите?', + _ => null, + } ?? switch (path) { 'downloads.allEpisodesAlreadyDownloaded' => 'Всички епизоди вече са изтеглени', 'downloads.resumeDownload' => 'Възобнови изтеглянето', 'downloads.cancelledDownload' => 'Отменено изтегляне', @@ -3187,7 +3148,6 @@ extension on TranslationsBg { 'downloads.customAmount' => 'Персонален брой...', 'downloads.includeSpecials' => 'Включи специалните', 'downloads.howManyEpisodes' => 'Колко епизода?', - 'downloads.itemsQueued' => ({required Object count}) => '${count} елемента са добавени в опашката за изтегляне', 'downloads.keepSynced' => 'Поддържай синхронизирано', 'downloads.downloadOnce' => 'Изтегли еднократно', 'downloads.keepNUnwatched' => ({required Object count}) => 'Пази ${count} негледани', @@ -3231,7 +3191,6 @@ extension on TranslationsBg { 'companionRemote.connectedTo' => ({required Object name}) => 'Свързан към ${name}', 'companionRemote.unknownDevice' => 'Непознато устройство', 'companionRemote.session.startingServer' => 'Стартиране на сървър за дистанционно управление...', - 'companionRemote.session.failedToCreate' => 'Неуспешно стартиране на сървър за дистанционно управление:', 'companionRemote.session.hostAddress' => 'Адрес на хоста', 'companionRemote.session.connected' => 'Свързан', 'companionRemote.session.serverRunning' => 'Сървърът за дистанционно управление е активен', @@ -3286,6 +3245,8 @@ extension on TranslationsBg { 'companionRemote.remote.searchHint' => 'Търсене на настолен компютър...', 'companionRemote.errors.noNetworkInterface' => 'Не е намерен мрежов интерфейс', 'companionRemote.errors.authenticationFailed' => 'Неуспешно удостоверяване', + 'companionRemote.errors.serverStartFailed' => ({required Object error}) => 'Неуспешно стартиране на отдалечения сървър: ${error}', + 'companionRemote.errors.commandFailed' => ({required Object error}) => 'Неуспешно изпращане на отдалечена команда: ${error}', 'companionRemote.errors.joinTimedOut' => 'Времето за присъединяване към сесията изтече', 'companionRemote.errors.failedToConnectAnyAddress' => 'Неуспешно свързване към който и да е адрес', 'companionRemote.errors.connectionLostAfterAttempts' => ({required Object attempts}) => 'Връзката е загубена след ${attempts} опита', @@ -3530,7 +3491,6 @@ extension on TranslationsBg { 'addServer.quickConnectFailed' => ({required Object error}) => 'Quick Connect е неуспешен: ${error}', 'addServer.addPlexTitle' => 'Вход с Plex', 'addServer.pinExpired' => 'PIN-ът изтече преди вход. Моля, опитайте отново.', - 'addServer.duplicatePlexAccount' => 'Вече сте влезли в Plex. Излезте, за да смените акаунта.', 'addServer.failedToRegisterAccount' => ({required Object error}) => 'Неуспешна регистрация на акаунт: ${error}', 'addServer.enterJellyfinUrlError' => 'Въведете URL адреса на вашия Jellyfin сървър', 'addServer.addConnectionTitle' => 'Добави връзка', diff --git a/lib/i18n/strings_da.g.dart b/lib/i18n/strings_da.g.dart index 89647844..2fb8b2cd 100644 --- a/lib/i18n/strings_da.g.dart +++ b/lib/i18n/strings_da.g.dart @@ -53,7 +53,6 @@ class TranslationsDa extends Translations with BaseTranslations 'Log ind'; @override String get signInWithPlex => 'Log ind med Plex'; @override String get showQRCode => 'Vis QR-kode'; @override String get authenticate => 'Godkend'; @@ -167,10 +165,8 @@ class _TranslationsCommonDa extends TranslationsCommonEn { @override String episodeNumberTitle({required Object number, required Object title}) => 'Episode ${number} - ${title}'; @override String chapterNumber({required Object number}) => 'Kapitel ${number}'; @override String get reconnect => 'Genopret forbindelse'; - @override String get exit => 'Afslut'; @override String get viewAll => 'Vis alle'; @override String get checkingNetwork => 'Tjekker netværk...'; - @override String get refreshingServers => 'Opdaterer servere...'; @override String get loadingServers => 'Indlæser servere...'; @override String get connectingToServers => 'Forbinder til servere...'; @override String get startingOfflineMode => 'Starter offlinetilstand...'; @@ -271,6 +267,12 @@ class _TranslationsSettingsDa extends TranslationsSettingsEn { @override String get tvFullCardLayoutDescription => 'Brug TV-kort kun med billeder og skuespillernavne ovenpå'; @override String get focusGlow => 'Fokusglød'; @override String get focusGlowDescription => 'Vis en blød glød omkring det fokuserede kort'; + @override String get visualEffects => 'Visuelle effekter'; + @override String get visualEffectsAuto => 'Automatisk'; + @override String get visualEffectsAutoDescription => 'Reducer automatisk effekter på enheder med lav ydeevne'; + @override String get visualEffectsFull => 'Fuld'; + @override String get visualEffectsReduced => 'Reduceret'; + @override String get visualEffectsReducedDescription => 'Færre animationer og illustrationer i lavere opløsning'; @override String get hideSpoilers => 'Skjul spoilere for usete episoder'; @override String get hideSpoilersDescription => 'Slør miniaturebilleder og beskrivelser for usete episoder'; @override String get playerBackend => 'Afspillerbackend'; @@ -283,7 +285,7 @@ class _TranslationsSettingsDa extends TranslationsSettingsEn { @override String get bufferSizeAuto => 'Auto (Anbefalet)'; @override String bufferSizeWarning({required Object heap, required Object size}) => '${heap}MB hukommelse tilgængelig. En buffer på ${size}MB kan påvirke afspilning.'; @override String get defaultQualityTitle => 'Standardkvalitet'; - @override String get defaultQualityDescription => 'Bruges ved start af afspilning. Lavere værdier reducerer båndbredden.'; + @override String get musicQualityTitle => 'Musikkvalitet'; @override String get subtitleStyling => 'Undertekststil'; @override String get subtitleStylingDescription => 'Tilpas underteksters udseende'; @override String get smallSkipDuration => 'Kort spring-varighed'; @@ -377,10 +379,9 @@ class _TranslationsSettingsDa extends TranslationsSettingsEn { @override String maxVolumePercent({required Object percent}) => '${percent}%'; @override String get discordRichPresence => 'Discord Rich Presence'; @override String get discordRichPresenceDescription => 'Vis hvad du ser på Discord'; - @override String get trakt => 'Trakt'; - @override String get traktDescription => 'Synkroniser visningshistorik med Trakt'; @override String get services => 'Tjenester'; @override String get servicesDescription => 'Forbind Trakt, MyAnimeList, Seerr og mere'; + @override String get manageLibrariesDescription => 'Omarranger og skjul biblioteker'; @override String get companionRemoteServer => 'Companion Remote Server'; @override String get companionRemoteServerDescription => 'Tillad mobilenheder på dit netværk at styre denne app'; @override String get autoPip => 'Auto billede-i-billede'; @@ -443,7 +444,6 @@ class _TranslationsSettingsDa extends TranslationsSettingsEn { @override String get showNavBarLabels => 'Vis navigationsbarlabels'; @override String get showNavBarLabelsDescription => 'Vis tekstlabels under navigationsbarikoner'; @override String get startupSection => 'Startsektion'; - @override String get startupSectionDescription => 'Vælg hvilken sektion Plezy åbner ved start'; @override String get liveTvDefaultFavorites => 'Standard til favoritkanaler'; @override String get liveTvDefaultFavoritesDescription => 'Vis kun favoritkanaler ved åbning af Live TV'; @override String get display => 'Skærm'; @@ -455,13 +455,6 @@ class _TranslationsSettingsDa extends TranslationsSettingsEn { @override String get subtitlesAndConfig => 'Undertekster og konfiguration'; @override String get seekAndTiming => 'Søgning og timing'; @override String get behavior => 'Adfærd'; - @override String get manageLibrariesDescription => 'Omarranger og skjul biblioteker'; - @override String get visualEffects => 'Visuelle effekter'; - @override String get visualEffectsAuto => 'Automatisk'; - @override String get visualEffectsAutoDescription => 'Reducer automatisk effekter på enheder med lav ydeevne'; - @override String get visualEffectsFull => 'Fuld'; - @override String get visualEffectsReduced => 'Reduceret'; - @override String get visualEffectsReducedDescription => 'Færre animationer og illustrationer i lavere opløsning'; } // Path: search @@ -559,14 +552,11 @@ class _TranslationsRateSheetDa extends TranslationsRateSheetEn { // Translations @override String get title => 'Bedøm'; @override String get server => 'Server'; - @override String starValue({required Object rating}) => '${rating} / 5'; - @override String scoreValue({required Object score}) => '${score} / 10'; - @override String get setScore => 'Angiv en score'; + @override String get favorite => 'Favorit'; + @override String get favorited => 'Føjet til favoritter'; @override String get saved => 'Gemt'; @override String get notAvailable => 'Intet match fundet'; @override String get noConnectedServices => 'Forbind en tjeneste i Indstillinger for at bedømme der.'; - @override String get favorite => 'Favorit'; - @override String get favorited => 'Føjet til favoritter'; } // Path: accessibility @@ -584,6 +574,14 @@ class _TranslationsAccessibilityDa extends TranslationsAccessibilityEn { @override String mediaCardPartiallyWatched({required Object percent}) => '${percent} procent set'; @override String get mediaCardUnwatched => 'uset'; @override String get tapToPlay => 'Tryk for at afspille'; + @override String get decrease => 'Formindsk'; + @override String get increase => 'Forøg'; + @override String decreaseValue({required Object label}) => 'Formindsk ${label}'; + @override String increaseValue({required Object label}) => 'Forøg ${label}'; + @override String get hue => 'Farvetone'; + @override String get saturation => 'Mætning'; + @override String get brightness => 'Lysstyrke'; + @override String get hexColor => 'Hexfarve'; } // Path: tooltips @@ -643,13 +641,11 @@ class _TranslationsVideoControlsDa extends TranslationsVideoControlsEn { @override String get settingsButton => 'Afspilningsindstillinger'; @override String get tracksButton => 'Lyd og undertekster'; @override String get chaptersButton => 'Kapitler'; - @override String get versionsButton => 'Videoversioner'; @override String get versionQualityButton => 'Version og kvalitet'; @override String get versionColumnHeader => 'Version'; @override String get qualityColumnHeader => 'Kvalitet'; @override String get qualityOriginal => 'Original'; @override String qualityPresetLabel({required Object resolution, required Object bitrate}) => '${resolution}p ${bitrate} Mbps'; - @override String qualityBandwidthEstimate({required Object bitrate}) => '~${bitrate} Mbps'; @override String get transcodeUnavailableFallback => 'Transkodning utilgængelig — afspiller original kvalitet'; @override String get pipButton => 'Billede-i-billede-tilstand'; @override String get aspectRatioButton => 'Billedformat'; @@ -685,19 +681,6 @@ class _TranslationsVideoControlsDa extends TranslationsVideoControlsEn { @override String get searchLanguages => 'Søg sprog...'; } -// Path: userStatus -class _TranslationsUserStatusDa extends TranslationsUserStatusEn { - _TranslationsUserStatusDa._(TranslationsDa root) : this._root = root, super.internal(root); - - final TranslationsDa _root; // ignore: unused_field - - // Translations - @override String get admin => 'Administrator'; - @override String get restricted => 'Begrænset'; - @override String get protected => 'Beskyttet'; - @override String get current => 'NUVÆRENDE'; -} - // Path: messages class _TranslationsMessagesDa extends TranslationsMessagesEn { _TranslationsMessagesDa._(TranslationsDa root) : this._root = root, super.internal(root); @@ -873,7 +856,6 @@ class _TranslationsProfilesDa extends TranslationsProfilesEn { @override String get pinExplain => '4-cifret PIN kræves for at skifte profiler.'; @override String get continueButton => 'Fortsæt'; @override String get pinsDontMatch => 'PIN-koder matcher ikke'; - @override String get initializeServicesFailed => 'Kunne ikke initialisere profiltjenester'; } // Path: connections @@ -902,7 +884,6 @@ class _TranslationsDiscoverDa extends TranslationsDiscoverEn { // Translations @override String get title => 'Opdag'; - @override String get switchProfile => 'Skift profil'; @override String get noContentAvailable => 'Intet indhold tilgængeligt'; @override String get addMediaToLibraries => 'Tilføj medier til dine biblioteker'; @override String get continueWatching => 'Fortsæt med at se'; @@ -938,8 +919,6 @@ class _TranslationsErrorsDa extends TranslationsErrorsEn { @override String get connectionFailed => 'Kan ikke oprette forbindelse til medieserver'; @override String failedToLoad({required Object context, required Object error}) => 'Kunne ikke indlæse ${context}: ${error}'; @override String get noClientAvailable => 'Ingen klient tilgængelig'; - @override String authenticationFailed({required Object error}) => 'Godkendelse mislykkedes: ${error}'; - @override String get couldNotLaunchUrl => 'Kunne ikke åbne godkendelses-URL'; @override String get pleaseEnterToken => 'Indtast et token'; @override String get invalidToken => 'Ugyldigt token'; @override String failedToVerifyToken({required Object error}) => 'Kunne ikke verificere token: ${error}'; @@ -973,6 +952,8 @@ class _TranslationsLibrariesDa extends TranslationsLibrariesEn { @override String get allLibrariesHidden => 'Alle biblioteker er skjult'; @override String hiddenLibrariesCount({required Object count}) => 'Skjulte biblioteker (${count})'; @override String get thisLibraryIsEmpty => 'Dette bibliotek er tomt'; + @override String get noItemsMatchFilters => 'Ingen elementer matcher de aktive filtre'; + @override String get resetFilters => 'Nulstil filtre'; @override String get all => 'Alle'; @override String get clearAll => 'Ryd alle'; @override String scanLibraryConfirm({required Object title}) => 'Er du sikker på, at du vil scanne "${title}"?'; @@ -998,8 +979,6 @@ class _TranslationsLibrariesDa extends TranslationsLibrariesEn { @override late final _TranslationsLibrariesGroupingsDa groupings = _TranslationsLibrariesGroupingsDa._(_root); @override late final _TranslationsLibrariesFilterCategoriesDa filterCategories = _TranslationsLibrariesFilterCategoriesDa._(_root); @override late final _TranslationsLibrariesSortLabelsDa sortLabels = _TranslationsLibrariesSortLabelsDa._(_root); - @override String get noItemsMatchFilters => 'Ingen elementer matcher de aktive filtre'; - @override String get resetFilters => 'Nulstil filtre'; } // Path: about @@ -1023,7 +1002,6 @@ class _TranslationsServerSelectionDa extends TranslationsServerSelectionEn { final TranslationsDa _root; // ignore: unused_field // Translations - @override String get allServerConnectionsFailed => 'Kunne ikke oprette forbindelse til nogen servere. Tjek dit netværk.'; @override String noServersFoundForAccount({required Object username, required Object email}) => 'Ingen servere fundet for ${username} (${email})'; @override String failedToLoadServers({required Object error}) => 'Kunne ikke indlæse servere: ${error}'; } @@ -1102,7 +1080,6 @@ class _TranslationsExploreDa extends TranslationsExploreEn { @override String get watchlistUpdateFailed => 'Kunne ikke opdatere ønskelisten'; @override String get notInLibrary => 'Ikke i dit bibliotek'; @override String get inTheseLibraries => 'I disse biblioteker'; - @override String availableOn({required Object server}) => 'Tilgængelig på ${server}'; @override String get checkingLibrary => 'Tjekker dit bibliotek...'; @override String get emptyTitle => 'Der er ikke noget her endnu'; @override String emptyMessage({required Object source}) => 'Rækker fra ${source} vises her, når de har indhold.'; @@ -1123,6 +1100,8 @@ class _TranslationsLiveTvDa extends TranslationsLiveTvEn { @override String get guide => 'Guide'; @override String get noChannels => 'Ingen kanaler tilgængelige'; @override String get noDvr => 'Ingen DVR konfigureret på nogen server'; + @override String get serverUnavailable => 'Live-tv-serveren er ikke tilgængelig.'; + @override String get serverNotConnected => 'Live-tv-serveren er ikke forbundet.'; @override String get noPrograms => 'Ingen programdata tilgængelig'; @override String get liveStreamFailed => 'Livestream mislykkedes'; @override String get unknownProgram => 'Ukendt program'; @@ -1158,7 +1137,6 @@ class _TranslationsLiveTvDa extends TranslationsLiveTvEn { @override String get scheduledRecordings => 'Planlagt'; @override String get recordingRules => 'Optagelsesregler'; @override String get noScheduledRecordings => 'Ingen optagelser planlagt'; - @override String get noRecordingRules => 'Ingen optagelsesregler endnu'; @override String get manageRecording => 'Administrer optagelse'; @override String get cancelRecording => 'Annullér optagelse'; @override String get cancelRecordingTitle => 'Annullér denne optagelse?'; @@ -1175,7 +1153,6 @@ class _TranslationsLiveTvDa extends TranslationsLiveTvEn { @override String get recordingCancelled => 'Optagelse annulleret'; @override String get recordingRuleDeleted => 'Optagelsesregel slettet'; @override String get processRecordingRules => 'Genberegn regler'; - @override String get loadingRecordings => 'Indlæser optagelser ...'; @override String get recordingInProgress => 'Optager nu'; @override String recordingsCount({required Object count}) => '${count} planlagt'; @override String get editRule => 'Rediger regel'; @@ -1196,7 +1173,6 @@ class _TranslationsCollectionsDa extends TranslationsCollectionsEn { @override String get title => 'Samlinger'; @override String get collection => 'Samling'; @override String get empty => 'Samlingen er tom'; - @override String get unknownLibrarySection => 'Kan ikke slette: Ukendt bibliotekssektion'; @override String get deleteCollection => 'Slet samling'; @override String deleteConfirm({required Object title}) => 'Slet "${title}"? Dette kan ikke fortrydes.'; @override String get deleted => 'Samling slettet'; @@ -1243,6 +1219,7 @@ class _TranslationsPlaylistsDa extends TranslationsPlaylistsEn { @override String get itemAdded => 'Tilføjet til playliste'; @override String get itemRemoved => 'Fjernet fra playliste'; @override String get selectPlaylist => 'Vælg playliste'; + @override String get searchPlaylists => 'Søg i playlister...'; @override String get errorCreating => 'Kunne ikke oprette playliste'; @override String get errorDeleting => 'Kunne ikke slette playliste'; @override String get errorLoading => 'Kunne ikke indlæse playlister'; @@ -1346,15 +1323,15 @@ class _TranslationsWatchTogetherDa extends TranslationsWatchTogetherEn { @override String participantResumed({required Object name}) => '${name} genoptog'; @override String participantSeeked({required Object name}) => '${name} spoled'; @override String participantBuffering({required Object name}) => '${name} bufferer'; + @override String participantNeedsUpdate({required Object name}) => '${name} bruger en ældre appversion — synkronisering er ikke tilgængelig'; + @override String resumingWithout({required Object name}) => 'Fortsætter uden ${name}'; @override String get waitingForParticipants => 'Venter på at andre indlæser...'; + @override String waitingForName({required Object name}) => 'Venter på ${name}...'; @override String get recentRooms => 'Seneste rum'; @override String get renameRoom => 'Omdøb rum'; @override String get removeRoom => 'Fjern'; @override String get guestSwitchUnavailable => 'Kunne ikke skifte — server ikke tilgængelig for synkronisering'; @override String get guestSwitchFailed => 'Kunne ikke skifte — indhold blev ikke fundet på denne server'; - @override String participantNeedsUpdate({required Object name}) => '${name} bruger en ældre appversion — synkronisering er ikke tilgængelig'; - @override String resumingWithout({required Object name}) => 'Fortsætter uden ${name}'; - @override String waitingForName({required Object name}) => 'Venter på ${name}...'; } // Path: downloads @@ -1406,7 +1383,6 @@ class _TranslationsDownloadsDa extends TranslationsDownloadsEn { @override String get customAmount => 'Angiv antal...'; @override String get includeSpecials => 'Inkludér specials'; @override String get howManyEpisodes => 'Hvor mange episoder?'; - @override String itemsQueued({required Object count}) => '${count} elementer sat i kø til download'; @override String get keepSynced => 'Hold synkroniseret'; @override String get downloadOnce => 'Download én gang'; @override String keepNUnwatched({required Object count}) => 'Behold ${count} usete'; @@ -1780,7 +1756,6 @@ class _TranslationsAddServerDa extends TranslationsAddServerEn { @override String quickConnectFailed({required Object error}) => 'Quick Connect mislykkedes: ${error}'; @override String get addPlexTitle => 'Log ind med Plex'; @override String get pinExpired => 'PIN udløb før login. Prøv igen.'; - @override String get duplicatePlexAccount => 'Allerede logget ind på Plex. Log ud for at skifte konto.'; @override String failedToRegisterAccount({required Object error}) => 'Kunne ikke registrere kontoen: ${error}'; @override String get enterJellyfinUrlError => 'Angiv URL\'en til din Jellyfin-server'; @override String get addConnectionTitle => 'Tilføj forbindelse'; @@ -1906,7 +1881,6 @@ class _TranslationsLibrariesSortLabelsDa extends TranslationsLibrariesSortLabels @override String get communityRating => 'Fællesskabsvurdering'; @override String get criticRating => 'Kritikerbedømmelse'; @override String get userRating => 'Brugerbedømmelse'; - @override String get lastPlayed => 'Sidst afspillet'; @override String get datePlayed => 'Afspilningsdato'; @override String get playCount => 'Antal afspilninger'; @override String get productionYear => 'Produktionsår'; @@ -1965,7 +1939,6 @@ class _TranslationsCompanionRemoteSessionDa extends TranslationsCompanionRemoteS // Translations @override String get startingServer => 'Starter fjernserver...'; - @override String get failedToCreate => 'Kunne ikke starte fjernserver:'; @override String get hostAddress => 'Værtsadresse'; @override String get connected => 'Forbundet'; @override String get serverRunning => 'Fjernserver aktiv'; @@ -2047,6 +2020,8 @@ class _TranslationsCompanionRemoteErrorsDa extends TranslationsCompanionRemoteEr // Translations @override String get noNetworkInterface => 'Ingen netværksgrænseflade fundet'; @override String get authenticationFailed => 'Godkendelse mislykkedes'; + @override String serverStartFailed({required Object error}) => 'Kunne ikke starte fjernserveren: ${error}'; + @override String commandFailed({required Object error}) => 'Kunne ikke sende fjernkommando: ${error}'; @override String get joinTimedOut => 'Tidsgrænse for deltagelse i session overskredet'; @override String get failedToConnectAnyAddress => 'Kunne ikke oprette forbindelse til nogen adresse'; @override String connectionLostAfterAttempts({required Object attempts}) => 'Forbindelse mistet efter ${attempts} forsøg'; @@ -2123,7 +2098,6 @@ extension on TranslationsDa { dynamic _flatMapFunction(String path) { return switch (path) { 'app.title' => 'Plezy', - 'auth.signIn' => 'Log ind', 'auth.signInWithPlex' => 'Log ind med Plex', 'auth.showQRCode' => 'Vis QR-kode', 'auth.authenticate' => 'Godkend', @@ -2174,10 +2148,8 @@ extension on TranslationsDa { 'common.episodeNumberTitle' => ({required Object number, required Object title}) => 'Episode ${number} - ${title}', 'common.chapterNumber' => ({required Object number}) => 'Kapitel ${number}', 'common.reconnect' => 'Genopret forbindelse', - 'common.exit' => 'Afslut', 'common.viewAll' => 'Vis alle', 'common.checkingNetwork' => 'Tjekker netværk...', - 'common.refreshingServers' => 'Opdaterer servere...', 'common.loadingServers' => 'Indlæser servere...', 'common.connectingToServers' => 'Forbinder til servere...', 'common.startingOfflineMode' => 'Starter offlinetilstand...', @@ -2251,6 +2223,12 @@ extension on TranslationsDa { 'settings.tvFullCardLayoutDescription' => 'Brug TV-kort kun med billeder og skuespillernavne ovenpå', 'settings.focusGlow' => 'Fokusglød', 'settings.focusGlowDescription' => 'Vis en blød glød omkring det fokuserede kort', + 'settings.visualEffects' => 'Visuelle effekter', + 'settings.visualEffectsAuto' => 'Automatisk', + 'settings.visualEffectsAutoDescription' => 'Reducer automatisk effekter på enheder med lav ydeevne', + 'settings.visualEffectsFull' => 'Fuld', + 'settings.visualEffectsReduced' => 'Reduceret', + 'settings.visualEffectsReducedDescription' => 'Færre animationer og illustrationer i lavere opløsning', 'settings.hideSpoilers' => 'Skjul spoilere for usete episoder', 'settings.hideSpoilersDescription' => 'Slør miniaturebilleder og beskrivelser for usete episoder', 'settings.playerBackend' => 'Afspillerbackend', @@ -2263,7 +2241,7 @@ extension on TranslationsDa { 'settings.bufferSizeAuto' => 'Auto (Anbefalet)', 'settings.bufferSizeWarning' => ({required Object heap, required Object size}) => '${heap}MB hukommelse tilgængelig. En buffer på ${size}MB kan påvirke afspilning.', 'settings.defaultQualityTitle' => 'Standardkvalitet', - 'settings.defaultQualityDescription' => 'Bruges ved start af afspilning. Lavere værdier reducerer båndbredden.', + 'settings.musicQualityTitle' => 'Musikkvalitet', 'settings.subtitleStyling' => 'Undertekststil', 'settings.subtitleStylingDescription' => 'Tilpas underteksters udseende', 'settings.smallSkipDuration' => 'Kort spring-varighed', @@ -2357,10 +2335,9 @@ extension on TranslationsDa { 'settings.maxVolumePercent' => ({required Object percent}) => '${percent}%', 'settings.discordRichPresence' => 'Discord Rich Presence', 'settings.discordRichPresenceDescription' => 'Vis hvad du ser på Discord', - 'settings.trakt' => 'Trakt', - 'settings.traktDescription' => 'Synkroniser visningshistorik med Trakt', 'settings.services' => 'Tjenester', 'settings.servicesDescription' => 'Forbind Trakt, MyAnimeList, Seerr og mere', + 'settings.manageLibrariesDescription' => 'Omarranger og skjul biblioteker', 'settings.companionRemoteServer' => 'Companion Remote Server', 'settings.companionRemoteServerDescription' => 'Tillad mobilenheder på dit netværk at styre denne app', 'settings.autoPip' => 'Auto billede-i-billede', @@ -2423,7 +2400,6 @@ extension on TranslationsDa { 'settings.showNavBarLabels' => 'Vis navigationsbarlabels', 'settings.showNavBarLabelsDescription' => 'Vis tekstlabels under navigationsbarikoner', 'settings.startupSection' => 'Startsektion', - 'settings.startupSectionDescription' => 'Vælg hvilken sektion Plezy åbner ved start', 'settings.liveTvDefaultFavorites' => 'Standard til favoritkanaler', 'settings.liveTvDefaultFavoritesDescription' => 'Vis kun favoritkanaler ved åbning af Live TV', 'settings.display' => 'Skærm', @@ -2435,13 +2411,6 @@ extension on TranslationsDa { 'settings.subtitlesAndConfig' => 'Undertekster og konfiguration', 'settings.seekAndTiming' => 'Søgning og timing', 'settings.behavior' => 'Adfærd', - 'settings.manageLibrariesDescription' => 'Omarranger og skjul biblioteker', - 'settings.visualEffects' => 'Visuelle effekter', - 'settings.visualEffectsAuto' => 'Automatisk', - 'settings.visualEffectsAutoDescription' => 'Reducer automatisk effekter på enheder med lav ydeevne', - 'settings.visualEffectsFull' => 'Fuld', - 'settings.visualEffectsReduced' => 'Reduceret', - 'settings.visualEffectsReducedDescription' => 'Færre animationer og illustrationer i lavere opløsning', 'search.hint' => 'Søg film, serier, musik...', 'search.tryDifferentTerm' => 'Prøv en anden søgning', 'search.searchYourMedia' => 'Søg i dine medier', @@ -2518,14 +2487,11 @@ extension on TranslationsDa { 'mediaMenu.playVersion' => 'Afspil version...', 'rateSheet.title' => 'Bedøm', 'rateSheet.server' => 'Server', - 'rateSheet.starValue' => ({required Object rating}) => '${rating} / 5', - 'rateSheet.scoreValue' => ({required Object score}) => '${score} / 10', - 'rateSheet.setScore' => 'Angiv en score', + 'rateSheet.favorite' => 'Favorit', + 'rateSheet.favorited' => 'Føjet til favoritter', 'rateSheet.saved' => 'Gemt', 'rateSheet.notAvailable' => 'Intet match fundet', 'rateSheet.noConnectedServices' => 'Forbind en tjeneste i Indstillinger for at bedømme der.', - 'rateSheet.favorite' => 'Favorit', - 'rateSheet.favorited' => 'Føjet til favoritter', 'accessibility.mediaCardMovie' => ({required Object title}) => '${title}, film', 'accessibility.mediaCardShow' => ({required Object title}) => '${title}, TV-serie', 'accessibility.mediaCardEpisode' => ({required Object title, required Object episodeInfo}) => '${title}, ${episodeInfo}', @@ -2534,6 +2500,14 @@ extension on TranslationsDa { 'accessibility.mediaCardPartiallyWatched' => ({required Object percent}) => '${percent} procent set', 'accessibility.mediaCardUnwatched' => 'uset', 'accessibility.tapToPlay' => 'Tryk for at afspille', + 'accessibility.decrease' => 'Formindsk', + 'accessibility.increase' => 'Forøg', + 'accessibility.decreaseValue' => ({required Object label}) => 'Formindsk ${label}', + 'accessibility.increaseValue' => ({required Object label}) => 'Forøg ${label}', + 'accessibility.hue' => 'Farvetone', + 'accessibility.saturation' => 'Mætning', + 'accessibility.brightness' => 'Lysstyrke', + 'accessibility.hexColor' => 'Hexfarve', 'tooltips.shufflePlay' => 'Afspil tilfældigt', 'tooltips.playTrailer' => 'Afspil trailer', 'tooltips.markAsWatched' => 'Markér som set', @@ -2575,13 +2549,11 @@ extension on TranslationsDa { 'videoControls.settingsButton' => 'Afspilningsindstillinger', 'videoControls.tracksButton' => 'Lyd og undertekster', 'videoControls.chaptersButton' => 'Kapitler', - 'videoControls.versionsButton' => 'Videoversioner', 'videoControls.versionQualityButton' => 'Version og kvalitet', 'videoControls.versionColumnHeader' => 'Version', 'videoControls.qualityColumnHeader' => 'Kvalitet', 'videoControls.qualityOriginal' => 'Original', 'videoControls.qualityPresetLabel' => ({required Object resolution, required Object bitrate}) => '${resolution}p ${bitrate} Mbps', - 'videoControls.qualityBandwidthEstimate' => ({required Object bitrate}) => '~${bitrate} Mbps', 'videoControls.transcodeUnavailableFallback' => 'Transkodning utilgængelig — afspiller original kvalitet', 'videoControls.pipButton' => 'Billede-i-billede-tilstand', 'videoControls.aspectRatioButton' => 'Billedformat', @@ -2621,10 +2593,6 @@ extension on TranslationsDa { 'videoControls.subtitleDownloaded' => 'Undertekst downloadet', 'videoControls.subtitleDownloadFailed' => 'Kunne ikke downloade undertekst', 'videoControls.searchLanguages' => 'Søg sprog...', - 'userStatus.admin' => 'Administrator', - 'userStatus.restricted' => 'Begrænset', - 'userStatus.protected' => 'Beskyttet', - 'userStatus.current' => 'NUVÆRENDE', 'messages.markedAsWatched' => 'Markeret som set', 'messages.markedAsUnwatched' => 'Markeret som uset', 'messages.markedAsWatchedOffline' => 'Markeret som set (synkroniseres online)', @@ -2634,8 +2602,6 @@ extension on TranslationsDa { 'messages.errorLoading' => ({required Object error}) => 'Fejl: ${error}', 'messages.streamInterrupted' => 'Streamen blev afbrudt. Tryk på afspil, eller spol for at prøve igen.', 'messages.fileInfoNotAvailable' => 'Filinfo ikke tilgængelig', - _ => null, - } ?? switch (path) { 'messages.errorLoadingFileInfo' => ({required Object error}) => 'Fejl ved indlæsning af filinfo: ${error}', 'messages.errorLoadingSeries' => 'Fejl ved indlæsning af serie', 'messages.musicNotSupported' => 'Musikafspilning understøttes endnu ikke', @@ -2643,6 +2609,8 @@ extension on TranslationsDa { 'messages.noProfilesAvailable' => 'Ingen profiler tilgængelige', 'messages.contactAdminForProfiles' => 'Kontakt din serveradministrator for at tilføje profiler', 'messages.unableToDetermineLibrarySection' => 'Kan ikke bestemme biblioteksafdeling for dette element', + _ => null, + } ?? switch (path) { 'messages.logsCleared' => 'Logs ryddet', 'messages.logsCopied' => 'Logs kopieret til udklipsholder', 'messages.noLogsAvailable' => 'Ingen logs tilgængelige', @@ -2759,7 +2727,6 @@ extension on TranslationsDa { 'profiles.pinExplain' => '4-cifret PIN kræves for at skifte profiler.', 'profiles.continueButton' => 'Fortsæt', 'profiles.pinsDontMatch' => 'PIN-koder matcher ikke', - 'profiles.initializeServicesFailed' => 'Kunne ikke initialisere profiltjenester', 'connections.sectionTitle' => 'Forbindelser', 'connections.addConnection' => 'Tilføj forbindelse', 'connections.addConnectionSubtitleNoProfile' => 'Log ind med Plex eller forbind til en Jellyfin-server', @@ -2770,7 +2737,6 @@ extension on TranslationsDa { 'connections.editJellyfinTitle' => 'Rediger Jellyfin-forbindelse', 'connections.editJellyfinIntro' => ({required Object serverName}) => 'Tilføj eller fjern URL\'er for ${serverName}. Plezy bruger den tilgængelige URL med lavest latenstid.', 'discover.title' => 'Opdag', - 'discover.switchProfile' => 'Skift profil', 'discover.noContentAvailable' => 'Intet indhold tilgængeligt', 'discover.addMediaToLibraries' => 'Tilføj medier til dine biblioteker', 'discover.continueWatching' => 'Fortsæt med at se', @@ -2797,8 +2763,6 @@ extension on TranslationsDa { 'errors.connectionFailed' => 'Kan ikke oprette forbindelse til medieserver', 'errors.failedToLoad' => ({required Object context, required Object error}) => 'Kunne ikke indlæse ${context}: ${error}', 'errors.noClientAvailable' => 'Ingen klient tilgængelig', - 'errors.authenticationFailed' => ({required Object error}) => 'Godkendelse mislykkedes: ${error}', - 'errors.couldNotLaunchUrl' => 'Kunne ikke åbne godkendelses-URL', 'errors.pleaseEnterToken' => 'Indtast et token', 'errors.invalidToken' => 'Ugyldigt token', 'errors.failedToVerifyToken' => ({required Object error}) => 'Kunne ikke verificere token: ${error}', @@ -2823,6 +2787,8 @@ extension on TranslationsDa { 'libraries.allLibrariesHidden' => 'Alle biblioteker er skjult', 'libraries.hiddenLibrariesCount' => ({required Object count}) => 'Skjulte biblioteker (${count})', 'libraries.thisLibraryIsEmpty' => 'Dette bibliotek er tomt', + 'libraries.noItemsMatchFilters' => 'Ingen elementer matcher de aktive filtre', + 'libraries.resetFilters' => 'Nulstil filtre', 'libraries.all' => 'Alle', 'libraries.clearAll' => 'Ryd alle', 'libraries.scanLibraryConfirm' => ({required Object title}) => 'Er du sikker på, at du vil scanne "${title}"?', @@ -2871,7 +2837,6 @@ extension on TranslationsDa { 'libraries.sortLabels.communityRating' => 'Fællesskabsvurdering', 'libraries.sortLabels.criticRating' => 'Kritikerbedømmelse', 'libraries.sortLabels.userRating' => 'Brugerbedømmelse', - 'libraries.sortLabels.lastPlayed' => 'Sidst afspillet', 'libraries.sortLabels.datePlayed' => 'Afspilningsdato', 'libraries.sortLabels.playCount' => 'Antal afspilninger', 'libraries.sortLabels.productionYear' => 'Produktionsår', @@ -2885,14 +2850,11 @@ extension on TranslationsDa { 'libraries.sortLabels.dateShared' => 'Delt dato', 'libraries.sortLabels.latestEpisodeAirDate' => 'Seneste episodes premieredato', 'libraries.sortLabels.lastEpisodeDateAdded' => 'Dato for senest tilføjede episode', - 'libraries.noItemsMatchFilters' => 'Ingen elementer matcher de aktive filtre', - 'libraries.resetFilters' => 'Nulstil filtre', 'about.title' => 'Om', 'about.openSourceLicenses' => 'Open source-licenser', 'about.versionLabel' => ({required Object version}) => 'Version ${version}', 'about.appDescription' => 'En smuk Plex- og Jellyfin-klient til Flutter', 'about.viewLicensesDescription' => 'Se licenser for tredjepartsbiblioteker', - 'serverSelection.allServerConnectionsFailed' => 'Kunne ikke oprette forbindelse til nogen servere. Tjek dit netværk.', 'serverSelection.noServersFoundForAccount' => ({required Object username, required Object email}) => 'Ingen servere fundet for ${username} (${email})', 'serverSelection.failedToLoadServers' => ({required Object error}) => 'Kunne ikke indlæse servere: ${error}', 'hubDetail.title' => 'Titel', @@ -2938,7 +2900,6 @@ extension on TranslationsDa { 'explore.watchlistUpdateFailed' => 'Kunne ikke opdatere ønskelisten', 'explore.notInLibrary' => 'Ikke i dit bibliotek', 'explore.inTheseLibraries' => 'I disse biblioteker', - 'explore.availableOn' => ({required Object server}) => 'Tilgængelig på ${server}', 'explore.checkingLibrary' => 'Tjekker dit bibliotek...', 'explore.emptyTitle' => 'Der er ikke noget her endnu', 'explore.emptyMessage' => ({required Object source}) => 'Rækker fra ${source} vises her, når de har indhold.', @@ -2950,6 +2911,8 @@ extension on TranslationsDa { 'liveTv.guide' => 'Guide', 'liveTv.noChannels' => 'Ingen kanaler tilgængelige', 'liveTv.noDvr' => 'Ingen DVR konfigureret på nogen server', + 'liveTv.serverUnavailable' => 'Live-tv-serveren er ikke tilgængelig.', + 'liveTv.serverNotConnected' => 'Live-tv-serveren er ikke forbundet.', 'liveTv.noPrograms' => 'Ingen programdata tilgængelig', 'liveTv.liveStreamFailed' => 'Livestream mislykkedes', 'liveTv.unknownProgram' => 'Ukendt program', @@ -2985,7 +2948,6 @@ extension on TranslationsDa { 'liveTv.scheduledRecordings' => 'Planlagt', 'liveTv.recordingRules' => 'Optagelsesregler', 'liveTv.noScheduledRecordings' => 'Ingen optagelser planlagt', - 'liveTv.noRecordingRules' => 'Ingen optagelsesregler endnu', 'liveTv.manageRecording' => 'Administrer optagelse', 'liveTv.cancelRecording' => 'Annullér optagelse', 'liveTv.cancelRecordingTitle' => 'Annullér denne optagelse?', @@ -3002,7 +2964,6 @@ extension on TranslationsDa { 'liveTv.recordingCancelled' => 'Optagelse annulleret', 'liveTv.recordingRuleDeleted' => 'Optagelsesregel slettet', 'liveTv.processRecordingRules' => 'Genberegn regler', - 'liveTv.loadingRecordings' => 'Indlæser optagelser ...', 'liveTv.recordingInProgress' => 'Optager nu', 'liveTv.recordingsCount' => ({required Object count}) => '${count} planlagt', 'liveTv.editRule' => 'Rediger regel', @@ -3014,7 +2975,6 @@ extension on TranslationsDa { 'collections.title' => 'Samlinger', 'collections.collection' => 'Samling', 'collections.empty' => 'Samlingen er tom', - 'collections.unknownLibrarySection' => 'Kan ikke slette: Ukendt bibliotekssektion', 'collections.deleteCollection' => 'Slet samling', 'collections.deleteConfirm' => ({required Object title}) => 'Slet "${title}"? Dette kan ikke fortrydes.', 'collections.deleted' => 'Samling slettet', @@ -3052,6 +3012,7 @@ extension on TranslationsDa { 'playlists.itemAdded' => 'Tilføjet til playliste', 'playlists.itemRemoved' => 'Fjernet fra playliste', 'playlists.selectPlaylist' => 'Vælg playliste', + 'playlists.searchPlaylists' => 'Søg i playlister...', 'playlists.errorCreating' => 'Kunne ikke oprette playliste', 'playlists.errorDeleting' => 'Kunne ikke slette playliste', 'playlists.errorLoading' => 'Kunne ikke indlæse playlister', @@ -3134,22 +3095,20 @@ extension on TranslationsDa { 'watchTogether.participantResumed' => ({required Object name}) => '${name} genoptog', 'watchTogether.participantSeeked' => ({required Object name}) => '${name} spoled', 'watchTogether.participantBuffering' => ({required Object name}) => '${name} bufferer', + 'watchTogether.participantNeedsUpdate' => ({required Object name}) => '${name} bruger en ældre appversion — synkronisering er ikke tilgængelig', + 'watchTogether.resumingWithout' => ({required Object name}) => 'Fortsætter uden ${name}', 'watchTogether.waitingForParticipants' => 'Venter på at andre indlæser...', + 'watchTogether.waitingForName' => ({required Object name}) => 'Venter på ${name}...', 'watchTogether.recentRooms' => 'Seneste rum', 'watchTogether.renameRoom' => 'Omdøb rum', 'watchTogether.removeRoom' => 'Fjern', 'watchTogether.guestSwitchUnavailable' => 'Kunne ikke skifte — server ikke tilgængelig for synkronisering', 'watchTogether.guestSwitchFailed' => 'Kunne ikke skifte — indhold blev ikke fundet på denne server', - 'watchTogether.participantNeedsUpdate' => ({required Object name}) => '${name} bruger en ældre appversion — synkronisering er ikke tilgængelig', - 'watchTogether.resumingWithout' => ({required Object name}) => 'Fortsætter uden ${name}', - 'watchTogether.waitingForName' => ({required Object name}) => 'Venter på ${name}...', 'downloads.title' => 'Downloads', 'downloads.manage' => 'Administrer', 'downloads.tvShows' => 'TV-serier', 'downloads.movies' => 'Film', 'downloads.music' => 'Musik', - _ => null, - } ?? switch (path) { 'downloads.tracksQueued' => ({required Object count}) => '${count} numre i kø til download', 'downloads.noDownloads' => 'Ingen downloads endnu', 'downloads.noDownloadsDescription' => 'Downloadet indhold vises her til offlinevisning', @@ -3164,6 +3123,8 @@ extension on TranslationsDa { 'downloads.deleteConfirm' => ({required Object title}) => 'Slet "${title}" fra denne enhed?', 'downloads.cancelledDownloadTitle' => 'Annulleret download', 'downloads.cancelledDownloadMessage' => 'Denne download blev annulleret. Hvad vil du gøre?', + _ => null, + } ?? switch (path) { 'downloads.allEpisodesAlreadyDownloaded' => 'Alle episoder er allerede downloadet', 'downloads.resumeDownload' => 'Genoptag download', 'downloads.cancelledDownload' => 'Annulleret download', @@ -3187,7 +3148,6 @@ extension on TranslationsDa { 'downloads.customAmount' => 'Angiv antal...', 'downloads.includeSpecials' => 'Inkludér specials', 'downloads.howManyEpisodes' => 'Hvor mange episoder?', - 'downloads.itemsQueued' => ({required Object count}) => '${count} elementer sat i kø til download', 'downloads.keepSynced' => 'Hold synkroniseret', 'downloads.downloadOnce' => 'Download én gang', 'downloads.keepNUnwatched' => ({required Object count}) => 'Behold ${count} usete', @@ -3231,7 +3191,6 @@ extension on TranslationsDa { 'companionRemote.connectedTo' => ({required Object name}) => 'Forbundet til ${name}', 'companionRemote.unknownDevice' => 'Ukendt enhed', 'companionRemote.session.startingServer' => 'Starter fjernserver...', - 'companionRemote.session.failedToCreate' => 'Kunne ikke starte fjernserver:', 'companionRemote.session.hostAddress' => 'Værtsadresse', 'companionRemote.session.connected' => 'Forbundet', 'companionRemote.session.serverRunning' => 'Fjernserver aktiv', @@ -3286,6 +3245,8 @@ extension on TranslationsDa { 'companionRemote.remote.searchHint' => 'Søg på desktop...', 'companionRemote.errors.noNetworkInterface' => 'Ingen netværksgrænseflade fundet', 'companionRemote.errors.authenticationFailed' => 'Godkendelse mislykkedes', + 'companionRemote.errors.serverStartFailed' => ({required Object error}) => 'Kunne ikke starte fjernserveren: ${error}', + 'companionRemote.errors.commandFailed' => ({required Object error}) => 'Kunne ikke sende fjernkommando: ${error}', 'companionRemote.errors.joinTimedOut' => 'Tidsgrænse for deltagelse i session overskredet', 'companionRemote.errors.failedToConnectAnyAddress' => 'Kunne ikke oprette forbindelse til nogen adresse', 'companionRemote.errors.connectionLostAfterAttempts' => ({required Object attempts}) => 'Forbindelse mistet efter ${attempts} forsøg', @@ -3530,7 +3491,6 @@ extension on TranslationsDa { 'addServer.quickConnectFailed' => ({required Object error}) => 'Quick Connect mislykkedes: ${error}', 'addServer.addPlexTitle' => 'Log ind med Plex', 'addServer.pinExpired' => 'PIN udløb før login. Prøv igen.', - 'addServer.duplicatePlexAccount' => 'Allerede logget ind på Plex. Log ud for at skifte konto.', 'addServer.failedToRegisterAccount' => ({required Object error}) => 'Kunne ikke registrere kontoen: ${error}', 'addServer.enterJellyfinUrlError' => 'Angiv URL\'en til din Jellyfin-server', 'addServer.addConnectionTitle' => 'Tilføj forbindelse', diff --git a/lib/i18n/strings_de.g.dart b/lib/i18n/strings_de.g.dart index 84225c82..ca8e0078 100644 --- a/lib/i18n/strings_de.g.dart +++ b/lib/i18n/strings_de.g.dart @@ -53,7 +53,6 @@ class TranslationsDe extends Translations with BaseTranslations 'Anmelden'; @override String get signInWithPlex => 'Mit Plex anmelden'; @override String get showQRCode => 'QR-Code anzeigen'; @override String get authenticate => 'Authentifizieren'; @@ -167,10 +165,8 @@ class _TranslationsCommonDe extends TranslationsCommonEn { @override String episodeNumberTitle({required Object number, required Object title}) => 'Episode ${number} - ${title}'; @override String chapterNumber({required Object number}) => 'Kapitel ${number}'; @override String get reconnect => 'Erneut verbinden'; - @override String get exit => 'Beenden'; @override String get viewAll => 'Alle anzeigen'; @override String get checkingNetwork => 'Netzwerk wird geprüft...'; - @override String get refreshingServers => 'Server werden aktualisiert...'; @override String get loadingServers => 'Server werden geladen...'; @override String get connectingToServers => 'Verbindung zu Servern...'; @override String get startingOfflineMode => 'Offlinemodus wird gestartet...'; @@ -271,6 +267,12 @@ class _TranslationsSettingsDe extends TranslationsSettingsEn { @override String get tvFullCardLayoutDescription => 'TV-Karten nur mit Bild verwenden und Darstellernamen einblenden'; @override String get focusGlow => 'Fokus-Leuchten'; @override String get focusGlowDescription => 'Sanftes Leuchten um die fokussierte Karte anzeigen'; + @override String get visualEffects => 'Visuelle Effekte'; + @override String get visualEffectsAuto => 'Automatisch'; + @override String get visualEffectsAutoDescription => 'Effekte auf leistungsschwachen Geräten automatisch reduzieren'; + @override String get visualEffectsFull => 'Vollständig'; + @override String get visualEffectsReduced => 'Reduziert'; + @override String get visualEffectsReducedDescription => 'Weniger Animationen und Grafiken mit niedrigerer Auflösung'; @override String get hideSpoilers => 'Spoiler für nicht gesehene Episoden verbergen'; @override String get hideSpoilersDescription => 'Vorschaubilder und Beschreibungen ungesehener Episoden verwischen'; @override String get playerBackend => 'Player-Backend'; @@ -283,7 +285,7 @@ class _TranslationsSettingsDe extends TranslationsSettingsEn { @override String get bufferSizeAuto => 'Auto (Empfohlen)'; @override String bufferSizeWarning({required Object heap, required Object size}) => '${heap}MB Speicher verfügbar. Ein ${size}MB-Puffer kann die Wiedergabe beeinträchtigen.'; @override String get defaultQualityTitle => 'Standardqualität'; - @override String get defaultQualityDescription => 'Wird beim Starten der Wiedergabe verwendet. Niedrigere Werte reduzieren die Bandbreite.'; + @override String get musicQualityTitle => 'Musikqualität'; @override String get subtitleStyling => 'Untertitel-Stil'; @override String get subtitleStylingDescription => 'Aussehen von Untertiteln anpassen'; @override String get smallSkipDuration => 'Kleine Sprungdauer'; @@ -377,10 +379,9 @@ class _TranslationsSettingsDe extends TranslationsSettingsEn { @override String maxVolumePercent({required Object percent}) => '${percent}%'; @override String get discordRichPresence => 'Discord Rich Presence'; @override String get discordRichPresenceDescription => 'Zeige auf Discord, was du gerade schaust'; - @override String get trakt => 'Trakt'; - @override String get traktDescription => 'Wiedergabeverlauf mit Trakt synchronisieren'; @override String get services => 'Dienste'; @override String get servicesDescription => 'Trakt, MyAnimeList, Seerr und mehr verbinden'; + @override String get manageLibrariesDescription => 'Mediatheken neu anordnen und ausblenden'; @override String get companionRemoteServer => 'Companion Remote Server'; @override String get companionRemoteServerDescription => 'Mobilgeräten in deinem Netzwerk erlauben, diese App zu steuern'; @override String get autoPip => 'Automatisches Bild-in-Bild'; @@ -443,7 +444,6 @@ class _TranslationsSettingsDe extends TranslationsSettingsEn { @override String get showNavBarLabels => 'Navigationsleisten-Beschriftungen anzeigen'; @override String get showNavBarLabelsDescription => 'Textbeschriftungen unter den Symbolen der Navigationsleiste anzeigen'; @override String get startupSection => 'Startbereich'; - @override String get startupSectionDescription => 'Legt fest, welchen Bereich Plezy beim Start öffnet'; @override String get liveTvDefaultFavorites => 'Standardmäßig Favoritenkanäle'; @override String get liveTvDefaultFavoritesDescription => 'Beim Öffnen von Live TV nur Favoritenkanäle anzeigen'; @override String get display => 'Anzeige'; @@ -455,13 +455,6 @@ class _TranslationsSettingsDe extends TranslationsSettingsEn { @override String get subtitlesAndConfig => 'Untertitel & Konfiguration'; @override String get seekAndTiming => 'Spulen & Timing'; @override String get behavior => 'Verhalten'; - @override String get manageLibrariesDescription => 'Mediatheken neu anordnen und ausblenden'; - @override String get visualEffects => 'Visuelle Effekte'; - @override String get visualEffectsAuto => 'Automatisch'; - @override String get visualEffectsAutoDescription => 'Effekte auf leistungsschwachen Geräten automatisch reduzieren'; - @override String get visualEffectsFull => 'Vollständig'; - @override String get visualEffectsReduced => 'Reduziert'; - @override String get visualEffectsReducedDescription => 'Weniger Animationen und Grafiken mit niedrigerer Auflösung'; } // Path: search @@ -559,14 +552,11 @@ class _TranslationsRateSheetDe extends TranslationsRateSheetEn { // Translations @override String get title => 'Bewerten'; @override String get server => 'Server'; - @override String starValue({required Object rating}) => '${rating} / 5'; - @override String scoreValue({required Object score}) => '${score} / 10'; - @override String get setScore => 'Eine Wertung festlegen'; + @override String get favorite => 'Favorit'; + @override String get favorited => 'Favorisiert'; @override String get saved => 'Gespeichert'; @override String get notAvailable => 'Keine Übereinstimmung gefunden'; @override String get noConnectedServices => 'Verbinde einen Dienst in den Einstellungen, um dort zu bewerten.'; - @override String get favorite => 'Favorit'; - @override String get favorited => 'Favorisiert'; } // Path: accessibility @@ -584,6 +574,14 @@ class _TranslationsAccessibilityDe extends TranslationsAccessibilityEn { @override String mediaCardPartiallyWatched({required Object percent}) => '${percent} Prozent angesehen'; @override String get mediaCardUnwatched => 'ungeschaut'; @override String get tapToPlay => 'Zum Abspielen tippen'; + @override String get decrease => 'Verringern'; + @override String get increase => 'Erhöhen'; + @override String decreaseValue({required Object label}) => '${label} verringern'; + @override String increaseValue({required Object label}) => '${label} erhöhen'; + @override String get hue => 'Farbton'; + @override String get saturation => 'Sättigung'; + @override String get brightness => 'Helligkeit'; + @override String get hexColor => 'Hex-Farbe'; } // Path: tooltips @@ -643,13 +641,11 @@ class _TranslationsVideoControlsDe extends TranslationsVideoControlsEn { @override String get settingsButton => 'Wiedergabeeinstellungen'; @override String get tracksButton => 'Audio und Untertitel'; @override String get chaptersButton => 'Kapitel'; - @override String get versionsButton => 'Videoversionen'; @override String get versionQualityButton => 'Version & Qualität'; @override String get versionColumnHeader => 'Version'; @override String get qualityColumnHeader => 'Qualität'; @override String get qualityOriginal => 'Original'; @override String qualityPresetLabel({required Object resolution, required Object bitrate}) => '${resolution}p ${bitrate} Mbps'; - @override String qualityBandwidthEstimate({required Object bitrate}) => '~${bitrate} Mbps'; @override String get transcodeUnavailableFallback => 'Transkodierung nicht verfügbar — Wiedergabe in Originalqualität'; @override String get pipButton => 'Bild-in-Bild Modus'; @override String get aspectRatioButton => 'Seitenverhältnis'; @@ -685,19 +681,6 @@ class _TranslationsVideoControlsDe extends TranslationsVideoControlsEn { @override String get searchLanguages => 'Sprachen suchen...'; } -// Path: userStatus -class _TranslationsUserStatusDe extends TranslationsUserStatusEn { - _TranslationsUserStatusDe._(TranslationsDe root) : this._root = root, super.internal(root); - - final TranslationsDe _root; // ignore: unused_field - - // Translations - @override String get admin => 'Eigentümer'; - @override String get restricted => 'Eingeschränkt'; - @override String get protected => 'Geschützt'; - @override String get current => 'AKTUELL'; -} - // Path: messages class _TranslationsMessagesDe extends TranslationsMessagesEn { _TranslationsMessagesDe._(TranslationsDe root) : this._root = root, super.internal(root); @@ -873,7 +856,6 @@ class _TranslationsProfilesDe extends TranslationsProfilesEn { @override String get pinExplain => '4-stellige PIN zum Profilwechsel erforderlich.'; @override String get continueButton => 'Weiter'; @override String get pinsDontMatch => 'PINs stimmen nicht überein'; - @override String get initializeServicesFailed => 'Profildienste konnten nicht initialisiert werden'; } // Path: connections @@ -902,7 +884,6 @@ class _TranslationsDiscoverDe extends TranslationsDiscoverEn { // Translations @override String get title => 'Entdecken'; - @override String get switchProfile => 'Profil wechseln'; @override String get noContentAvailable => 'Kein Inhalt verfügbar'; @override String get addMediaToLibraries => 'Medien zur Mediathek hinzufügen'; @override String get continueWatching => 'Weiterschauen'; @@ -938,8 +919,6 @@ class _TranslationsErrorsDe extends TranslationsErrorsEn { @override String get connectionFailed => 'Keine Verbindung zum Medienserver möglich'; @override String failedToLoad({required Object context, required Object error}) => 'Fehler beim Laden von ${context}: ${error}'; @override String get noClientAvailable => 'Kein Client verfügbar'; - @override String authenticationFailed({required Object error}) => 'Authentifizierung fehlgeschlagen: ${error}'; - @override String get couldNotLaunchUrl => 'Auth-URL konnte nicht geöffnet werden'; @override String get pleaseEnterToken => 'Bitte Token eingeben'; @override String get invalidToken => 'Ungültiges Token'; @override String failedToVerifyToken({required Object error}) => 'Token-Verifizierung fehlgeschlagen: ${error}'; @@ -973,6 +952,8 @@ class _TranslationsLibrariesDe extends TranslationsLibrariesEn { @override String get allLibrariesHidden => 'Alle Mediatheken sind ausgeblendet'; @override String hiddenLibrariesCount({required Object count}) => 'Ausgeblendete Mediatheken (${count})'; @override String get thisLibraryIsEmpty => 'Diese Mediathek ist leer'; + @override String get noItemsMatchFilters => 'Keine Elemente entsprechen den aktiven Filtern'; + @override String get resetFilters => 'Filter zurücksetzen'; @override String get all => 'Alle'; @override String get clearAll => 'Alle löschen'; @override String scanLibraryConfirm({required Object title}) => '„${title}“ wirklich scannen?'; @@ -998,8 +979,6 @@ class _TranslationsLibrariesDe extends TranslationsLibrariesEn { @override late final _TranslationsLibrariesGroupingsDe groupings = _TranslationsLibrariesGroupingsDe._(_root); @override late final _TranslationsLibrariesFilterCategoriesDe filterCategories = _TranslationsLibrariesFilterCategoriesDe._(_root); @override late final _TranslationsLibrariesSortLabelsDe sortLabels = _TranslationsLibrariesSortLabelsDe._(_root); - @override String get noItemsMatchFilters => 'Keine Elemente entsprechen den aktiven Filtern'; - @override String get resetFilters => 'Filter zurücksetzen'; } // Path: about @@ -1023,7 +1002,6 @@ class _TranslationsServerSelectionDe extends TranslationsServerSelectionEn { final TranslationsDe _root; // ignore: unused_field // Translations - @override String get allServerConnectionsFailed => 'Keine Verbindung zu Servern möglich. Prüfe dein Netzwerk.'; @override String noServersFoundForAccount({required Object username, required Object email}) => 'Keine Server gefunden für ${username} (${email})'; @override String failedToLoadServers({required Object error}) => 'Server konnten nicht geladen werden: ${error}'; } @@ -1102,7 +1080,6 @@ class _TranslationsExploreDe extends TranslationsExploreEn { @override String get watchlistUpdateFailed => 'Merkliste konnte nicht aktualisiert werden'; @override String get notInLibrary => 'Nicht in deiner Mediathek'; @override String get inTheseLibraries => 'In diesen Mediatheken'; - @override String availableOn({required Object server}) => 'Verfügbar auf ${server}'; @override String get checkingLibrary => 'Deine Mediathek wird überprüft...'; @override String get emptyTitle => 'Hier ist noch nichts'; @override String emptyMessage({required Object source}) => 'Zeilen aus ${source} erscheinen hier, sobald sie Inhalte enthalten.'; @@ -1123,6 +1100,8 @@ class _TranslationsLiveTvDe extends TranslationsLiveTvEn { @override String get guide => 'Programmführer'; @override String get noChannels => 'Keine Kanäle verfügbar'; @override String get noDvr => 'Kein DVR auf einem Server konfiguriert'; + @override String get serverUnavailable => 'Der Live-TV-Server ist nicht verfügbar.'; + @override String get serverNotConnected => 'Der Live-TV-Server ist nicht verbunden.'; @override String get noPrograms => 'Keine Programmdaten verfügbar'; @override String get liveStreamFailed => 'Livestream fehlgeschlagen'; @override String get unknownProgram => 'Unbekannte Sendung'; @@ -1158,7 +1137,6 @@ class _TranslationsLiveTvDe extends TranslationsLiveTvEn { @override String get scheduledRecordings => 'Geplant'; @override String get recordingRules => 'Aufnahmeregeln'; @override String get noScheduledRecordings => 'Keine geplanten Aufnahmen'; - @override String get noRecordingRules => 'Noch keine Aufnahmeregeln'; @override String get manageRecording => 'Aufnahme verwalten'; @override String get cancelRecording => 'Aufnahme abbrechen'; @override String get cancelRecordingTitle => 'Diese Aufnahme abbrechen?'; @@ -1175,7 +1153,6 @@ class _TranslationsLiveTvDe extends TranslationsLiveTvEn { @override String get recordingCancelled => 'Aufnahme abgebrochen'; @override String get recordingRuleDeleted => 'Aufnahmeregel gelöscht'; @override String get processRecordingRules => 'Regeln neu bewerten'; - @override String get loadingRecordings => 'Aufnahmen werden geladen ...'; @override String get recordingInProgress => 'Wird jetzt aufgenommen'; @override String recordingsCount({required Object count}) => '${count} geplant'; @override String get editRule => 'Regel bearbeiten'; @@ -1196,7 +1173,6 @@ class _TranslationsCollectionsDe extends TranslationsCollectionsEn { @override String get title => 'Sammlungen'; @override String get collection => 'Sammlung'; @override String get empty => 'Sammlung ist leer'; - @override String get unknownLibrarySection => 'Löschen nicht möglich: Unbekannte Bibliothekssektion'; @override String get deleteCollection => 'Sammlung löschen'; @override String deleteConfirm({required Object title}) => '"${title}" löschen? Dies kann nicht rückgängig gemacht werden.'; @override String get deleted => 'Sammlung gelöscht'; @@ -1243,6 +1219,7 @@ class _TranslationsPlaylistsDe extends TranslationsPlaylistsEn { @override String get itemAdded => 'Zur Wiedergabeliste hinzugefügt'; @override String get itemRemoved => 'Aus Wiedergabeliste entfernt'; @override String get selectPlaylist => 'Wiedergabeliste auswählen'; + @override String get searchPlaylists => 'Wiedergabelisten durchsuchen...'; @override String get errorCreating => 'Wiedergabeliste konnte nicht erstellt werden'; @override String get errorDeleting => 'Wiedergabeliste konnte nicht gelöscht werden'; @override String get errorLoading => 'Wiedergabelisten konnten nicht geladen werden'; @@ -1346,15 +1323,15 @@ class _TranslationsWatchTogetherDe extends TranslationsWatchTogetherEn { @override String participantResumed({required Object name}) => '${name} hat fortgesetzt'; @override String participantSeeked({required Object name}) => '${name} hat gespult'; @override String participantBuffering({required Object name}) => '${name} puffert'; + @override String participantNeedsUpdate({required Object name}) => '${name} verwendet eine ältere Appversion — Synchronisierung nicht verfügbar'; + @override String resumingWithout({required Object name}) => 'Fortfahren ohne ${name}'; @override String get waitingForParticipants => 'Warte auf andere zum Laden...'; + @override String waitingForName({required Object name}) => 'Warten auf ${name}...'; @override String get recentRooms => 'Letzte Räume'; @override String get renameRoom => 'Raum umbenennen'; @override String get removeRoom => 'Entfernen'; @override String get guestSwitchUnavailable => 'Wechsel fehlgeschlagen — Server nicht für Synchronisierung verfügbar'; @override String get guestSwitchFailed => 'Wechsel fehlgeschlagen — Inhalt auf diesem Server nicht gefunden'; - @override String participantNeedsUpdate({required Object name}) => '${name} verwendet eine ältere Appversion — Synchronisierung nicht verfügbar'; - @override String resumingWithout({required Object name}) => 'Fortfahren ohne ${name}'; - @override String waitingForName({required Object name}) => 'Warten auf ${name}...'; } // Path: downloads @@ -1406,7 +1383,6 @@ class _TranslationsDownloadsDe extends TranslationsDownloadsEn { @override String get customAmount => 'Eigene Anzahl...'; @override String get includeSpecials => 'Specials einschließen'; @override String get howManyEpisodes => 'Wie viele Episoden?'; - @override String itemsQueued({required Object count}) => '${count} Elemente zum Download eingereiht'; @override String get keepSynced => 'Synchronisiert halten'; @override String get downloadOnce => 'Einmal herunterladen'; @override String keepNUnwatched({required Object count}) => '${count} ungesehene behalten'; @@ -1780,7 +1756,6 @@ class _TranslationsAddServerDe extends TranslationsAddServerEn { @override String quickConnectFailed({required Object error}) => 'Quick Connect fehlgeschlagen: ${error}'; @override String get addPlexTitle => 'Mit Plex anmelden'; @override String get pinExpired => 'PIN ist vor der Anmeldung abgelaufen. Bitte erneut versuchen.'; - @override String get duplicatePlexAccount => 'Bereits bei Plex angemeldet. Melde dich ab, um Konten zu wechseln.'; @override String failedToRegisterAccount({required Object error}) => 'Konto konnte nicht registriert werden: ${error}'; @override String get enterJellyfinUrlError => 'Gib die URL deines Jellyfin-Servers ein'; @override String get addConnectionTitle => 'Verbindung hinzufügen'; @@ -1906,7 +1881,6 @@ class _TranslationsLibrariesSortLabelsDe extends TranslationsLibrariesSortLabels @override String get communityRating => 'Community-Bewertung'; @override String get criticRating => 'Kritikerbewertung'; @override String get userRating => 'Benutzerbewertung'; - @override String get lastPlayed => 'Zuletzt abgespielt'; @override String get datePlayed => 'Wiedergabedatum'; @override String get playCount => 'Wiedergaben'; @override String get productionYear => 'Produktionsjahr'; @@ -1965,7 +1939,6 @@ class _TranslationsCompanionRemoteSessionDe extends TranslationsCompanionRemoteS // Translations @override String get startingServer => 'Remote-Server wird gestartet...'; - @override String get failedToCreate => 'Remote-Server konnte nicht gestartet werden:'; @override String get hostAddress => 'Host-Adresse'; @override String get connected => 'Verbunden'; @override String get serverRunning => 'Remote-Server aktiv'; @@ -2047,6 +2020,8 @@ class _TranslationsCompanionRemoteErrorsDe extends TranslationsCompanionRemoteEr // Translations @override String get noNetworkInterface => 'Keine Netzwerkschnittstelle gefunden'; @override String get authenticationFailed => 'Authentifizierung fehlgeschlagen'; + @override String serverStartFailed({required Object error}) => 'Remote-Server konnte nicht gestartet werden: ${error}'; + @override String commandFailed({required Object error}) => 'Remote-Befehl konnte nicht gesendet werden: ${error}'; @override String get joinTimedOut => 'Zeitüberschreitung beim Beitreten zur Sitzung'; @override String get failedToConnectAnyAddress => 'Keine Verbindung zu einer Adresse möglich'; @override String connectionLostAfterAttempts({required Object attempts}) => 'Verbindung nach ${attempts} Versuchen verloren'; @@ -2123,7 +2098,6 @@ extension on TranslationsDe { dynamic _flatMapFunction(String path) { return switch (path) { 'app.title' => 'Plezy', - 'auth.signIn' => 'Anmelden', 'auth.signInWithPlex' => 'Mit Plex anmelden', 'auth.showQRCode' => 'QR-Code anzeigen', 'auth.authenticate' => 'Authentifizieren', @@ -2174,10 +2148,8 @@ extension on TranslationsDe { 'common.episodeNumberTitle' => ({required Object number, required Object title}) => 'Episode ${number} - ${title}', 'common.chapterNumber' => ({required Object number}) => 'Kapitel ${number}', 'common.reconnect' => 'Erneut verbinden', - 'common.exit' => 'Beenden', 'common.viewAll' => 'Alle anzeigen', 'common.checkingNetwork' => 'Netzwerk wird geprüft...', - 'common.refreshingServers' => 'Server werden aktualisiert...', 'common.loadingServers' => 'Server werden geladen...', 'common.connectingToServers' => 'Verbindung zu Servern...', 'common.startingOfflineMode' => 'Offlinemodus wird gestartet...', @@ -2251,6 +2223,12 @@ extension on TranslationsDe { 'settings.tvFullCardLayoutDescription' => 'TV-Karten nur mit Bild verwenden und Darstellernamen einblenden', 'settings.focusGlow' => 'Fokus-Leuchten', 'settings.focusGlowDescription' => 'Sanftes Leuchten um die fokussierte Karte anzeigen', + 'settings.visualEffects' => 'Visuelle Effekte', + 'settings.visualEffectsAuto' => 'Automatisch', + 'settings.visualEffectsAutoDescription' => 'Effekte auf leistungsschwachen Geräten automatisch reduzieren', + 'settings.visualEffectsFull' => 'Vollständig', + 'settings.visualEffectsReduced' => 'Reduziert', + 'settings.visualEffectsReducedDescription' => 'Weniger Animationen und Grafiken mit niedrigerer Auflösung', 'settings.hideSpoilers' => 'Spoiler für nicht gesehene Episoden verbergen', 'settings.hideSpoilersDescription' => 'Vorschaubilder und Beschreibungen ungesehener Episoden verwischen', 'settings.playerBackend' => 'Player-Backend', @@ -2263,7 +2241,7 @@ extension on TranslationsDe { 'settings.bufferSizeAuto' => 'Auto (Empfohlen)', 'settings.bufferSizeWarning' => ({required Object heap, required Object size}) => '${heap}MB Speicher verfügbar. Ein ${size}MB-Puffer kann die Wiedergabe beeinträchtigen.', 'settings.defaultQualityTitle' => 'Standardqualität', - 'settings.defaultQualityDescription' => 'Wird beim Starten der Wiedergabe verwendet. Niedrigere Werte reduzieren die Bandbreite.', + 'settings.musicQualityTitle' => 'Musikqualität', 'settings.subtitleStyling' => 'Untertitel-Stil', 'settings.subtitleStylingDescription' => 'Aussehen von Untertiteln anpassen', 'settings.smallSkipDuration' => 'Kleine Sprungdauer', @@ -2357,10 +2335,9 @@ extension on TranslationsDe { 'settings.maxVolumePercent' => ({required Object percent}) => '${percent}%', 'settings.discordRichPresence' => 'Discord Rich Presence', 'settings.discordRichPresenceDescription' => 'Zeige auf Discord, was du gerade schaust', - 'settings.trakt' => 'Trakt', - 'settings.traktDescription' => 'Wiedergabeverlauf mit Trakt synchronisieren', 'settings.services' => 'Dienste', 'settings.servicesDescription' => 'Trakt, MyAnimeList, Seerr und mehr verbinden', + 'settings.manageLibrariesDescription' => 'Mediatheken neu anordnen und ausblenden', 'settings.companionRemoteServer' => 'Companion Remote Server', 'settings.companionRemoteServerDescription' => 'Mobilgeräten in deinem Netzwerk erlauben, diese App zu steuern', 'settings.autoPip' => 'Automatisches Bild-in-Bild', @@ -2423,7 +2400,6 @@ extension on TranslationsDe { 'settings.showNavBarLabels' => 'Navigationsleisten-Beschriftungen anzeigen', 'settings.showNavBarLabelsDescription' => 'Textbeschriftungen unter den Symbolen der Navigationsleiste anzeigen', 'settings.startupSection' => 'Startbereich', - 'settings.startupSectionDescription' => 'Legt fest, welchen Bereich Plezy beim Start öffnet', 'settings.liveTvDefaultFavorites' => 'Standardmäßig Favoritenkanäle', 'settings.liveTvDefaultFavoritesDescription' => 'Beim Öffnen von Live TV nur Favoritenkanäle anzeigen', 'settings.display' => 'Anzeige', @@ -2435,13 +2411,6 @@ extension on TranslationsDe { 'settings.subtitlesAndConfig' => 'Untertitel & Konfiguration', 'settings.seekAndTiming' => 'Spulen & Timing', 'settings.behavior' => 'Verhalten', - 'settings.manageLibrariesDescription' => 'Mediatheken neu anordnen und ausblenden', - 'settings.visualEffects' => 'Visuelle Effekte', - 'settings.visualEffectsAuto' => 'Automatisch', - 'settings.visualEffectsAutoDescription' => 'Effekte auf leistungsschwachen Geräten automatisch reduzieren', - 'settings.visualEffectsFull' => 'Vollständig', - 'settings.visualEffectsReduced' => 'Reduziert', - 'settings.visualEffectsReducedDescription' => 'Weniger Animationen und Grafiken mit niedrigerer Auflösung', 'search.hint' => 'Filme, Serien, Musik suchen...', 'search.tryDifferentTerm' => 'Anderen Suchbegriff versuchen', 'search.searchYourMedia' => 'In den eigenen Medien suchen', @@ -2518,14 +2487,11 @@ extension on TranslationsDe { 'mediaMenu.playVersion' => 'Version abspielen...', 'rateSheet.title' => 'Bewerten', 'rateSheet.server' => 'Server', - 'rateSheet.starValue' => ({required Object rating}) => '${rating} / 5', - 'rateSheet.scoreValue' => ({required Object score}) => '${score} / 10', - 'rateSheet.setScore' => 'Eine Wertung festlegen', + 'rateSheet.favorite' => 'Favorit', + 'rateSheet.favorited' => 'Favorisiert', 'rateSheet.saved' => 'Gespeichert', 'rateSheet.notAvailable' => 'Keine Übereinstimmung gefunden', 'rateSheet.noConnectedServices' => 'Verbinde einen Dienst in den Einstellungen, um dort zu bewerten.', - 'rateSheet.favorite' => 'Favorit', - 'rateSheet.favorited' => 'Favorisiert', 'accessibility.mediaCardMovie' => ({required Object title}) => '${title}, Film', 'accessibility.mediaCardShow' => ({required Object title}) => '${title}, Serie', 'accessibility.mediaCardEpisode' => ({required Object title, required Object episodeInfo}) => '${title}, ${episodeInfo}', @@ -2534,6 +2500,14 @@ extension on TranslationsDe { 'accessibility.mediaCardPartiallyWatched' => ({required Object percent}) => '${percent} Prozent angesehen', 'accessibility.mediaCardUnwatched' => 'ungeschaut', 'accessibility.tapToPlay' => 'Zum Abspielen tippen', + 'accessibility.decrease' => 'Verringern', + 'accessibility.increase' => 'Erhöhen', + 'accessibility.decreaseValue' => ({required Object label}) => '${label} verringern', + 'accessibility.increaseValue' => ({required Object label}) => '${label} erhöhen', + 'accessibility.hue' => 'Farbton', + 'accessibility.saturation' => 'Sättigung', + 'accessibility.brightness' => 'Helligkeit', + 'accessibility.hexColor' => 'Hex-Farbe', 'tooltips.shufflePlay' => 'Zufallswiedergabe', 'tooltips.playTrailer' => 'Trailer abspielen', 'tooltips.markAsWatched' => 'Als gesehen markieren', @@ -2575,13 +2549,11 @@ extension on TranslationsDe { 'videoControls.settingsButton' => 'Wiedergabeeinstellungen', 'videoControls.tracksButton' => 'Audio und Untertitel', 'videoControls.chaptersButton' => 'Kapitel', - 'videoControls.versionsButton' => 'Videoversionen', 'videoControls.versionQualityButton' => 'Version & Qualität', 'videoControls.versionColumnHeader' => 'Version', 'videoControls.qualityColumnHeader' => 'Qualität', 'videoControls.qualityOriginal' => 'Original', 'videoControls.qualityPresetLabel' => ({required Object resolution, required Object bitrate}) => '${resolution}p ${bitrate} Mbps', - 'videoControls.qualityBandwidthEstimate' => ({required Object bitrate}) => '~${bitrate} Mbps', 'videoControls.transcodeUnavailableFallback' => 'Transkodierung nicht verfügbar — Wiedergabe in Originalqualität', 'videoControls.pipButton' => 'Bild-in-Bild Modus', 'videoControls.aspectRatioButton' => 'Seitenverhältnis', @@ -2621,10 +2593,6 @@ extension on TranslationsDe { 'videoControls.subtitleDownloaded' => 'Untertitel heruntergeladen', 'videoControls.subtitleDownloadFailed' => 'Untertitel konnte nicht heruntergeladen werden', 'videoControls.searchLanguages' => 'Sprachen suchen...', - 'userStatus.admin' => 'Eigentümer', - 'userStatus.restricted' => 'Eingeschränkt', - 'userStatus.protected' => 'Geschützt', - 'userStatus.current' => 'AKTUELL', 'messages.markedAsWatched' => 'Als gesehen markiert', 'messages.markedAsUnwatched' => 'Als ungesehen markiert', 'messages.markedAsWatchedOffline' => 'Als gesehen markiert (wird synchronisiert, wenn online)', @@ -2634,8 +2602,6 @@ extension on TranslationsDe { 'messages.errorLoading' => ({required Object error}) => 'Fehler: ${error}', 'messages.streamInterrupted' => 'Der Stream wurde unterbrochen. Drücke auf Wiedergabe oder spule, um es erneut zu versuchen.', 'messages.fileInfoNotAvailable' => 'Dateiinfo nicht verfügbar', - _ => null, - } ?? switch (path) { 'messages.errorLoadingFileInfo' => ({required Object error}) => 'Fehler beim Laden der Dateiinfo: ${error}', 'messages.errorLoadingSeries' => 'Fehler beim Laden der Serie', 'messages.musicNotSupported' => 'Musikwiedergabe wird noch nicht unterstützt', @@ -2643,6 +2609,8 @@ extension on TranslationsDe { 'messages.noProfilesAvailable' => 'Keine Profile verfügbar', 'messages.contactAdminForProfiles' => 'Kontaktiere deinen Serveradministrator, um Profile hinzuzufügen', 'messages.unableToDetermineLibrarySection' => 'Bibliotheksbereich für dieses Element kann nicht ermittelt werden', + _ => null, + } ?? switch (path) { 'messages.logsCleared' => 'Protokolle gelöscht', 'messages.logsCopied' => 'Protokolle in Zwischenablage kopiert', 'messages.noLogsAvailable' => 'Keine Protokolle verfügbar', @@ -2759,7 +2727,6 @@ extension on TranslationsDe { 'profiles.pinExplain' => '4-stellige PIN zum Profilwechsel erforderlich.', 'profiles.continueButton' => 'Weiter', 'profiles.pinsDontMatch' => 'PINs stimmen nicht überein', - 'profiles.initializeServicesFailed' => 'Profildienste konnten nicht initialisiert werden', 'connections.sectionTitle' => 'Verbindungen', 'connections.addConnection' => 'Verbindung hinzufügen', 'connections.addConnectionSubtitleNoProfile' => 'Mit Plex anmelden oder Jellyfin-Server verbinden', @@ -2770,7 +2737,6 @@ extension on TranslationsDe { 'connections.editJellyfinTitle' => 'Jellyfin-Verbindung bearbeiten', 'connections.editJellyfinIntro' => ({required Object serverName}) => 'Füge URLs für ${serverName} hinzu oder entferne sie. Plezy verwendet die erreichbare URL mit der geringsten Latenz.', 'discover.title' => 'Entdecken', - 'discover.switchProfile' => 'Profil wechseln', 'discover.noContentAvailable' => 'Kein Inhalt verfügbar', 'discover.addMediaToLibraries' => 'Medien zur Mediathek hinzufügen', 'discover.continueWatching' => 'Weiterschauen', @@ -2797,8 +2763,6 @@ extension on TranslationsDe { 'errors.connectionFailed' => 'Keine Verbindung zum Medienserver möglich', 'errors.failedToLoad' => ({required Object context, required Object error}) => 'Fehler beim Laden von ${context}: ${error}', 'errors.noClientAvailable' => 'Kein Client verfügbar', - 'errors.authenticationFailed' => ({required Object error}) => 'Authentifizierung fehlgeschlagen: ${error}', - 'errors.couldNotLaunchUrl' => 'Auth-URL konnte nicht geöffnet werden', 'errors.pleaseEnterToken' => 'Bitte Token eingeben', 'errors.invalidToken' => 'Ungültiges Token', 'errors.failedToVerifyToken' => ({required Object error}) => 'Token-Verifizierung fehlgeschlagen: ${error}', @@ -2823,6 +2787,8 @@ extension on TranslationsDe { 'libraries.allLibrariesHidden' => 'Alle Mediatheken sind ausgeblendet', 'libraries.hiddenLibrariesCount' => ({required Object count}) => 'Ausgeblendete Mediatheken (${count})', 'libraries.thisLibraryIsEmpty' => 'Diese Mediathek ist leer', + 'libraries.noItemsMatchFilters' => 'Keine Elemente entsprechen den aktiven Filtern', + 'libraries.resetFilters' => 'Filter zurücksetzen', 'libraries.all' => 'Alle', 'libraries.clearAll' => 'Alle löschen', 'libraries.scanLibraryConfirm' => ({required Object title}) => '„${title}“ wirklich scannen?', @@ -2871,7 +2837,6 @@ extension on TranslationsDe { 'libraries.sortLabels.communityRating' => 'Community-Bewertung', 'libraries.sortLabels.criticRating' => 'Kritikerbewertung', 'libraries.sortLabels.userRating' => 'Benutzerbewertung', - 'libraries.sortLabels.lastPlayed' => 'Zuletzt abgespielt', 'libraries.sortLabels.datePlayed' => 'Wiedergabedatum', 'libraries.sortLabels.playCount' => 'Wiedergaben', 'libraries.sortLabels.productionYear' => 'Produktionsjahr', @@ -2885,14 +2850,11 @@ extension on TranslationsDe { 'libraries.sortLabels.dateShared' => 'Datum geteilt', 'libraries.sortLabels.latestEpisodeAirDate' => 'Letztes Folgenausstrahlungsdatum', 'libraries.sortLabels.lastEpisodeDateAdded' => 'Datum der zuletzt hinzugefügten Folge', - 'libraries.noItemsMatchFilters' => 'Keine Elemente entsprechen den aktiven Filtern', - 'libraries.resetFilters' => 'Filter zurücksetzen', 'about.title' => 'Über', 'about.openSourceLicenses' => 'Open-Source-Lizenzen', 'about.versionLabel' => ({required Object version}) => 'Version ${version}', 'about.appDescription' => 'Ein schöner Plex- und Jellyfin-Client für Flutter', 'about.viewLicensesDescription' => 'Lizenzen von Drittanbieter-Bibliotheken anzeigen', - 'serverSelection.allServerConnectionsFailed' => 'Keine Verbindung zu Servern möglich. Prüfe dein Netzwerk.', 'serverSelection.noServersFoundForAccount' => ({required Object username, required Object email}) => 'Keine Server gefunden für ${username} (${email})', 'serverSelection.failedToLoadServers' => ({required Object error}) => 'Server konnten nicht geladen werden: ${error}', 'hubDetail.title' => 'Titel', @@ -2938,7 +2900,6 @@ extension on TranslationsDe { 'explore.watchlistUpdateFailed' => 'Merkliste konnte nicht aktualisiert werden', 'explore.notInLibrary' => 'Nicht in deiner Mediathek', 'explore.inTheseLibraries' => 'In diesen Mediatheken', - 'explore.availableOn' => ({required Object server}) => 'Verfügbar auf ${server}', 'explore.checkingLibrary' => 'Deine Mediathek wird überprüft...', 'explore.emptyTitle' => 'Hier ist noch nichts', 'explore.emptyMessage' => ({required Object source}) => 'Zeilen aus ${source} erscheinen hier, sobald sie Inhalte enthalten.', @@ -2950,6 +2911,8 @@ extension on TranslationsDe { 'liveTv.guide' => 'Programmführer', 'liveTv.noChannels' => 'Keine Kanäle verfügbar', 'liveTv.noDvr' => 'Kein DVR auf einem Server konfiguriert', + 'liveTv.serverUnavailable' => 'Der Live-TV-Server ist nicht verfügbar.', + 'liveTv.serverNotConnected' => 'Der Live-TV-Server ist nicht verbunden.', 'liveTv.noPrograms' => 'Keine Programmdaten verfügbar', 'liveTv.liveStreamFailed' => 'Livestream fehlgeschlagen', 'liveTv.unknownProgram' => 'Unbekannte Sendung', @@ -2985,7 +2948,6 @@ extension on TranslationsDe { 'liveTv.scheduledRecordings' => 'Geplant', 'liveTv.recordingRules' => 'Aufnahmeregeln', 'liveTv.noScheduledRecordings' => 'Keine geplanten Aufnahmen', - 'liveTv.noRecordingRules' => 'Noch keine Aufnahmeregeln', 'liveTv.manageRecording' => 'Aufnahme verwalten', 'liveTv.cancelRecording' => 'Aufnahme abbrechen', 'liveTv.cancelRecordingTitle' => 'Diese Aufnahme abbrechen?', @@ -3002,7 +2964,6 @@ extension on TranslationsDe { 'liveTv.recordingCancelled' => 'Aufnahme abgebrochen', 'liveTv.recordingRuleDeleted' => 'Aufnahmeregel gelöscht', 'liveTv.processRecordingRules' => 'Regeln neu bewerten', - 'liveTv.loadingRecordings' => 'Aufnahmen werden geladen ...', 'liveTv.recordingInProgress' => 'Wird jetzt aufgenommen', 'liveTv.recordingsCount' => ({required Object count}) => '${count} geplant', 'liveTv.editRule' => 'Regel bearbeiten', @@ -3014,7 +2975,6 @@ extension on TranslationsDe { 'collections.title' => 'Sammlungen', 'collections.collection' => 'Sammlung', 'collections.empty' => 'Sammlung ist leer', - 'collections.unknownLibrarySection' => 'Löschen nicht möglich: Unbekannte Bibliothekssektion', 'collections.deleteCollection' => 'Sammlung löschen', 'collections.deleteConfirm' => ({required Object title}) => '"${title}" löschen? Dies kann nicht rückgängig gemacht werden.', 'collections.deleted' => 'Sammlung gelöscht', @@ -3052,6 +3012,7 @@ extension on TranslationsDe { 'playlists.itemAdded' => 'Zur Wiedergabeliste hinzugefügt', 'playlists.itemRemoved' => 'Aus Wiedergabeliste entfernt', 'playlists.selectPlaylist' => 'Wiedergabeliste auswählen', + 'playlists.searchPlaylists' => 'Wiedergabelisten durchsuchen...', 'playlists.errorCreating' => 'Wiedergabeliste konnte nicht erstellt werden', 'playlists.errorDeleting' => 'Wiedergabeliste konnte nicht gelöscht werden', 'playlists.errorLoading' => 'Wiedergabelisten konnten nicht geladen werden', @@ -3134,22 +3095,20 @@ extension on TranslationsDe { 'watchTogether.participantResumed' => ({required Object name}) => '${name} hat fortgesetzt', 'watchTogether.participantSeeked' => ({required Object name}) => '${name} hat gespult', 'watchTogether.participantBuffering' => ({required Object name}) => '${name} puffert', + 'watchTogether.participantNeedsUpdate' => ({required Object name}) => '${name} verwendet eine ältere Appversion — Synchronisierung nicht verfügbar', + 'watchTogether.resumingWithout' => ({required Object name}) => 'Fortfahren ohne ${name}', 'watchTogether.waitingForParticipants' => 'Warte auf andere zum Laden...', + 'watchTogether.waitingForName' => ({required Object name}) => 'Warten auf ${name}...', 'watchTogether.recentRooms' => 'Letzte Räume', 'watchTogether.renameRoom' => 'Raum umbenennen', 'watchTogether.removeRoom' => 'Entfernen', 'watchTogether.guestSwitchUnavailable' => 'Wechsel fehlgeschlagen — Server nicht für Synchronisierung verfügbar', 'watchTogether.guestSwitchFailed' => 'Wechsel fehlgeschlagen — Inhalt auf diesem Server nicht gefunden', - 'watchTogether.participantNeedsUpdate' => ({required Object name}) => '${name} verwendet eine ältere Appversion — Synchronisierung nicht verfügbar', - 'watchTogether.resumingWithout' => ({required Object name}) => 'Fortfahren ohne ${name}', - 'watchTogether.waitingForName' => ({required Object name}) => 'Warten auf ${name}...', 'downloads.title' => 'Downloads', 'downloads.manage' => 'Verwalten', 'downloads.tvShows' => 'Serien', 'downloads.movies' => 'Filme', 'downloads.music' => 'Musik', - _ => null, - } ?? switch (path) { 'downloads.tracksQueued' => ({required Object count}) => '${count} Titel zum Download in Warteschlange', 'downloads.noDownloads' => 'Noch keine Downloads', 'downloads.noDownloadsDescription' => 'Heruntergeladene Inhalte werden hier für die Offline-Wiedergabe angezeigt', @@ -3164,6 +3123,8 @@ extension on TranslationsDe { 'downloads.deleteConfirm' => ({required Object title}) => '"${title}" von diesem Gerät löschen?', 'downloads.cancelledDownloadTitle' => 'Abgebrochener Download', 'downloads.cancelledDownloadMessage' => 'Dieser Download wurde abgebrochen. Was möchtest du tun?', + _ => null, + } ?? switch (path) { 'downloads.allEpisodesAlreadyDownloaded' => 'Alle Episoden sind bereits heruntergeladen', 'downloads.resumeDownload' => 'Download fortsetzen', 'downloads.cancelledDownload' => 'Abgebrochener Download', @@ -3187,7 +3148,6 @@ extension on TranslationsDe { 'downloads.customAmount' => 'Eigene Anzahl...', 'downloads.includeSpecials' => 'Specials einschließen', 'downloads.howManyEpisodes' => 'Wie viele Episoden?', - 'downloads.itemsQueued' => ({required Object count}) => '${count} Elemente zum Download eingereiht', 'downloads.keepSynced' => 'Synchronisiert halten', 'downloads.downloadOnce' => 'Einmal herunterladen', 'downloads.keepNUnwatched' => ({required Object count}) => '${count} ungesehene behalten', @@ -3231,7 +3191,6 @@ extension on TranslationsDe { 'companionRemote.connectedTo' => ({required Object name}) => 'Verbunden mit ${name}', 'companionRemote.unknownDevice' => 'Unbekanntes Gerät', 'companionRemote.session.startingServer' => 'Remote-Server wird gestartet...', - 'companionRemote.session.failedToCreate' => 'Remote-Server konnte nicht gestartet werden:', 'companionRemote.session.hostAddress' => 'Host-Adresse', 'companionRemote.session.connected' => 'Verbunden', 'companionRemote.session.serverRunning' => 'Remote-Server aktiv', @@ -3286,6 +3245,8 @@ extension on TranslationsDe { 'companionRemote.remote.searchHint' => 'Auf Desktop suchen...', 'companionRemote.errors.noNetworkInterface' => 'Keine Netzwerkschnittstelle gefunden', 'companionRemote.errors.authenticationFailed' => 'Authentifizierung fehlgeschlagen', + 'companionRemote.errors.serverStartFailed' => ({required Object error}) => 'Remote-Server konnte nicht gestartet werden: ${error}', + 'companionRemote.errors.commandFailed' => ({required Object error}) => 'Remote-Befehl konnte nicht gesendet werden: ${error}', 'companionRemote.errors.joinTimedOut' => 'Zeitüberschreitung beim Beitreten zur Sitzung', 'companionRemote.errors.failedToConnectAnyAddress' => 'Keine Verbindung zu einer Adresse möglich', 'companionRemote.errors.connectionLostAfterAttempts' => ({required Object attempts}) => 'Verbindung nach ${attempts} Versuchen verloren', @@ -3530,7 +3491,6 @@ extension on TranslationsDe { 'addServer.quickConnectFailed' => ({required Object error}) => 'Quick Connect fehlgeschlagen: ${error}', 'addServer.addPlexTitle' => 'Mit Plex anmelden', 'addServer.pinExpired' => 'PIN ist vor der Anmeldung abgelaufen. Bitte erneut versuchen.', - 'addServer.duplicatePlexAccount' => 'Bereits bei Plex angemeldet. Melde dich ab, um Konten zu wechseln.', 'addServer.failedToRegisterAccount' => ({required Object error}) => 'Konto konnte nicht registriert werden: ${error}', 'addServer.enterJellyfinUrlError' => 'Gib die URL deines Jellyfin-Servers ein', 'addServer.addConnectionTitle' => 'Verbindung hinzufügen', diff --git a/lib/i18n/strings_en.g.dart b/lib/i18n/strings_en.g.dart index 7ab6ebed..cd2e70de 100644 --- a/lib/i18n/strings_en.g.dart +++ b/lib/i18n/strings_en.g.dart @@ -54,7 +54,6 @@ class Translations with BaseTranslations { late final TranslationsAccessibilityEn accessibility = TranslationsAccessibilityEn.internal(_root); late final TranslationsTooltipsEn tooltips = TranslationsTooltipsEn.internal(_root); late final TranslationsVideoControlsEn videoControls = TranslationsVideoControlsEn.internal(_root); - late final TranslationsUserStatusEn userStatus = TranslationsUserStatusEn.internal(_root); late final TranslationsMessagesEn messages = TranslationsMessagesEn.internal(_root); late final TranslationsSubtitlingStylingEn subtitlingStyling = TranslationsSubtitlingStylingEn.internal(_root); late final TranslationsMpvConfigEn mpvConfig = TranslationsMpvConfigEn.internal(_root); @@ -111,9 +110,6 @@ class TranslationsAuthEn { // Translations - /// en: 'Sign in' - String get signIn => 'Sign in'; - /// en: 'Sign in with Plex' String get signInWithPlex => 'Sign in with Plex'; @@ -273,18 +269,12 @@ class TranslationsCommonEn { /// en: 'Reconnect' String get reconnect => 'Reconnect'; - /// en: 'Exit' - String get exit => 'Exit'; - /// en: 'View All' String get viewAll => 'View All'; /// en: 'Checking network...' String get checkingNetwork => 'Checking network...'; - /// en: 'Refreshing servers...' - String get refreshingServers => 'Refreshing servers...'; - /// en: 'Loading servers...' String get loadingServers => 'Loading servers...'; @@ -585,9 +575,6 @@ class TranslationsSettingsEn { /// en: 'Default Quality' String get defaultQualityTitle => 'Default Quality'; - /// en: 'Used when starting playback. Lower values reduce bandwidth.' - String get defaultQualityDescription => 'Used when starting playback. Lower values reduce bandwidth.'; - /// en: 'Music Quality' String get musicQualityTitle => 'Music Quality'; @@ -870,12 +857,6 @@ class TranslationsSettingsEn { /// en: 'Show what you're watching on Discord' String get discordRichPresenceDescription => 'Show what you\'re watching on Discord'; - /// en: 'Trakt' - String get trakt => 'Trakt'; - - /// en: 'Sync watch history with Trakt' - String get traktDescription => 'Sync watch history with Trakt'; - /// en: 'Services' String get services => 'Services'; @@ -1071,9 +1052,6 @@ class TranslationsSettingsEn { /// en: 'Startup Section' String get startupSection => 'Startup Section'; - /// en: 'Choose which section Plezy opens to when it starts' - String get startupSectionDescription => 'Choose which section Plezy opens to when it starts'; - /// en: 'Default to Favorite Channels' String get liveTvDefaultFavorites => 'Default to Favorite Channels'; @@ -1307,15 +1285,6 @@ class TranslationsRateSheetEn { /// en: 'Server' String get server => 'Server'; - /// en: '${rating} / 5' - String starValue({required Object rating}) => '${rating} / 5'; - - /// en: '${score} / 10' - String scoreValue({required Object score}) => '${score} / 10'; - - /// en: 'Set a score' - String get setScore => 'Set a score'; - /// en: 'Favorite' String get favorite => 'Favorite'; @@ -1363,6 +1332,30 @@ class TranslationsAccessibilityEn { /// en: 'Tap to play' String get tapToPlay => 'Tap to play'; + + /// en: 'Decrease' + String get decrease => 'Decrease'; + + /// en: 'Increase' + String get increase => 'Increase'; + + /// en: 'Decrease ${label}' + String decreaseValue({required Object label}) => 'Decrease ${label}'; + + /// en: 'Increase ${label}' + String increaseValue({required Object label}) => 'Increase ${label}'; + + /// en: 'Hue' + String get hue => 'Hue'; + + /// en: 'Saturation' + String get saturation => 'Saturation'; + + /// en: 'Brightness' + String get brightness => 'Brightness'; + + /// en: 'Hex color' + String get hexColor => 'Hex color'; } // Path: tooltips @@ -1505,9 +1498,6 @@ class TranslationsVideoControlsEn { /// en: 'Chapters' String get chaptersButton => 'Chapters'; - /// en: 'Video versions' - String get versionsButton => 'Video versions'; - /// en: 'Version & Quality' String get versionQualityButton => 'Version & Quality'; @@ -1523,9 +1513,6 @@ class TranslationsVideoControlsEn { /// en: '${resolution}p ${bitrate} Mbps' String qualityPresetLabel({required Object resolution, required Object bitrate}) => '${resolution}p ${bitrate} Mbps'; - /// en: '~${bitrate} Mbps' - String qualityBandwidthEstimate({required Object bitrate}) => '~${bitrate} Mbps'; - /// en: 'Transcoding unavailable — playing original quality' String get transcodeUnavailableFallback => 'Transcoding unavailable — playing original quality'; @@ -1625,27 +1612,6 @@ class TranslationsVideoControlsEn { String get searchLanguages => 'Search languages...'; } -// Path: userStatus -class TranslationsUserStatusEn { - TranslationsUserStatusEn.internal(this._root); - - final Translations _root; // ignore: unused_field - - // Translations - - /// en: 'Admin' - String get admin => 'Admin'; - - /// en: 'Restricted' - String get restricted => 'Restricted'; - - /// en: 'Protected' - String get protected => 'Protected'; - - /// en: 'CURRENT' - String get current => 'CURRENT'; -} - // Path: messages class TranslationsMessagesEn { TranslationsMessagesEn.internal(this._root); @@ -2085,9 +2051,6 @@ class TranslationsProfilesEn { /// en: 'PINs don't match' String get pinsDontMatch => 'PINs don\'t match'; - - /// en: 'Failed to initialize profile services' - String get initializeServicesFailed => 'Failed to initialize profile services'; } // Path: connections @@ -2137,9 +2100,6 @@ class TranslationsDiscoverEn { /// en: 'Discover' String get title => 'Discover'; - /// en: 'Switch Profile' - String get switchProfile => 'Switch Profile'; - /// en: 'No content available' String get noContentAvailable => 'No content available'; @@ -2227,12 +2187,6 @@ class TranslationsErrorsEn { /// en: 'No client available' String get noClientAvailable => 'No client available'; - /// en: 'Authentication failed: ${error}' - String authenticationFailed({required Object error}) => 'Authentication failed: ${error}'; - - /// en: 'Could not launch auth URL' - String get couldNotLaunchUrl => 'Could not launch auth URL'; - /// en: 'Please enter a token' String get pleaseEnterToken => 'Please enter a token'; @@ -2421,9 +2375,6 @@ class TranslationsServerSelectionEn { // Translations - /// en: 'Couldn't connect to any servers. Check your network.' - String get allServerConnectionsFailed => 'Couldn\'t connect to any servers. Check your network.'; - /// en: 'No servers found for ${username} (${email})' String noServersFoundForAccount({required Object username, required Object email}) => 'No servers found for ${username} (${email})'; @@ -2559,9 +2510,6 @@ class TranslationsExploreEn { /// en: 'In these libraries' String get inTheseLibraries => 'In these libraries'; - /// en: 'Available on ${server}' - String availableOn({required Object server}) => 'Available on ${server}'; - /// en: 'Checking your library...' String get checkingLibrary => 'Checking your library...'; @@ -2604,6 +2552,12 @@ class TranslationsLiveTvEn { /// en: 'No DVR configured on any server' String get noDvr => 'No DVR configured on any server'; + /// en: 'Live TV server is not available.' + String get serverUnavailable => 'Live TV server is not available.'; + + /// en: 'Live TV server is not connected.' + String get serverNotConnected => 'Live TV server is not connected.'; + /// en: 'No program data available' String get noPrograms => 'No program data available'; @@ -2709,9 +2663,6 @@ class TranslationsLiveTvEn { /// en: 'Nothing scheduled to record' String get noScheduledRecordings => 'Nothing scheduled to record'; - /// en: 'No recording rules yet' - String get noRecordingRules => 'No recording rules yet'; - /// en: 'Manage recording' String get manageRecording => 'Manage recording'; @@ -2760,9 +2711,6 @@ class TranslationsLiveTvEn { /// en: 'Re-evaluate rules' String get processRecordingRules => 'Re-evaluate rules'; - /// en: 'Loading recordings...' - String get loadingRecordings => 'Loading recordings...'; - /// en: 'Recording now' String get recordingInProgress => 'Recording now'; @@ -2805,9 +2753,6 @@ class TranslationsCollectionsEn { /// en: 'Collection is empty' String get empty => 'Collection is empty'; - /// en: 'Cannot delete: Unknown library section' - String get unknownLibrarySection => 'Cannot delete: Unknown library section'; - /// en: 'Delete Collection' String get deleteCollection => 'Delete Collection'; @@ -3360,9 +3305,6 @@ class TranslationsDownloadsEn { /// en: 'How many episodes?' String get howManyEpisodes => 'How many episodes?'; - /// en: '${count} items queued for download' - String itemsQueued({required Object count}) => '${count} items queued for download'; - /// en: 'Keep synced' String get keepSynced => 'Keep synced'; @@ -4252,9 +4194,6 @@ class TranslationsAddServerEn { /// en: 'PIN expired before sign-in. Please try again.' String get pinExpired => 'PIN expired before sign-in. Please try again.'; - /// en: 'Already signed in to Plex. Sign out to switch accounts.' - String get duplicatePlexAccount => 'Already signed in to Plex. Sign out to switch accounts.'; - /// en: 'Failed to register account: ${error}' String failedToRegisterAccount({required Object error}) => 'Failed to register account: ${error}'; @@ -4522,9 +4461,6 @@ class TranslationsLibrariesSortLabelsEn { /// en: 'User Rating' String get userRating => 'User Rating'; - /// en: 'Last Played' - String get lastPlayed => 'Last Played'; - /// en: 'Date Played' String get datePlayed => 'Date Played'; @@ -4645,9 +4581,6 @@ class TranslationsCompanionRemoteSessionEn { /// en: 'Starting remote server...' String get startingServer => 'Starting remote server...'; - /// en: 'Failed to start remote server:' - String get failedToCreate => 'Failed to start remote server:'; - /// en: 'Host Address' String get hostAddress => 'Host Address'; @@ -4837,6 +4770,12 @@ class TranslationsCompanionRemoteErrorsEn { /// en: 'Authentication failed' String get authenticationFailed => 'Authentication failed'; + /// en: 'Failed to start remote server: ${error}' + String serverStartFailed({required Object error}) => 'Failed to start remote server: ${error}'; + + /// en: 'Failed to send remote command: ${error}' + String commandFailed({required Object error}) => 'Failed to send remote command: ${error}'; + /// en: 'Timed out joining session' String get joinTimedOut => 'Timed out joining session'; @@ -4970,7 +4909,6 @@ extension on Translations { dynamic _flatMapFunction(String path) { return switch (path) { 'app.title' => 'Plezy', - 'auth.signIn' => 'Sign in', 'auth.signInWithPlex' => 'Sign in with Plex', 'auth.showQRCode' => 'Show QR Code', 'auth.authenticate' => 'Authenticate', @@ -5021,10 +4959,8 @@ extension on Translations { 'common.episodeNumberTitle' => ({required Object number, required Object title}) => 'Episode ${number} - ${title}', 'common.chapterNumber' => ({required Object number}) => 'Chapter ${number}', 'common.reconnect' => 'Reconnect', - 'common.exit' => 'Exit', 'common.viewAll' => 'View All', 'common.checkingNetwork' => 'Checking network...', - 'common.refreshingServers' => 'Refreshing servers...', 'common.loadingServers' => 'Loading servers...', 'common.connectingToServers' => 'Connecting to servers...', 'common.startingOfflineMode' => 'Starting offline mode...', @@ -5116,7 +5052,6 @@ extension on Translations { 'settings.bufferSizeAuto' => 'Auto (Recommended)', 'settings.bufferSizeWarning' => ({required Object heap, required Object size}) => '${heap}MB memory available. A ${size}MB buffer may affect playback.', 'settings.defaultQualityTitle' => 'Default Quality', - 'settings.defaultQualityDescription' => 'Used when starting playback. Lower values reduce bandwidth.', 'settings.musicQualityTitle' => 'Music Quality', 'settings.subtitleStyling' => 'Subtitle Styling', 'settings.subtitleStylingDescription' => 'Customize subtitle appearance', @@ -5211,8 +5146,6 @@ extension on Translations { 'settings.maxVolumePercent' => ({required Object percent}) => '${percent}%', 'settings.discordRichPresence' => 'Discord Rich Presence', 'settings.discordRichPresenceDescription' => 'Show what you\'re watching on Discord', - 'settings.trakt' => 'Trakt', - 'settings.traktDescription' => 'Sync watch history with Trakt', 'settings.services' => 'Services', 'settings.servicesDescription' => 'Connect Trakt, MyAnimeList, Seerr, and more', 'settings.manageLibrariesDescription' => 'Reorder and hide libraries', @@ -5278,7 +5211,6 @@ extension on Translations { 'settings.showNavBarLabels' => 'Show Navigation Bar Labels', 'settings.showNavBarLabelsDescription' => 'Display text labels under navigation bar icons', 'settings.startupSection' => 'Startup Section', - 'settings.startupSectionDescription' => 'Choose which section Plezy opens to when it starts', 'settings.liveTvDefaultFavorites' => 'Default to Favorite Channels', 'settings.liveTvDefaultFavoritesDescription' => 'Show only favorite channels when opening Live TV', 'settings.display' => 'Display', @@ -5366,9 +5298,6 @@ extension on Translations { 'mediaMenu.playVersion' => 'Play Version...', 'rateSheet.title' => 'Rate', 'rateSheet.server' => 'Server', - 'rateSheet.starValue' => ({required Object rating}) => '${rating} / 5', - 'rateSheet.scoreValue' => ({required Object score}) => '${score} / 10', - 'rateSheet.setScore' => 'Set a score', 'rateSheet.favorite' => 'Favorite', 'rateSheet.favorited' => 'Favorited', 'rateSheet.saved' => 'Saved', @@ -5382,6 +5311,14 @@ extension on Translations { 'accessibility.mediaCardPartiallyWatched' => ({required Object percent}) => '${percent} percent watched', 'accessibility.mediaCardUnwatched' => 'unwatched', 'accessibility.tapToPlay' => 'Tap to play', + 'accessibility.decrease' => 'Decrease', + 'accessibility.increase' => 'Increase', + 'accessibility.decreaseValue' => ({required Object label}) => 'Decrease ${label}', + 'accessibility.increaseValue' => ({required Object label}) => 'Increase ${label}', + 'accessibility.hue' => 'Hue', + 'accessibility.saturation' => 'Saturation', + 'accessibility.brightness' => 'Brightness', + 'accessibility.hexColor' => 'Hex color', 'tooltips.shufflePlay' => 'Shuffle play', 'tooltips.playTrailer' => 'Play trailer', 'tooltips.markAsWatched' => 'Mark as watched', @@ -5423,13 +5360,11 @@ extension on Translations { 'videoControls.settingsButton' => 'Playback Settings', 'videoControls.tracksButton' => 'Audio & Subtitles', 'videoControls.chaptersButton' => 'Chapters', - 'videoControls.versionsButton' => 'Video versions', 'videoControls.versionQualityButton' => 'Version & Quality', 'videoControls.versionColumnHeader' => 'Version', 'videoControls.qualityColumnHeader' => 'Quality', 'videoControls.qualityOriginal' => 'Original', 'videoControls.qualityPresetLabel' => ({required Object resolution, required Object bitrate}) => '${resolution}p ${bitrate} Mbps', - 'videoControls.qualityBandwidthEstimate' => ({required Object bitrate}) => '~${bitrate} Mbps', 'videoControls.transcodeUnavailableFallback' => 'Transcoding unavailable — playing original quality', 'videoControls.pipButton' => 'Picture-in-Picture mode', 'videoControls.aspectRatioButton' => 'Aspect ratio', @@ -5469,10 +5404,6 @@ extension on Translations { 'videoControls.subtitleDownloaded' => 'Subtitle downloaded', 'videoControls.subtitleDownloadFailed' => 'Failed to download subtitle', 'videoControls.searchLanguages' => 'Search languages...', - 'userStatus.admin' => 'Admin', - 'userStatus.restricted' => 'Restricted', - 'userStatus.protected' => 'Protected', - 'userStatus.current' => 'CURRENT', 'messages.markedAsWatched' => 'Marked as watched', 'messages.markedAsUnwatched' => 'Marked as unwatched', 'messages.markedAsWatchedOffline' => 'Marked as watched (will sync when online)', @@ -5481,8 +5412,6 @@ extension on Translations { 'messages.removedFromContinueWatching' => 'Removed from Continue Watching', 'messages.errorLoading' => ({required Object error}) => 'Error: ${error}', 'messages.streamInterrupted' => 'The stream was interrupted. Press play or seek to retry.', - _ => null, - } ?? switch (path) { 'messages.fileInfoNotAvailable' => 'File information not available', 'messages.errorLoadingFileInfo' => ({required Object error}) => 'Error loading file info: ${error}', 'messages.errorLoadingSeries' => 'Error loading series', @@ -5491,6 +5420,8 @@ extension on Translations { 'messages.noProfilesAvailable' => 'No profiles available', 'messages.contactAdminForProfiles' => 'Contact your server administrator to add profiles', 'messages.unableToDetermineLibrarySection' => 'Unable to determine library section for this item', + _ => null, + } ?? switch (path) { 'messages.logsCleared' => 'Logs cleared', 'messages.logsCopied' => 'Logs copied to clipboard', 'messages.noLogsAvailable' => 'No logs available', @@ -5607,7 +5538,6 @@ extension on Translations { 'profiles.pinExplain' => '4-digit PIN required to switch profiles.', 'profiles.continueButton' => 'Continue', 'profiles.pinsDontMatch' => 'PINs don\'t match', - 'profiles.initializeServicesFailed' => 'Failed to initialize profile services', 'connections.sectionTitle' => 'Connections', 'connections.addConnection' => 'Add connection', 'connections.addConnectionSubtitleNoProfile' => 'Sign in with Plex or connect a Jellyfin server', @@ -5618,7 +5548,6 @@ extension on Translations { 'connections.editJellyfinTitle' => 'Edit Jellyfin connection', 'connections.editJellyfinIntro' => ({required Object serverName}) => 'Add or remove URLs for ${serverName}. Plezy will use the reachable URL with the lowest latency.', 'discover.title' => 'Discover', - 'discover.switchProfile' => 'Switch Profile', 'discover.noContentAvailable' => 'No content available', 'discover.addMediaToLibraries' => 'Add some media to your libraries', 'discover.continueWatching' => 'Continue Watching', @@ -5645,8 +5574,6 @@ extension on Translations { 'errors.connectionFailed' => 'Unable to connect to media server', 'errors.failedToLoad' => ({required Object context, required Object error}) => 'Failed to load ${context}: ${error}', 'errors.noClientAvailable' => 'No client available', - 'errors.authenticationFailed' => ({required Object error}) => 'Authentication failed: ${error}', - 'errors.couldNotLaunchUrl' => 'Could not launch auth URL', 'errors.pleaseEnterToken' => 'Please enter a token', 'errors.invalidToken' => 'Invalid token', 'errors.failedToVerifyToken' => ({required Object error}) => 'Failed to verify token: ${error}', @@ -5721,7 +5648,6 @@ extension on Translations { 'libraries.sortLabels.communityRating' => 'Community Rating', 'libraries.sortLabels.criticRating' => 'Critic Rating', 'libraries.sortLabels.userRating' => 'User Rating', - 'libraries.sortLabels.lastPlayed' => 'Last Played', 'libraries.sortLabels.datePlayed' => 'Date Played', 'libraries.sortLabels.playCount' => 'Play Count', 'libraries.sortLabels.productionYear' => 'Production Year', @@ -5740,7 +5666,6 @@ extension on Translations { 'about.versionLabel' => ({required Object version}) => 'Version ${version}', 'about.appDescription' => 'A beautiful Plex and Jellyfin client for Flutter', 'about.viewLicensesDescription' => 'View licenses of third-party libraries', - 'serverSelection.allServerConnectionsFailed' => 'Couldn\'t connect to any servers. Check your network.', 'serverSelection.noServersFoundForAccount' => ({required Object username, required Object email}) => 'No servers found for ${username} (${email})', 'serverSelection.failedToLoadServers' => ({required Object error}) => 'Failed to load servers: ${error}', 'hubDetail.title' => 'Title', @@ -5786,7 +5711,6 @@ extension on Translations { 'explore.watchlistUpdateFailed' => 'Couldn\'t update watchlist', 'explore.notInLibrary' => 'Not in your library', 'explore.inTheseLibraries' => 'In these libraries', - 'explore.availableOn' => ({required Object server}) => 'Available on ${server}', 'explore.checkingLibrary' => 'Checking your library...', 'explore.emptyTitle' => 'Nothing here yet', 'explore.emptyMessage' => ({required Object source}) => 'Rows from ${source} will appear here once they have content.', @@ -5798,6 +5722,8 @@ extension on Translations { 'liveTv.guide' => 'Guide', 'liveTv.noChannels' => 'No channels available', 'liveTv.noDvr' => 'No DVR configured on any server', + 'liveTv.serverUnavailable' => 'Live TV server is not available.', + 'liveTv.serverNotConnected' => 'Live TV server is not connected.', 'liveTv.noPrograms' => 'No program data available', 'liveTv.liveStreamFailed' => 'Live stream failed', 'liveTv.unknownProgram' => 'Unknown Program', @@ -5833,7 +5759,6 @@ extension on Translations { 'liveTv.scheduledRecordings' => 'Scheduled', 'liveTv.recordingRules' => 'Recording Rules', 'liveTv.noScheduledRecordings' => 'Nothing scheduled to record', - 'liveTv.noRecordingRules' => 'No recording rules yet', 'liveTv.manageRecording' => 'Manage recording', 'liveTv.cancelRecording' => 'Cancel recording', 'liveTv.cancelRecordingTitle' => 'Cancel this recording?', @@ -5850,7 +5775,6 @@ extension on Translations { 'liveTv.recordingCancelled' => 'Recording cancelled', 'liveTv.recordingRuleDeleted' => 'Recording rule deleted', 'liveTv.processRecordingRules' => 'Re-evaluate rules', - 'liveTv.loadingRecordings' => 'Loading recordings...', 'liveTv.recordingInProgress' => 'Recording now', 'liveTv.recordingsCount' => ({required Object count}) => '${count} scheduled', 'liveTv.editRule' => 'Edit rule', @@ -5862,7 +5786,6 @@ extension on Translations { 'collections.title' => 'Collections', 'collections.collection' => 'Collection', 'collections.empty' => 'Collection is empty', - 'collections.unknownLibrarySection' => 'Cannot delete: Unknown library section', 'collections.deleteCollection' => 'Delete Collection', 'collections.deleteConfirm' => ({required Object title}) => 'Delete "${title}"? This can\'t be undone.', 'collections.deleted' => 'Collection deleted', @@ -5995,8 +5918,6 @@ extension on Translations { 'downloads.title' => 'Downloads', 'downloads.manage' => 'Manage', 'downloads.tvShows' => 'TV Shows', - _ => null, - } ?? switch (path) { 'downloads.movies' => 'Movies', 'downloads.music' => 'Music', 'downloads.tracksQueued' => ({required Object count}) => '${count} tracks queued for download', @@ -6013,6 +5934,8 @@ extension on Translations { 'downloads.deleteConfirm' => ({required Object title}) => 'Delete "${title}" from this device?', 'downloads.cancelledDownloadTitle' => 'Cancelled Download', 'downloads.cancelledDownloadMessage' => 'This download was cancelled. What would you like to do?', + _ => null, + } ?? switch (path) { 'downloads.allEpisodesAlreadyDownloaded' => 'All episodes already downloaded', 'downloads.resumeDownload' => 'Resume download', 'downloads.cancelledDownload' => 'Cancelled download', @@ -6036,7 +5959,6 @@ extension on Translations { 'downloads.customAmount' => 'Custom amount...', 'downloads.includeSpecials' => 'Include Specials', 'downloads.howManyEpisodes' => 'How many episodes?', - 'downloads.itemsQueued' => ({required Object count}) => '${count} items queued for download', 'downloads.keepSynced' => 'Keep synced', 'downloads.downloadOnce' => 'Download once', 'downloads.keepNUnwatched' => ({required Object count}) => 'Keep ${count} unwatched', @@ -6080,7 +6002,6 @@ extension on Translations { 'companionRemote.connectedTo' => ({required Object name}) => 'Connected to ${name}', 'companionRemote.unknownDevice' => 'Unknown Device', 'companionRemote.session.startingServer' => 'Starting remote server...', - 'companionRemote.session.failedToCreate' => 'Failed to start remote server:', 'companionRemote.session.hostAddress' => 'Host Address', 'companionRemote.session.connected' => 'Connected', 'companionRemote.session.serverRunning' => 'Remote server active', @@ -6135,6 +6056,8 @@ extension on Translations { 'companionRemote.remote.searchHint' => 'Search on desktop...', 'companionRemote.errors.noNetworkInterface' => 'No network interface found', 'companionRemote.errors.authenticationFailed' => 'Authentication failed', + 'companionRemote.errors.serverStartFailed' => ({required Object error}) => 'Failed to start remote server: ${error}', + 'companionRemote.errors.commandFailed' => ({required Object error}) => 'Failed to send remote command: ${error}', 'companionRemote.errors.joinTimedOut' => 'Timed out joining session', 'companionRemote.errors.failedToConnectAnyAddress' => 'Failed to connect to any address', 'companionRemote.errors.connectionLostAfterAttempts' => ({required Object attempts}) => 'Connection lost after ${attempts} attempts', @@ -6379,7 +6302,6 @@ extension on Translations { 'addServer.quickConnectFailed' => ({required Object error}) => 'Quick Connect failed: ${error}', 'addServer.addPlexTitle' => 'Sign in with Plex', 'addServer.pinExpired' => 'PIN expired before sign-in. Please try again.', - 'addServer.duplicatePlexAccount' => 'Already signed in to Plex. Sign out to switch accounts.', 'addServer.failedToRegisterAccount' => ({required Object error}) => 'Failed to register account: ${error}', 'addServer.enterJellyfinUrlError' => 'Enter your Jellyfin server URL', 'addServer.addConnectionTitle' => 'Add connection', diff --git a/lib/i18n/strings_es.g.dart b/lib/i18n/strings_es.g.dart index c9dd1556..bd784494 100644 --- a/lib/i18n/strings_es.g.dart +++ b/lib/i18n/strings_es.g.dart @@ -53,7 +53,6 @@ class TranslationsEs extends Translations with BaseTranslations 'Iniciar sesión'; @override String get signInWithPlex => 'Inicia sesión con Plex'; @override String get showQRCode => 'Mostrar código QR'; @override String get authenticate => 'Autenticar'; @@ -167,10 +165,8 @@ class _TranslationsCommonEs extends TranslationsCommonEn { @override String episodeNumberTitle({required Object number, required Object title}) => 'Episodio ${number} - ${title}'; @override String chapterNumber({required Object number}) => 'Capítulo ${number}'; @override String get reconnect => 'Reconectar'; - @override String get exit => 'Salir'; @override String get viewAll => 'Ver todo'; @override String get checkingNetwork => 'Comprobando red...'; - @override String get refreshingServers => 'Actualizando servidores...'; @override String get loadingServers => 'Cargando servidores...'; @override String get connectingToServers => 'Conectando a servidores...'; @override String get startingOfflineMode => 'Iniciando modo sin conexión...'; @@ -271,6 +267,12 @@ class _TranslationsSettingsEs extends TranslationsSettingsEn { @override String get tvFullCardLayoutDescription => 'Usar tarjetas TV solo con imagen y nombres de actores superpuestos'; @override String get focusGlow => 'Brillo de foco'; @override String get focusGlowDescription => 'Mostrar un brillo suave alrededor de la tarjeta con foco'; + @override String get visualEffects => 'Efectos visuales'; + @override String get visualEffectsAuto => 'Automático'; + @override String get visualEffectsAutoDescription => 'Reduce automáticamente los efectos en dispositivos de bajo consumo'; + @override String get visualEffectsFull => 'Completos'; + @override String get visualEffectsReduced => 'Reducidos'; + @override String get visualEffectsReducedDescription => 'Menos animaciones e ilustraciones de menor resolución'; @override String get hideSpoilers => 'Ocultar spoilers de episodios no vistos'; @override String get hideSpoilersDescription => 'Desenfocar miniaturas y descripciones de episodios no vistos'; @override String get playerBackend => 'Reproductor'; @@ -283,7 +285,7 @@ class _TranslationsSettingsEs extends TranslationsSettingsEn { @override String get bufferSizeAuto => 'Auto (Recomendado)'; @override String bufferSizeWarning({required Object heap, required Object size}) => '${heap}MB de memoria disponible. Un búfer de ${size}MB puede afectar la reproducción.'; @override String get defaultQualityTitle => 'Calidad predeterminada'; - @override String get defaultQualityDescription => 'Se utiliza al iniciar la reproducción. Los valores más bajos reducen el ancho de banda.'; + @override String get musicQualityTitle => 'Calidad de música'; @override String get subtitleStyling => 'Estilo de Subtítulos'; @override String get subtitleStylingDescription => 'Personalizar la apariencia de los subtítulos'; @override String get smallSkipDuration => 'Salto pequeño'; @@ -377,10 +379,9 @@ class _TranslationsSettingsEs extends TranslationsSettingsEn { @override String maxVolumePercent({required Object percent}) => '${percent}%'; @override String get discordRichPresence => 'Presencia de Discord'; @override String get discordRichPresenceDescription => 'Mostrar lo que estás viendo en Discord'; - @override String get trakt => 'Trakt'; - @override String get traktDescription => 'Sincronizar historial de visualización con Trakt'; @override String get services => 'Servicios'; @override String get servicesDescription => 'Conecta Trakt, MyAnimeList, Seerr y más'; + @override String get manageLibrariesDescription => 'Reordena y oculta bibliotecas'; @override String get companionRemoteServer => 'Servidor de control remoto'; @override String get companionRemoteServerDescription => 'Permitir que dispositivos móviles en tu red controlen esta aplicación'; @override String get autoPip => 'Imagen en imagen automática'; @@ -443,7 +444,6 @@ class _TranslationsSettingsEs extends TranslationsSettingsEn { @override String get showNavBarLabels => 'Mostrar etiquetas de la barra de navegación'; @override String get showNavBarLabelsDescription => 'Mostrar etiquetas de texto bajo los iconos de la barra de navegación'; @override String get startupSection => 'Sección de inicio'; - @override String get startupSectionDescription => 'Elige qué sección abre Plezy al iniciarse'; @override String get liveTvDefaultFavorites => 'Canales favoritos por defecto'; @override String get liveTvDefaultFavoritesDescription => 'Mostrar solo canales favoritos al abrir TV en vivo'; @override String get display => 'Pantalla'; @@ -455,13 +455,6 @@ class _TranslationsSettingsEs extends TranslationsSettingsEn { @override String get subtitlesAndConfig => 'Subtítulos y configuración'; @override String get seekAndTiming => 'Búsqueda y tiempo'; @override String get behavior => 'Comportamiento'; - @override String get manageLibrariesDescription => 'Reordena y oculta bibliotecas'; - @override String get visualEffects => 'Efectos visuales'; - @override String get visualEffectsAuto => 'Automático'; - @override String get visualEffectsAutoDescription => 'Reduce automáticamente los efectos en dispositivos de bajo consumo'; - @override String get visualEffectsFull => 'Completos'; - @override String get visualEffectsReduced => 'Reducidos'; - @override String get visualEffectsReducedDescription => 'Menos animaciones e ilustraciones de menor resolución'; } // Path: search @@ -559,14 +552,11 @@ class _TranslationsRateSheetEs extends TranslationsRateSheetEn { // Translations @override String get title => 'Calificar'; @override String get server => 'Servidor'; - @override String starValue({required Object rating}) => '${rating} / 5'; - @override String scoreValue({required Object score}) => '${score} / 10'; - @override String get setScore => 'Establecer puntuación'; + @override String get favorite => 'Favorito'; + @override String get favorited => 'Marcado como favorito'; @override String get saved => 'Guardado'; @override String get notAvailable => 'No se encontró coincidencia'; @override String get noConnectedServices => 'Conecta un servicio en Configuración para calificar ahí.'; - @override String get favorite => 'Favorito'; - @override String get favorited => 'Marcado como favorito'; } // Path: accessibility @@ -584,6 +574,14 @@ class _TranslationsAccessibilityEs extends TranslationsAccessibilityEn { @override String mediaCardPartiallyWatched({required Object percent}) => '${percent} por ciento visto'; @override String get mediaCardUnwatched => 'no visto'; @override String get tapToPlay => 'Toca para reproducir'; + @override String get decrease => 'Disminuir'; + @override String get increase => 'Aumentar'; + @override String decreaseValue({required Object label}) => 'Disminuir ${label}'; + @override String increaseValue({required Object label}) => 'Aumentar ${label}'; + @override String get hue => 'Tono'; + @override String get saturation => 'Saturación'; + @override String get brightness => 'Brillo'; + @override String get hexColor => 'Color hexadecimal'; } // Path: tooltips @@ -643,13 +641,11 @@ class _TranslationsVideoControlsEs extends TranslationsVideoControlsEn { @override String get settingsButton => 'Ajustes de reproducción'; @override String get tracksButton => 'Audio y subtítulos'; @override String get chaptersButton => 'Capítulos'; - @override String get versionsButton => 'Versiones de video'; @override String get versionQualityButton => 'Versión y calidad'; @override String get versionColumnHeader => 'Versión'; @override String get qualityColumnHeader => 'Calidad'; @override String get qualityOriginal => 'Original'; @override String qualityPresetLabel({required Object resolution, required Object bitrate}) => '${resolution}p ${bitrate} Mbps'; - @override String qualityBandwidthEstimate({required Object bitrate}) => '~${bitrate} Mbps'; @override String get transcodeUnavailableFallback => 'Transcodificación no disponible — reproduciendo calidad original'; @override String get pipButton => 'Modo PiP (Imagen en Imagen)'; @override String get aspectRatioButton => 'Relación de aspecto'; @@ -685,19 +681,6 @@ class _TranslationsVideoControlsEs extends TranslationsVideoControlsEn { @override String get searchLanguages => 'Buscar idiomas...'; } -// Path: userStatus -class _TranslationsUserStatusEs extends TranslationsUserStatusEn { - _TranslationsUserStatusEs._(TranslationsEs root) : this._root = root, super.internal(root); - - final TranslationsEs _root; // ignore: unused_field - - // Translations - @override String get admin => 'Administrador'; - @override String get restricted => 'Restringido'; - @override String get protected => 'Protegido'; - @override String get current => 'ACTUAL'; -} - // Path: messages class _TranslationsMessagesEs extends TranslationsMessagesEn { _TranslationsMessagesEs._(TranslationsEs root) : this._root = root, super.internal(root); @@ -873,7 +856,6 @@ class _TranslationsProfilesEs extends TranslationsProfilesEn { @override String get pinExplain => 'Se requiere PIN de 4 dígitos para cambiar de perfil.'; @override String get continueButton => 'Continuar'; @override String get pinsDontMatch => 'Los PIN no coinciden'; - @override String get initializeServicesFailed => 'No se pudieron inicializar los servicios de perfil'; } // Path: connections @@ -902,7 +884,6 @@ class _TranslationsDiscoverEs extends TranslationsDiscoverEn { // Translations @override String get title => 'Descubrir'; - @override String get switchProfile => 'Cambiar Perfil'; @override String get noContentAvailable => 'No hay contenido disponible'; @override String get addMediaToLibraries => 'Añade contenido a tus bibliotecas'; @override String get continueWatching => 'Seguir Viendo'; @@ -938,8 +919,6 @@ class _TranslationsErrorsEs extends TranslationsErrorsEn { @override String get connectionFailed => 'No se puede conectar al servidor multimedia'; @override String failedToLoad({required Object context, required Object error}) => 'Error al cargar ${context}: ${error}'; @override String get noClientAvailable => 'No hay cliente disponible'; - @override String authenticationFailed({required Object error}) => 'Error de autenticación: ${error}'; - @override String get couldNotLaunchUrl => 'No se pudo abrir la URL de autenticación'; @override String get pleaseEnterToken => 'Por favor, introduce un token'; @override String get invalidToken => 'Token no válido'; @override String failedToVerifyToken({required Object error}) => 'Error al verificar el token: ${error}'; @@ -973,6 +952,8 @@ class _TranslationsLibrariesEs extends TranslationsLibrariesEn { @override String get allLibrariesHidden => 'Todas las bibliotecas están ocultas'; @override String hiddenLibrariesCount({required Object count}) => 'Bibliotecas ocultas (${count})'; @override String get thisLibraryIsEmpty => 'Esta biblioteca está vacía'; + @override String get noItemsMatchFilters => 'Ningún elemento coincide con los filtros activos'; + @override String get resetFilters => 'Restablecer filtros'; @override String get all => 'Todos'; @override String get clearAll => 'Borrar Todo'; @override String scanLibraryConfirm({required Object title}) => '¿Estás seguro de que quieres escanear "${title}"?'; @@ -998,8 +979,6 @@ class _TranslationsLibrariesEs extends TranslationsLibrariesEn { @override late final _TranslationsLibrariesGroupingsEs groupings = _TranslationsLibrariesGroupingsEs._(_root); @override late final _TranslationsLibrariesFilterCategoriesEs filterCategories = _TranslationsLibrariesFilterCategoriesEs._(_root); @override late final _TranslationsLibrariesSortLabelsEs sortLabels = _TranslationsLibrariesSortLabelsEs._(_root); - @override String get noItemsMatchFilters => 'Ningún elemento coincide con los filtros activos'; - @override String get resetFilters => 'Restablecer filtros'; } // Path: about @@ -1023,7 +1002,6 @@ class _TranslationsServerSelectionEs extends TranslationsServerSelectionEn { final TranslationsEs _root; // ignore: unused_field // Translations - @override String get allServerConnectionsFailed => 'No se pudo conectar a ningún servidor. Revisa tu red.'; @override String noServersFoundForAccount({required Object username, required Object email}) => 'No se encontraron servidores para ${username} (${email})'; @override String failedToLoadServers({required Object error}) => 'Error al cargar servidores: ${error}'; } @@ -1102,7 +1080,6 @@ class _TranslationsExploreEs extends TranslationsExploreEn { @override String get watchlistUpdateFailed => 'No se pudo actualizar la lista de seguimiento'; @override String get notInLibrary => 'No está en tu biblioteca'; @override String get inTheseLibraries => 'En estas bibliotecas'; - @override String availableOn({required Object server}) => 'Disponible en ${server}'; @override String get checkingLibrary => 'Comprobando tu biblioteca...'; @override String get emptyTitle => 'Aquí no hay nada todavía'; @override String emptyMessage({required Object source}) => 'Las filas de ${source} aparecerán aquí cuando tengan contenido.'; @@ -1123,6 +1100,8 @@ class _TranslationsLiveTvEs extends TranslationsLiveTvEn { @override String get guide => 'Guía'; @override String get noChannels => 'No hay canales disponibles'; @override String get noDvr => 'No hay DVR configurado en ningún servidor'; + @override String get serverUnavailable => 'El servidor de TV en directo no está disponible.'; + @override String get serverNotConnected => 'El servidor de TV en directo no está conectado.'; @override String get noPrograms => 'No hay datos de programación disponibles'; @override String get liveStreamFailed => 'Falló la transmisión en vivo'; @override String get unknownProgram => 'Programa desconocido'; @@ -1158,7 +1137,6 @@ class _TranslationsLiveTvEs extends TranslationsLiveTvEn { @override String get scheduledRecordings => 'Programadas'; @override String get recordingRules => 'Reglas de grabación'; @override String get noScheduledRecordings => 'No hay grabaciones programadas'; - @override String get noRecordingRules => 'Aún no hay reglas de grabación'; @override String get manageRecording => 'Gestionar grabación'; @override String get cancelRecording => 'Cancelar grabación'; @override String get cancelRecordingTitle => '¿Cancelar esta grabación?'; @@ -1175,7 +1153,6 @@ class _TranslationsLiveTvEs extends TranslationsLiveTvEn { @override String get recordingCancelled => 'Grabación cancelada'; @override String get recordingRuleDeleted => 'Regla de grabación eliminada'; @override String get processRecordingRules => 'Reevaluar reglas'; - @override String get loadingRecordings => 'Cargando grabaciones...'; @override String get recordingInProgress => 'Grabando ahora'; @override String recordingsCount({required Object count}) => '${count} programadas'; @override String get editRule => 'Editar regla'; @@ -1196,7 +1173,6 @@ class _TranslationsCollectionsEs extends TranslationsCollectionsEn { @override String get title => 'Colecciones'; @override String get collection => 'Colección'; @override String get empty => 'La colección está vacía'; - @override String get unknownLibrarySection => 'No se puede eliminar: Sección de biblioteca desconocida'; @override String get deleteCollection => 'Eliminar Colección'; @override String deleteConfirm({required Object title}) => '¿Eliminar "${title}"? No se puede deshacer.'; @override String get deleted => 'Colección eliminada'; @@ -1243,6 +1219,7 @@ class _TranslationsPlaylistsEs extends TranslationsPlaylistsEn { @override String get itemAdded => 'Añadido a la lista'; @override String get itemRemoved => 'Eliminado de la lista'; @override String get selectPlaylist => 'Seleccionar Lista'; + @override String get searchPlaylists => 'Buscar listas...'; @override String get errorCreating => 'Error al crear la lista'; @override String get errorDeleting => 'Error al eliminar la lista'; @override String get errorLoading => 'Error al cargar las listas'; @@ -1346,15 +1323,15 @@ class _TranslationsWatchTogetherEs extends TranslationsWatchTogetherEn { @override String participantResumed({required Object name}) => '${name} reanudó'; @override String participantSeeked({required Object name}) => '${name} avanzó'; @override String participantBuffering({required Object name}) => '${name} está cargando'; + @override String participantNeedsUpdate({required Object name}) => '${name} usa una versión anterior de la app — sincronización no disponible'; + @override String resumingWithout({required Object name}) => 'Reanudando sin ${name}'; @override String get waitingForParticipants => 'Esperando a que otros carguen...'; + @override String waitingForName({required Object name}) => 'Esperando a ${name}...'; @override String get recentRooms => 'Salas recientes'; @override String get renameRoom => 'Renombrar sala'; @override String get removeRoom => 'Eliminar'; @override String get guestSwitchUnavailable => 'No se pudo cambiar — servidor no disponible para sincronización'; @override String get guestSwitchFailed => 'No se pudo cambiar — contenido no encontrado en este servidor'; - @override String participantNeedsUpdate({required Object name}) => '${name} usa una versión anterior de la app — sincronización no disponible'; - @override String resumingWithout({required Object name}) => 'Reanudando sin ${name}'; - @override String waitingForName({required Object name}) => 'Esperando a ${name}...'; } // Path: downloads @@ -1406,7 +1383,6 @@ class _TranslationsDownloadsEs extends TranslationsDownloadsEn { @override String get customAmount => 'Cantidad personalizada...'; @override String get includeSpecials => 'Incluir especiales'; @override String get howManyEpisodes => '¿Cuántos episodios?'; - @override String itemsQueued({required Object count}) => '${count} elementos en cola de descarga'; @override String get keepSynced => 'Mantener sincronizado'; @override String get downloadOnce => 'Descargar una vez'; @override String keepNUnwatched({required Object count}) => 'Mantener ${count} sin ver'; @@ -1780,7 +1756,6 @@ class _TranslationsAddServerEs extends TranslationsAddServerEn { @override String quickConnectFailed({required Object error}) => 'Quick Connect ha fallado: ${error}'; @override String get addPlexTitle => 'Iniciar sesión con Plex'; @override String get pinExpired => 'El PIN caducó antes de iniciar sesión. Inténtalo de nuevo.'; - @override String get duplicatePlexAccount => 'Ya iniciaste sesión en Plex. Cierra sesión para cambiar de cuenta.'; @override String failedToRegisterAccount({required Object error}) => 'No se pudo registrar la cuenta: ${error}'; @override String get enterJellyfinUrlError => 'Introduce la URL de tu servidor Jellyfin'; @override String get addConnectionTitle => 'Añadir conexión'; @@ -1906,7 +1881,6 @@ class _TranslationsLibrariesSortLabelsEs extends TranslationsLibrariesSortLabels @override String get communityRating => 'Calificación de comunidad'; @override String get criticRating => 'Calificación de crítica'; @override String get userRating => 'Calificación del usuario'; - @override String get lastPlayed => 'Última reproducción'; @override String get datePlayed => 'Fecha de reproducción'; @override String get playCount => 'Reproducciones'; @override String get productionYear => 'Año de producción'; @@ -1965,7 +1939,6 @@ class _TranslationsCompanionRemoteSessionEs extends TranslationsCompanionRemoteS // Translations @override String get startingServer => 'Iniciando servidor remoto...'; - @override String get failedToCreate => 'Error al iniciar el servidor remoto:'; @override String get hostAddress => 'Dirección del host'; @override String get connected => 'Conectado'; @override String get serverRunning => 'Servidor remoto activo'; @@ -2047,6 +2020,8 @@ class _TranslationsCompanionRemoteErrorsEs extends TranslationsCompanionRemoteEr // Translations @override String get noNetworkInterface => 'No se encontró ninguna interfaz de red'; @override String get authenticationFailed => 'Autenticación fallida'; + @override String serverStartFailed({required Object error}) => 'No se pudo iniciar el servidor remoto: ${error}'; + @override String commandFailed({required Object error}) => 'No se pudo enviar el comando remoto: ${error}'; @override String get joinTimedOut => 'Se agotó el tiempo al unirse a la sesión'; @override String get failedToConnectAnyAddress => 'No se pudo conectar a ninguna dirección'; @override String connectionLostAfterAttempts({required Object attempts}) => 'Conexión perdida tras ${attempts} intentos'; @@ -2123,7 +2098,6 @@ extension on TranslationsEs { dynamic _flatMapFunction(String path) { return switch (path) { 'app.title' => 'Plezy', - 'auth.signIn' => 'Iniciar sesión', 'auth.signInWithPlex' => 'Inicia sesión con Plex', 'auth.showQRCode' => 'Mostrar código QR', 'auth.authenticate' => 'Autenticar', @@ -2174,10 +2148,8 @@ extension on TranslationsEs { 'common.episodeNumberTitle' => ({required Object number, required Object title}) => 'Episodio ${number} - ${title}', 'common.chapterNumber' => ({required Object number}) => 'Capítulo ${number}', 'common.reconnect' => 'Reconectar', - 'common.exit' => 'Salir', 'common.viewAll' => 'Ver todo', 'common.checkingNetwork' => 'Comprobando red...', - 'common.refreshingServers' => 'Actualizando servidores...', 'common.loadingServers' => 'Cargando servidores...', 'common.connectingToServers' => 'Conectando a servidores...', 'common.startingOfflineMode' => 'Iniciando modo sin conexión...', @@ -2251,6 +2223,12 @@ extension on TranslationsEs { 'settings.tvFullCardLayoutDescription' => 'Usar tarjetas TV solo con imagen y nombres de actores superpuestos', 'settings.focusGlow' => 'Brillo de foco', 'settings.focusGlowDescription' => 'Mostrar un brillo suave alrededor de la tarjeta con foco', + 'settings.visualEffects' => 'Efectos visuales', + 'settings.visualEffectsAuto' => 'Automático', + 'settings.visualEffectsAutoDescription' => 'Reduce automáticamente los efectos en dispositivos de bajo consumo', + 'settings.visualEffectsFull' => 'Completos', + 'settings.visualEffectsReduced' => 'Reducidos', + 'settings.visualEffectsReducedDescription' => 'Menos animaciones e ilustraciones de menor resolución', 'settings.hideSpoilers' => 'Ocultar spoilers de episodios no vistos', 'settings.hideSpoilersDescription' => 'Desenfocar miniaturas y descripciones de episodios no vistos', 'settings.playerBackend' => 'Reproductor', @@ -2263,7 +2241,7 @@ extension on TranslationsEs { 'settings.bufferSizeAuto' => 'Auto (Recomendado)', 'settings.bufferSizeWarning' => ({required Object heap, required Object size}) => '${heap}MB de memoria disponible. Un búfer de ${size}MB puede afectar la reproducción.', 'settings.defaultQualityTitle' => 'Calidad predeterminada', - 'settings.defaultQualityDescription' => 'Se utiliza al iniciar la reproducción. Los valores más bajos reducen el ancho de banda.', + 'settings.musicQualityTitle' => 'Calidad de música', 'settings.subtitleStyling' => 'Estilo de Subtítulos', 'settings.subtitleStylingDescription' => 'Personalizar la apariencia de los subtítulos', 'settings.smallSkipDuration' => 'Salto pequeño', @@ -2357,10 +2335,9 @@ extension on TranslationsEs { 'settings.maxVolumePercent' => ({required Object percent}) => '${percent}%', 'settings.discordRichPresence' => 'Presencia de Discord', 'settings.discordRichPresenceDescription' => 'Mostrar lo que estás viendo en Discord', - 'settings.trakt' => 'Trakt', - 'settings.traktDescription' => 'Sincronizar historial de visualización con Trakt', 'settings.services' => 'Servicios', 'settings.servicesDescription' => 'Conecta Trakt, MyAnimeList, Seerr y más', + 'settings.manageLibrariesDescription' => 'Reordena y oculta bibliotecas', 'settings.companionRemoteServer' => 'Servidor de control remoto', 'settings.companionRemoteServerDescription' => 'Permitir que dispositivos móviles en tu red controlen esta aplicación', 'settings.autoPip' => 'Imagen en imagen automática', @@ -2423,7 +2400,6 @@ extension on TranslationsEs { 'settings.showNavBarLabels' => 'Mostrar etiquetas de la barra de navegación', 'settings.showNavBarLabelsDescription' => 'Mostrar etiquetas de texto bajo los iconos de la barra de navegación', 'settings.startupSection' => 'Sección de inicio', - 'settings.startupSectionDescription' => 'Elige qué sección abre Plezy al iniciarse', 'settings.liveTvDefaultFavorites' => 'Canales favoritos por defecto', 'settings.liveTvDefaultFavoritesDescription' => 'Mostrar solo canales favoritos al abrir TV en vivo', 'settings.display' => 'Pantalla', @@ -2435,13 +2411,6 @@ extension on TranslationsEs { 'settings.subtitlesAndConfig' => 'Subtítulos y configuración', 'settings.seekAndTiming' => 'Búsqueda y tiempo', 'settings.behavior' => 'Comportamiento', - 'settings.manageLibrariesDescription' => 'Reordena y oculta bibliotecas', - 'settings.visualEffects' => 'Efectos visuales', - 'settings.visualEffectsAuto' => 'Automático', - 'settings.visualEffectsAutoDescription' => 'Reduce automáticamente los efectos en dispositivos de bajo consumo', - 'settings.visualEffectsFull' => 'Completos', - 'settings.visualEffectsReduced' => 'Reducidos', - 'settings.visualEffectsReducedDescription' => 'Menos animaciones e ilustraciones de menor resolución', 'search.hint' => 'Buscar películas, series, música...', 'search.tryDifferentTerm' => 'Prueba con un término de búsqueda diferente', 'search.searchYourMedia' => 'Busca en tu contenido', @@ -2518,14 +2487,11 @@ extension on TranslationsEs { 'mediaMenu.playVersion' => 'Reproducir versión...', 'rateSheet.title' => 'Calificar', 'rateSheet.server' => 'Servidor', - 'rateSheet.starValue' => ({required Object rating}) => '${rating} / 5', - 'rateSheet.scoreValue' => ({required Object score}) => '${score} / 10', - 'rateSheet.setScore' => 'Establecer puntuación', + 'rateSheet.favorite' => 'Favorito', + 'rateSheet.favorited' => 'Marcado como favorito', 'rateSheet.saved' => 'Guardado', 'rateSheet.notAvailable' => 'No se encontró coincidencia', 'rateSheet.noConnectedServices' => 'Conecta un servicio en Configuración para calificar ahí.', - 'rateSheet.favorite' => 'Favorito', - 'rateSheet.favorited' => 'Marcado como favorito', 'accessibility.mediaCardMovie' => ({required Object title}) => '${title}, película', 'accessibility.mediaCardShow' => ({required Object title}) => '${title}, serie de TV', 'accessibility.mediaCardEpisode' => ({required Object title, required Object episodeInfo}) => '${title}, ${episodeInfo}', @@ -2534,6 +2500,14 @@ extension on TranslationsEs { 'accessibility.mediaCardPartiallyWatched' => ({required Object percent}) => '${percent} por ciento visto', 'accessibility.mediaCardUnwatched' => 'no visto', 'accessibility.tapToPlay' => 'Toca para reproducir', + 'accessibility.decrease' => 'Disminuir', + 'accessibility.increase' => 'Aumentar', + 'accessibility.decreaseValue' => ({required Object label}) => 'Disminuir ${label}', + 'accessibility.increaseValue' => ({required Object label}) => 'Aumentar ${label}', + 'accessibility.hue' => 'Tono', + 'accessibility.saturation' => 'Saturación', + 'accessibility.brightness' => 'Brillo', + 'accessibility.hexColor' => 'Color hexadecimal', 'tooltips.shufflePlay' => 'Reproducción aleatoria', 'tooltips.playTrailer' => 'Reproducir tráiler', 'tooltips.markAsWatched' => 'Marcar como visto', @@ -2575,13 +2549,11 @@ extension on TranslationsEs { 'videoControls.settingsButton' => 'Ajustes de reproducción', 'videoControls.tracksButton' => 'Audio y subtítulos', 'videoControls.chaptersButton' => 'Capítulos', - 'videoControls.versionsButton' => 'Versiones de video', 'videoControls.versionQualityButton' => 'Versión y calidad', 'videoControls.versionColumnHeader' => 'Versión', 'videoControls.qualityColumnHeader' => 'Calidad', 'videoControls.qualityOriginal' => 'Original', 'videoControls.qualityPresetLabel' => ({required Object resolution, required Object bitrate}) => '${resolution}p ${bitrate} Mbps', - 'videoControls.qualityBandwidthEstimate' => ({required Object bitrate}) => '~${bitrate} Mbps', 'videoControls.transcodeUnavailableFallback' => 'Transcodificación no disponible — reproduciendo calidad original', 'videoControls.pipButton' => 'Modo PiP (Imagen en Imagen)', 'videoControls.aspectRatioButton' => 'Relación de aspecto', @@ -2621,10 +2593,6 @@ extension on TranslationsEs { 'videoControls.subtitleDownloaded' => 'Subtítulo descargado', 'videoControls.subtitleDownloadFailed' => 'Error al descargar subtítulo', 'videoControls.searchLanguages' => 'Buscar idiomas...', - 'userStatus.admin' => 'Administrador', - 'userStatus.restricted' => 'Restringido', - 'userStatus.protected' => 'Protegido', - 'userStatus.current' => 'ACTUAL', 'messages.markedAsWatched' => 'Marcado como visto', 'messages.markedAsUnwatched' => 'Marcado como no visto', 'messages.markedAsWatchedOffline' => 'Marcado como visto (se sincronizará al estar en línea)', @@ -2634,8 +2602,6 @@ extension on TranslationsEs { 'messages.errorLoading' => ({required Object error}) => 'Error: ${error}', 'messages.streamInterrupted' => 'La reproducción se interrumpió. Pulsa reproducir o avanza para volver a intentarlo.', 'messages.fileInfoNotAvailable' => 'Información de archivo no disponible', - _ => null, - } ?? switch (path) { 'messages.errorLoadingFileInfo' => ({required Object error}) => 'Error al cargar info de archivo: ${error}', 'messages.errorLoadingSeries' => 'Error al cargar la serie', 'messages.musicNotSupported' => 'La reproducción de música aún no está soportada', @@ -2643,6 +2609,8 @@ extension on TranslationsEs { 'messages.noProfilesAvailable' => 'No hay perfiles disponibles', 'messages.contactAdminForProfiles' => 'Contacta a tu administrador del servidor para añadir perfiles', 'messages.unableToDetermineLibrarySection' => 'No se puede determinar la sección de biblioteca para este elemento', + _ => null, + } ?? switch (path) { 'messages.logsCleared' => 'Logs borrados', 'messages.logsCopied' => 'Logs copiados al portapapeles', 'messages.noLogsAvailable' => 'No hay logs disponibles', @@ -2759,7 +2727,6 @@ extension on TranslationsEs { 'profiles.pinExplain' => 'Se requiere PIN de 4 dígitos para cambiar de perfil.', 'profiles.continueButton' => 'Continuar', 'profiles.pinsDontMatch' => 'Los PIN no coinciden', - 'profiles.initializeServicesFailed' => 'No se pudieron inicializar los servicios de perfil', 'connections.sectionTitle' => 'Conexiones', 'connections.addConnection' => 'Añadir conexión', 'connections.addConnectionSubtitleNoProfile' => 'Inicia sesión con Plex o conecta un servidor de Jellyfin', @@ -2770,7 +2737,6 @@ extension on TranslationsEs { 'connections.editJellyfinTitle' => 'Editar conexión de Jellyfin', 'connections.editJellyfinIntro' => ({required Object serverName}) => 'Añade o elimina URL para ${serverName}. Plezy usará la URL accesible con menor latencia.', 'discover.title' => 'Descubrir', - 'discover.switchProfile' => 'Cambiar Perfil', 'discover.noContentAvailable' => 'No hay contenido disponible', 'discover.addMediaToLibraries' => 'Añade contenido a tus bibliotecas', 'discover.continueWatching' => 'Seguir Viendo', @@ -2797,8 +2763,6 @@ extension on TranslationsEs { 'errors.connectionFailed' => 'No se puede conectar al servidor multimedia', 'errors.failedToLoad' => ({required Object context, required Object error}) => 'Error al cargar ${context}: ${error}', 'errors.noClientAvailable' => 'No hay cliente disponible', - 'errors.authenticationFailed' => ({required Object error}) => 'Error de autenticación: ${error}', - 'errors.couldNotLaunchUrl' => 'No se pudo abrir la URL de autenticación', 'errors.pleaseEnterToken' => 'Por favor, introduce un token', 'errors.invalidToken' => 'Token no válido', 'errors.failedToVerifyToken' => ({required Object error}) => 'Error al verificar el token: ${error}', @@ -2823,6 +2787,8 @@ extension on TranslationsEs { 'libraries.allLibrariesHidden' => 'Todas las bibliotecas están ocultas', 'libraries.hiddenLibrariesCount' => ({required Object count}) => 'Bibliotecas ocultas (${count})', 'libraries.thisLibraryIsEmpty' => 'Esta biblioteca está vacía', + 'libraries.noItemsMatchFilters' => 'Ningún elemento coincide con los filtros activos', + 'libraries.resetFilters' => 'Restablecer filtros', 'libraries.all' => 'Todos', 'libraries.clearAll' => 'Borrar Todo', 'libraries.scanLibraryConfirm' => ({required Object title}) => '¿Estás seguro de que quieres escanear "${title}"?', @@ -2871,7 +2837,6 @@ extension on TranslationsEs { 'libraries.sortLabels.communityRating' => 'Calificación de comunidad', 'libraries.sortLabels.criticRating' => 'Calificación de crítica', 'libraries.sortLabels.userRating' => 'Calificación del usuario', - 'libraries.sortLabels.lastPlayed' => 'Última reproducción', 'libraries.sortLabels.datePlayed' => 'Fecha de reproducción', 'libraries.sortLabels.playCount' => 'Reproducciones', 'libraries.sortLabels.productionYear' => 'Año de producción', @@ -2885,14 +2850,11 @@ extension on TranslationsEs { 'libraries.sortLabels.dateShared' => 'Fecha de compartición', 'libraries.sortLabels.latestEpisodeAirDate' => 'Última fecha de emisión del episodio', 'libraries.sortLabels.lastEpisodeDateAdded' => 'Fecha de adición del último episodio', - 'libraries.noItemsMatchFilters' => 'Ningún elemento coincide con los filtros activos', - 'libraries.resetFilters' => 'Restablecer filtros', 'about.title' => 'Acerca de', 'about.openSourceLicenses' => 'Licencias de Código Abierto', 'about.versionLabel' => ({required Object version}) => 'Versión ${version}', 'about.appDescription' => 'Un cliente de Plex y Jellyfin para Flutter', 'about.viewLicensesDescription' => 'Ver licencias de librerías de terceros', - 'serverSelection.allServerConnectionsFailed' => 'No se pudo conectar a ningún servidor. Revisa tu red.', 'serverSelection.noServersFoundForAccount' => ({required Object username, required Object email}) => 'No se encontraron servidores para ${username} (${email})', 'serverSelection.failedToLoadServers' => ({required Object error}) => 'Error al cargar servidores: ${error}', 'hubDetail.title' => 'Título', @@ -2938,7 +2900,6 @@ extension on TranslationsEs { 'explore.watchlistUpdateFailed' => 'No se pudo actualizar la lista de seguimiento', 'explore.notInLibrary' => 'No está en tu biblioteca', 'explore.inTheseLibraries' => 'En estas bibliotecas', - 'explore.availableOn' => ({required Object server}) => 'Disponible en ${server}', 'explore.checkingLibrary' => 'Comprobando tu biblioteca...', 'explore.emptyTitle' => 'Aquí no hay nada todavía', 'explore.emptyMessage' => ({required Object source}) => 'Las filas de ${source} aparecerán aquí cuando tengan contenido.', @@ -2950,6 +2911,8 @@ extension on TranslationsEs { 'liveTv.guide' => 'Guía', 'liveTv.noChannels' => 'No hay canales disponibles', 'liveTv.noDvr' => 'No hay DVR configurado en ningún servidor', + 'liveTv.serverUnavailable' => 'El servidor de TV en directo no está disponible.', + 'liveTv.serverNotConnected' => 'El servidor de TV en directo no está conectado.', 'liveTv.noPrograms' => 'No hay datos de programación disponibles', 'liveTv.liveStreamFailed' => 'Falló la transmisión en vivo', 'liveTv.unknownProgram' => 'Programa desconocido', @@ -2985,7 +2948,6 @@ extension on TranslationsEs { 'liveTv.scheduledRecordings' => 'Programadas', 'liveTv.recordingRules' => 'Reglas de grabación', 'liveTv.noScheduledRecordings' => 'No hay grabaciones programadas', - 'liveTv.noRecordingRules' => 'Aún no hay reglas de grabación', 'liveTv.manageRecording' => 'Gestionar grabación', 'liveTv.cancelRecording' => 'Cancelar grabación', 'liveTv.cancelRecordingTitle' => '¿Cancelar esta grabación?', @@ -3002,7 +2964,6 @@ extension on TranslationsEs { 'liveTv.recordingCancelled' => 'Grabación cancelada', 'liveTv.recordingRuleDeleted' => 'Regla de grabación eliminada', 'liveTv.processRecordingRules' => 'Reevaluar reglas', - 'liveTv.loadingRecordings' => 'Cargando grabaciones...', 'liveTv.recordingInProgress' => 'Grabando ahora', 'liveTv.recordingsCount' => ({required Object count}) => '${count} programadas', 'liveTv.editRule' => 'Editar regla', @@ -3014,7 +2975,6 @@ extension on TranslationsEs { 'collections.title' => 'Colecciones', 'collections.collection' => 'Colección', 'collections.empty' => 'La colección está vacía', - 'collections.unknownLibrarySection' => 'No se puede eliminar: Sección de biblioteca desconocida', 'collections.deleteCollection' => 'Eliminar Colección', 'collections.deleteConfirm' => ({required Object title}) => '¿Eliminar "${title}"? No se puede deshacer.', 'collections.deleted' => 'Colección eliminada', @@ -3052,6 +3012,7 @@ extension on TranslationsEs { 'playlists.itemAdded' => 'Añadido a la lista', 'playlists.itemRemoved' => 'Eliminado de la lista', 'playlists.selectPlaylist' => 'Seleccionar Lista', + 'playlists.searchPlaylists' => 'Buscar listas...', 'playlists.errorCreating' => 'Error al crear la lista', 'playlists.errorDeleting' => 'Error al eliminar la lista', 'playlists.errorLoading' => 'Error al cargar las listas', @@ -3134,22 +3095,20 @@ extension on TranslationsEs { 'watchTogether.participantResumed' => ({required Object name}) => '${name} reanudó', 'watchTogether.participantSeeked' => ({required Object name}) => '${name} avanzó', 'watchTogether.participantBuffering' => ({required Object name}) => '${name} está cargando', + 'watchTogether.participantNeedsUpdate' => ({required Object name}) => '${name} usa una versión anterior de la app — sincronización no disponible', + 'watchTogether.resumingWithout' => ({required Object name}) => 'Reanudando sin ${name}', 'watchTogether.waitingForParticipants' => 'Esperando a que otros carguen...', + 'watchTogether.waitingForName' => ({required Object name}) => 'Esperando a ${name}...', 'watchTogether.recentRooms' => 'Salas recientes', 'watchTogether.renameRoom' => 'Renombrar sala', 'watchTogether.removeRoom' => 'Eliminar', 'watchTogether.guestSwitchUnavailable' => 'No se pudo cambiar — servidor no disponible para sincronización', 'watchTogether.guestSwitchFailed' => 'No se pudo cambiar — contenido no encontrado en este servidor', - 'watchTogether.participantNeedsUpdate' => ({required Object name}) => '${name} usa una versión anterior de la app — sincronización no disponible', - 'watchTogether.resumingWithout' => ({required Object name}) => 'Reanudando sin ${name}', - 'watchTogether.waitingForName' => ({required Object name}) => 'Esperando a ${name}...', 'downloads.title' => 'Descargas', 'downloads.manage' => 'Gestionar', 'downloads.tvShows' => 'Series de TV', 'downloads.movies' => 'Películas', 'downloads.music' => 'Música', - _ => null, - } ?? switch (path) { 'downloads.tracksQueued' => ({required Object count}) => '${count} canciones en cola para descargar', 'downloads.noDownloads' => 'No hay descargas aún', 'downloads.noDownloadsDescription' => 'El contenido descargado aparecerá aquí para verlo sin conexión', @@ -3164,6 +3123,8 @@ extension on TranslationsEs { 'downloads.deleteConfirm' => ({required Object title}) => '¿Eliminar "${title}" de este dispositivo?', 'downloads.cancelledDownloadTitle' => 'Descarga cancelada', 'downloads.cancelledDownloadMessage' => 'Esta descarga se canceló. ¿Qué quieres hacer?', + _ => null, + } ?? switch (path) { 'downloads.allEpisodesAlreadyDownloaded' => 'Todos los episodios ya están descargados', 'downloads.resumeDownload' => 'Reanudar descarga', 'downloads.cancelledDownload' => 'Descarga cancelada', @@ -3187,7 +3148,6 @@ extension on TranslationsEs { 'downloads.customAmount' => 'Cantidad personalizada...', 'downloads.includeSpecials' => 'Incluir especiales', 'downloads.howManyEpisodes' => '¿Cuántos episodios?', - 'downloads.itemsQueued' => ({required Object count}) => '${count} elementos en cola de descarga', 'downloads.keepSynced' => 'Mantener sincronizado', 'downloads.downloadOnce' => 'Descargar una vez', 'downloads.keepNUnwatched' => ({required Object count}) => 'Mantener ${count} sin ver', @@ -3231,7 +3191,6 @@ extension on TranslationsEs { 'companionRemote.connectedTo' => ({required Object name}) => 'Conectado a ${name}', 'companionRemote.unknownDevice' => 'Dispositivo desconocido', 'companionRemote.session.startingServer' => 'Iniciando servidor remoto...', - 'companionRemote.session.failedToCreate' => 'Error al iniciar el servidor remoto:', 'companionRemote.session.hostAddress' => 'Dirección del host', 'companionRemote.session.connected' => 'Conectado', 'companionRemote.session.serverRunning' => 'Servidor remoto activo', @@ -3286,6 +3245,8 @@ extension on TranslationsEs { 'companionRemote.remote.searchHint' => 'Buscar en escritorio...', 'companionRemote.errors.noNetworkInterface' => 'No se encontró ninguna interfaz de red', 'companionRemote.errors.authenticationFailed' => 'Autenticación fallida', + 'companionRemote.errors.serverStartFailed' => ({required Object error}) => 'No se pudo iniciar el servidor remoto: ${error}', + 'companionRemote.errors.commandFailed' => ({required Object error}) => 'No se pudo enviar el comando remoto: ${error}', 'companionRemote.errors.joinTimedOut' => 'Se agotó el tiempo al unirse a la sesión', 'companionRemote.errors.failedToConnectAnyAddress' => 'No se pudo conectar a ninguna dirección', 'companionRemote.errors.connectionLostAfterAttempts' => ({required Object attempts}) => 'Conexión perdida tras ${attempts} intentos', @@ -3530,7 +3491,6 @@ extension on TranslationsEs { 'addServer.quickConnectFailed' => ({required Object error}) => 'Quick Connect ha fallado: ${error}', 'addServer.addPlexTitle' => 'Iniciar sesión con Plex', 'addServer.pinExpired' => 'El PIN caducó antes de iniciar sesión. Inténtalo de nuevo.', - 'addServer.duplicatePlexAccount' => 'Ya iniciaste sesión en Plex. Cierra sesión para cambiar de cuenta.', 'addServer.failedToRegisterAccount' => ({required Object error}) => 'No se pudo registrar la cuenta: ${error}', 'addServer.enterJellyfinUrlError' => 'Introduce la URL de tu servidor Jellyfin', 'addServer.addConnectionTitle' => 'Añadir conexión', diff --git a/lib/i18n/strings_fr.g.dart b/lib/i18n/strings_fr.g.dart index 682c64ab..e604545e 100644 --- a/lib/i18n/strings_fr.g.dart +++ b/lib/i18n/strings_fr.g.dart @@ -53,7 +53,6 @@ class TranslationsFr extends Translations with BaseTranslations 'Se connecter'; @override String get signInWithPlex => 'S\'inscrire avec Plex'; @override String get showQRCode => 'Afficher le QR Code'; @override String get authenticate => 'S\'authentifier'; @@ -167,10 +165,8 @@ class _TranslationsCommonFr extends TranslationsCommonEn { @override String episodeNumberTitle({required Object number, required Object title}) => 'Épisode ${number} - ${title}'; @override String chapterNumber({required Object number}) => 'Chapitre ${number}'; @override String get reconnect => 'Reconnecter'; - @override String get exit => 'Quitter'; @override String get viewAll => 'Tout afficher'; @override String get checkingNetwork => 'Vérification du réseau...'; - @override String get refreshingServers => 'Actualisation des serveurs...'; @override String get loadingServers => 'Chargement des serveurs...'; @override String get connectingToServers => 'Connexion aux serveurs...'; @override String get startingOfflineMode => 'Démarrage en mode hors-ligne...'; @@ -271,6 +267,12 @@ class _TranslationsSettingsFr extends TranslationsSettingsEn { @override String get tvFullCardLayoutDescription => 'Utiliser des cartes TV avec image seule et noms des acteurs superposés'; @override String get focusGlow => 'Halo de sélection'; @override String get focusGlowDescription => 'Afficher un léger halo autour de la carte sélectionnée'; + @override String get visualEffects => 'Effets visuels'; + @override String get visualEffectsAuto => 'Automatique'; + @override String get visualEffectsAutoDescription => 'Réduire automatiquement les effets sur les appareils peu puissants'; + @override String get visualEffectsFull => 'Complets'; + @override String get visualEffectsReduced => 'Réduits'; + @override String get visualEffectsReducedDescription => 'Moins d’animations et d’illustrations de plus faible résolution'; @override String get hideSpoilers => 'Masquer les spoilers des épisodes non vus'; @override String get hideSpoilersDescription => 'Flouter les miniatures et descriptions des épisodes non vus'; @override String get playerBackend => 'Moteur de lecture'; @@ -283,7 +285,7 @@ class _TranslationsSettingsFr extends TranslationsSettingsEn { @override String get bufferSizeAuto => 'Auto (Recommandé)'; @override String bufferSizeWarning({required Object heap, required Object size}) => '${heap}MB de mémoire disponible. Un tampon de ${size}MB peut affecter la lecture.'; @override String get defaultQualityTitle => 'Qualité par défaut'; - @override String get defaultQualityDescription => 'Utilisé au démarrage de la lecture. Les valeurs plus basses réduisent la bande passante.'; + @override String get musicQualityTitle => 'Qualité de la musique'; @override String get subtitleStyling => 'Stylisation des sous-titres'; @override String get subtitleStylingDescription => 'Personnaliser l\'apparence des sous-titres'; @override String get smallSkipDuration => 'Durée du petit saut'; @@ -377,10 +379,9 @@ class _TranslationsSettingsFr extends TranslationsSettingsEn { @override String maxVolumePercent({required Object percent}) => '${percent}%'; @override String get discordRichPresence => 'Discord Rich Presence'; @override String get discordRichPresenceDescription => 'Montrez ce que vous regardez sur Discord'; - @override String get trakt => 'Trakt'; - @override String get traktDescription => 'Synchroniser l\'historique de visionnage avec Trakt'; @override String get services => 'Services'; @override String get servicesDescription => 'Connectez Trakt, MyAnimeList, Seerr et plus'; + @override String get manageLibrariesDescription => 'Réorganiser et masquer les bibliothèques'; @override String get companionRemoteServer => 'Serveur de télécommande'; @override String get companionRemoteServerDescription => 'Autoriser les appareils mobiles de votre réseau à contrôler cette application'; @override String get autoPip => 'Image dans l\'image automatique'; @@ -443,7 +444,6 @@ class _TranslationsSettingsFr extends TranslationsSettingsEn { @override String get showNavBarLabels => 'Afficher les libellés de la barre de navigation'; @override String get showNavBarLabelsDescription => 'Afficher les libellés sous les icônes de la barre de navigation'; @override String get startupSection => 'Section de démarrage'; - @override String get startupSectionDescription => 'Choisissez la section que Plezy ouvre au démarrage'; @override String get liveTvDefaultFavorites => 'Chaînes favorites par défaut'; @override String get liveTvDefaultFavoritesDescription => 'Afficher uniquement les chaînes favorites à l\'ouverture de la TV en direct'; @override String get display => 'Affichage'; @@ -455,13 +455,6 @@ class _TranslationsSettingsFr extends TranslationsSettingsEn { @override String get subtitlesAndConfig => 'Sous-titres et configuration'; @override String get seekAndTiming => 'Recherche et minutage'; @override String get behavior => 'Comportement'; - @override String get manageLibrariesDescription => 'Réorganiser et masquer les bibliothèques'; - @override String get visualEffects => 'Effets visuels'; - @override String get visualEffectsAuto => 'Automatique'; - @override String get visualEffectsAutoDescription => 'Réduire automatiquement les effets sur les appareils peu puissants'; - @override String get visualEffectsFull => 'Complets'; - @override String get visualEffectsReduced => 'Réduits'; - @override String get visualEffectsReducedDescription => 'Moins d’animations et d’illustrations de plus faible résolution'; } // Path: search @@ -559,14 +552,11 @@ class _TranslationsRateSheetFr extends TranslationsRateSheetEn { // Translations @override String get title => 'Noter'; @override String get server => 'Serveur'; - @override String starValue({required Object rating}) => '${rating} / 5'; - @override String scoreValue({required Object score}) => '${score} / 10'; - @override String get setScore => 'Définir une note'; + @override String get favorite => 'Favori'; + @override String get favorited => 'Ajouté aux favoris'; @override String get saved => 'Enregistré'; @override String get notAvailable => 'Aucune correspondance trouvée'; @override String get noConnectedServices => 'Connectez un service dans les Réglages pour noter ici.'; - @override String get favorite => 'Favori'; - @override String get favorited => 'Ajouté aux favoris'; } // Path: accessibility @@ -584,6 +574,14 @@ class _TranslationsAccessibilityFr extends TranslationsAccessibilityEn { @override String mediaCardPartiallyWatched({required Object percent}) => '${percent} pourcentage visionné'; @override String get mediaCardUnwatched => 'non visionné'; @override String get tapToPlay => 'Appuyez pour lire'; + @override String get decrease => 'Diminuer'; + @override String get increase => 'Augmenter'; + @override String decreaseValue({required Object label}) => 'Diminuer ${label}'; + @override String increaseValue({required Object label}) => 'Augmenter ${label}'; + @override String get hue => 'Teinte'; + @override String get saturation => 'Saturation'; + @override String get brightness => 'Luminosité'; + @override String get hexColor => 'Couleur hexadécimale'; } // Path: tooltips @@ -643,13 +641,11 @@ class _TranslationsVideoControlsFr extends TranslationsVideoControlsEn { @override String get settingsButton => 'Paramètres de lecture'; @override String get tracksButton => 'Audio et sous-titres'; @override String get chaptersButton => 'Chapitres'; - @override String get versionsButton => 'Versions vidéo'; @override String get versionQualityButton => 'Version et qualité'; @override String get versionColumnHeader => 'Version'; @override String get qualityColumnHeader => 'Qualité'; @override String get qualityOriginal => 'Originale'; @override String qualityPresetLabel({required Object resolution, required Object bitrate}) => '${resolution}p ${bitrate} Mbps'; - @override String qualityBandwidthEstimate({required Object bitrate}) => '~${bitrate} Mbps'; @override String get transcodeUnavailableFallback => 'Transcodage indisponible — lecture en qualité originale'; @override String get pipButton => 'Mode PiP (Picture-in-Picture)'; @override String get aspectRatioButton => 'Format d\'image'; @@ -685,19 +681,6 @@ class _TranslationsVideoControlsFr extends TranslationsVideoControlsEn { @override String get searchLanguages => 'Rechercher des langues...'; } -// Path: userStatus -class _TranslationsUserStatusFr extends TranslationsUserStatusEn { - _TranslationsUserStatusFr._(TranslationsFr root) : this._root = root, super.internal(root); - - final TranslationsFr _root; // ignore: unused_field - - // Translations - @override String get admin => 'Admin'; - @override String get restricted => 'Restreint'; - @override String get protected => 'Protégé'; - @override String get current => 'ACTUEL'; -} - // Path: messages class _TranslationsMessagesFr extends TranslationsMessagesEn { _TranslationsMessagesFr._(TranslationsFr root) : this._root = root, super.internal(root); @@ -873,7 +856,6 @@ class _TranslationsProfilesFr extends TranslationsProfilesEn { @override String get pinExplain => 'PIN à 4 chiffres requis pour changer de profil.'; @override String get continueButton => 'Continuer'; @override String get pinsDontMatch => 'Les PIN ne correspondent pas'; - @override String get initializeServicesFailed => 'Impossible d’initialiser les services de profil'; } // Path: connections @@ -902,7 +884,6 @@ class _TranslationsDiscoverFr extends TranslationsDiscoverEn { // Translations @override String get title => 'Découvrez'; - @override String get switchProfile => 'Changer de profil'; @override String get noContentAvailable => 'Aucun contenu disponible'; @override String get addMediaToLibraries => 'Ajoutez des médias à votre bibliothèque'; @override String get continueWatching => 'Continuer à regarder'; @@ -938,8 +919,6 @@ class _TranslationsErrorsFr extends TranslationsErrorsEn { @override String get connectionFailed => 'Impossible de se connecter au serveur multimédia'; @override String failedToLoad({required Object context, required Object error}) => 'Échec du chargement ${context}: ${error}'; @override String get noClientAvailable => 'Aucun client disponible'; - @override String authenticationFailed({required Object error}) => 'Échec de l\'authentification: ${error}'; - @override String get couldNotLaunchUrl => 'Impossible de lancer l\'URL d\'authentification'; @override String get pleaseEnterToken => 'Veuillez saisir un token'; @override String get invalidToken => 'Token invalide'; @override String failedToVerifyToken({required Object error}) => 'Échec de la vérification du token: ${error}'; @@ -973,6 +952,8 @@ class _TranslationsLibrariesFr extends TranslationsLibrariesEn { @override String get allLibrariesHidden => 'Toutes les bibliothèques sont masquées'; @override String hiddenLibrariesCount({required Object count}) => 'Bibliothèques masquées (${count})'; @override String get thisLibraryIsEmpty => 'Cette bibliothèque est vide'; + @override String get noItemsMatchFilters => 'Aucun élément ne correspond aux filtres actifs'; + @override String get resetFilters => 'Réinitialiser les filtres'; @override String get all => 'Tout'; @override String get clearAll => 'Tout effacer'; @override String scanLibraryConfirm({required Object title}) => 'Êtes-vous sûr de vouloir lancer le scan de "${title}"?'; @@ -998,8 +979,6 @@ class _TranslationsLibrariesFr extends TranslationsLibrariesEn { @override late final _TranslationsLibrariesGroupingsFr groupings = _TranslationsLibrariesGroupingsFr._(_root); @override late final _TranslationsLibrariesFilterCategoriesFr filterCategories = _TranslationsLibrariesFilterCategoriesFr._(_root); @override late final _TranslationsLibrariesSortLabelsFr sortLabels = _TranslationsLibrariesSortLabelsFr._(_root); - @override String get noItemsMatchFilters => 'Aucun élément ne correspond aux filtres actifs'; - @override String get resetFilters => 'Réinitialiser les filtres'; } // Path: about @@ -1023,7 +1002,6 @@ class _TranslationsServerSelectionFr extends TranslationsServerSelectionEn { final TranslationsFr _root; // ignore: unused_field // Translations - @override String get allServerConnectionsFailed => 'Connexion impossible à tous les serveurs. Vérifiez votre réseau.'; @override String noServersFoundForAccount({required Object username, required Object email}) => 'Aucun serveur trouvé pour ${username} (${email})'; @override String failedToLoadServers({required Object error}) => 'Échec du chargement des serveurs: ${error}'; } @@ -1102,7 +1080,6 @@ class _TranslationsExploreFr extends TranslationsExploreEn { @override String get watchlistUpdateFailed => 'Impossible de mettre à jour la liste de suivi'; @override String get notInLibrary => 'Absent de votre bibliothèque'; @override String get inTheseLibraries => 'Dans ces bibliothèques'; - @override String availableOn({required Object server}) => 'Disponible sur ${server}'; @override String get checkingLibrary => 'Vérification de votre bibliothèque...'; @override String get emptyTitle => 'Rien ici pour l\'instant'; @override String emptyMessage({required Object source}) => 'Les rangées de ${source} apparaîtront ici une fois qu\'elles auront du contenu.'; @@ -1123,6 +1100,8 @@ class _TranslationsLiveTvFr extends TranslationsLiveTvEn { @override String get guide => 'Guide'; @override String get noChannels => 'Aucune chaîne disponible'; @override String get noDvr => 'Aucun DVR configuré sur les serveurs'; + @override String get serverUnavailable => 'Le serveur de TV en direct n’est pas disponible.'; + @override String get serverNotConnected => 'Le serveur de TV en direct n’est pas connecté.'; @override String get noPrograms => 'Aucune donnée de programme disponible'; @override String get liveStreamFailed => 'Échec du direct'; @override String get unknownProgram => 'Programme inconnu'; @@ -1158,7 +1137,6 @@ class _TranslationsLiveTvFr extends TranslationsLiveTvEn { @override String get scheduledRecordings => 'Programmés'; @override String get recordingRules => 'Règles d\'enregistrement'; @override String get noScheduledRecordings => 'Aucun enregistrement programmé'; - @override String get noRecordingRules => 'Aucune règle d\'enregistrement'; @override String get manageRecording => 'Gérer l\'enregistrement'; @override String get cancelRecording => 'Annuler l\'enregistrement'; @override String get cancelRecordingTitle => 'Annuler cet enregistrement ?'; @@ -1175,7 +1153,6 @@ class _TranslationsLiveTvFr extends TranslationsLiveTvEn { @override String get recordingCancelled => 'Enregistrement annulé'; @override String get recordingRuleDeleted => 'Règle d\'enregistrement supprimée'; @override String get processRecordingRules => 'Réévaluer les règles'; - @override String get loadingRecordings => 'Chargement des enregistrements...'; @override String get recordingInProgress => 'Enregistrement en cours'; @override String recordingsCount({required Object count}) => '${count} programmés'; @override String get editRule => 'Modifier la règle'; @@ -1196,7 +1173,6 @@ class _TranslationsCollectionsFr extends TranslationsCollectionsEn { @override String get title => 'Collections'; @override String get collection => 'Collection'; @override String get empty => 'La collection est vide'; - @override String get unknownLibrarySection => 'Impossible de supprimer : section de bibliothèque inconnue'; @override String get deleteCollection => 'Supprimer la collection'; @override String deleteConfirm({required Object title}) => 'Supprimer "${title}" ? Action irréversible.'; @override String get deleted => 'Collection supprimée'; @@ -1243,6 +1219,7 @@ class _TranslationsPlaylistsFr extends TranslationsPlaylistsEn { @override String get itemAdded => 'Ajouté à la playlist'; @override String get itemRemoved => 'Retiré de la playlist'; @override String get selectPlaylist => 'Sélectionner une playlist'; + @override String get searchPlaylists => 'Rechercher des playlists...'; @override String get errorCreating => 'Échec de la création de playlist'; @override String get errorDeleting => 'Échec de suppression de playlist'; @override String get errorLoading => 'Échec de chargement de playlists'; @@ -1346,15 +1323,15 @@ class _TranslationsWatchTogetherFr extends TranslationsWatchTogetherEn { @override String participantResumed({required Object name}) => '${name} a repris'; @override String participantSeeked({required Object name}) => '${name} a avancé'; @override String participantBuffering({required Object name}) => '${name} met en mémoire tampon'; + @override String participantNeedsUpdate({required Object name}) => '${name} utilise une ancienne version de l’app — synchronisation indisponible'; + @override String resumingWithout({required Object name}) => 'Reprise sans ${name}'; @override String get waitingForParticipants => 'En attente du chargement des autres...'; + @override String waitingForName({required Object name}) => 'En attente de ${name}...'; @override String get recentRooms => 'Salons récents'; @override String get renameRoom => 'Renommer le salon'; @override String get removeRoom => 'Supprimer'; @override String get guestSwitchUnavailable => 'Impossible de changer — serveur indisponible pour la synchronisation'; @override String get guestSwitchFailed => 'Impossible de changer — contenu introuvable sur ce serveur'; - @override String participantNeedsUpdate({required Object name}) => '${name} utilise une ancienne version de l’app — synchronisation indisponible'; - @override String resumingWithout({required Object name}) => 'Reprise sans ${name}'; - @override String waitingForName({required Object name}) => 'En attente de ${name}...'; } // Path: downloads @@ -1406,7 +1383,6 @@ class _TranslationsDownloadsFr extends TranslationsDownloadsEn { @override String get customAmount => 'Quantité personnalisée...'; @override String get includeSpecials => 'Inclure les spéciaux'; @override String get howManyEpisodes => 'Combien d\'épisodes ?'; - @override String itemsQueued({required Object count}) => '${count} éléments mis en file d\'attente'; @override String get keepSynced => 'Garder synchronisé'; @override String get downloadOnce => 'Télécharger une fois'; @override String keepNUnwatched({required Object count}) => 'Garder ${count} non vus'; @@ -1780,7 +1756,6 @@ class _TranslationsAddServerFr extends TranslationsAddServerEn { @override String quickConnectFailed({required Object error}) => 'Échec de Quick Connect : ${error}'; @override String get addPlexTitle => 'Se connecter avec Plex'; @override String get pinExpired => 'Le PIN a expiré avant la connexion. Veuillez réessayer.'; - @override String get duplicatePlexAccount => 'Déjà connecté à Plex. Déconnectez-vous pour changer de compte.'; @override String failedToRegisterAccount({required Object error}) => 'Échec de l\'enregistrement du compte : ${error}'; @override String get enterJellyfinUrlError => 'Saisissez l\'URL de votre serveur Jellyfin'; @override String get addConnectionTitle => 'Ajouter une connexion'; @@ -1906,7 +1881,6 @@ class _TranslationsLibrariesSortLabelsFr extends TranslationsLibrariesSortLabels @override String get communityRating => 'Note communautaire'; @override String get criticRating => 'Note critique'; @override String get userRating => 'Note utilisateur'; - @override String get lastPlayed => 'Dernière lecture'; @override String get datePlayed => 'Date de lecture'; @override String get playCount => 'Lectures'; @override String get productionYear => 'Année de production'; @@ -1965,7 +1939,6 @@ class _TranslationsCompanionRemoteSessionFr extends TranslationsCompanionRemoteS // Translations @override String get startingServer => 'Démarrage du serveur distant...'; - @override String get failedToCreate => 'Échec du démarrage du serveur distant :'; @override String get hostAddress => 'Adresse de l\'hôte'; @override String get connected => 'Connecté'; @override String get serverRunning => 'Serveur distant actif'; @@ -2047,6 +2020,8 @@ class _TranslationsCompanionRemoteErrorsFr extends TranslationsCompanionRemoteEr // Translations @override String get noNetworkInterface => 'Aucune interface réseau trouvée'; @override String get authenticationFailed => 'Échec de l’authentification'; + @override String serverStartFailed({required Object error}) => 'Impossible de démarrer le serveur distant : ${error}'; + @override String commandFailed({required Object error}) => 'Impossible d’envoyer la commande à distance : ${error}'; @override String get joinTimedOut => 'Délai dépassé lors de la connexion à la session'; @override String get failedToConnectAnyAddress => 'Impossible de se connecter à une adresse'; @override String connectionLostAfterAttempts({required Object attempts}) => 'Connexion perdue après ${attempts} tentatives'; @@ -2123,7 +2098,6 @@ extension on TranslationsFr { dynamic _flatMapFunction(String path) { return switch (path) { 'app.title' => 'Plezy', - 'auth.signIn' => 'Se connecter', 'auth.signInWithPlex' => 'S\'inscrire avec Plex', 'auth.showQRCode' => 'Afficher le QR Code', 'auth.authenticate' => 'S\'authentifier', @@ -2174,10 +2148,8 @@ extension on TranslationsFr { 'common.episodeNumberTitle' => ({required Object number, required Object title}) => 'Épisode ${number} - ${title}', 'common.chapterNumber' => ({required Object number}) => 'Chapitre ${number}', 'common.reconnect' => 'Reconnecter', - 'common.exit' => 'Quitter', 'common.viewAll' => 'Tout afficher', 'common.checkingNetwork' => 'Vérification du réseau...', - 'common.refreshingServers' => 'Actualisation des serveurs...', 'common.loadingServers' => 'Chargement des serveurs...', 'common.connectingToServers' => 'Connexion aux serveurs...', 'common.startingOfflineMode' => 'Démarrage en mode hors-ligne...', @@ -2251,6 +2223,12 @@ extension on TranslationsFr { 'settings.tvFullCardLayoutDescription' => 'Utiliser des cartes TV avec image seule et noms des acteurs superposés', 'settings.focusGlow' => 'Halo de sélection', 'settings.focusGlowDescription' => 'Afficher un léger halo autour de la carte sélectionnée', + 'settings.visualEffects' => 'Effets visuels', + 'settings.visualEffectsAuto' => 'Automatique', + 'settings.visualEffectsAutoDescription' => 'Réduire automatiquement les effets sur les appareils peu puissants', + 'settings.visualEffectsFull' => 'Complets', + 'settings.visualEffectsReduced' => 'Réduits', + 'settings.visualEffectsReducedDescription' => 'Moins d’animations et d’illustrations de plus faible résolution', 'settings.hideSpoilers' => 'Masquer les spoilers des épisodes non vus', 'settings.hideSpoilersDescription' => 'Flouter les miniatures et descriptions des épisodes non vus', 'settings.playerBackend' => 'Moteur de lecture', @@ -2263,7 +2241,7 @@ extension on TranslationsFr { 'settings.bufferSizeAuto' => 'Auto (Recommandé)', 'settings.bufferSizeWarning' => ({required Object heap, required Object size}) => '${heap}MB de mémoire disponible. Un tampon de ${size}MB peut affecter la lecture.', 'settings.defaultQualityTitle' => 'Qualité par défaut', - 'settings.defaultQualityDescription' => 'Utilisé au démarrage de la lecture. Les valeurs plus basses réduisent la bande passante.', + 'settings.musicQualityTitle' => 'Qualité de la musique', 'settings.subtitleStyling' => 'Stylisation des sous-titres', 'settings.subtitleStylingDescription' => 'Personnaliser l\'apparence des sous-titres', 'settings.smallSkipDuration' => 'Durée du petit saut', @@ -2357,10 +2335,9 @@ extension on TranslationsFr { 'settings.maxVolumePercent' => ({required Object percent}) => '${percent}%', 'settings.discordRichPresence' => 'Discord Rich Presence', 'settings.discordRichPresenceDescription' => 'Montrez ce que vous regardez sur Discord', - 'settings.trakt' => 'Trakt', - 'settings.traktDescription' => 'Synchroniser l\'historique de visionnage avec Trakt', 'settings.services' => 'Services', 'settings.servicesDescription' => 'Connectez Trakt, MyAnimeList, Seerr et plus', + 'settings.manageLibrariesDescription' => 'Réorganiser et masquer les bibliothèques', 'settings.companionRemoteServer' => 'Serveur de télécommande', 'settings.companionRemoteServerDescription' => 'Autoriser les appareils mobiles de votre réseau à contrôler cette application', 'settings.autoPip' => 'Image dans l\'image automatique', @@ -2423,7 +2400,6 @@ extension on TranslationsFr { 'settings.showNavBarLabels' => 'Afficher les libellés de la barre de navigation', 'settings.showNavBarLabelsDescription' => 'Afficher les libellés sous les icônes de la barre de navigation', 'settings.startupSection' => 'Section de démarrage', - 'settings.startupSectionDescription' => 'Choisissez la section que Plezy ouvre au démarrage', 'settings.liveTvDefaultFavorites' => 'Chaînes favorites par défaut', 'settings.liveTvDefaultFavoritesDescription' => 'Afficher uniquement les chaînes favorites à l\'ouverture de la TV en direct', 'settings.display' => 'Affichage', @@ -2435,13 +2411,6 @@ extension on TranslationsFr { 'settings.subtitlesAndConfig' => 'Sous-titres et configuration', 'settings.seekAndTiming' => 'Recherche et minutage', 'settings.behavior' => 'Comportement', - 'settings.manageLibrariesDescription' => 'Réorganiser et masquer les bibliothèques', - 'settings.visualEffects' => 'Effets visuels', - 'settings.visualEffectsAuto' => 'Automatique', - 'settings.visualEffectsAutoDescription' => 'Réduire automatiquement les effets sur les appareils peu puissants', - 'settings.visualEffectsFull' => 'Complets', - 'settings.visualEffectsReduced' => 'Réduits', - 'settings.visualEffectsReducedDescription' => 'Moins d’animations et d’illustrations de plus faible résolution', 'search.hint' => 'Rechercher des films, des séries, de la musique...', 'search.tryDifferentTerm' => 'Essayez un autre terme de recherche', 'search.searchYourMedia' => 'Rechercher dans vos médias', @@ -2518,14 +2487,11 @@ extension on TranslationsFr { 'mediaMenu.playVersion' => 'Lire la version...', 'rateSheet.title' => 'Noter', 'rateSheet.server' => 'Serveur', - 'rateSheet.starValue' => ({required Object rating}) => '${rating} / 5', - 'rateSheet.scoreValue' => ({required Object score}) => '${score} / 10', - 'rateSheet.setScore' => 'Définir une note', + 'rateSheet.favorite' => 'Favori', + 'rateSheet.favorited' => 'Ajouté aux favoris', 'rateSheet.saved' => 'Enregistré', 'rateSheet.notAvailable' => 'Aucune correspondance trouvée', 'rateSheet.noConnectedServices' => 'Connectez un service dans les Réglages pour noter ici.', - 'rateSheet.favorite' => 'Favori', - 'rateSheet.favorited' => 'Ajouté aux favoris', 'accessibility.mediaCardMovie' => ({required Object title}) => '${title}, film', 'accessibility.mediaCardShow' => ({required Object title}) => '${title}, show TV', 'accessibility.mediaCardEpisode' => ({required Object title, required Object episodeInfo}) => '${title}, ${episodeInfo}', @@ -2534,6 +2500,14 @@ extension on TranslationsFr { 'accessibility.mediaCardPartiallyWatched' => ({required Object percent}) => '${percent} pourcentage visionné', 'accessibility.mediaCardUnwatched' => 'non visionné', 'accessibility.tapToPlay' => 'Appuyez pour lire', + 'accessibility.decrease' => 'Diminuer', + 'accessibility.increase' => 'Augmenter', + 'accessibility.decreaseValue' => ({required Object label}) => 'Diminuer ${label}', + 'accessibility.increaseValue' => ({required Object label}) => 'Augmenter ${label}', + 'accessibility.hue' => 'Teinte', + 'accessibility.saturation' => 'Saturation', + 'accessibility.brightness' => 'Luminosité', + 'accessibility.hexColor' => 'Couleur hexadécimale', 'tooltips.shufflePlay' => 'Lecture aléatoire', 'tooltips.playTrailer' => 'Lire la bande-annonce', 'tooltips.markAsWatched' => 'Marqué comme vu', @@ -2575,13 +2549,11 @@ extension on TranslationsFr { 'videoControls.settingsButton' => 'Paramètres de lecture', 'videoControls.tracksButton' => 'Audio et sous-titres', 'videoControls.chaptersButton' => 'Chapitres', - 'videoControls.versionsButton' => 'Versions vidéo', 'videoControls.versionQualityButton' => 'Version et qualité', 'videoControls.versionColumnHeader' => 'Version', 'videoControls.qualityColumnHeader' => 'Qualité', 'videoControls.qualityOriginal' => 'Originale', 'videoControls.qualityPresetLabel' => ({required Object resolution, required Object bitrate}) => '${resolution}p ${bitrate} Mbps', - 'videoControls.qualityBandwidthEstimate' => ({required Object bitrate}) => '~${bitrate} Mbps', 'videoControls.transcodeUnavailableFallback' => 'Transcodage indisponible — lecture en qualité originale', 'videoControls.pipButton' => 'Mode PiP (Picture-in-Picture)', 'videoControls.aspectRatioButton' => 'Format d\'image', @@ -2621,10 +2593,6 @@ extension on TranslationsFr { 'videoControls.subtitleDownloaded' => 'Sous-titre téléchargé', 'videoControls.subtitleDownloadFailed' => 'Échec du téléchargement du sous-titre', 'videoControls.searchLanguages' => 'Rechercher des langues...', - 'userStatus.admin' => 'Admin', - 'userStatus.restricted' => 'Restreint', - 'userStatus.protected' => 'Protégé', - 'userStatus.current' => 'ACTUEL', 'messages.markedAsWatched' => 'Marqué comme vu', 'messages.markedAsUnwatched' => 'Marqué comme non vu', 'messages.markedAsWatchedOffline' => 'Marqué comme vu (se synchronisera lorsque vous serez en ligne)', @@ -2634,8 +2602,6 @@ extension on TranslationsFr { 'messages.errorLoading' => ({required Object error}) => 'Erreur: ${error}', 'messages.streamInterrupted' => 'La lecture a été interrompue. Appuyez sur Lecture ou avancez pour réessayer.', 'messages.fileInfoNotAvailable' => 'Informations sur le fichier non disponibles', - _ => null, - } ?? switch (path) { 'messages.errorLoadingFileInfo' => ({required Object error}) => 'Erreur lors du chargement des informations sur le fichier: ${error}', 'messages.errorLoadingSeries' => 'Erreur lors du chargement de la série', 'messages.musicNotSupported' => 'La lecture de musique n\'est pas encore prise en charge', @@ -2643,6 +2609,8 @@ extension on TranslationsFr { 'messages.noProfilesAvailable' => 'Aucun profil disponible', 'messages.contactAdminForProfiles' => 'Contactez votre administrateur serveur pour ajouter des profils', 'messages.unableToDetermineLibrarySection' => 'Impossible de déterminer la section de la bibliothèque pour cet élément', + _ => null, + } ?? switch (path) { 'messages.logsCleared' => 'Logs effacés', 'messages.logsCopied' => 'Logs copiés dans le presse-papier', 'messages.noLogsAvailable' => 'Aucun log disponible', @@ -2759,7 +2727,6 @@ extension on TranslationsFr { 'profiles.pinExplain' => 'PIN à 4 chiffres requis pour changer de profil.', 'profiles.continueButton' => 'Continuer', 'profiles.pinsDontMatch' => 'Les PIN ne correspondent pas', - 'profiles.initializeServicesFailed' => 'Impossible d’initialiser les services de profil', 'connections.sectionTitle' => 'Connexions', 'connections.addConnection' => 'Ajouter une connexion', 'connections.addConnectionSubtitleNoProfile' => 'Connectez-vous avec Plex ou connectez un serveur Jellyfin', @@ -2770,7 +2737,6 @@ extension on TranslationsFr { 'connections.editJellyfinTitle' => 'Modifier la connexion Jellyfin', 'connections.editJellyfinIntro' => ({required Object serverName}) => 'Ajoutez ou supprimez des URL pour ${serverName}. Plezy utilisera l\'URL joignable avec la latence la plus faible.', 'discover.title' => 'Découvrez', - 'discover.switchProfile' => 'Changer de profil', 'discover.noContentAvailable' => 'Aucun contenu disponible', 'discover.addMediaToLibraries' => 'Ajoutez des médias à votre bibliothèque', 'discover.continueWatching' => 'Continuer à regarder', @@ -2797,8 +2763,6 @@ extension on TranslationsFr { 'errors.connectionFailed' => 'Impossible de se connecter au serveur multimédia', 'errors.failedToLoad' => ({required Object context, required Object error}) => 'Échec du chargement ${context}: ${error}', 'errors.noClientAvailable' => 'Aucun client disponible', - 'errors.authenticationFailed' => ({required Object error}) => 'Échec de l\'authentification: ${error}', - 'errors.couldNotLaunchUrl' => 'Impossible de lancer l\'URL d\'authentification', 'errors.pleaseEnterToken' => 'Veuillez saisir un token', 'errors.invalidToken' => 'Token invalide', 'errors.failedToVerifyToken' => ({required Object error}) => 'Échec de la vérification du token: ${error}', @@ -2823,6 +2787,8 @@ extension on TranslationsFr { 'libraries.allLibrariesHidden' => 'Toutes les bibliothèques sont masquées', 'libraries.hiddenLibrariesCount' => ({required Object count}) => 'Bibliothèques masquées (${count})', 'libraries.thisLibraryIsEmpty' => 'Cette bibliothèque est vide', + 'libraries.noItemsMatchFilters' => 'Aucun élément ne correspond aux filtres actifs', + 'libraries.resetFilters' => 'Réinitialiser les filtres', 'libraries.all' => 'Tout', 'libraries.clearAll' => 'Tout effacer', 'libraries.scanLibraryConfirm' => ({required Object title}) => 'Êtes-vous sûr de vouloir lancer le scan de "${title}"?', @@ -2871,7 +2837,6 @@ extension on TranslationsFr { 'libraries.sortLabels.communityRating' => 'Note communautaire', 'libraries.sortLabels.criticRating' => 'Note critique', 'libraries.sortLabels.userRating' => 'Note utilisateur', - 'libraries.sortLabels.lastPlayed' => 'Dernière lecture', 'libraries.sortLabels.datePlayed' => 'Date de lecture', 'libraries.sortLabels.playCount' => 'Lectures', 'libraries.sortLabels.productionYear' => 'Année de production', @@ -2885,14 +2850,11 @@ extension on TranslationsFr { 'libraries.sortLabels.dateShared' => 'Date de partage', 'libraries.sortLabels.latestEpisodeAirDate' => 'Dernière date de diffusion', 'libraries.sortLabels.lastEpisodeDateAdded' => 'Date d\'ajout du dernier épisode', - 'libraries.noItemsMatchFilters' => 'Aucun élément ne correspond aux filtres actifs', - 'libraries.resetFilters' => 'Réinitialiser les filtres', 'about.title' => 'À propos', 'about.openSourceLicenses' => 'Licences Open Source', 'about.versionLabel' => ({required Object version}) => 'Version ${version}', 'about.appDescription' => 'Un magnifique client Plex et Jellyfin pour Flutter', 'about.viewLicensesDescription' => 'Afficher les licences des bibliothèques tierces', - 'serverSelection.allServerConnectionsFailed' => 'Connexion impossible à tous les serveurs. Vérifiez votre réseau.', 'serverSelection.noServersFoundForAccount' => ({required Object username, required Object email}) => 'Aucun serveur trouvé pour ${username} (${email})', 'serverSelection.failedToLoadServers' => ({required Object error}) => 'Échec du chargement des serveurs: ${error}', 'hubDetail.title' => 'Titre', @@ -2938,7 +2900,6 @@ extension on TranslationsFr { 'explore.watchlistUpdateFailed' => 'Impossible de mettre à jour la liste de suivi', 'explore.notInLibrary' => 'Absent de votre bibliothèque', 'explore.inTheseLibraries' => 'Dans ces bibliothèques', - 'explore.availableOn' => ({required Object server}) => 'Disponible sur ${server}', 'explore.checkingLibrary' => 'Vérification de votre bibliothèque...', 'explore.emptyTitle' => 'Rien ici pour l\'instant', 'explore.emptyMessage' => ({required Object source}) => 'Les rangées de ${source} apparaîtront ici une fois qu\'elles auront du contenu.', @@ -2950,6 +2911,8 @@ extension on TranslationsFr { 'liveTv.guide' => 'Guide', 'liveTv.noChannels' => 'Aucune chaîne disponible', 'liveTv.noDvr' => 'Aucun DVR configuré sur les serveurs', + 'liveTv.serverUnavailable' => 'Le serveur de TV en direct n’est pas disponible.', + 'liveTv.serverNotConnected' => 'Le serveur de TV en direct n’est pas connecté.', 'liveTv.noPrograms' => 'Aucune donnée de programme disponible', 'liveTv.liveStreamFailed' => 'Échec du direct', 'liveTv.unknownProgram' => 'Programme inconnu', @@ -2985,7 +2948,6 @@ extension on TranslationsFr { 'liveTv.scheduledRecordings' => 'Programmés', 'liveTv.recordingRules' => 'Règles d\'enregistrement', 'liveTv.noScheduledRecordings' => 'Aucun enregistrement programmé', - 'liveTv.noRecordingRules' => 'Aucune règle d\'enregistrement', 'liveTv.manageRecording' => 'Gérer l\'enregistrement', 'liveTv.cancelRecording' => 'Annuler l\'enregistrement', 'liveTv.cancelRecordingTitle' => 'Annuler cet enregistrement ?', @@ -3002,7 +2964,6 @@ extension on TranslationsFr { 'liveTv.recordingCancelled' => 'Enregistrement annulé', 'liveTv.recordingRuleDeleted' => 'Règle d\'enregistrement supprimée', 'liveTv.processRecordingRules' => 'Réévaluer les règles', - 'liveTv.loadingRecordings' => 'Chargement des enregistrements...', 'liveTv.recordingInProgress' => 'Enregistrement en cours', 'liveTv.recordingsCount' => ({required Object count}) => '${count} programmés', 'liveTv.editRule' => 'Modifier la règle', @@ -3014,7 +2975,6 @@ extension on TranslationsFr { 'collections.title' => 'Collections', 'collections.collection' => 'Collection', 'collections.empty' => 'La collection est vide', - 'collections.unknownLibrarySection' => 'Impossible de supprimer : section de bibliothèque inconnue', 'collections.deleteCollection' => 'Supprimer la collection', 'collections.deleteConfirm' => ({required Object title}) => 'Supprimer "${title}" ? Action irréversible.', 'collections.deleted' => 'Collection supprimée', @@ -3052,6 +3012,7 @@ extension on TranslationsFr { 'playlists.itemAdded' => 'Ajouté à la playlist', 'playlists.itemRemoved' => 'Retiré de la playlist', 'playlists.selectPlaylist' => 'Sélectionner une playlist', + 'playlists.searchPlaylists' => 'Rechercher des playlists...', 'playlists.errorCreating' => 'Échec de la création de playlist', 'playlists.errorDeleting' => 'Échec de suppression de playlist', 'playlists.errorLoading' => 'Échec de chargement de playlists', @@ -3134,22 +3095,20 @@ extension on TranslationsFr { 'watchTogether.participantResumed' => ({required Object name}) => '${name} a repris', 'watchTogether.participantSeeked' => ({required Object name}) => '${name} a avancé', 'watchTogether.participantBuffering' => ({required Object name}) => '${name} met en mémoire tampon', + 'watchTogether.participantNeedsUpdate' => ({required Object name}) => '${name} utilise une ancienne version de l’app — synchronisation indisponible', + 'watchTogether.resumingWithout' => ({required Object name}) => 'Reprise sans ${name}', 'watchTogether.waitingForParticipants' => 'En attente du chargement des autres...', + 'watchTogether.waitingForName' => ({required Object name}) => 'En attente de ${name}...', 'watchTogether.recentRooms' => 'Salons récents', 'watchTogether.renameRoom' => 'Renommer le salon', 'watchTogether.removeRoom' => 'Supprimer', 'watchTogether.guestSwitchUnavailable' => 'Impossible de changer — serveur indisponible pour la synchronisation', 'watchTogether.guestSwitchFailed' => 'Impossible de changer — contenu introuvable sur ce serveur', - 'watchTogether.participantNeedsUpdate' => ({required Object name}) => '${name} utilise une ancienne version de l’app — synchronisation indisponible', - 'watchTogether.resumingWithout' => ({required Object name}) => 'Reprise sans ${name}', - 'watchTogether.waitingForName' => ({required Object name}) => 'En attente de ${name}...', 'downloads.title' => 'Téléchargements', 'downloads.manage' => 'Gérer', 'downloads.tvShows' => 'Show TV', 'downloads.movies' => 'Films', 'downloads.music' => 'Musique', - _ => null, - } ?? switch (path) { 'downloads.tracksQueued' => ({required Object count}) => '${count} titres en file d\'attente de téléchargement', 'downloads.noDownloads' => 'Aucun téléchargement pour le moment', 'downloads.noDownloadsDescription' => 'Le contenu téléchargé apparaîtra ici pour être consulté hors ligne.', @@ -3164,6 +3123,8 @@ extension on TranslationsFr { 'downloads.deleteConfirm' => ({required Object title}) => 'Supprimer "${title}" de cet appareil ?', 'downloads.cancelledDownloadTitle' => 'Téléchargement annulé', 'downloads.cancelledDownloadMessage' => 'Ce téléchargement a été annulé. Que voulez-vous faire ?', + _ => null, + } ?? switch (path) { 'downloads.allEpisodesAlreadyDownloaded' => 'Tous les épisodes sont déjà téléchargés', 'downloads.resumeDownload' => 'Reprendre le téléchargement', 'downloads.cancelledDownload' => 'Téléchargement annulé', @@ -3187,7 +3148,6 @@ extension on TranslationsFr { 'downloads.customAmount' => 'Quantité personnalisée...', 'downloads.includeSpecials' => 'Inclure les spéciaux', 'downloads.howManyEpisodes' => 'Combien d\'épisodes ?', - 'downloads.itemsQueued' => ({required Object count}) => '${count} éléments mis en file d\'attente', 'downloads.keepSynced' => 'Garder synchronisé', 'downloads.downloadOnce' => 'Télécharger une fois', 'downloads.keepNUnwatched' => ({required Object count}) => 'Garder ${count} non vus', @@ -3231,7 +3191,6 @@ extension on TranslationsFr { 'companionRemote.connectedTo' => ({required Object name}) => 'Connecté à ${name}', 'companionRemote.unknownDevice' => 'Appareil inconnu', 'companionRemote.session.startingServer' => 'Démarrage du serveur distant...', - 'companionRemote.session.failedToCreate' => 'Échec du démarrage du serveur distant :', 'companionRemote.session.hostAddress' => 'Adresse de l\'hôte', 'companionRemote.session.connected' => 'Connecté', 'companionRemote.session.serverRunning' => 'Serveur distant actif', @@ -3286,6 +3245,8 @@ extension on TranslationsFr { 'companionRemote.remote.searchHint' => 'Rechercher sur le bureau...', 'companionRemote.errors.noNetworkInterface' => 'Aucune interface réseau trouvée', 'companionRemote.errors.authenticationFailed' => 'Échec de l’authentification', + 'companionRemote.errors.serverStartFailed' => ({required Object error}) => 'Impossible de démarrer le serveur distant : ${error}', + 'companionRemote.errors.commandFailed' => ({required Object error}) => 'Impossible d’envoyer la commande à distance : ${error}', 'companionRemote.errors.joinTimedOut' => 'Délai dépassé lors de la connexion à la session', 'companionRemote.errors.failedToConnectAnyAddress' => 'Impossible de se connecter à une adresse', 'companionRemote.errors.connectionLostAfterAttempts' => ({required Object attempts}) => 'Connexion perdue après ${attempts} tentatives', @@ -3530,7 +3491,6 @@ extension on TranslationsFr { 'addServer.quickConnectFailed' => ({required Object error}) => 'Échec de Quick Connect : ${error}', 'addServer.addPlexTitle' => 'Se connecter avec Plex', 'addServer.pinExpired' => 'Le PIN a expiré avant la connexion. Veuillez réessayer.', - 'addServer.duplicatePlexAccount' => 'Déjà connecté à Plex. Déconnectez-vous pour changer de compte.', 'addServer.failedToRegisterAccount' => ({required Object error}) => 'Échec de l\'enregistrement du compte : ${error}', 'addServer.enterJellyfinUrlError' => 'Saisissez l\'URL de votre serveur Jellyfin', 'addServer.addConnectionTitle' => 'Ajouter une connexion', diff --git a/lib/i18n/strings_it.g.dart b/lib/i18n/strings_it.g.dart index af19112d..7a3504b2 100644 --- a/lib/i18n/strings_it.g.dart +++ b/lib/i18n/strings_it.g.dart @@ -53,7 +53,6 @@ class TranslationsIt extends Translations with BaseTranslations 'Accedi'; @override String get signInWithPlex => 'Accedi con Plex'; @override String get showQRCode => 'Mostra QR Code'; @override String get authenticate => 'Autenticazione'; @@ -167,10 +165,8 @@ class _TranslationsCommonIt extends TranslationsCommonEn { @override String episodeNumberTitle({required Object number, required Object title}) => 'Episodio ${number} - ${title}'; @override String chapterNumber({required Object number}) => 'Capitolo ${number}'; @override String get reconnect => 'Riconnetti'; - @override String get exit => 'Esci'; @override String get viewAll => 'Mostra tutto'; @override String get checkingNetwork => 'Verifica rete...'; - @override String get refreshingServers => 'Aggiornamento server...'; @override String get loadingServers => 'Caricamento server...'; @override String get connectingToServers => 'Connessione ai server...'; @override String get startingOfflineMode => 'Avvio modalità offline...'; @@ -271,6 +267,12 @@ class _TranslationsSettingsIt extends TranslationsSettingsEn { @override String get tvFullCardLayoutDescription => 'Usa schede TV solo immagine con i nomi degli attori sovrapposti'; @override String get focusGlow => 'Bagliore di selezione'; @override String get focusGlowDescription => 'Mostra un leggero bagliore attorno alla scheda selezionata'; + @override String get visualEffects => 'Effetti visivi'; + @override String get visualEffectsAuto => 'Automatico'; + @override String get visualEffectsAutoDescription => 'Riduci automaticamente gli effetti sui dispositivi a basso consumo'; + @override String get visualEffectsFull => 'Completi'; + @override String get visualEffectsReduced => 'Ridotti'; + @override String get visualEffectsReducedDescription => 'Meno animazioni e immagini a risoluzione inferiore'; @override String get hideSpoilers => 'Nascondi spoiler per episodi non visti'; @override String get hideSpoilersDescription => 'Sfoca miniature e descrizioni degli episodi non visti'; @override String get playerBackend => 'Motore di riproduzione'; @@ -283,7 +285,7 @@ class _TranslationsSettingsIt extends TranslationsSettingsEn { @override String get bufferSizeAuto => 'Auto (Consigliato)'; @override String bufferSizeWarning({required Object heap, required Object size}) => '${heap}MB di memoria disponibile. Un buffer di ${size}MB può influire sulla riproduzione.'; @override String get defaultQualityTitle => 'Qualità predefinita'; - @override String get defaultQualityDescription => 'Utilizzato all\'avvio della riproduzione. Valori più bassi riducono la larghezza di banda.'; + @override String get musicQualityTitle => 'Qualità musicale'; @override String get subtitleStyling => 'Stile sottotitoli'; @override String get subtitleStylingDescription => 'Personalizza l\'aspetto dei sottotitoli'; @override String get smallSkipDuration => 'Durata skip breve'; @@ -377,10 +379,9 @@ class _TranslationsSettingsIt extends TranslationsSettingsEn { @override String maxVolumePercent({required Object percent}) => '${percent}%'; @override String get discordRichPresence => 'Discord Rich Presence'; @override String get discordRichPresenceDescription => 'Mostra su Discord cosa stai guardando'; - @override String get trakt => 'Trakt'; - @override String get traktDescription => 'Sincronizza la cronologia di visione con Trakt'; @override String get services => 'Servizi'; @override String get servicesDescription => 'Connetti Trakt, MyAnimeList, Seerr e altro'; + @override String get manageLibrariesDescription => 'Riordina e nascondi le librerie'; @override String get companionRemoteServer => 'Server telecomando'; @override String get companionRemoteServerDescription => 'Consenti ai dispositivi mobili nella tua rete di controllare questa app'; @override String get autoPip => 'Picture-in-Picture automatico'; @@ -443,7 +444,6 @@ class _TranslationsSettingsIt extends TranslationsSettingsEn { @override String get showNavBarLabels => 'Mostra etichette barra di navigazione'; @override String get showNavBarLabelsDescription => 'Mostra le etichette sotto le icone della barra di navigazione'; @override String get startupSection => 'Sezione di avvio'; - @override String get startupSectionDescription => 'Scegli quale sezione apre Plezy all\'avvio'; @override String get liveTvDefaultFavorites => 'Canali preferiti predefiniti'; @override String get liveTvDefaultFavoritesDescription => 'Mostra solo i canali preferiti all\'apertura della TV dal vivo'; @override String get display => 'Schermo'; @@ -455,13 +455,6 @@ class _TranslationsSettingsIt extends TranslationsSettingsEn { @override String get subtitlesAndConfig => 'Sottotitoli e configurazione'; @override String get seekAndTiming => 'Ricerca e tempistica'; @override String get behavior => 'Comportamento'; - @override String get manageLibrariesDescription => 'Riordina e nascondi le librerie'; - @override String get visualEffects => 'Effetti visivi'; - @override String get visualEffectsAuto => 'Automatico'; - @override String get visualEffectsAutoDescription => 'Riduci automaticamente gli effetti sui dispositivi a basso consumo'; - @override String get visualEffectsFull => 'Completi'; - @override String get visualEffectsReduced => 'Ridotti'; - @override String get visualEffectsReducedDescription => 'Meno animazioni e immagini a risoluzione inferiore'; } // Path: search @@ -559,14 +552,11 @@ class _TranslationsRateSheetIt extends TranslationsRateSheetEn { // Translations @override String get title => 'Valuta'; @override String get server => 'Server'; - @override String starValue({required Object rating}) => '${rating} / 5'; - @override String scoreValue({required Object score}) => '${score} / 10'; - @override String get setScore => 'Imposta un punteggio'; + @override String get favorite => 'Preferito'; + @override String get favorited => 'Aggiunto ai preferiti'; @override String get saved => 'Salvato'; @override String get notAvailable => 'Nessuna corrispondenza trovata'; @override String get noConnectedServices => 'Connetti un servizio nelle Impostazioni per valutare lì.'; - @override String get favorite => 'Preferito'; - @override String get favorited => 'Aggiunto ai preferiti'; } // Path: accessibility @@ -584,6 +574,14 @@ class _TranslationsAccessibilityIt extends TranslationsAccessibilityEn { @override String mediaCardPartiallyWatched({required Object percent}) => '${percent} percento visto'; @override String get mediaCardUnwatched => 'non visto'; @override String get tapToPlay => 'Tocca per riprodurre'; + @override String get decrease => 'Diminuisci'; + @override String get increase => 'Aumenta'; + @override String decreaseValue({required Object label}) => 'Diminuisci ${label}'; + @override String increaseValue({required Object label}) => 'Aumenta ${label}'; + @override String get hue => 'Tonalità'; + @override String get saturation => 'Saturazione'; + @override String get brightness => 'Luminosità'; + @override String get hexColor => 'Colore esadecimale'; } // Path: tooltips @@ -643,13 +641,11 @@ class _TranslationsVideoControlsIt extends TranslationsVideoControlsEn { @override String get settingsButton => 'Impostazioni di riproduzione'; @override String get tracksButton => 'Audio e sottotitoli'; @override String get chaptersButton => 'Capitoli'; - @override String get versionsButton => 'Versioni video'; @override String get versionQualityButton => 'Versione e qualità'; @override String get versionColumnHeader => 'Versione'; @override String get qualityColumnHeader => 'Qualità'; @override String get qualityOriginal => 'Originale'; @override String qualityPresetLabel({required Object resolution, required Object bitrate}) => '${resolution}p ${bitrate} Mbps'; - @override String qualityBandwidthEstimate({required Object bitrate}) => '~${bitrate} Mbps'; @override String get transcodeUnavailableFallback => 'Transcodifica non disponibile — riproduzione in qualità originale'; @override String get pipButton => 'Modalità Picture-in-Picture'; @override String get aspectRatioButton => 'Proporzioni'; @@ -685,19 +681,6 @@ class _TranslationsVideoControlsIt extends TranslationsVideoControlsEn { @override String get searchLanguages => 'Cerca lingue...'; } -// Path: userStatus -class _TranslationsUserStatusIt extends TranslationsUserStatusEn { - _TranslationsUserStatusIt._(TranslationsIt root) : this._root = root, super.internal(root); - - final TranslationsIt _root; // ignore: unused_field - - // Translations - @override String get admin => 'Admin'; - @override String get restricted => 'Limitato'; - @override String get protected => 'Protetto'; - @override String get current => 'ATTUALE'; -} - // Path: messages class _TranslationsMessagesIt extends TranslationsMessagesEn { _TranslationsMessagesIt._(TranslationsIt root) : this._root = root, super.internal(root); @@ -873,7 +856,6 @@ class _TranslationsProfilesIt extends TranslationsProfilesEn { @override String get pinExplain => 'PIN a 4 cifre richiesto per cambiare profilo.'; @override String get continueButton => 'Continua'; @override String get pinsDontMatch => 'I PIN non corrispondono'; - @override String get initializeServicesFailed => 'Impossibile inizializzare i servizi profilo'; } // Path: connections @@ -902,7 +884,6 @@ class _TranslationsDiscoverIt extends TranslationsDiscoverEn { // Translations @override String get title => 'Esplora'; - @override String get switchProfile => 'Cambia profilo'; @override String get noContentAvailable => 'Nessun contenuto disponibile'; @override String get addMediaToLibraries => 'Aggiungi alcuni file multimediali alle tue librerie'; @override String get continueWatching => 'Continua a guardare'; @@ -938,8 +919,6 @@ class _TranslationsErrorsIt extends TranslationsErrorsEn { @override String get connectionFailed => 'Impossibile connettersi al server multimediale'; @override String failedToLoad({required Object context, required Object error}) => 'Impossibile caricare ${context}: ${error}'; @override String get noClientAvailable => 'Nessun client disponibile'; - @override String authenticationFailed({required Object error}) => 'Autenticazione fallita: ${error}'; - @override String get couldNotLaunchUrl => 'Impossibile avviare URL di autenticazione'; @override String get pleaseEnterToken => 'Inserisci token'; @override String get invalidToken => 'Token non valido'; @override String failedToVerifyToken({required Object error}) => 'Verifica token fallita: ${error}'; @@ -973,6 +952,8 @@ class _TranslationsLibrariesIt extends TranslationsLibrariesEn { @override String get allLibrariesHidden => 'Tutte le librerie sono nascoste'; @override String hiddenLibrariesCount({required Object count}) => 'Librerie nascoste (${count})'; @override String get thisLibraryIsEmpty => 'Questa libreria è vuota'; + @override String get noItemsMatchFilters => 'Nessun elemento corrisponde ai filtri attivi'; + @override String get resetFilters => 'Reimposta filtri'; @override String get all => 'Tutto'; @override String get clearAll => 'Cancella tutto'; @override String scanLibraryConfirm({required Object title}) => 'Sei sicuro di voler scansionare "${title}"?'; @@ -998,8 +979,6 @@ class _TranslationsLibrariesIt extends TranslationsLibrariesEn { @override late final _TranslationsLibrariesGroupingsIt groupings = _TranslationsLibrariesGroupingsIt._(_root); @override late final _TranslationsLibrariesFilterCategoriesIt filterCategories = _TranslationsLibrariesFilterCategoriesIt._(_root); @override late final _TranslationsLibrariesSortLabelsIt sortLabels = _TranslationsLibrariesSortLabelsIt._(_root); - @override String get noItemsMatchFilters => 'Nessun elemento corrisponde ai filtri attivi'; - @override String get resetFilters => 'Reimposta filtri'; } // Path: about @@ -1023,7 +1002,6 @@ class _TranslationsServerSelectionIt extends TranslationsServerSelectionEn { final TranslationsIt _root; // ignore: unused_field // Translations - @override String get allServerConnectionsFailed => 'Impossibile connettersi ai server. Controlla la rete.'; @override String noServersFoundForAccount({required Object username, required Object email}) => 'Nessun server trovato per ${username} (${email})'; @override String failedToLoadServers({required Object error}) => 'Impossibile caricare i server: ${error}'; } @@ -1090,10 +1068,6 @@ class _TranslationsExploreIt extends TranslationsExploreEn { @override String get title => 'Scopri'; @override String get selectSource => 'Seleziona fonte'; @override late final _TranslationsExploreRowsIt rows = _TranslationsExploreRowsIt._(_root); - @override String searchHint({required Object source}) => 'Cerca su ${source}'; - @override String searchEmpty({required Object query}) => 'Nessun risultato per "${query}"'; - @override String searchPrompt({required Object source}) => 'Cerca film e serie TV su ${source}.'; - @override String get searchFailed => 'Ricerca fallita. Controlla la connessione e riprova.'; @override late final _TranslationsExploreStatusIt status = _TranslationsExploreStatusIt._(_root); @override String episodeCount({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('it'))(n, one: '${n} episodio', @@ -1106,10 +1080,13 @@ class _TranslationsExploreIt extends TranslationsExploreEn { @override String get watchlistUpdateFailed => 'Impossibile aggiornare la Watchlist'; @override String get notInLibrary => 'Non è nella tua libreria'; @override String get inTheseLibraries => 'In queste librerie'; - @override String availableOn({required Object server}) => 'Disponibile su ${server}'; @override String get checkingLibrary => 'Controllo della tua libreria...'; @override String get emptyTitle => 'Ancora niente qui'; @override String emptyMessage({required Object source}) => 'Le righe da ${source} appariranno qui una volta che avranno dei contenuti.'; + @override String searchHint({required Object source}) => 'Cerca su ${source}'; + @override String searchEmpty({required Object query}) => 'Nessun risultato per "${query}"'; + @override String searchPrompt({required Object source}) => 'Cerca film e serie TV su ${source}.'; + @override String get searchFailed => 'Ricerca fallita. Controlla la connessione e riprova.'; } // Path: liveTv @@ -1123,6 +1100,8 @@ class _TranslationsLiveTvIt extends TranslationsLiveTvEn { @override String get guide => 'Guida'; @override String get noChannels => 'Nessun canale disponibile'; @override String get noDvr => 'Nessun DVR configurato su nessun server'; + @override String get serverUnavailable => 'Il server TV in diretta non è disponibile.'; + @override String get serverNotConnected => 'Il server TV in diretta non è connesso.'; @override String get noPrograms => 'Nessun dato di programma disponibile'; @override String get liveStreamFailed => 'Streaming live non riuscito'; @override String get unknownProgram => 'Programma sconosciuto'; @@ -1158,7 +1137,6 @@ class _TranslationsLiveTvIt extends TranslationsLiveTvEn { @override String get scheduledRecordings => 'Programmate'; @override String get recordingRules => 'Regole di registrazione'; @override String get noScheduledRecordings => 'Nessuna registrazione programmata'; - @override String get noRecordingRules => 'Nessuna regola di registrazione'; @override String get manageRecording => 'Gestisci registrazione'; @override String get cancelRecording => 'Annulla registrazione'; @override String get cancelRecordingTitle => 'Annullare questa registrazione?'; @@ -1175,7 +1153,6 @@ class _TranslationsLiveTvIt extends TranslationsLiveTvEn { @override String get recordingCancelled => 'Registrazione annullata'; @override String get recordingRuleDeleted => 'Regola di registrazione eliminata'; @override String get processRecordingRules => 'Rivaluta regole'; - @override String get loadingRecordings => 'Caricamento registrazioni...'; @override String get recordingInProgress => 'Registrazione in corso'; @override String recordingsCount({required Object count}) => '${count} programmate'; @override String get editRule => 'Modifica regola'; @@ -1196,7 +1173,6 @@ class _TranslationsCollectionsIt extends TranslationsCollectionsEn { @override String get title => 'Raccolte'; @override String get collection => 'Raccolta'; @override String get empty => 'La raccolta è vuota'; - @override String get unknownLibrarySection => 'Impossibile eliminare: sezione libreria sconosciuta'; @override String get deleteCollection => 'Elimina raccolta'; @override String deleteConfirm({required Object title}) => 'Eliminare "${title}"? Non si può annullare.'; @override String get deleted => 'Raccolta eliminata'; @@ -1243,6 +1219,7 @@ class _TranslationsPlaylistsIt extends TranslationsPlaylistsEn { @override String get itemAdded => 'Aggiunto alla playlist'; @override String get itemRemoved => 'Rimosso dalla playlist'; @override String get selectPlaylist => 'Seleziona playlist'; + @override String get searchPlaylists => 'Cerca playlist...'; @override String get errorCreating => 'Errore durante la creazione della playlist'; @override String get errorDeleting => 'Errore durante l\'eliminazione della playlist'; @override String get errorLoading => 'Errore durante il caricamento delle playlist'; @@ -1346,15 +1323,15 @@ class _TranslationsWatchTogetherIt extends TranslationsWatchTogetherEn { @override String participantResumed({required Object name}) => '${name} ha ripreso'; @override String participantSeeked({required Object name}) => '${name} ha cercato'; @override String participantBuffering({required Object name}) => '${name} sta caricando'; + @override String participantNeedsUpdate({required Object name}) => '${name} usa una versione precedente dell\'app — sincronizzazione non disponibile'; + @override String resumingWithout({required Object name}) => 'Ripresa senza ${name}'; @override String get waitingForParticipants => 'In attesa che gli altri carichino...'; + @override String waitingForName({required Object name}) => 'In attesa di ${name}...'; @override String get recentRooms => 'Stanze recenti'; @override String get renameRoom => 'Rinomina stanza'; @override String get removeRoom => 'Rimuovi'; @override String get guestSwitchUnavailable => 'Impossibile cambiare — server non disponibile per la sincronizzazione'; @override String get guestSwitchFailed => 'Impossibile cambiare — contenuto non trovato su questo server'; - @override String participantNeedsUpdate({required Object name}) => '${name} usa una versione precedente dell\'app — sincronizzazione non disponibile'; - @override String resumingWithout({required Object name}) => 'Ripresa senza ${name}'; - @override String waitingForName({required Object name}) => 'In attesa di ${name}...'; } // Path: downloads @@ -1406,7 +1383,6 @@ class _TranslationsDownloadsIt extends TranslationsDownloadsEn { @override String get customAmount => 'Quantità personalizzata...'; @override String get includeSpecials => 'Includi gli speciali'; @override String get howManyEpisodes => 'Quanti episodi?'; - @override String itemsQueued({required Object count}) => '${count} elementi in coda per il download'; @override String get keepSynced => 'Mantieni sincronizzato'; @override String get downloadOnce => 'Scarica una volta'; @override String keepNUnwatched({required Object count}) => 'Mantieni ${count} non visti'; @@ -1780,7 +1756,6 @@ class _TranslationsAddServerIt extends TranslationsAddServerEn { @override String quickConnectFailed({required Object error}) => 'Quick Connect non riuscito: ${error}'; @override String get addPlexTitle => 'Accedi con Plex'; @override String get pinExpired => 'PIN scaduto prima dell\'accesso. Riprova.'; - @override String get duplicatePlexAccount => 'Accesso a Plex già effettuato. Esci per cambiare account.'; @override String failedToRegisterAccount({required Object error}) => 'Registrazione account non riuscita: ${error}'; @override String get enterJellyfinUrlError => 'Inserisci l\'URL del tuo server Jellyfin'; @override String get addConnectionTitle => 'Aggiungi connessione'; @@ -1906,7 +1881,6 @@ class _TranslationsLibrariesSortLabelsIt extends TranslationsLibrariesSortLabels @override String get communityRating => 'Valutazione della community'; @override String get criticRating => 'Valutazione critica'; @override String get userRating => 'Valutazione utente'; - @override String get lastPlayed => 'Ultima riproduzione'; @override String get datePlayed => 'Data di riproduzione'; @override String get playCount => 'Riproduzioni'; @override String get productionYear => 'Anno di produzione'; @@ -1965,7 +1939,6 @@ class _TranslationsCompanionRemoteSessionIt extends TranslationsCompanionRemoteS // Translations @override String get startingServer => 'Avvio del server remoto...'; - @override String get failedToCreate => 'Impossibile avviare il server remoto:'; @override String get hostAddress => 'Indirizzo host'; @override String get connected => 'Connesso'; @override String get serverRunning => 'Server remoto attivo'; @@ -2047,6 +2020,8 @@ class _TranslationsCompanionRemoteErrorsIt extends TranslationsCompanionRemoteEr // Translations @override String get noNetworkInterface => 'Nessuna interfaccia di rete trovata'; @override String get authenticationFailed => 'Autenticazione non riuscita'; + @override String serverStartFailed({required Object error}) => 'Impossibile avviare il server remoto: ${error}'; + @override String commandFailed({required Object error}) => 'Impossibile inviare il comando remoto: ${error}'; @override String get joinTimedOut => 'Tempo scaduto durante l’accesso alla sessione'; @override String get failedToConnectAnyAddress => 'Impossibile connettersi a qualsiasi indirizzo'; @override String connectionLostAfterAttempts({required Object attempts}) => 'Connessione persa dopo ${attempts} tentativi'; @@ -2123,7 +2098,6 @@ extension on TranslationsIt { dynamic _flatMapFunction(String path) { return switch (path) { 'app.title' => 'Plezy', - 'auth.signIn' => 'Accedi', 'auth.signInWithPlex' => 'Accedi con Plex', 'auth.showQRCode' => 'Mostra QR Code', 'auth.authenticate' => 'Autenticazione', @@ -2174,10 +2148,8 @@ extension on TranslationsIt { 'common.episodeNumberTitle' => ({required Object number, required Object title}) => 'Episodio ${number} - ${title}', 'common.chapterNumber' => ({required Object number}) => 'Capitolo ${number}', 'common.reconnect' => 'Riconnetti', - 'common.exit' => 'Esci', 'common.viewAll' => 'Mostra tutto', 'common.checkingNetwork' => 'Verifica rete...', - 'common.refreshingServers' => 'Aggiornamento server...', 'common.loadingServers' => 'Caricamento server...', 'common.connectingToServers' => 'Connessione ai server...', 'common.startingOfflineMode' => 'Avvio modalità offline...', @@ -2251,6 +2223,12 @@ extension on TranslationsIt { 'settings.tvFullCardLayoutDescription' => 'Usa schede TV solo immagine con i nomi degli attori sovrapposti', 'settings.focusGlow' => 'Bagliore di selezione', 'settings.focusGlowDescription' => 'Mostra un leggero bagliore attorno alla scheda selezionata', + 'settings.visualEffects' => 'Effetti visivi', + 'settings.visualEffectsAuto' => 'Automatico', + 'settings.visualEffectsAutoDescription' => 'Riduci automaticamente gli effetti sui dispositivi a basso consumo', + 'settings.visualEffectsFull' => 'Completi', + 'settings.visualEffectsReduced' => 'Ridotti', + 'settings.visualEffectsReducedDescription' => 'Meno animazioni e immagini a risoluzione inferiore', 'settings.hideSpoilers' => 'Nascondi spoiler per episodi non visti', 'settings.hideSpoilersDescription' => 'Sfoca miniature e descrizioni degli episodi non visti', 'settings.playerBackend' => 'Motore di riproduzione', @@ -2263,7 +2241,7 @@ extension on TranslationsIt { 'settings.bufferSizeAuto' => 'Auto (Consigliato)', 'settings.bufferSizeWarning' => ({required Object heap, required Object size}) => '${heap}MB di memoria disponibile. Un buffer di ${size}MB può influire sulla riproduzione.', 'settings.defaultQualityTitle' => 'Qualità predefinita', - 'settings.defaultQualityDescription' => 'Utilizzato all\'avvio della riproduzione. Valori più bassi riducono la larghezza di banda.', + 'settings.musicQualityTitle' => 'Qualità musicale', 'settings.subtitleStyling' => 'Stile sottotitoli', 'settings.subtitleStylingDescription' => 'Personalizza l\'aspetto dei sottotitoli', 'settings.smallSkipDuration' => 'Durata skip breve', @@ -2357,10 +2335,9 @@ extension on TranslationsIt { 'settings.maxVolumePercent' => ({required Object percent}) => '${percent}%', 'settings.discordRichPresence' => 'Discord Rich Presence', 'settings.discordRichPresenceDescription' => 'Mostra su Discord cosa stai guardando', - 'settings.trakt' => 'Trakt', - 'settings.traktDescription' => 'Sincronizza la cronologia di visione con Trakt', 'settings.services' => 'Servizi', 'settings.servicesDescription' => 'Connetti Trakt, MyAnimeList, Seerr e altro', + 'settings.manageLibrariesDescription' => 'Riordina e nascondi le librerie', 'settings.companionRemoteServer' => 'Server telecomando', 'settings.companionRemoteServerDescription' => 'Consenti ai dispositivi mobili nella tua rete di controllare questa app', 'settings.autoPip' => 'Picture-in-Picture automatico', @@ -2423,7 +2400,6 @@ extension on TranslationsIt { 'settings.showNavBarLabels' => 'Mostra etichette barra di navigazione', 'settings.showNavBarLabelsDescription' => 'Mostra le etichette sotto le icone della barra di navigazione', 'settings.startupSection' => 'Sezione di avvio', - 'settings.startupSectionDescription' => 'Scegli quale sezione apre Plezy all\'avvio', 'settings.liveTvDefaultFavorites' => 'Canali preferiti predefiniti', 'settings.liveTvDefaultFavoritesDescription' => 'Mostra solo i canali preferiti all\'apertura della TV dal vivo', 'settings.display' => 'Schermo', @@ -2435,13 +2411,6 @@ extension on TranslationsIt { 'settings.subtitlesAndConfig' => 'Sottotitoli e configurazione', 'settings.seekAndTiming' => 'Ricerca e tempistica', 'settings.behavior' => 'Comportamento', - 'settings.manageLibrariesDescription' => 'Riordina e nascondi le librerie', - 'settings.visualEffects' => 'Effetti visivi', - 'settings.visualEffectsAuto' => 'Automatico', - 'settings.visualEffectsAutoDescription' => 'Riduci automaticamente gli effetti sui dispositivi a basso consumo', - 'settings.visualEffectsFull' => 'Completi', - 'settings.visualEffectsReduced' => 'Ridotti', - 'settings.visualEffectsReducedDescription' => 'Meno animazioni e immagini a risoluzione inferiore', 'search.hint' => 'Cerca film. spettacoli, musica...', 'search.tryDifferentTerm' => 'Prova altri termini di ricerca', 'search.searchYourMedia' => 'Cerca nei tuoi media', @@ -2518,14 +2487,11 @@ extension on TranslationsIt { 'mediaMenu.playVersion' => 'Riproduci versione...', 'rateSheet.title' => 'Valuta', 'rateSheet.server' => 'Server', - 'rateSheet.starValue' => ({required Object rating}) => '${rating} / 5', - 'rateSheet.scoreValue' => ({required Object score}) => '${score} / 10', - 'rateSheet.setScore' => 'Imposta un punteggio', + 'rateSheet.favorite' => 'Preferito', + 'rateSheet.favorited' => 'Aggiunto ai preferiti', 'rateSheet.saved' => 'Salvato', 'rateSheet.notAvailable' => 'Nessuna corrispondenza trovata', 'rateSheet.noConnectedServices' => 'Connetti un servizio nelle Impostazioni per valutare lì.', - 'rateSheet.favorite' => 'Preferito', - 'rateSheet.favorited' => 'Aggiunto ai preferiti', 'accessibility.mediaCardMovie' => ({required Object title}) => '${title}, film', 'accessibility.mediaCardShow' => ({required Object title}) => '${title}, serie TV', 'accessibility.mediaCardEpisode' => ({required Object title, required Object episodeInfo}) => '${title}, ${episodeInfo}', @@ -2534,6 +2500,14 @@ extension on TranslationsIt { 'accessibility.mediaCardPartiallyWatched' => ({required Object percent}) => '${percent} percento visto', 'accessibility.mediaCardUnwatched' => 'non visto', 'accessibility.tapToPlay' => 'Tocca per riprodurre', + 'accessibility.decrease' => 'Diminuisci', + 'accessibility.increase' => 'Aumenta', + 'accessibility.decreaseValue' => ({required Object label}) => 'Diminuisci ${label}', + 'accessibility.increaseValue' => ({required Object label}) => 'Aumenta ${label}', + 'accessibility.hue' => 'Tonalità', + 'accessibility.saturation' => 'Saturazione', + 'accessibility.brightness' => 'Luminosità', + 'accessibility.hexColor' => 'Colore esadecimale', 'tooltips.shufflePlay' => 'Riproduzione casuale', 'tooltips.playTrailer' => 'Riproduci trailer', 'tooltips.markAsWatched' => 'Segna come visto', @@ -2575,13 +2549,11 @@ extension on TranslationsIt { 'videoControls.settingsButton' => 'Impostazioni di riproduzione', 'videoControls.tracksButton' => 'Audio e sottotitoli', 'videoControls.chaptersButton' => 'Capitoli', - 'videoControls.versionsButton' => 'Versioni video', 'videoControls.versionQualityButton' => 'Versione e qualità', 'videoControls.versionColumnHeader' => 'Versione', 'videoControls.qualityColumnHeader' => 'Qualità', 'videoControls.qualityOriginal' => 'Originale', 'videoControls.qualityPresetLabel' => ({required Object resolution, required Object bitrate}) => '${resolution}p ${bitrate} Mbps', - 'videoControls.qualityBandwidthEstimate' => ({required Object bitrate}) => '~${bitrate} Mbps', 'videoControls.transcodeUnavailableFallback' => 'Transcodifica non disponibile — riproduzione in qualità originale', 'videoControls.pipButton' => 'Modalità Picture-in-Picture', 'videoControls.aspectRatioButton' => 'Proporzioni', @@ -2621,10 +2593,6 @@ extension on TranslationsIt { 'videoControls.subtitleDownloaded' => 'Sottotitolo scaricato', 'videoControls.subtitleDownloadFailed' => 'Impossibile scaricare il sottotitolo', 'videoControls.searchLanguages' => 'Cerca lingue...', - 'userStatus.admin' => 'Admin', - 'userStatus.restricted' => 'Limitato', - 'userStatus.protected' => 'Protetto', - 'userStatus.current' => 'ATTUALE', 'messages.markedAsWatched' => 'Segna come visto', 'messages.markedAsUnwatched' => 'Segna come non visto', 'messages.markedAsWatchedOffline' => 'Segnato come visto (sincronizzato online)', @@ -2634,8 +2602,6 @@ extension on TranslationsIt { 'messages.errorLoading' => ({required Object error}) => 'Errore: ${error}', 'messages.streamInterrupted' => 'La riproduzione si è interrotta. Premi Riproduci o scorri per riprovare.', 'messages.fileInfoNotAvailable' => 'Informazioni sul file non disponibili', - _ => null, - } ?? switch (path) { 'messages.errorLoadingFileInfo' => ({required Object error}) => 'Errore caricamento informazioni sul file: ${error}', 'messages.errorLoadingSeries' => 'Errore caricamento serie', 'messages.musicNotSupported' => 'La riproduzione musicale non è ancora supportata', @@ -2643,6 +2609,8 @@ extension on TranslationsIt { 'messages.noProfilesAvailable' => 'Nessun profilo disponibile', 'messages.contactAdminForProfiles' => 'Contatta l\'amministratore del server per aggiungere profili', 'messages.unableToDetermineLibrarySection' => 'Impossibile determinare la sezione della libreria per questo elemento', + _ => null, + } ?? switch (path) { 'messages.logsCleared' => 'Log eliminati', 'messages.logsCopied' => 'Log copiati negli appunti', 'messages.noLogsAvailable' => 'Nessun log disponibile', @@ -2759,7 +2727,6 @@ extension on TranslationsIt { 'profiles.pinExplain' => 'PIN a 4 cifre richiesto per cambiare profilo.', 'profiles.continueButton' => 'Continua', 'profiles.pinsDontMatch' => 'I PIN non corrispondono', - 'profiles.initializeServicesFailed' => 'Impossibile inizializzare i servizi profilo', 'connections.sectionTitle' => 'Connessioni', 'connections.addConnection' => 'Aggiungi connessione', 'connections.addConnectionSubtitleNoProfile' => 'Accedi con Plex o collega un server Jellyfin', @@ -2770,7 +2737,6 @@ extension on TranslationsIt { 'connections.editJellyfinTitle' => 'Modifica connessione Jellyfin', 'connections.editJellyfinIntro' => ({required Object serverName}) => 'Aggiungi o rimuovi URL per ${serverName}. Plezy userà l\'URL raggiungibile con la latenza più bassa.', 'discover.title' => 'Esplora', - 'discover.switchProfile' => 'Cambia profilo', 'discover.noContentAvailable' => 'Nessun contenuto disponibile', 'discover.addMediaToLibraries' => 'Aggiungi alcuni file multimediali alle tue librerie', 'discover.continueWatching' => 'Continua a guardare', @@ -2797,8 +2763,6 @@ extension on TranslationsIt { 'errors.connectionFailed' => 'Impossibile connettersi al server multimediale', 'errors.failedToLoad' => ({required Object context, required Object error}) => 'Impossibile caricare ${context}: ${error}', 'errors.noClientAvailable' => 'Nessun client disponibile', - 'errors.authenticationFailed' => ({required Object error}) => 'Autenticazione fallita: ${error}', - 'errors.couldNotLaunchUrl' => 'Impossibile avviare URL di autenticazione', 'errors.pleaseEnterToken' => 'Inserisci token', 'errors.invalidToken' => 'Token non valido', 'errors.failedToVerifyToken' => ({required Object error}) => 'Verifica token fallita: ${error}', @@ -2823,6 +2787,8 @@ extension on TranslationsIt { 'libraries.allLibrariesHidden' => 'Tutte le librerie sono nascoste', 'libraries.hiddenLibrariesCount' => ({required Object count}) => 'Librerie nascoste (${count})', 'libraries.thisLibraryIsEmpty' => 'Questa libreria è vuota', + 'libraries.noItemsMatchFilters' => 'Nessun elemento corrisponde ai filtri attivi', + 'libraries.resetFilters' => 'Reimposta filtri', 'libraries.all' => 'Tutto', 'libraries.clearAll' => 'Cancella tutto', 'libraries.scanLibraryConfirm' => ({required Object title}) => 'Sei sicuro di voler scansionare "${title}"?', @@ -2871,7 +2837,6 @@ extension on TranslationsIt { 'libraries.sortLabels.communityRating' => 'Valutazione della community', 'libraries.sortLabels.criticRating' => 'Valutazione critica', 'libraries.sortLabels.userRating' => 'Valutazione utente', - 'libraries.sortLabels.lastPlayed' => 'Ultima riproduzione', 'libraries.sortLabels.datePlayed' => 'Data di riproduzione', 'libraries.sortLabels.playCount' => 'Riproduzioni', 'libraries.sortLabels.productionYear' => 'Anno di produzione', @@ -2885,14 +2850,11 @@ extension on TranslationsIt { 'libraries.sortLabels.dateShared' => 'Data di condivisione', 'libraries.sortLabels.latestEpisodeAirDate' => 'Data ultima messa in onda', 'libraries.sortLabels.lastEpisodeDateAdded' => 'Data aggiunta ultimo episodio', - 'libraries.noItemsMatchFilters' => 'Nessun elemento corrisponde ai filtri attivi', - 'libraries.resetFilters' => 'Reimposta filtri', 'about.title' => 'Informazioni', 'about.openSourceLicenses' => 'Licenze Open Source', 'about.versionLabel' => ({required Object version}) => 'Versione ${version}', 'about.appDescription' => 'Un bellissimo client Plex e Jellyfin per Flutter', 'about.viewLicensesDescription' => 'Visualizza le licenze delle librerie di terze parti', - 'serverSelection.allServerConnectionsFailed' => 'Impossibile connettersi ai server. Controlla la rete.', 'serverSelection.noServersFoundForAccount' => ({required Object username, required Object email}) => 'Nessun server trovato per ${username} (${email})', 'serverSelection.failedToLoadServers' => ({required Object error}) => 'Impossibile caricare i server: ${error}', 'hubDetail.title' => 'Titolo', @@ -2926,10 +2888,6 @@ extension on TranslationsIt { 'explore.rows.trending' => 'Di tendenza', 'explore.rows.upcomingMovies' => 'Film in arrivo', 'explore.rows.upcomingShows' => 'Serie TV in arrivo', - 'explore.searchHint' => ({required Object source}) => 'Cerca su ${source}', - 'explore.searchEmpty' => ({required Object query}) => 'Nessun risultato per "${query}"', - 'explore.searchPrompt' => ({required Object source}) => 'Cerca film e serie TV su ${source}.', - 'explore.searchFailed' => 'Ricerca fallita. Controlla la connessione e riprova.', 'explore.status.airing' => 'In onda', 'explore.status.ended' => 'Conclusa', 'explore.status.canceled' => 'Cancellata', @@ -2942,14 +2900,19 @@ extension on TranslationsIt { 'explore.watchlistUpdateFailed' => 'Impossibile aggiornare la Watchlist', 'explore.notInLibrary' => 'Non è nella tua libreria', 'explore.inTheseLibraries' => 'In queste librerie', - 'explore.availableOn' => ({required Object server}) => 'Disponibile su ${server}', 'explore.checkingLibrary' => 'Controllo della tua libreria...', 'explore.emptyTitle' => 'Ancora niente qui', 'explore.emptyMessage' => ({required Object source}) => 'Le righe da ${source} appariranno qui una volta che avranno dei contenuti.', + 'explore.searchHint' => ({required Object source}) => 'Cerca su ${source}', + 'explore.searchEmpty' => ({required Object query}) => 'Nessun risultato per "${query}"', + 'explore.searchPrompt' => ({required Object source}) => 'Cerca film e serie TV su ${source}.', + 'explore.searchFailed' => 'Ricerca fallita. Controlla la connessione e riprova.', 'liveTv.title' => 'TV in diretta', 'liveTv.guide' => 'Guida', 'liveTv.noChannels' => 'Nessun canale disponibile', 'liveTv.noDvr' => 'Nessun DVR configurato su nessun server', + 'liveTv.serverUnavailable' => 'Il server TV in diretta non è disponibile.', + 'liveTv.serverNotConnected' => 'Il server TV in diretta non è connesso.', 'liveTv.noPrograms' => 'Nessun dato di programma disponibile', 'liveTv.liveStreamFailed' => 'Streaming live non riuscito', 'liveTv.unknownProgram' => 'Programma sconosciuto', @@ -2985,7 +2948,6 @@ extension on TranslationsIt { 'liveTv.scheduledRecordings' => 'Programmate', 'liveTv.recordingRules' => 'Regole di registrazione', 'liveTv.noScheduledRecordings' => 'Nessuna registrazione programmata', - 'liveTv.noRecordingRules' => 'Nessuna regola di registrazione', 'liveTv.manageRecording' => 'Gestisci registrazione', 'liveTv.cancelRecording' => 'Annulla registrazione', 'liveTv.cancelRecordingTitle' => 'Annullare questa registrazione?', @@ -3002,7 +2964,6 @@ extension on TranslationsIt { 'liveTv.recordingCancelled' => 'Registrazione annullata', 'liveTv.recordingRuleDeleted' => 'Regola di registrazione eliminata', 'liveTv.processRecordingRules' => 'Rivaluta regole', - 'liveTv.loadingRecordings' => 'Caricamento registrazioni...', 'liveTv.recordingInProgress' => 'Registrazione in corso', 'liveTv.recordingsCount' => ({required Object count}) => '${count} programmate', 'liveTv.editRule' => 'Modifica regola', @@ -3014,7 +2975,6 @@ extension on TranslationsIt { 'collections.title' => 'Raccolte', 'collections.collection' => 'Raccolta', 'collections.empty' => 'La raccolta è vuota', - 'collections.unknownLibrarySection' => 'Impossibile eliminare: sezione libreria sconosciuta', 'collections.deleteCollection' => 'Elimina raccolta', 'collections.deleteConfirm' => ({required Object title}) => 'Eliminare "${title}"? Non si può annullare.', 'collections.deleted' => 'Raccolta eliminata', @@ -3052,6 +3012,7 @@ extension on TranslationsIt { 'playlists.itemAdded' => 'Aggiunto alla playlist', 'playlists.itemRemoved' => 'Rimosso dalla playlist', 'playlists.selectPlaylist' => 'Seleziona playlist', + 'playlists.searchPlaylists' => 'Cerca playlist...', 'playlists.errorCreating' => 'Errore durante la creazione della playlist', 'playlists.errorDeleting' => 'Errore durante l\'eliminazione della playlist', 'playlists.errorLoading' => 'Errore durante il caricamento delle playlist', @@ -3134,22 +3095,20 @@ extension on TranslationsIt { 'watchTogether.participantResumed' => ({required Object name}) => '${name} ha ripreso', 'watchTogether.participantSeeked' => ({required Object name}) => '${name} ha cercato', 'watchTogether.participantBuffering' => ({required Object name}) => '${name} sta caricando', + 'watchTogether.participantNeedsUpdate' => ({required Object name}) => '${name} usa una versione precedente dell\'app — sincronizzazione non disponibile', + 'watchTogether.resumingWithout' => ({required Object name}) => 'Ripresa senza ${name}', 'watchTogether.waitingForParticipants' => 'In attesa che gli altri carichino...', + 'watchTogether.waitingForName' => ({required Object name}) => 'In attesa di ${name}...', 'watchTogether.recentRooms' => 'Stanze recenti', 'watchTogether.renameRoom' => 'Rinomina stanza', 'watchTogether.removeRoom' => 'Rimuovi', 'watchTogether.guestSwitchUnavailable' => 'Impossibile cambiare — server non disponibile per la sincronizzazione', 'watchTogether.guestSwitchFailed' => 'Impossibile cambiare — contenuto non trovato su questo server', - 'watchTogether.participantNeedsUpdate' => ({required Object name}) => '${name} usa una versione precedente dell\'app — sincronizzazione non disponibile', - 'watchTogether.resumingWithout' => ({required Object name}) => 'Ripresa senza ${name}', - 'watchTogether.waitingForName' => ({required Object name}) => 'In attesa di ${name}...', 'downloads.title' => 'Download', 'downloads.manage' => 'Gestisci', 'downloads.tvShows' => 'Serie TV', 'downloads.movies' => 'Film', 'downloads.music' => 'Musica', - _ => null, - } ?? switch (path) { 'downloads.tracksQueued' => ({required Object count}) => '${count} brani in coda per il download', 'downloads.noDownloads' => 'Nessun download', 'downloads.noDownloadsDescription' => 'I contenuti scaricati appariranno qui per la visualizzazione offline', @@ -3164,6 +3123,8 @@ extension on TranslationsIt { 'downloads.deleteConfirm' => ({required Object title}) => 'Eliminare "${title}" da questo dispositivo?', 'downloads.cancelledDownloadTitle' => 'Download annullato', 'downloads.cancelledDownloadMessage' => 'Questo download è stato annullato. Cosa vuoi fare?', + _ => null, + } ?? switch (path) { 'downloads.allEpisodesAlreadyDownloaded' => 'Tutti gli episodi sono già stati scaricati', 'downloads.resumeDownload' => 'Riprendi download', 'downloads.cancelledDownload' => 'Download annullato', @@ -3187,7 +3148,6 @@ extension on TranslationsIt { 'downloads.customAmount' => 'Quantità personalizzata...', 'downloads.includeSpecials' => 'Includi gli speciali', 'downloads.howManyEpisodes' => 'Quanti episodi?', - 'downloads.itemsQueued' => ({required Object count}) => '${count} elementi in coda per il download', 'downloads.keepSynced' => 'Mantieni sincronizzato', 'downloads.downloadOnce' => 'Scarica una volta', 'downloads.keepNUnwatched' => ({required Object count}) => 'Mantieni ${count} non visti', @@ -3231,7 +3191,6 @@ extension on TranslationsIt { 'companionRemote.connectedTo' => ({required Object name}) => 'Connesso a ${name}', 'companionRemote.unknownDevice' => 'Dispositivo sconosciuto', 'companionRemote.session.startingServer' => 'Avvio del server remoto...', - 'companionRemote.session.failedToCreate' => 'Impossibile avviare il server remoto:', 'companionRemote.session.hostAddress' => 'Indirizzo host', 'companionRemote.session.connected' => 'Connesso', 'companionRemote.session.serverRunning' => 'Server remoto attivo', @@ -3286,6 +3245,8 @@ extension on TranslationsIt { 'companionRemote.remote.searchHint' => 'Cerca sul desktop...', 'companionRemote.errors.noNetworkInterface' => 'Nessuna interfaccia di rete trovata', 'companionRemote.errors.authenticationFailed' => 'Autenticazione non riuscita', + 'companionRemote.errors.serverStartFailed' => ({required Object error}) => 'Impossibile avviare il server remoto: ${error}', + 'companionRemote.errors.commandFailed' => ({required Object error}) => 'Impossibile inviare il comando remoto: ${error}', 'companionRemote.errors.joinTimedOut' => 'Tempo scaduto durante l’accesso alla sessione', 'companionRemote.errors.failedToConnectAnyAddress' => 'Impossibile connettersi a qualsiasi indirizzo', 'companionRemote.errors.connectionLostAfterAttempts' => ({required Object attempts}) => 'Connessione persa dopo ${attempts} tentativi', @@ -3530,7 +3491,6 @@ extension on TranslationsIt { 'addServer.quickConnectFailed' => ({required Object error}) => 'Quick Connect non riuscito: ${error}', 'addServer.addPlexTitle' => 'Accedi con Plex', 'addServer.pinExpired' => 'PIN scaduto prima dell\'accesso. Riprova.', - 'addServer.duplicatePlexAccount' => 'Accesso a Plex già effettuato. Esci per cambiare account.', 'addServer.failedToRegisterAccount' => ({required Object error}) => 'Registrazione account non riuscita: ${error}', 'addServer.enterJellyfinUrlError' => 'Inserisci l\'URL del tuo server Jellyfin', 'addServer.addConnectionTitle' => 'Aggiungi connessione', diff --git a/lib/i18n/strings_ja.g.dart b/lib/i18n/strings_ja.g.dart index f026bfb7..5177ee1f 100644 --- a/lib/i18n/strings_ja.g.dart +++ b/lib/i18n/strings_ja.g.dart @@ -53,7 +53,6 @@ class TranslationsJa extends Translations with BaseTranslations 'サインイン'; @override String get signInWithPlex => 'Plexでサインイン'; @override String get showQRCode => 'QRコードを表示'; @override String get authenticate => '認証'; @@ -167,10 +165,8 @@ class _TranslationsCommonJa extends TranslationsCommonEn { @override String episodeNumberTitle({required Object number, required Object title}) => 'エピソード${number} - ${title}'; @override String chapterNumber({required Object number}) => 'チャプター${number}'; @override String get reconnect => '再接続'; - @override String get exit => '終了'; @override String get viewAll => 'すべて表示'; @override String get checkingNetwork => 'ネットワークを確認中...'; - @override String get refreshingServers => 'サーバーを更新中...'; @override String get loadingServers => 'サーバーを読み込み中...'; @override String get connectingToServers => 'サーバーに接続中...'; @override String get startingOfflineMode => 'オフラインモードを開始中...'; @@ -271,6 +267,12 @@ class _TranslationsSettingsJa extends TranslationsSettingsEn { @override String get tvFullCardLayoutDescription => 'TVカードを画像のみで表示し、俳優名を重ねて表示します'; @override String get focusGlow => 'フォーカス時の光彩'; @override String get focusGlowDescription => 'フォーカス中のカードの周りに柔らかい光彩を表示します'; + @override String get visualEffects => '視覚効果'; + @override String get visualEffectsAuto => '自動'; + @override String get visualEffectsAutoDescription => '低性能なデバイスでは効果を自動的に減らします'; + @override String get visualEffectsFull => 'フル'; + @override String get visualEffectsReduced => '軽減'; + @override String get visualEffectsReducedDescription => 'アニメーションを減らし、低解像度のアートワークを使用します'; @override String get hideSpoilers => '未視聴エピソードのネタバレを非表示'; @override String get hideSpoilersDescription => '未視聴エピソードのサムネイルと説明をぼかします'; @override String get playerBackend => 'プレーヤーバックエンド'; @@ -283,7 +285,7 @@ class _TranslationsSettingsJa extends TranslationsSettingsEn { @override String get bufferSizeAuto => '自動(推奨)'; @override String bufferSizeWarning({required Object heap, required Object size}) => '${heap}MBのメモリが利用可能です。${size}MBのバッファは再生に影響する可能性があります。'; @override String get defaultQualityTitle => 'デフォルト画質'; - @override String get defaultQualityDescription => '再生開始時に使用。低い値ほど帯域幅が削減されます。'; + @override String get musicQualityTitle => '音楽の音質'; @override String get subtitleStyling => '字幕スタイル'; @override String get subtitleStylingDescription => '字幕の外観をカスタマイズ'; @override String get smallSkipDuration => '短いスキップ時間'; @@ -377,10 +379,9 @@ class _TranslationsSettingsJa extends TranslationsSettingsEn { @override String maxVolumePercent({required Object percent}) => '${percent}%'; @override String get discordRichPresence => 'Discord Rich Presence'; @override String get discordRichPresenceDescription => 'Discordで視聴中の内容を表示'; - @override String get trakt => 'Trakt'; - @override String get traktDescription => '視聴履歴を Trakt と同期'; @override String get services => 'サービス'; @override String get servicesDescription => 'Trakt、MyAnimeList、Seerr などを接続'; + @override String get manageLibrariesDescription => 'ライブラリを並べ替えたり非表示にしたりできます'; @override String get companionRemoteServer => 'コンパニオンリモートサーバー'; @override String get companionRemoteServerDescription => 'ネットワーク上のモバイルデバイスからこのアプリを操作できるようにする'; @override String get autoPip => '自動ピクチャーインピクチャー'; @@ -443,7 +444,6 @@ class _TranslationsSettingsJa extends TranslationsSettingsEn { @override String get showNavBarLabels => 'ナビゲーションバーラベルを表示'; @override String get showNavBarLabelsDescription => 'ナビゲーションバーアイコンの下にテキストラベルを表示'; @override String get startupSection => '起動時のセクション'; - @override String get startupSectionDescription => '起動時に Plezy が開くセクションを選択します'; @override String get liveTvDefaultFavorites => 'お気に入りチャンネルをデフォルトに'; @override String get liveTvDefaultFavoritesDescription => 'ライブTV を開いたときにお気に入りチャンネルのみ表示'; @override String get display => 'ディスプレイ'; @@ -455,13 +455,6 @@ class _TranslationsSettingsJa extends TranslationsSettingsEn { @override String get subtitlesAndConfig => '字幕と設定'; @override String get seekAndTiming => 'シークとタイミング'; @override String get behavior => '動作'; - @override String get manageLibrariesDescription => 'ライブラリを並べ替えたり非表示にしたりできます'; - @override String get visualEffects => '視覚効果'; - @override String get visualEffectsAuto => '自動'; - @override String get visualEffectsAutoDescription => '低性能なデバイスでは効果を自動的に減らします'; - @override String get visualEffectsFull => 'フル'; - @override String get visualEffectsReduced => '軽減'; - @override String get visualEffectsReducedDescription => 'アニメーションを減らし、低解像度のアートワークを使用します'; } // Path: search @@ -559,14 +552,11 @@ class _TranslationsRateSheetJa extends TranslationsRateSheetEn { // Translations @override String get title => '評価'; @override String get server => 'サーバー'; - @override String starValue({required Object rating}) => '${rating} / 5'; - @override String scoreValue({required Object score}) => '${score} / 10'; - @override String get setScore => 'スコアを設定'; + @override String get favorite => 'お気に入り'; + @override String get favorited => 'お気に入りに追加済み'; @override String get saved => '保存済み'; @override String get notAvailable => '一致なし'; @override String get noConnectedServices => '評価するには、設定でサービスを接続してください。'; - @override String get favorite => 'お気に入り'; - @override String get favorited => 'お気に入りに追加済み'; } // Path: accessibility @@ -584,6 +574,14 @@ class _TranslationsAccessibilityJa extends TranslationsAccessibilityEn { @override String mediaCardPartiallyWatched({required Object percent}) => '${percent}パーセント視聴済み'; @override String get mediaCardUnwatched => '未視聴'; @override String get tapToPlay => 'タップして再生'; + @override String get decrease => '下げる'; + @override String get increase => '上げる'; + @override String decreaseValue({required Object label}) => '${label}を下げる'; + @override String increaseValue({required Object label}) => '${label}を上げる'; + @override String get hue => '色相'; + @override String get saturation => '彩度'; + @override String get brightness => '明るさ'; + @override String get hexColor => '16進カラー'; } // Path: tooltips @@ -643,13 +641,11 @@ class _TranslationsVideoControlsJa extends TranslationsVideoControlsEn { @override String get settingsButton => '再生設定'; @override String get tracksButton => '音声と字幕'; @override String get chaptersButton => 'チャプター'; - @override String get versionsButton => '動画バージョン'; @override String get versionQualityButton => 'バージョンと画質'; @override String get versionColumnHeader => 'バージョン'; @override String get qualityColumnHeader => '画質'; @override String get qualityOriginal => 'オリジナル'; @override String qualityPresetLabel({required Object resolution, required Object bitrate}) => '${resolution}p ${bitrate} Mbps'; - @override String qualityBandwidthEstimate({required Object bitrate}) => '~${bitrate} Mbps'; @override String get transcodeUnavailableFallback => 'トランスコードは利用できません — オリジナル画質で再生中'; @override String get pipButton => 'ピクチャーインピクチャーモード'; @override String get aspectRatioButton => 'アスペクト比'; @@ -685,19 +681,6 @@ class _TranslationsVideoControlsJa extends TranslationsVideoControlsEn { @override String get searchLanguages => '言語を検索...'; } -// Path: userStatus -class _TranslationsUserStatusJa extends TranslationsUserStatusEn { - _TranslationsUserStatusJa._(TranslationsJa root) : this._root = root, super.internal(root); - - final TranslationsJa _root; // ignore: unused_field - - // Translations - @override String get admin => '管理者'; - @override String get restricted => '制限付き'; - @override String get protected => '保護済み'; - @override String get current => '現在'; -} - // Path: messages class _TranslationsMessagesJa extends TranslationsMessagesEn { _TranslationsMessagesJa._(TranslationsJa root) : this._root = root, super.internal(root); @@ -873,7 +856,6 @@ class _TranslationsProfilesJa extends TranslationsProfilesEn { @override String get pinExplain => 'プロフィール切り替えには4桁のPINが必要です。'; @override String get continueButton => '続ける'; @override String get pinsDontMatch => 'PINが一致しません'; - @override String get initializeServicesFailed => 'プロフィールサービスの初期化に失敗しました'; } // Path: connections @@ -902,7 +884,6 @@ class _TranslationsDiscoverJa extends TranslationsDiscoverEn { // Translations @override String get title => '探す'; - @override String get switchProfile => 'プロフィール切替'; @override String get noContentAvailable => 'コンテンツがありません'; @override String get addMediaToLibraries => 'ライブラリにメディアを追加してください'; @override String get continueWatching => '視聴を続ける'; @@ -938,8 +919,6 @@ class _TranslationsErrorsJa extends TranslationsErrorsEn { @override String get connectionFailed => 'メディアサーバーに接続できません'; @override String failedToLoad({required Object context, required Object error}) => '${context}の読み込みに失敗しました: ${error}'; @override String get noClientAvailable => 'クライアントが利用できません'; - @override String authenticationFailed({required Object error}) => '認証に失敗しました: ${error}'; - @override String get couldNotLaunchUrl => '認証URLを開けませんでした'; @override String get pleaseEnterToken => 'トークンを入力してください'; @override String get invalidToken => '無効なトークン'; @override String failedToVerifyToken({required Object error}) => 'トークンの検証に失敗しました: ${error}'; @@ -973,6 +952,8 @@ class _TranslationsLibrariesJa extends TranslationsLibrariesEn { @override String get allLibrariesHidden => 'すべてのライブラリが非表示です'; @override String hiddenLibrariesCount({required Object count}) => '非表示のライブラリ (${count})'; @override String get thisLibraryIsEmpty => 'このライブラリは空です'; + @override String get noItemsMatchFilters => '有効なフィルターに一致する項目はありません'; + @override String get resetFilters => 'フィルターをリセット'; @override String get all => 'すべて'; @override String get clearAll => 'すべてクリア'; @override String scanLibraryConfirm({required Object title}) => '"${title}"をスキャンしてもよろしいですか?'; @@ -998,8 +979,6 @@ class _TranslationsLibrariesJa extends TranslationsLibrariesEn { @override late final _TranslationsLibrariesGroupingsJa groupings = _TranslationsLibrariesGroupingsJa._(_root); @override late final _TranslationsLibrariesFilterCategoriesJa filterCategories = _TranslationsLibrariesFilterCategoriesJa._(_root); @override late final _TranslationsLibrariesSortLabelsJa sortLabels = _TranslationsLibrariesSortLabelsJa._(_root); - @override String get noItemsMatchFilters => '有効なフィルターに一致する項目はありません'; - @override String get resetFilters => 'フィルターをリセット'; } // Path: about @@ -1023,7 +1002,6 @@ class _TranslationsServerSelectionJa extends TranslationsServerSelectionEn { final TranslationsJa _root; // ignore: unused_field // Translations - @override String get allServerConnectionsFailed => 'どのサーバーにも接続できませんでした。ネットワークを確認してください。'; @override String noServersFoundForAccount({required Object username, required Object email}) => '${username} (${email})のサーバーが見つかりません'; @override String failedToLoadServers({required Object error}) => 'サーバーの読み込みに失敗しました: ${error}'; } @@ -1090,10 +1068,6 @@ class _TranslationsExploreJa extends TranslationsExploreEn { @override String get title => '探索'; @override String get selectSource => 'ソースを選択'; @override late final _TranslationsExploreRowsJa rows = _TranslationsExploreRowsJa._(_root); - @override String searchHint({required Object source}) => '${source} で検索'; - @override String searchEmpty({required Object query}) => '「${query}」の結果が見つかりません'; - @override String searchPrompt({required Object source}) => '${source} で映画やテレビ番組を検索します。'; - @override String get searchFailed => '検索に失敗しました。接続を確認してもう一度お試しください。'; @override late final _TranslationsExploreStatusJa status = _TranslationsExploreStatusJa._(_root); @override String episodeCount({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('ja'))(n, other: '${n} 話', @@ -1105,10 +1079,13 @@ class _TranslationsExploreJa extends TranslationsExploreEn { @override String get watchlistUpdateFailed => 'ウォッチリストを更新できませんでした'; @override String get notInLibrary => 'ライブラリにありません'; @override String get inTheseLibraries => 'これらのライブラリにあります'; - @override String availableOn({required Object server}) => '${server}で視聴可能'; @override String get checkingLibrary => 'ライブラリを確認中...'; @override String get emptyTitle => 'まだ何もありません'; @override String emptyMessage({required Object source}) => '${source}にコンテンツが追加されると、ここに表示されます。'; + @override String searchHint({required Object source}) => '${source} で検索'; + @override String searchEmpty({required Object query}) => '「${query}」の結果が見つかりません'; + @override String searchPrompt({required Object source}) => '${source} で映画やテレビ番組を検索します。'; + @override String get searchFailed => '検索に失敗しました。接続を確認してもう一度お試しください。'; } // Path: liveTv @@ -1122,6 +1099,8 @@ class _TranslationsLiveTvJa extends TranslationsLiveTvEn { @override String get guide => '番組表'; @override String get noChannels => 'チャンネルがありません'; @override String get noDvr => 'どのサーバーにもDVRが設定されていません'; + @override String get serverUnavailable => 'ライブTVサーバーを利用できません。'; + @override String get serverNotConnected => 'ライブTVサーバーに接続されていません。'; @override String get noPrograms => '番組データがありません'; @override String get liveStreamFailed => 'ライブストリームに失敗しました'; @override String get unknownProgram => '不明な番組'; @@ -1157,7 +1136,6 @@ class _TranslationsLiveTvJa extends TranslationsLiveTvEn { @override String get scheduledRecordings => '予約'; @override String get recordingRules => '録画ルール'; @override String get noScheduledRecordings => '予約された録画はありません'; - @override String get noRecordingRules => '録画ルールはまだありません'; @override String get manageRecording => '録画を管理'; @override String get cancelRecording => '録画をキャンセル'; @override String get cancelRecordingTitle => 'この録画をキャンセルしますか?'; @@ -1174,7 +1152,6 @@ class _TranslationsLiveTvJa extends TranslationsLiveTvEn { @override String get recordingCancelled => '録画をキャンセルしました'; @override String get recordingRuleDeleted => '録画ルールを削除しました'; @override String get processRecordingRules => 'ルールを再評価'; - @override String get loadingRecordings => '録画を読み込み中...'; @override String get recordingInProgress => '録画中'; @override String recordingsCount({required Object count}) => '${count} 件予約済み'; @override String get editRule => 'ルールを編集'; @@ -1195,7 +1172,6 @@ class _TranslationsCollectionsJa extends TranslationsCollectionsEn { @override String get title => 'コレクション'; @override String get collection => 'コレクション'; @override String get empty => 'コレクションは空です'; - @override String get unknownLibrarySection => '削除できません:不明なライブラリセクション'; @override String get deleteCollection => 'コレクションを削除'; @override String deleteConfirm({required Object title}) => '「${title}」を削除しますか?元に戻せません。'; @override String get deleted => 'コレクションを削除しました'; @@ -1242,6 +1218,7 @@ class _TranslationsPlaylistsJa extends TranslationsPlaylistsEn { @override String get itemAdded => 'プレイリストに追加しました'; @override String get itemRemoved => 'プレイリストから削除しました'; @override String get selectPlaylist => 'プレイリストを選択'; + @override String get searchPlaylists => 'プレイリストを検索...'; @override String get errorCreating => 'プレイリストの作成に失敗しました'; @override String get errorDeleting => 'プレイリストの削除に失敗しました'; @override String get errorLoading => 'プレイリストの読み込みに失敗しました'; @@ -1344,15 +1321,15 @@ class _TranslationsWatchTogetherJa extends TranslationsWatchTogetherEn { @override String participantResumed({required Object name}) => '${name}が再開しました'; @override String participantSeeked({required Object name}) => '${name}がシークしました'; @override String participantBuffering({required Object name}) => '${name}がバッファリング中'; + @override String participantNeedsUpdate({required Object name}) => '${name} は古いバージョンのアプリを使用しているため、同期できません'; + @override String resumingWithout({required Object name}) => '${name} なしで再開'; @override String get waitingForParticipants => '他の参加者の読み込みを待っています...'; + @override String waitingForName({required Object name}) => '${name}を待っています...'; @override String get recentRooms => '最近のルーム'; @override String get renameRoom => 'ルーム名を変更'; @override String get removeRoom => '削除'; @override String get guestSwitchUnavailable => '切り替えできません — サーバーが同期できません'; @override String get guestSwitchFailed => '切り替えできません — このサーバーにコンテンツが見つかりません'; - @override String participantNeedsUpdate({required Object name}) => '${name} は古いバージョンのアプリを使用しているため、同期できません'; - @override String resumingWithout({required Object name}) => '${name} なしで再開'; - @override String waitingForName({required Object name}) => '${name}を待っています...'; } // Path: downloads @@ -1404,7 +1381,6 @@ class _TranslationsDownloadsJa extends TranslationsDownloadsEn { @override String get customAmount => '数を指定...'; @override String get includeSpecials => 'スペシャルを含める'; @override String get howManyEpisodes => '何エピソード?'; - @override String itemsQueued({required Object count}) => '${count}件をダウンロードキューに追加'; @override String get keepSynced => '同期を維持'; @override String get downloadOnce => '一度だけダウンロード'; @override String keepNUnwatched({required Object count}) => '未視聴を${count}件保持'; @@ -1778,7 +1754,6 @@ class _TranslationsAddServerJa extends TranslationsAddServerEn { @override String quickConnectFailed({required Object error}) => 'Quick Connectに失敗しました: ${error}'; @override String get addPlexTitle => 'Plexでサインイン'; @override String get pinExpired => 'サインイン前にPINの有効期限が切れました。もう一度お試しください。'; - @override String get duplicatePlexAccount => 'すでにPlexにサインインしています。アカウントを切り替えるにはサインアウトしてください。'; @override String failedToRegisterAccount({required Object error}) => 'アカウントの登録に失敗しました: ${error}'; @override String get enterJellyfinUrlError => 'JellyfinサーバーのURLを入力してください'; @override String get addConnectionTitle => '接続を追加'; @@ -1904,7 +1879,6 @@ class _TranslationsLibrariesSortLabelsJa extends TranslationsLibrariesSortLabels @override String get communityRating => 'コミュニティ評価'; @override String get criticRating => '批評家評価'; @override String get userRating => 'ユーザー評価'; - @override String get lastPlayed => '最終再生'; @override String get datePlayed => '再生日'; @override String get playCount => '再生回数'; @override String get productionYear => '製作年'; @@ -1963,7 +1937,6 @@ class _TranslationsCompanionRemoteSessionJa extends TranslationsCompanionRemoteS // Translations @override String get startingServer => 'リモートサーバーを起動中...'; - @override String get failedToCreate => 'リモートサーバーの起動に失敗しました:'; @override String get hostAddress => 'ホストアドレス'; @override String get connected => '接続済み'; @override String get serverRunning => 'リモートサーバー稼働中'; @@ -2045,6 +2018,8 @@ class _TranslationsCompanionRemoteErrorsJa extends TranslationsCompanionRemoteEr // Translations @override String get noNetworkInterface => 'ネットワークインターフェースが見つかりません'; @override String get authenticationFailed => '認証に失敗しました'; + @override String serverStartFailed({required Object error}) => 'リモートサーバーを起動できませんでした: ${error}'; + @override String commandFailed({required Object error}) => 'リモートコマンドを送信できませんでした: ${error}'; @override String get joinTimedOut => 'セッション参加がタイムアウトしました'; @override String get failedToConnectAnyAddress => 'どのアドレスにも接続できませんでした'; @override String connectionLostAfterAttempts({required Object attempts}) => '${attempts}回試行後に接続が切断されました'; @@ -2121,7 +2096,6 @@ extension on TranslationsJa { dynamic _flatMapFunction(String path) { return switch (path) { 'app.title' => 'Plezy', - 'auth.signIn' => 'サインイン', 'auth.signInWithPlex' => 'Plexでサインイン', 'auth.showQRCode' => 'QRコードを表示', 'auth.authenticate' => '認証', @@ -2172,10 +2146,8 @@ extension on TranslationsJa { 'common.episodeNumberTitle' => ({required Object number, required Object title}) => 'エピソード${number} - ${title}', 'common.chapterNumber' => ({required Object number}) => 'チャプター${number}', 'common.reconnect' => '再接続', - 'common.exit' => '終了', 'common.viewAll' => 'すべて表示', 'common.checkingNetwork' => 'ネットワークを確認中...', - 'common.refreshingServers' => 'サーバーを更新中...', 'common.loadingServers' => 'サーバーを読み込み中...', 'common.connectingToServers' => 'サーバーに接続中...', 'common.startingOfflineMode' => 'オフラインモードを開始中...', @@ -2249,6 +2221,12 @@ extension on TranslationsJa { 'settings.tvFullCardLayoutDescription' => 'TVカードを画像のみで表示し、俳優名を重ねて表示します', 'settings.focusGlow' => 'フォーカス時の光彩', 'settings.focusGlowDescription' => 'フォーカス中のカードの周りに柔らかい光彩を表示します', + 'settings.visualEffects' => '視覚効果', + 'settings.visualEffectsAuto' => '自動', + 'settings.visualEffectsAutoDescription' => '低性能なデバイスでは効果を自動的に減らします', + 'settings.visualEffectsFull' => 'フル', + 'settings.visualEffectsReduced' => '軽減', + 'settings.visualEffectsReducedDescription' => 'アニメーションを減らし、低解像度のアートワークを使用します', 'settings.hideSpoilers' => '未視聴エピソードのネタバレを非表示', 'settings.hideSpoilersDescription' => '未視聴エピソードのサムネイルと説明をぼかします', 'settings.playerBackend' => 'プレーヤーバックエンド', @@ -2261,7 +2239,7 @@ extension on TranslationsJa { 'settings.bufferSizeAuto' => '自動(推奨)', 'settings.bufferSizeWarning' => ({required Object heap, required Object size}) => '${heap}MBのメモリが利用可能です。${size}MBのバッファは再生に影響する可能性があります。', 'settings.defaultQualityTitle' => 'デフォルト画質', - 'settings.defaultQualityDescription' => '再生開始時に使用。低い値ほど帯域幅が削減されます。', + 'settings.musicQualityTitle' => '音楽の音質', 'settings.subtitleStyling' => '字幕スタイル', 'settings.subtitleStylingDescription' => '字幕の外観をカスタマイズ', 'settings.smallSkipDuration' => '短いスキップ時間', @@ -2355,10 +2333,9 @@ extension on TranslationsJa { 'settings.maxVolumePercent' => ({required Object percent}) => '${percent}%', 'settings.discordRichPresence' => 'Discord Rich Presence', 'settings.discordRichPresenceDescription' => 'Discordで視聴中の内容を表示', - 'settings.trakt' => 'Trakt', - 'settings.traktDescription' => '視聴履歴を Trakt と同期', 'settings.services' => 'サービス', 'settings.servicesDescription' => 'Trakt、MyAnimeList、Seerr などを接続', + 'settings.manageLibrariesDescription' => 'ライブラリを並べ替えたり非表示にしたりできます', 'settings.companionRemoteServer' => 'コンパニオンリモートサーバー', 'settings.companionRemoteServerDescription' => 'ネットワーク上のモバイルデバイスからこのアプリを操作できるようにする', 'settings.autoPip' => '自動ピクチャーインピクチャー', @@ -2421,7 +2398,6 @@ extension on TranslationsJa { 'settings.showNavBarLabels' => 'ナビゲーションバーラベルを表示', 'settings.showNavBarLabelsDescription' => 'ナビゲーションバーアイコンの下にテキストラベルを表示', 'settings.startupSection' => '起動時のセクション', - 'settings.startupSectionDescription' => '起動時に Plezy が開くセクションを選択します', 'settings.liveTvDefaultFavorites' => 'お気に入りチャンネルをデフォルトに', 'settings.liveTvDefaultFavoritesDescription' => 'ライブTV を開いたときにお気に入りチャンネルのみ表示', 'settings.display' => 'ディスプレイ', @@ -2433,13 +2409,6 @@ extension on TranslationsJa { 'settings.subtitlesAndConfig' => '字幕と設定', 'settings.seekAndTiming' => 'シークとタイミング', 'settings.behavior' => '動作', - 'settings.manageLibrariesDescription' => 'ライブラリを並べ替えたり非表示にしたりできます', - 'settings.visualEffects' => '視覚効果', - 'settings.visualEffectsAuto' => '自動', - 'settings.visualEffectsAutoDescription' => '低性能なデバイスでは効果を自動的に減らします', - 'settings.visualEffectsFull' => 'フル', - 'settings.visualEffectsReduced' => '軽減', - 'settings.visualEffectsReducedDescription' => 'アニメーションを減らし、低解像度のアートワークを使用します', 'search.hint' => '映画、番組、音楽を検索...', 'search.tryDifferentTerm' => '別の検索語をお試しください', 'search.searchYourMedia' => 'メディアを検索', @@ -2516,14 +2485,11 @@ extension on TranslationsJa { 'mediaMenu.playVersion' => 'バージョンを再生...', 'rateSheet.title' => '評価', 'rateSheet.server' => 'サーバー', - 'rateSheet.starValue' => ({required Object rating}) => '${rating} / 5', - 'rateSheet.scoreValue' => ({required Object score}) => '${score} / 10', - 'rateSheet.setScore' => 'スコアを設定', + 'rateSheet.favorite' => 'お気に入り', + 'rateSheet.favorited' => 'お気に入りに追加済み', 'rateSheet.saved' => '保存済み', 'rateSheet.notAvailable' => '一致なし', 'rateSheet.noConnectedServices' => '評価するには、設定でサービスを接続してください。', - 'rateSheet.favorite' => 'お気に入り', - 'rateSheet.favorited' => 'お気に入りに追加済み', 'accessibility.mediaCardMovie' => ({required Object title}) => '${title}、映画', 'accessibility.mediaCardShow' => ({required Object title}) => '${title}、テレビ番組', 'accessibility.mediaCardEpisode' => ({required Object title, required Object episodeInfo}) => '${title}、${episodeInfo}', @@ -2532,6 +2498,14 @@ extension on TranslationsJa { 'accessibility.mediaCardPartiallyWatched' => ({required Object percent}) => '${percent}パーセント視聴済み', 'accessibility.mediaCardUnwatched' => '未視聴', 'accessibility.tapToPlay' => 'タップして再生', + 'accessibility.decrease' => '下げる', + 'accessibility.increase' => '上げる', + 'accessibility.decreaseValue' => ({required Object label}) => '${label}を下げる', + 'accessibility.increaseValue' => ({required Object label}) => '${label}を上げる', + 'accessibility.hue' => '色相', + 'accessibility.saturation' => '彩度', + 'accessibility.brightness' => '明るさ', + 'accessibility.hexColor' => '16進カラー', 'tooltips.shufflePlay' => 'シャッフル再生', 'tooltips.playTrailer' => '予告編を再生', 'tooltips.markAsWatched' => '視聴済みにする', @@ -2573,13 +2547,11 @@ extension on TranslationsJa { 'videoControls.settingsButton' => '再生設定', 'videoControls.tracksButton' => '音声と字幕', 'videoControls.chaptersButton' => 'チャプター', - 'videoControls.versionsButton' => '動画バージョン', 'videoControls.versionQualityButton' => 'バージョンと画質', 'videoControls.versionColumnHeader' => 'バージョン', 'videoControls.qualityColumnHeader' => '画質', 'videoControls.qualityOriginal' => 'オリジナル', 'videoControls.qualityPresetLabel' => ({required Object resolution, required Object bitrate}) => '${resolution}p ${bitrate} Mbps', - 'videoControls.qualityBandwidthEstimate' => ({required Object bitrate}) => '~${bitrate} Mbps', 'videoControls.transcodeUnavailableFallback' => 'トランスコードは利用できません — オリジナル画質で再生中', 'videoControls.pipButton' => 'ピクチャーインピクチャーモード', 'videoControls.aspectRatioButton' => 'アスペクト比', @@ -2619,10 +2591,6 @@ extension on TranslationsJa { 'videoControls.subtitleDownloaded' => '字幕をダウンロードしました', 'videoControls.subtitleDownloadFailed' => '字幕のダウンロードに失敗しました', 'videoControls.searchLanguages' => '言語を検索...', - 'userStatus.admin' => '管理者', - 'userStatus.restricted' => '制限付き', - 'userStatus.protected' => '保護済み', - 'userStatus.current' => '現在', 'messages.markedAsWatched' => '視聴済みにしました', 'messages.markedAsUnwatched' => '未視聴にしました', 'messages.markedAsWatchedOffline' => '視聴済みにしました(オンライン時に同期)', @@ -2632,8 +2600,6 @@ extension on TranslationsJa { 'messages.errorLoading' => ({required Object error}) => 'エラー: ${error}', 'messages.streamInterrupted' => 'ストリームが中断されました。再生を押すかシークして再試行してください。', 'messages.fileInfoNotAvailable' => 'ファイル情報が利用できません', - _ => null, - } ?? switch (path) { 'messages.errorLoadingFileInfo' => ({required Object error}) => 'ファイル情報の読み込みエラー: ${error}', 'messages.errorLoadingSeries' => 'シリーズの読み込みエラー', 'messages.musicNotSupported' => '音楽の再生はまだサポートされていません', @@ -2641,6 +2607,8 @@ extension on TranslationsJa { 'messages.noProfilesAvailable' => '利用可能なプロフィールがありません', 'messages.contactAdminForProfiles' => 'プロファイルを追加するにはサーバー管理者に連絡してください', 'messages.unableToDetermineLibrarySection' => 'このアイテムのライブラリセクションを判別できません', + _ => null, + } ?? switch (path) { 'messages.logsCleared' => 'ログをクリアしました', 'messages.logsCopied' => 'ログをクリップボードにコピーしました', 'messages.noLogsAvailable' => 'ログがありません', @@ -2757,7 +2725,6 @@ extension on TranslationsJa { 'profiles.pinExplain' => 'プロフィール切り替えには4桁のPINが必要です。', 'profiles.continueButton' => '続ける', 'profiles.pinsDontMatch' => 'PINが一致しません', - 'profiles.initializeServicesFailed' => 'プロフィールサービスの初期化に失敗しました', 'connections.sectionTitle' => '接続', 'connections.addConnection' => '接続を追加', 'connections.addConnectionSubtitleNoProfile' => 'Plexでサインインするか、Jellyfinサーバーに接続', @@ -2768,7 +2735,6 @@ extension on TranslationsJa { 'connections.editJellyfinTitle' => 'Jellyfin接続を編集', 'connections.editJellyfinIntro' => ({required Object serverName}) => '${serverName} のURLを追加または削除します。Plezyは到達可能なURLのうち最も低遅延のものを使用します。', 'discover.title' => '探す', - 'discover.switchProfile' => 'プロフィール切替', 'discover.noContentAvailable' => 'コンテンツがありません', 'discover.addMediaToLibraries' => 'ライブラリにメディアを追加してください', 'discover.continueWatching' => '視聴を続ける', @@ -2795,8 +2761,6 @@ extension on TranslationsJa { 'errors.connectionFailed' => 'メディアサーバーに接続できません', 'errors.failedToLoad' => ({required Object context, required Object error}) => '${context}の読み込みに失敗しました: ${error}', 'errors.noClientAvailable' => 'クライアントが利用できません', - 'errors.authenticationFailed' => ({required Object error}) => '認証に失敗しました: ${error}', - 'errors.couldNotLaunchUrl' => '認証URLを開けませんでした', 'errors.pleaseEnterToken' => 'トークンを入力してください', 'errors.invalidToken' => '無効なトークン', 'errors.failedToVerifyToken' => ({required Object error}) => 'トークンの検証に失敗しました: ${error}', @@ -2821,6 +2785,8 @@ extension on TranslationsJa { 'libraries.allLibrariesHidden' => 'すべてのライブラリが非表示です', 'libraries.hiddenLibrariesCount' => ({required Object count}) => '非表示のライブラリ (${count})', 'libraries.thisLibraryIsEmpty' => 'このライブラリは空です', + 'libraries.noItemsMatchFilters' => '有効なフィルターに一致する項目はありません', + 'libraries.resetFilters' => 'フィルターをリセット', 'libraries.all' => 'すべて', 'libraries.clearAll' => 'すべてクリア', 'libraries.scanLibraryConfirm' => ({required Object title}) => '"${title}"をスキャンしてもよろしいですか?', @@ -2869,7 +2835,6 @@ extension on TranslationsJa { 'libraries.sortLabels.communityRating' => 'コミュニティ評価', 'libraries.sortLabels.criticRating' => '批評家評価', 'libraries.sortLabels.userRating' => 'ユーザー評価', - 'libraries.sortLabels.lastPlayed' => '最終再生', 'libraries.sortLabels.datePlayed' => '再生日', 'libraries.sortLabels.playCount' => '再生回数', 'libraries.sortLabels.productionYear' => '製作年', @@ -2883,14 +2848,11 @@ extension on TranslationsJa { 'libraries.sortLabels.dateShared' => '共有日', 'libraries.sortLabels.latestEpisodeAirDate' => '最新エピソード放送日', 'libraries.sortLabels.lastEpisodeDateAdded' => '最新エピソード追加日', - 'libraries.noItemsMatchFilters' => '有効なフィルターに一致する項目はありません', - 'libraries.resetFilters' => 'フィルターをリセット', 'about.title' => 'アプリについて', 'about.openSourceLicenses' => 'オープンソースライセンス', 'about.versionLabel' => ({required Object version}) => 'バージョン ${version}', 'about.appDescription' => 'Flutter製の美しいPlex・Jellyfinクライアント', 'about.viewLicensesDescription' => 'サードパーティライブラリのライセンスを表示', - 'serverSelection.allServerConnectionsFailed' => 'どのサーバーにも接続できませんでした。ネットワークを確認してください。', 'serverSelection.noServersFoundForAccount' => ({required Object username, required Object email}) => '${username} (${email})のサーバーが見つかりません', 'serverSelection.failedToLoadServers' => ({required Object error}) => 'サーバーの読み込みに失敗しました: ${error}', 'hubDetail.title' => 'タイトル', @@ -2924,10 +2886,6 @@ extension on TranslationsJa { 'explore.rows.trending' => 'トレンド', 'explore.rows.upcomingMovies' => '近日公開の映画', 'explore.rows.upcomingShows' => '放送予定の番組', - 'explore.searchHint' => ({required Object source}) => '${source} で検索', - 'explore.searchEmpty' => ({required Object query}) => '「${query}」の結果が見つかりません', - 'explore.searchPrompt' => ({required Object source}) => '${source} で映画やテレビ番組を検索します。', - 'explore.searchFailed' => '検索に失敗しました。接続を確認してもう一度お試しください。', 'explore.status.airing' => '放送中', 'explore.status.ended' => '放送終了', 'explore.status.canceled' => '打ち切り', @@ -2940,14 +2898,19 @@ extension on TranslationsJa { 'explore.watchlistUpdateFailed' => 'ウォッチリストを更新できませんでした', 'explore.notInLibrary' => 'ライブラリにありません', 'explore.inTheseLibraries' => 'これらのライブラリにあります', - 'explore.availableOn' => ({required Object server}) => '${server}で視聴可能', 'explore.checkingLibrary' => 'ライブラリを確認中...', 'explore.emptyTitle' => 'まだ何もありません', 'explore.emptyMessage' => ({required Object source}) => '${source}にコンテンツが追加されると、ここに表示されます。', + 'explore.searchHint' => ({required Object source}) => '${source} で検索', + 'explore.searchEmpty' => ({required Object query}) => '「${query}」の結果が見つかりません', + 'explore.searchPrompt' => ({required Object source}) => '${source} で映画やテレビ番組を検索します。', + 'explore.searchFailed' => '検索に失敗しました。接続を確認してもう一度お試しください。', 'liveTv.title' => 'ライブTV', 'liveTv.guide' => '番組表', 'liveTv.noChannels' => 'チャンネルがありません', 'liveTv.noDvr' => 'どのサーバーにもDVRが設定されていません', + 'liveTv.serverUnavailable' => 'ライブTVサーバーを利用できません。', + 'liveTv.serverNotConnected' => 'ライブTVサーバーに接続されていません。', 'liveTv.noPrograms' => '番組データがありません', 'liveTv.liveStreamFailed' => 'ライブストリームに失敗しました', 'liveTv.unknownProgram' => '不明な番組', @@ -2983,7 +2946,6 @@ extension on TranslationsJa { 'liveTv.scheduledRecordings' => '予約', 'liveTv.recordingRules' => '録画ルール', 'liveTv.noScheduledRecordings' => '予約された録画はありません', - 'liveTv.noRecordingRules' => '録画ルールはまだありません', 'liveTv.manageRecording' => '録画を管理', 'liveTv.cancelRecording' => '録画をキャンセル', 'liveTv.cancelRecordingTitle' => 'この録画をキャンセルしますか?', @@ -3000,7 +2962,6 @@ extension on TranslationsJa { 'liveTv.recordingCancelled' => '録画をキャンセルしました', 'liveTv.recordingRuleDeleted' => '録画ルールを削除しました', 'liveTv.processRecordingRules' => 'ルールを再評価', - 'liveTv.loadingRecordings' => '録画を読み込み中...', 'liveTv.recordingInProgress' => '録画中', 'liveTv.recordingsCount' => ({required Object count}) => '${count} 件予約済み', 'liveTv.editRule' => 'ルールを編集', @@ -3012,7 +2973,6 @@ extension on TranslationsJa { 'collections.title' => 'コレクション', 'collections.collection' => 'コレクション', 'collections.empty' => 'コレクションは空です', - 'collections.unknownLibrarySection' => '削除できません:不明なライブラリセクション', 'collections.deleteCollection' => 'コレクションを削除', 'collections.deleteConfirm' => ({required Object title}) => '「${title}」を削除しますか?元に戻せません。', 'collections.deleted' => 'コレクションを削除しました', @@ -3050,6 +3010,7 @@ extension on TranslationsJa { 'playlists.itemAdded' => 'プレイリストに追加しました', 'playlists.itemRemoved' => 'プレイリストから削除しました', 'playlists.selectPlaylist' => 'プレイリストを選択', + 'playlists.searchPlaylists' => 'プレイリストを検索...', 'playlists.errorCreating' => 'プレイリストの作成に失敗しました', 'playlists.errorDeleting' => 'プレイリストの削除に失敗しました', 'playlists.errorLoading' => 'プレイリストの読み込みに失敗しました', @@ -3132,22 +3093,20 @@ extension on TranslationsJa { 'watchTogether.participantResumed' => ({required Object name}) => '${name}が再開しました', 'watchTogether.participantSeeked' => ({required Object name}) => '${name}がシークしました', 'watchTogether.participantBuffering' => ({required Object name}) => '${name}がバッファリング中', + 'watchTogether.participantNeedsUpdate' => ({required Object name}) => '${name} は古いバージョンのアプリを使用しているため、同期できません', + 'watchTogether.resumingWithout' => ({required Object name}) => '${name} なしで再開', 'watchTogether.waitingForParticipants' => '他の参加者の読み込みを待っています...', + 'watchTogether.waitingForName' => ({required Object name}) => '${name}を待っています...', 'watchTogether.recentRooms' => '最近のルーム', 'watchTogether.renameRoom' => 'ルーム名を変更', 'watchTogether.removeRoom' => '削除', 'watchTogether.guestSwitchUnavailable' => '切り替えできません — サーバーが同期できません', 'watchTogether.guestSwitchFailed' => '切り替えできません — このサーバーにコンテンツが見つかりません', - 'watchTogether.participantNeedsUpdate' => ({required Object name}) => '${name} は古いバージョンのアプリを使用しているため、同期できません', - 'watchTogether.resumingWithout' => ({required Object name}) => '${name} なしで再開', - 'watchTogether.waitingForName' => ({required Object name}) => '${name}を待っています...', 'downloads.title' => 'ダウンロード', 'downloads.manage' => '管理', 'downloads.tvShows' => 'テレビ番組', 'downloads.movies' => '映画', 'downloads.music' => '音楽', - _ => null, - } ?? switch (path) { 'downloads.tracksQueued' => ({required Object count}) => '${count} 曲をダウンロード待機中', 'downloads.noDownloads' => 'ダウンロードなし', 'downloads.noDownloadsDescription' => 'ダウンロードしたコンテンツはここに表示され、オフラインで視聴できます', @@ -3162,6 +3121,8 @@ extension on TranslationsJa { 'downloads.deleteConfirm' => ({required Object title}) => 'このデバイスから「${title}」を削除しますか?', 'downloads.cancelledDownloadTitle' => 'キャンセルされたダウンロード', 'downloads.cancelledDownloadMessage' => 'このダウンロードはキャンセルされました。どうしますか?', + _ => null, + } ?? switch (path) { 'downloads.allEpisodesAlreadyDownloaded' => 'すべてのエピソードはすでにダウンロード済みです', 'downloads.resumeDownload' => 'ダウンロードを再開', 'downloads.cancelledDownload' => 'キャンセルされたダウンロード', @@ -3185,7 +3146,6 @@ extension on TranslationsJa { 'downloads.customAmount' => '数を指定...', 'downloads.includeSpecials' => 'スペシャルを含める', 'downloads.howManyEpisodes' => '何エピソード?', - 'downloads.itemsQueued' => ({required Object count}) => '${count}件をダウンロードキューに追加', 'downloads.keepSynced' => '同期を維持', 'downloads.downloadOnce' => '一度だけダウンロード', 'downloads.keepNUnwatched' => ({required Object count}) => '未視聴を${count}件保持', @@ -3229,7 +3189,6 @@ extension on TranslationsJa { 'companionRemote.connectedTo' => ({required Object name}) => '${name}に接続中', 'companionRemote.unknownDevice' => '不明なデバイス', 'companionRemote.session.startingServer' => 'リモートサーバーを起動中...', - 'companionRemote.session.failedToCreate' => 'リモートサーバーの起動に失敗しました:', 'companionRemote.session.hostAddress' => 'ホストアドレス', 'companionRemote.session.connected' => '接続済み', 'companionRemote.session.serverRunning' => 'リモートサーバー稼働中', @@ -3284,6 +3243,8 @@ extension on TranslationsJa { 'companionRemote.remote.searchHint' => 'デスクトップで検索...', 'companionRemote.errors.noNetworkInterface' => 'ネットワークインターフェースが見つかりません', 'companionRemote.errors.authenticationFailed' => '認証に失敗しました', + 'companionRemote.errors.serverStartFailed' => ({required Object error}) => 'リモートサーバーを起動できませんでした: ${error}', + 'companionRemote.errors.commandFailed' => ({required Object error}) => 'リモートコマンドを送信できませんでした: ${error}', 'companionRemote.errors.joinTimedOut' => 'セッション参加がタイムアウトしました', 'companionRemote.errors.failedToConnectAnyAddress' => 'どのアドレスにも接続できませんでした', 'companionRemote.errors.connectionLostAfterAttempts' => ({required Object attempts}) => '${attempts}回試行後に接続が切断されました', @@ -3528,7 +3489,6 @@ extension on TranslationsJa { 'addServer.quickConnectFailed' => ({required Object error}) => 'Quick Connectに失敗しました: ${error}', 'addServer.addPlexTitle' => 'Plexでサインイン', 'addServer.pinExpired' => 'サインイン前にPINの有効期限が切れました。もう一度お試しください。', - 'addServer.duplicatePlexAccount' => 'すでにPlexにサインインしています。アカウントを切り替えるにはサインアウトしてください。', 'addServer.failedToRegisterAccount' => ({required Object error}) => 'アカウントの登録に失敗しました: ${error}', 'addServer.enterJellyfinUrlError' => 'JellyfinサーバーのURLを入力してください', 'addServer.addConnectionTitle' => '接続を追加', diff --git a/lib/i18n/strings_ko.g.dart b/lib/i18n/strings_ko.g.dart index dcfa32b8..aa94103c 100644 --- a/lib/i18n/strings_ko.g.dart +++ b/lib/i18n/strings_ko.g.dart @@ -53,7 +53,6 @@ class TranslationsKo extends Translations with BaseTranslations '로그인'; @override String get signInWithPlex => 'Plex 계정으로 로그인'; @override String get showQRCode => 'QR 코드'; @override String get authenticate => '인증'; @@ -167,10 +165,8 @@ class _TranslationsCommonKo extends TranslationsCommonEn { @override String episodeNumberTitle({required Object number, required Object title}) => '${number}화 - ${title}'; @override String chapterNumber({required Object number}) => '챕터 ${number}'; @override String get reconnect => '다시 연결'; - @override String get exit => '종료'; @override String get viewAll => '모두 보기'; @override String get checkingNetwork => '네트워크 확인 중...'; - @override String get refreshingServers => '서버 새로고침 중...'; @override String get loadingServers => '서버 로딩 중...'; @override String get connectingToServers => '서버 연결 중...'; @override String get startingOfflineMode => '오프라인 모드 시작 중...'; @@ -289,7 +285,7 @@ class _TranslationsSettingsKo extends TranslationsSettingsEn { @override String get bufferSizeAuto => '자동 (권장)'; @override String bufferSizeWarning({required Object heap, required Object size}) => '${heap}MB 메모리를 사용할 수 있습니다. ${size}MB 버퍼는 재생에 영향을 줄 수 있습니다.'; @override String get defaultQualityTitle => '기본 화질'; - @override String get defaultQualityDescription => '재생 시작 시 사용됩니다. 낮은 값은 대역폭을 줄입니다.'; + @override String get musicQualityTitle => '음악 음질'; @override String get subtitleStyling => '자막 스타일'; @override String get subtitleStylingDescription => '자막의 외형을 사용자 설정'; @override String get smallSkipDuration => '짧은 건너뛰기 시간'; @@ -383,8 +379,6 @@ class _TranslationsSettingsKo extends TranslationsSettingsEn { @override String maxVolumePercent({required Object percent}) => '${percent}%'; @override String get discordRichPresence => 'Discord Rich Presence'; @override String get discordRichPresenceDescription => 'Discord에서 시청 중인 콘텐츠 표시'; - @override String get trakt => 'Trakt'; - @override String get traktDescription => 'Trakt와 시청 기록 동기화'; @override String get services => '서비스'; @override String get servicesDescription => 'Trakt, MyAnimeList, Seerr 등 연결'; @override String get manageLibrariesDescription => '라이브러리 순서를 변경하거나 숨깁니다'; @@ -450,7 +444,6 @@ class _TranslationsSettingsKo extends TranslationsSettingsEn { @override String get showNavBarLabels => '내비게이션 바 라벨 표시'; @override String get showNavBarLabelsDescription => '내비게이션 바 아이콘 아래에 텍스트 라벨을 표시합니다'; @override String get startupSection => '시작 섹션'; - @override String get startupSectionDescription => 'Plezy 실행 시 열릴 섹션을 선택합니다'; @override String get liveTvDefaultFavorites => '즐겨찾기 채널 기본 설정'; @override String get liveTvDefaultFavoritesDescription => '라이브 TV를 열 때 즐겨찾기 채널만 표시'; @override String get display => '디스플레이'; @@ -559,9 +552,6 @@ class _TranslationsRateSheetKo extends TranslationsRateSheetEn { // Translations @override String get title => '평가'; @override String get server => '서버'; - @override String starValue({required Object rating}) => '${rating} / 5'; - @override String scoreValue({required Object score}) => '${score} / 10'; - @override String get setScore => '점수 설정'; @override String get favorite => '즐겨찾기'; @override String get favorited => '즐겨찾기됨'; @override String get saved => '저장됨'; @@ -584,6 +574,14 @@ class _TranslationsAccessibilityKo extends TranslationsAccessibilityEn { @override String mediaCardPartiallyWatched({required Object percent}) => '${percent} 퍼센트 시청 완료'; @override String get mediaCardUnwatched => '미시청'; @override String get tapToPlay => '터치 하여 재생'; + @override String get decrease => '낮추기'; + @override String get increase => '높이기'; + @override String decreaseValue({required Object label}) => '${label} 낮추기'; + @override String increaseValue({required Object label}) => '${label} 높이기'; + @override String get hue => '색조'; + @override String get saturation => '채도'; + @override String get brightness => '밝기'; + @override String get hexColor => '16진수 색상'; } // Path: tooltips @@ -643,13 +641,11 @@ class _TranslationsVideoControlsKo extends TranslationsVideoControlsEn { @override String get settingsButton => '재생 설정'; @override String get tracksButton => '오디오 및 자막'; @override String get chaptersButton => '챕터'; - @override String get versionsButton => '동영상 버전'; @override String get versionQualityButton => '버전 및 화질'; @override String get versionColumnHeader => '버전'; @override String get qualityColumnHeader => '화질'; @override String get qualityOriginal => '원본'; @override String qualityPresetLabel({required Object resolution, required Object bitrate}) => '${resolution}p ${bitrate} Mbps'; - @override String qualityBandwidthEstimate({required Object bitrate}) => '~${bitrate} Mbps'; @override String get transcodeUnavailableFallback => '트랜스코딩을 사용할 수 없음 — 원본 화질로 재생'; @override String get pipButton => '픽처 인 픽처 모드'; @override String get aspectRatioButton => '화면비율'; @@ -685,19 +681,6 @@ class _TranslationsVideoControlsKo extends TranslationsVideoControlsEn { @override String get searchLanguages => '언어 검색...'; } -// Path: userStatus -class _TranslationsUserStatusKo extends TranslationsUserStatusEn { - _TranslationsUserStatusKo._(TranslationsKo root) : this._root = root, super.internal(root); - - final TranslationsKo _root; // ignore: unused_field - - // Translations - @override String get admin => '관리자'; - @override String get restricted => '제한됨'; - @override String get protected => '보호됨'; - @override String get current => '현재'; -} - // Path: messages class _TranslationsMessagesKo extends TranslationsMessagesEn { _TranslationsMessagesKo._(TranslationsKo root) : this._root = root, super.internal(root); @@ -873,7 +856,6 @@ class _TranslationsProfilesKo extends TranslationsProfilesEn { @override String get pinExplain => '프로필 전환에는 4자리 PIN이 필요합니다.'; @override String get continueButton => '계속'; @override String get pinsDontMatch => 'PIN이 일치하지 않습니다'; - @override String get initializeServicesFailed => '프로필 서비스를 초기화하지 못했습니다'; } // Path: connections @@ -902,7 +884,6 @@ class _TranslationsDiscoverKo extends TranslationsDiscoverEn { // Translations @override String get title => '발견'; - @override String get switchProfile => '사용자 전환'; @override String get noContentAvailable => '사용 가능한 콘텐츠가 없습니다'; @override String get addMediaToLibraries => '미디어 라이브러리에 미디어를 추가해 주세요'; @override String get continueWatching => '계속 시청'; @@ -938,8 +919,6 @@ class _TranslationsErrorsKo extends TranslationsErrorsEn { @override String get connectionFailed => '미디어 서버에 연결할 수 없습니다'; @override String failedToLoad({required Object context, required Object error}) => '${context} 로드 실패: ${error}'; @override String get noClientAvailable => '사용 가능한 클라이언트가 없습니다'; - @override String authenticationFailed({required Object error}) => '인증 실패: ${error}'; - @override String get couldNotLaunchUrl => '인증 URL을 열 수 없습니다'; @override String get pleaseEnterToken => '토큰을 입력해 주세요'; @override String get invalidToken => '토큰이 유효하지 않습니다'; @override String failedToVerifyToken({required Object error}) => '토큰을 확인할 수 없습니다: ${error}'; @@ -1023,7 +1002,6 @@ class _TranslationsServerSelectionKo extends TranslationsServerSelectionEn { final TranslationsKo _root; // ignore: unused_field // Translations - @override String get allServerConnectionsFailed => '서버에 연결할 수 없습니다. 네트워크를 확인하세요.'; @override String noServersFoundForAccount({required Object username, required Object email}) => '${username} (${email})의 서버를 찾을 수 없습니다.'; @override String failedToLoadServers({required Object error}) => '서버를 로드할 수 없습니다: ${error}'; } @@ -1090,10 +1068,6 @@ class _TranslationsExploreKo extends TranslationsExploreEn { @override String get title => '탐색'; @override String get selectSource => '소스 선택'; @override late final _TranslationsExploreRowsKo rows = _TranslationsExploreRowsKo._(_root); - @override String searchHint({required Object source}) => '${source}에서 검색'; - @override String searchEmpty({required Object query}) => '「${query}」에 대한 결과가 없습니다'; - @override String searchPrompt({required Object source}) => '${source}에서 영화와 TV 프로그램을 검색하세요.'; - @override String get searchFailed => '검색에 실패했습니다. 연결을 확인하고 다시 시도하세요.'; @override late final _TranslationsExploreStatusKo status = _TranslationsExploreStatusKo._(_root); @override String episodeCount({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('ko'))(n, other: '${n}화', @@ -1105,10 +1079,13 @@ class _TranslationsExploreKo extends TranslationsExploreEn { @override String get watchlistUpdateFailed => '관심 목록을 업데이트하지 못했습니다'; @override String get notInLibrary => '라이브러리에 없음'; @override String get inTheseLibraries => '이 라이브러리에 있음'; - @override String availableOn({required Object server}) => '${server}에서 이용 가능'; @override String get checkingLibrary => '라이브러리 확인 중...'; @override String get emptyTitle => '아직 아무것도 없습니다'; @override String emptyMessage({required Object source}) => '${source}에 콘텐츠가 추가되면 여기에 표시됩니다.'; + @override String searchHint({required Object source}) => '${source}에서 검색'; + @override String searchEmpty({required Object query}) => '「${query}」에 대한 결과가 없습니다'; + @override String searchPrompt({required Object source}) => '${source}에서 영화와 TV 프로그램을 검색하세요.'; + @override String get searchFailed => '검색에 실패했습니다. 연결을 확인하고 다시 시도하세요.'; } // Path: liveTv @@ -1122,6 +1099,8 @@ class _TranslationsLiveTvKo extends TranslationsLiveTvEn { @override String get guide => '편성표'; @override String get noChannels => '사용 가능한 채널이 없습니다'; @override String get noDvr => '서버에 DVR이 구성되어 있지 않습니다'; + @override String get serverUnavailable => '라이브 TV 서버를 사용할 수 없습니다.'; + @override String get serverNotConnected => '라이브 TV 서버에 연결되어 있지 않습니다.'; @override String get noPrograms => '프로그램 데이터가 없습니다'; @override String get liveStreamFailed => '라이브 스트림 실패'; @override String get unknownProgram => '알 수 없는 프로그램'; @@ -1157,7 +1136,6 @@ class _TranslationsLiveTvKo extends TranslationsLiveTvEn { @override String get scheduledRecordings => '예약됨'; @override String get recordingRules => '녹화 규칙'; @override String get noScheduledRecordings => '예약된 녹화 없음'; - @override String get noRecordingRules => '녹화 규칙 없음'; @override String get manageRecording => '녹화 관리'; @override String get cancelRecording => '녹화 취소'; @override String get cancelRecordingTitle => '이 녹화를 취소할까요?'; @@ -1174,7 +1152,6 @@ class _TranslationsLiveTvKo extends TranslationsLiveTvEn { @override String get recordingCancelled => '녹화 취소됨'; @override String get recordingRuleDeleted => '녹화 규칙 삭제됨'; @override String get processRecordingRules => '규칙 재평가'; - @override String get loadingRecordings => '녹화 불러오는 중...'; @override String get recordingInProgress => '녹화 중'; @override String recordingsCount({required Object count}) => '${count}개 예약됨'; @override String get editRule => '규칙 편집'; @@ -1195,7 +1172,6 @@ class _TranslationsCollectionsKo extends TranslationsCollectionsEn { @override String get title => '컬렉션'; @override String get collection => '컬렉션'; @override String get empty => '컬렉션이 비어 있습니다'; - @override String get unknownLibrarySection => '삭제할 수 없습니다: 알 수 없는 미디어 라이브러리 섹션입니다'; @override String get deleteCollection => '컬렉션 삭제'; @override String deleteConfirm({required Object title}) => '"${title}"을(를) 삭제할까요? 되돌릴 수 없습니다.'; @override String get deleted => '컬렉션 삭제됨'; @@ -1242,6 +1218,7 @@ class _TranslationsPlaylistsKo extends TranslationsPlaylistsEn { @override String get itemAdded => '재생 목록에 추가 되었습니다'; @override String get itemRemoved => '재생 목록에서 제거됨'; @override String get selectPlaylist => '재생 목록 선택'; + @override String get searchPlaylists => '재생 목록 검색...'; @override String get errorCreating => '재생 목록 생성 실패'; @override String get errorDeleting => '재생 목록 삭제 실패'; @override String get errorLoading => '재생 목록 로드 실패'; @@ -1404,7 +1381,6 @@ class _TranslationsDownloadsKo extends TranslationsDownloadsEn { @override String get customAmount => '직접 입력...'; @override String get includeSpecials => '스페셜 포함'; @override String get howManyEpisodes => '몇 개의 에피소드?'; - @override String itemsQueued({required Object count}) => '${count}개 항목이 다운로드 대기열에 추가됨'; @override String get keepSynced => '동기화 유지'; @override String get downloadOnce => '한 번만 다운로드'; @override String keepNUnwatched({required Object count}) => '미시청 ${count}개 유지'; @@ -1778,7 +1754,6 @@ class _TranslationsAddServerKo extends TranslationsAddServerEn { @override String quickConnectFailed({required Object error}) => 'Quick Connect 실패: ${error}'; @override String get addPlexTitle => 'Plex로 로그인'; @override String get pinExpired => '로그인 전에 PIN이 만료되었습니다. 다시 시도하세요.'; - @override String get duplicatePlexAccount => '이미 Plex에 로그인되어 있습니다. 계정을 전환하려면 로그아웃하세요.'; @override String failedToRegisterAccount({required Object error}) => '계정 등록 실패: ${error}'; @override String get enterJellyfinUrlError => 'Jellyfin 서버 URL을 입력하세요'; @override String get addConnectionTitle => '연결 추가'; @@ -1904,7 +1879,6 @@ class _TranslationsLibrariesSortLabelsKo extends TranslationsLibrariesSortLabels @override String get communityRating => '커뮤니티 평점'; @override String get criticRating => '평론가 평점'; @override String get userRating => '사용자 평점'; - @override String get lastPlayed => '마지막 재생'; @override String get datePlayed => '재생일'; @override String get playCount => '재생 횟수'; @override String get productionYear => '제작 연도'; @@ -1963,7 +1937,6 @@ class _TranslationsCompanionRemoteSessionKo extends TranslationsCompanionRemoteS // Translations @override String get startingServer => '원격 서버 시작 중...'; - @override String get failedToCreate => '원격 서버를 시작하지 못했습니다:'; @override String get hostAddress => '호스트 주소'; @override String get connected => '연결됨'; @override String get serverRunning => '원격 서버 활성'; @@ -2045,6 +2018,8 @@ class _TranslationsCompanionRemoteErrorsKo extends TranslationsCompanionRemoteEr // Translations @override String get noNetworkInterface => '네트워크 인터페이스를 찾을 수 없습니다'; @override String get authenticationFailed => '인증 실패'; + @override String serverStartFailed({required Object error}) => '원격 서버를 시작하지 못했습니다: ${error}'; + @override String commandFailed({required Object error}) => '원격 명령을 보내지 못했습니다: ${error}'; @override String get joinTimedOut => '세션 참가 시간이 초과되었습니다'; @override String get failedToConnectAnyAddress => '어떤 주소에도 연결하지 못했습니다'; @override String connectionLostAfterAttempts({required Object attempts}) => '${attempts}회 시도 후 연결이 끊어졌습니다'; @@ -2121,7 +2096,6 @@ extension on TranslationsKo { dynamic _flatMapFunction(String path) { return switch (path) { 'app.title' => 'Plezy', - 'auth.signIn' => '로그인', 'auth.signInWithPlex' => 'Plex 계정으로 로그인', 'auth.showQRCode' => 'QR 코드', 'auth.authenticate' => '인증', @@ -2172,10 +2146,8 @@ extension on TranslationsKo { 'common.episodeNumberTitle' => ({required Object number, required Object title}) => '${number}화 - ${title}', 'common.chapterNumber' => ({required Object number}) => '챕터 ${number}', 'common.reconnect' => '다시 연결', - 'common.exit' => '종료', 'common.viewAll' => '모두 보기', 'common.checkingNetwork' => '네트워크 확인 중...', - 'common.refreshingServers' => '서버 새로고침 중...', 'common.loadingServers' => '서버 로딩 중...', 'common.connectingToServers' => '서버 연결 중...', 'common.startingOfflineMode' => '오프라인 모드 시작 중...', @@ -2267,7 +2239,7 @@ extension on TranslationsKo { 'settings.bufferSizeAuto' => '자동 (권장)', 'settings.bufferSizeWarning' => ({required Object heap, required Object size}) => '${heap}MB 메모리를 사용할 수 있습니다. ${size}MB 버퍼는 재생에 영향을 줄 수 있습니다.', 'settings.defaultQualityTitle' => '기본 화질', - 'settings.defaultQualityDescription' => '재생 시작 시 사용됩니다. 낮은 값은 대역폭을 줄입니다.', + 'settings.musicQualityTitle' => '음악 음질', 'settings.subtitleStyling' => '자막 스타일', 'settings.subtitleStylingDescription' => '자막의 외형을 사용자 설정', 'settings.smallSkipDuration' => '짧은 건너뛰기 시간', @@ -2361,8 +2333,6 @@ extension on TranslationsKo { 'settings.maxVolumePercent' => ({required Object percent}) => '${percent}%', 'settings.discordRichPresence' => 'Discord Rich Presence', 'settings.discordRichPresenceDescription' => 'Discord에서 시청 중인 콘텐츠 표시', - 'settings.trakt' => 'Trakt', - 'settings.traktDescription' => 'Trakt와 시청 기록 동기화', 'settings.services' => '서비스', 'settings.servicesDescription' => 'Trakt, MyAnimeList, Seerr 등 연결', 'settings.manageLibrariesDescription' => '라이브러리 순서를 변경하거나 숨깁니다', @@ -2428,7 +2398,6 @@ extension on TranslationsKo { 'settings.showNavBarLabels' => '내비게이션 바 라벨 표시', 'settings.showNavBarLabelsDescription' => '내비게이션 바 아이콘 아래에 텍스트 라벨을 표시합니다', 'settings.startupSection' => '시작 섹션', - 'settings.startupSectionDescription' => 'Plezy 실행 시 열릴 섹션을 선택합니다', 'settings.liveTvDefaultFavorites' => '즐겨찾기 채널 기본 설정', 'settings.liveTvDefaultFavoritesDescription' => '라이브 TV를 열 때 즐겨찾기 채널만 표시', 'settings.display' => '디스플레이', @@ -2516,9 +2485,6 @@ extension on TranslationsKo { 'mediaMenu.playVersion' => '버전 재생...', 'rateSheet.title' => '평가', 'rateSheet.server' => '서버', - 'rateSheet.starValue' => ({required Object rating}) => '${rating} / 5', - 'rateSheet.scoreValue' => ({required Object score}) => '${score} / 10', - 'rateSheet.setScore' => '점수 설정', 'rateSheet.favorite' => '즐겨찾기', 'rateSheet.favorited' => '즐겨찾기됨', 'rateSheet.saved' => '저장됨', @@ -2532,6 +2498,14 @@ extension on TranslationsKo { 'accessibility.mediaCardPartiallyWatched' => ({required Object percent}) => '${percent} 퍼센트 시청 완료', 'accessibility.mediaCardUnwatched' => '미시청', 'accessibility.tapToPlay' => '터치 하여 재생', + 'accessibility.decrease' => '낮추기', + 'accessibility.increase' => '높이기', + 'accessibility.decreaseValue' => ({required Object label}) => '${label} 낮추기', + 'accessibility.increaseValue' => ({required Object label}) => '${label} 높이기', + 'accessibility.hue' => '색조', + 'accessibility.saturation' => '채도', + 'accessibility.brightness' => '밝기', + 'accessibility.hexColor' => '16진수 색상', 'tooltips.shufflePlay' => '무작위 재생', 'tooltips.playTrailer' => '예고편 재생', 'tooltips.markAsWatched' => '시청 완료로 표시', @@ -2573,13 +2547,11 @@ extension on TranslationsKo { 'videoControls.settingsButton' => '재생 설정', 'videoControls.tracksButton' => '오디오 및 자막', 'videoControls.chaptersButton' => '챕터', - 'videoControls.versionsButton' => '동영상 버전', 'videoControls.versionQualityButton' => '버전 및 화질', 'videoControls.versionColumnHeader' => '버전', 'videoControls.qualityColumnHeader' => '화질', 'videoControls.qualityOriginal' => '원본', 'videoControls.qualityPresetLabel' => ({required Object resolution, required Object bitrate}) => '${resolution}p ${bitrate} Mbps', - 'videoControls.qualityBandwidthEstimate' => ({required Object bitrate}) => '~${bitrate} Mbps', 'videoControls.transcodeUnavailableFallback' => '트랜스코딩을 사용할 수 없음 — 원본 화질로 재생', 'videoControls.pipButton' => '픽처 인 픽처 모드', 'videoControls.aspectRatioButton' => '화면비율', @@ -2619,10 +2591,6 @@ extension on TranslationsKo { 'videoControls.subtitleDownloaded' => '자막이 다운로드되었습니다', 'videoControls.subtitleDownloadFailed' => '자막 다운로드에 실패했습니다', 'videoControls.searchLanguages' => '언어 검색...', - 'userStatus.admin' => '관리자', - 'userStatus.restricted' => '제한됨', - 'userStatus.protected' => '보호됨', - 'userStatus.current' => '현재', 'messages.markedAsWatched' => '시청 완료로 표시됨', 'messages.markedAsUnwatched' => '시청 안 함으로 표시됨', 'messages.markedAsWatchedOffline' => '시청 완료로 표시됨 (연결 시 동기화됨)', @@ -2632,8 +2600,6 @@ extension on TranslationsKo { 'messages.errorLoading' => ({required Object error}) => '오류: ${error}', 'messages.streamInterrupted' => '스트림이 중단되었습니다. 재생을 누르거나 탐색하여 다시 시도하세요.', 'messages.fileInfoNotAvailable' => '파일 정보가 없습니다', - _ => null, - } ?? switch (path) { 'messages.errorLoadingFileInfo' => ({required Object error}) => '파일 정보 로딩 중 오류: ${error}', 'messages.errorLoadingSeries' => '시리즈 로딩 중 오류', 'messages.musicNotSupported' => '음악 재생 미지원', @@ -2641,6 +2607,8 @@ extension on TranslationsKo { 'messages.noProfilesAvailable' => '사용 가능한 프로필이 없습니다', 'messages.contactAdminForProfiles' => '프로필을 추가하려면 서버 관리자에게 문의하세요', 'messages.unableToDetermineLibrarySection' => '이 항목의 라이브러리 섹션을 확인할 수 없습니다', + _ => null, + } ?? switch (path) { 'messages.logsCleared' => '로그가 삭제 되었습니다', 'messages.logsCopied' => '로그가 클립보드에 복사 되었습니다', 'messages.noLogsAvailable' => '사용 가능한 로그가 없습니다', @@ -2757,7 +2725,6 @@ extension on TranslationsKo { 'profiles.pinExplain' => '프로필 전환에는 4자리 PIN이 필요합니다.', 'profiles.continueButton' => '계속', 'profiles.pinsDontMatch' => 'PIN이 일치하지 않습니다', - 'profiles.initializeServicesFailed' => '프로필 서비스를 초기화하지 못했습니다', 'connections.sectionTitle' => '연결', 'connections.addConnection' => '연결 추가', 'connections.addConnectionSubtitleNoProfile' => 'Plex로 로그인하거나 Jellyfin 서버에 연결', @@ -2768,7 +2735,6 @@ extension on TranslationsKo { 'connections.editJellyfinTitle' => 'Jellyfin 연결 편집', 'connections.editJellyfinIntro' => ({required Object serverName}) => '${serverName}의 URL을 추가하거나 제거하세요. Plezy는 연결 가능한 URL 중 지연 시간이 가장 낮은 URL을 사용합니다.', 'discover.title' => '발견', - 'discover.switchProfile' => '사용자 전환', 'discover.noContentAvailable' => '사용 가능한 콘텐츠가 없습니다', 'discover.addMediaToLibraries' => '미디어 라이브러리에 미디어를 추가해 주세요', 'discover.continueWatching' => '계속 시청', @@ -2795,8 +2761,6 @@ extension on TranslationsKo { 'errors.connectionFailed' => '미디어 서버에 연결할 수 없습니다', 'errors.failedToLoad' => ({required Object context, required Object error}) => '${context} 로드 실패: ${error}', 'errors.noClientAvailable' => '사용 가능한 클라이언트가 없습니다', - 'errors.authenticationFailed' => ({required Object error}) => '인증 실패: ${error}', - 'errors.couldNotLaunchUrl' => '인증 URL을 열 수 없습니다', 'errors.pleaseEnterToken' => '토큰을 입력해 주세요', 'errors.invalidToken' => '토큰이 유효하지 않습니다', 'errors.failedToVerifyToken' => ({required Object error}) => '토큰을 확인할 수 없습니다: ${error}', @@ -2871,7 +2835,6 @@ extension on TranslationsKo { 'libraries.sortLabels.communityRating' => '커뮤니티 평점', 'libraries.sortLabels.criticRating' => '평론가 평점', 'libraries.sortLabels.userRating' => '사용자 평점', - 'libraries.sortLabels.lastPlayed' => '마지막 재생', 'libraries.sortLabels.datePlayed' => '재생일', 'libraries.sortLabels.playCount' => '재생 횟수', 'libraries.sortLabels.productionYear' => '제작 연도', @@ -2890,7 +2853,6 @@ extension on TranslationsKo { 'about.versionLabel' => ({required Object version}) => '버전 ${version}', 'about.appDescription' => '아름다운 Flutter용 Plex 및 Jellyfin 클라이언트', 'about.viewLicensesDescription' => '타사 라이브러리 라이선스 보기', - 'serverSelection.allServerConnectionsFailed' => '서버에 연결할 수 없습니다. 네트워크를 확인하세요.', 'serverSelection.noServersFoundForAccount' => ({required Object username, required Object email}) => '${username} (${email})의 서버를 찾을 수 없습니다.', 'serverSelection.failedToLoadServers' => ({required Object error}) => '서버를 로드할 수 없습니다: ${error}', 'hubDetail.title' => '제목', @@ -2924,10 +2886,6 @@ extension on TranslationsKo { 'explore.rows.trending' => '지금 뜨는 콘텐츠', 'explore.rows.upcomingMovies' => '개봉 예정 영화', 'explore.rows.upcomingShows' => '방영 예정 TV 프로그램', - 'explore.searchHint' => ({required Object source}) => '${source}에서 검색', - 'explore.searchEmpty' => ({required Object query}) => '「${query}」에 대한 결과가 없습니다', - 'explore.searchPrompt' => ({required Object source}) => '${source}에서 영화와 TV 프로그램을 검색하세요.', - 'explore.searchFailed' => '검색에 실패했습니다. 연결을 확인하고 다시 시도하세요.', 'explore.status.airing' => '방영 중', 'explore.status.ended' => '종영', 'explore.status.canceled' => '취소됨', @@ -2940,14 +2898,19 @@ extension on TranslationsKo { 'explore.watchlistUpdateFailed' => '관심 목록을 업데이트하지 못했습니다', 'explore.notInLibrary' => '라이브러리에 없음', 'explore.inTheseLibraries' => '이 라이브러리에 있음', - 'explore.availableOn' => ({required Object server}) => '${server}에서 이용 가능', 'explore.checkingLibrary' => '라이브러리 확인 중...', 'explore.emptyTitle' => '아직 아무것도 없습니다', 'explore.emptyMessage' => ({required Object source}) => '${source}에 콘텐츠가 추가되면 여기에 표시됩니다.', + 'explore.searchHint' => ({required Object source}) => '${source}에서 검색', + 'explore.searchEmpty' => ({required Object query}) => '「${query}」에 대한 결과가 없습니다', + 'explore.searchPrompt' => ({required Object source}) => '${source}에서 영화와 TV 프로그램을 검색하세요.', + 'explore.searchFailed' => '검색에 실패했습니다. 연결을 확인하고 다시 시도하세요.', 'liveTv.title' => '실시간 TV', 'liveTv.guide' => '편성표', 'liveTv.noChannels' => '사용 가능한 채널이 없습니다', 'liveTv.noDvr' => '서버에 DVR이 구성되어 있지 않습니다', + 'liveTv.serverUnavailable' => '라이브 TV 서버를 사용할 수 없습니다.', + 'liveTv.serverNotConnected' => '라이브 TV 서버에 연결되어 있지 않습니다.', 'liveTv.noPrograms' => '프로그램 데이터가 없습니다', 'liveTv.liveStreamFailed' => '라이브 스트림 실패', 'liveTv.unknownProgram' => '알 수 없는 프로그램', @@ -2983,7 +2946,6 @@ extension on TranslationsKo { 'liveTv.scheduledRecordings' => '예약됨', 'liveTv.recordingRules' => '녹화 규칙', 'liveTv.noScheduledRecordings' => '예약된 녹화 없음', - 'liveTv.noRecordingRules' => '녹화 규칙 없음', 'liveTv.manageRecording' => '녹화 관리', 'liveTv.cancelRecording' => '녹화 취소', 'liveTv.cancelRecordingTitle' => '이 녹화를 취소할까요?', @@ -3000,7 +2962,6 @@ extension on TranslationsKo { 'liveTv.recordingCancelled' => '녹화 취소됨', 'liveTv.recordingRuleDeleted' => '녹화 규칙 삭제됨', 'liveTv.processRecordingRules' => '규칙 재평가', - 'liveTv.loadingRecordings' => '녹화 불러오는 중...', 'liveTv.recordingInProgress' => '녹화 중', 'liveTv.recordingsCount' => ({required Object count}) => '${count}개 예약됨', 'liveTv.editRule' => '규칙 편집', @@ -3012,7 +2973,6 @@ extension on TranslationsKo { 'collections.title' => '컬렉션', 'collections.collection' => '컬렉션', 'collections.empty' => '컬렉션이 비어 있습니다', - 'collections.unknownLibrarySection' => '삭제할 수 없습니다: 알 수 없는 미디어 라이브러리 섹션입니다', 'collections.deleteCollection' => '컬렉션 삭제', 'collections.deleteConfirm' => ({required Object title}) => '"${title}"을(를) 삭제할까요? 되돌릴 수 없습니다.', 'collections.deleted' => '컬렉션 삭제됨', @@ -3050,6 +3010,7 @@ extension on TranslationsKo { 'playlists.itemAdded' => '재생 목록에 추가 되었습니다', 'playlists.itemRemoved' => '재생 목록에서 제거됨', 'playlists.selectPlaylist' => '재생 목록 선택', + 'playlists.searchPlaylists' => '재생 목록 검색...', 'playlists.errorCreating' => '재생 목록 생성 실패', 'playlists.errorDeleting' => '재생 목록 삭제 실패', 'playlists.errorLoading' => '재생 목록 로드 실패', @@ -3146,8 +3107,6 @@ extension on TranslationsKo { 'downloads.tvShows' => 'TV 프로그램', 'downloads.movies' => '영화', 'downloads.music' => '음악', - _ => null, - } ?? switch (path) { 'downloads.tracksQueued' => ({required Object count}) => '${count}곡 다운로드 대기 중', 'downloads.noDownloads' => '다운로드 없음', 'downloads.noDownloadsDescription' => '다운로드한 콘텐츠는 오프라인 시청을 위해 여기에 표시됩니다', @@ -3162,6 +3121,8 @@ extension on TranslationsKo { 'downloads.deleteConfirm' => ({required Object title}) => '이 기기에서 "${title}"을(를) 삭제할까요?', 'downloads.cancelledDownloadTitle' => '취소된 다운로드', 'downloads.cancelledDownloadMessage' => '이 다운로드가 취소되었습니다. 어떻게 하시겠습니까?', + _ => null, + } ?? switch (path) { 'downloads.allEpisodesAlreadyDownloaded' => '모든 에피소드가 이미 다운로드되었습니다', 'downloads.resumeDownload' => '다운로드 재개', 'downloads.cancelledDownload' => '취소된 다운로드', @@ -3185,7 +3146,6 @@ extension on TranslationsKo { 'downloads.customAmount' => '직접 입력...', 'downloads.includeSpecials' => '스페셜 포함', 'downloads.howManyEpisodes' => '몇 개의 에피소드?', - 'downloads.itemsQueued' => ({required Object count}) => '${count}개 항목이 다운로드 대기열에 추가됨', 'downloads.keepSynced' => '동기화 유지', 'downloads.downloadOnce' => '한 번만 다운로드', 'downloads.keepNUnwatched' => ({required Object count}) => '미시청 ${count}개 유지', @@ -3229,7 +3189,6 @@ extension on TranslationsKo { 'companionRemote.connectedTo' => ({required Object name}) => '${name}에 연결됨', 'companionRemote.unknownDevice' => '알 수 없는 기기', 'companionRemote.session.startingServer' => '원격 서버 시작 중...', - 'companionRemote.session.failedToCreate' => '원격 서버를 시작하지 못했습니다:', 'companionRemote.session.hostAddress' => '호스트 주소', 'companionRemote.session.connected' => '연결됨', 'companionRemote.session.serverRunning' => '원격 서버 활성', @@ -3284,6 +3243,8 @@ extension on TranslationsKo { 'companionRemote.remote.searchHint' => '데스크톱에서 검색...', 'companionRemote.errors.noNetworkInterface' => '네트워크 인터페이스를 찾을 수 없습니다', 'companionRemote.errors.authenticationFailed' => '인증 실패', + 'companionRemote.errors.serverStartFailed' => ({required Object error}) => '원격 서버를 시작하지 못했습니다: ${error}', + 'companionRemote.errors.commandFailed' => ({required Object error}) => '원격 명령을 보내지 못했습니다: ${error}', 'companionRemote.errors.joinTimedOut' => '세션 참가 시간이 초과되었습니다', 'companionRemote.errors.failedToConnectAnyAddress' => '어떤 주소에도 연결하지 못했습니다', 'companionRemote.errors.connectionLostAfterAttempts' => ({required Object attempts}) => '${attempts}회 시도 후 연결이 끊어졌습니다', @@ -3528,7 +3489,6 @@ extension on TranslationsKo { 'addServer.quickConnectFailed' => ({required Object error}) => 'Quick Connect 실패: ${error}', 'addServer.addPlexTitle' => 'Plex로 로그인', 'addServer.pinExpired' => '로그인 전에 PIN이 만료되었습니다. 다시 시도하세요.', - 'addServer.duplicatePlexAccount' => '이미 Plex에 로그인되어 있습니다. 계정을 전환하려면 로그아웃하세요.', 'addServer.failedToRegisterAccount' => ({required Object error}) => '계정 등록 실패: ${error}', 'addServer.enterJellyfinUrlError' => 'Jellyfin 서버 URL을 입력하세요', 'addServer.addConnectionTitle' => '연결 추가', diff --git a/lib/i18n/strings_nb.g.dart b/lib/i18n/strings_nb.g.dart index f685670d..663e2545 100644 --- a/lib/i18n/strings_nb.g.dart +++ b/lib/i18n/strings_nb.g.dart @@ -53,7 +53,6 @@ class TranslationsNb extends Translations with BaseTranslations 'Logg på'; @override String get signInWithPlex => 'Logg inn med Plex'; @override String get showQRCode => 'Vis QR-kode'; @override String get authenticate => 'Autentiser'; @@ -167,10 +165,8 @@ class _TranslationsCommonNb extends TranslationsCommonEn { @override String episodeNumberTitle({required Object number, required Object title}) => 'Episode ${number} - ${title}'; @override String chapterNumber({required Object number}) => 'Kapittel ${number}'; @override String get reconnect => 'Koble til på nytt'; - @override String get exit => 'Avslutt'; @override String get viewAll => 'Vis alle'; @override String get checkingNetwork => 'Sjekker nettverk...'; - @override String get refreshingServers => 'Oppdaterer servere...'; @override String get loadingServers => 'Laster servere...'; @override String get connectingToServers => 'Kobler til servere...'; @override String get startingOfflineMode => 'Starter frakoblet modus...'; @@ -271,6 +267,12 @@ class _TranslationsSettingsNb extends TranslationsSettingsEn { @override String get tvFullCardLayoutDescription => 'Bruk bildebaserte TV-kort med skuespillernavn lagt over'; @override String get focusGlow => 'Fokusglød'; @override String get focusGlowDescription => 'Vis en myk glød rundt kortet i fokus'; + @override String get visualEffects => 'Visuelle effekter'; + @override String get visualEffectsAuto => 'Automatisk'; + @override String get visualEffectsAutoDescription => 'Reduser effekter automatisk på enheter med lavt strømforbruk'; + @override String get visualEffectsFull => 'Full'; + @override String get visualEffectsReduced => 'Redusert'; + @override String get visualEffectsReducedDescription => 'Færre animasjoner og grafikk med lavere oppløsning'; @override String get hideSpoilers => 'Skjul spoilere for usette episoder'; @override String get hideSpoilersDescription => 'Slør miniatyrbilder og beskrivelser for usette episoder'; @override String get playerBackend => 'Spillermotor'; @@ -283,7 +285,7 @@ class _TranslationsSettingsNb extends TranslationsSettingsEn { @override String get bufferSizeAuto => 'Auto (Anbefalt)'; @override String bufferSizeWarning({required Object heap, required Object size}) => '${heap}MB minne tilgjengelig. En buffer på ${size}MB kan påvirke avspilling.'; @override String get defaultQualityTitle => 'Standardkvalitet'; - @override String get defaultQualityDescription => 'Brukes ved start av avspilling. Lavere verdier reduserer båndbredden.'; + @override String get musicQualityTitle => 'Musikkvalitet'; @override String get subtitleStyling => 'Undertekststil'; @override String get subtitleStylingDescription => 'Tilpass utseendet på undertekster'; @override String get smallSkipDuration => 'Kort hoppvarighet'; @@ -377,10 +379,9 @@ class _TranslationsSettingsNb extends TranslationsSettingsEn { @override String maxVolumePercent({required Object percent}) => '${percent}%'; @override String get discordRichPresence => 'Discord Rich Presence'; @override String get discordRichPresenceDescription => 'Vis hva du ser på Discord'; - @override String get trakt => 'Trakt'; - @override String get traktDescription => 'Synkroniser visningshistorikk med Trakt'; @override String get services => 'Tjenester'; @override String get servicesDescription => 'Koble til Trakt, MyAnimeList, Seerr og mer'; + @override String get manageLibrariesDescription => 'Omorganiser og skjul biblioteker'; @override String get companionRemoteServer => 'Companion Remote-server'; @override String get companionRemoteServerDescription => 'Tillat mobilenheter på nettverket ditt å styre denne appen'; @override String get autoPip => 'Auto bilde-i-bilde'; @@ -443,7 +444,6 @@ class _TranslationsSettingsNb extends TranslationsSettingsEn { @override String get showNavBarLabels => 'Vis navigasjonsfeltlabeler'; @override String get showNavBarLabelsDescription => 'Vis tekstlabeler under navigasjonsfeltikoner'; @override String get startupSection => 'Oppstartsseksjon'; - @override String get startupSectionDescription => 'Velg hvilken seksjon Plezy åpner ved oppstart'; @override String get liveTvDefaultFavorites => 'Standard til favorittkanaler'; @override String get liveTvDefaultFavoritesDescription => 'Vis kun favorittkanaler når du åpner Live TV'; @override String get display => 'Skjerm'; @@ -455,13 +455,6 @@ class _TranslationsSettingsNb extends TranslationsSettingsEn { @override String get subtitlesAndConfig => 'Undertekster og konfigurasjon'; @override String get seekAndTiming => 'Søk og tidtaking'; @override String get behavior => 'Atferd'; - @override String get manageLibrariesDescription => 'Omorganiser og skjul biblioteker'; - @override String get visualEffects => 'Visuelle effekter'; - @override String get visualEffectsAuto => 'Automatisk'; - @override String get visualEffectsAutoDescription => 'Reduser effekter automatisk på enheter med lavt strømforbruk'; - @override String get visualEffectsFull => 'Full'; - @override String get visualEffectsReduced => 'Redusert'; - @override String get visualEffectsReducedDescription => 'Færre animasjoner og grafikk med lavere oppløsning'; } // Path: search @@ -559,14 +552,11 @@ class _TranslationsRateSheetNb extends TranslationsRateSheetEn { // Translations @override String get title => 'Vurder'; @override String get server => 'Server'; - @override String starValue({required Object rating}) => '${rating} / 5'; - @override String scoreValue({required Object score}) => '${score} / 10'; - @override String get setScore => 'Sett en poengsum'; + @override String get favorite => 'Favoritt'; + @override String get favorited => 'Lagt til i favoritter'; @override String get saved => 'Lagret'; @override String get notAvailable => 'Ingen treff'; @override String get noConnectedServices => 'Koble til en tjeneste i Innstillinger for å vurdere her.'; - @override String get favorite => 'Favoritt'; - @override String get favorited => 'Lagt til i favoritter'; } // Path: accessibility @@ -584,6 +574,14 @@ class _TranslationsAccessibilityNb extends TranslationsAccessibilityEn { @override String mediaCardPartiallyWatched({required Object percent}) => '${percent} prosent sett'; @override String get mediaCardUnwatched => 'usett'; @override String get tapToPlay => 'Trykk for å spille'; + @override String get decrease => 'Reduser'; + @override String get increase => 'Øk'; + @override String decreaseValue({required Object label}) => 'Reduser ${label}'; + @override String increaseValue({required Object label}) => 'Øk ${label}'; + @override String get hue => 'Fargetone'; + @override String get saturation => 'Metning'; + @override String get brightness => 'Lysstyrke'; + @override String get hexColor => 'Heksadesimal farge'; } // Path: tooltips @@ -643,13 +641,11 @@ class _TranslationsVideoControlsNb extends TranslationsVideoControlsEn { @override String get settingsButton => 'Avspillingsinnstillinger'; @override String get tracksButton => 'Lyd og undertekster'; @override String get chaptersButton => 'Kapitler'; - @override String get versionsButton => 'Videoversjoner'; @override String get versionQualityButton => 'Versjon og kvalitet'; @override String get versionColumnHeader => 'Versjon'; @override String get qualityColumnHeader => 'Kvalitet'; @override String get qualityOriginal => 'Original'; @override String qualityPresetLabel({required Object resolution, required Object bitrate}) => '${resolution}p ${bitrate} Mbps'; - @override String qualityBandwidthEstimate({required Object bitrate}) => '~${bitrate} Mbps'; @override String get transcodeUnavailableFallback => 'Transkoding utilgjengelig — spiller av i original kvalitet'; @override String get pipButton => 'Bilde-i-bilde-modus'; @override String get aspectRatioButton => 'Sideforhold'; @@ -685,19 +681,6 @@ class _TranslationsVideoControlsNb extends TranslationsVideoControlsEn { @override String get searchLanguages => 'Søk etter språk...'; } -// Path: userStatus -class _TranslationsUserStatusNb extends TranslationsUserStatusEn { - _TranslationsUserStatusNb._(TranslationsNb root) : this._root = root, super.internal(root); - - final TranslationsNb _root; // ignore: unused_field - - // Translations - @override String get admin => 'Administrator'; - @override String get restricted => 'Begrenset'; - @override String get protected => 'Beskyttet'; - @override String get current => 'GJELDENDE'; -} - // Path: messages class _TranslationsMessagesNb extends TranslationsMessagesEn { _TranslationsMessagesNb._(TranslationsNb root) : this._root = root, super.internal(root); @@ -873,7 +856,6 @@ class _TranslationsProfilesNb extends TranslationsProfilesEn { @override String get pinExplain => '4-sifret PIN kreves for å bytte profiler.'; @override String get continueButton => 'Fortsett'; @override String get pinsDontMatch => 'PIN-ene samsvarer ikke'; - @override String get initializeServicesFailed => 'Kunne ikke initialisere profiltjenester'; } // Path: connections @@ -902,7 +884,6 @@ class _TranslationsDiscoverNb extends TranslationsDiscoverEn { // Translations @override String get title => 'Oppdag'; - @override String get switchProfile => 'Bytt profil'; @override String get noContentAvailable => 'Ingen innhold tilgjengelig'; @override String get addMediaToLibraries => 'Legg til medier i bibliotekene dine'; @override String get continueWatching => 'Fortsett å se'; @@ -938,8 +919,6 @@ class _TranslationsErrorsNb extends TranslationsErrorsEn { @override String get connectionFailed => 'Kan ikke koble til medieserver'; @override String failedToLoad({required Object context, required Object error}) => 'Kunne ikke laste ${context}: ${error}'; @override String get noClientAvailable => 'Ingen klient tilgjengelig'; - @override String authenticationFailed({required Object error}) => 'Autentisering mislyktes: ${error}'; - @override String get couldNotLaunchUrl => 'Kunne ikke åpne autentiserings-URL'; @override String get pleaseEnterToken => 'Vennligst skriv inn et token'; @override String get invalidToken => 'Ugyldig token'; @override String failedToVerifyToken({required Object error}) => 'Kunne ikke verifisere token: ${error}'; @@ -973,6 +952,8 @@ class _TranslationsLibrariesNb extends TranslationsLibrariesEn { @override String get allLibrariesHidden => 'Alle biblioteker er skjult'; @override String hiddenLibrariesCount({required Object count}) => 'Skjulte biblioteker (${count})'; @override String get thisLibraryIsEmpty => 'Dette biblioteket er tomt'; + @override String get noItemsMatchFilters => 'Ingen elementer samsvarer med de aktive filtrene'; + @override String get resetFilters => 'Tilbakestill filtre'; @override String get all => 'Alle'; @override String get clearAll => 'Tøm alle'; @override String scanLibraryConfirm({required Object title}) => 'Er du sikker på at du vil skanne "${title}"?'; @@ -998,8 +979,6 @@ class _TranslationsLibrariesNb extends TranslationsLibrariesEn { @override late final _TranslationsLibrariesGroupingsNb groupings = _TranslationsLibrariesGroupingsNb._(_root); @override late final _TranslationsLibrariesFilterCategoriesNb filterCategories = _TranslationsLibrariesFilterCategoriesNb._(_root); @override late final _TranslationsLibrariesSortLabelsNb sortLabels = _TranslationsLibrariesSortLabelsNb._(_root); - @override String get noItemsMatchFilters => 'Ingen elementer samsvarer med de aktive filtrene'; - @override String get resetFilters => 'Tilbakestill filtre'; } // Path: about @@ -1023,7 +1002,6 @@ class _TranslationsServerSelectionNb extends TranslationsServerSelectionEn { final TranslationsNb _root; // ignore: unused_field // Translations - @override String get allServerConnectionsFailed => 'Kunne ikke koble til noen servere. Sjekk nettverket ditt.'; @override String noServersFoundForAccount({required Object username, required Object email}) => 'Ingen servere funnet for ${username} (${email})'; @override String failedToLoadServers({required Object error}) => 'Kunne ikke laste servere: ${error}'; } @@ -1090,10 +1068,6 @@ class _TranslationsExploreNb extends TranslationsExploreEn { @override String get title => 'Utforsk'; @override String get selectSource => 'Velg kilde'; @override late final _TranslationsExploreRowsNb rows = _TranslationsExploreRowsNb._(_root); - @override String searchHint({required Object source}) => 'Søk i ${source}'; - @override String searchEmpty({required Object query}) => 'Ingen treff for "${query}"'; - @override String searchPrompt({required Object source}) => 'Søk etter filmer og serier på ${source}.'; - @override String get searchFailed => 'Søk mislyktes. Sjekk tilkoblingen og prøv igjen.'; @override late final _TranslationsExploreStatusNb status = _TranslationsExploreStatusNb._(_root); @override String episodeCount({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('nb'))(n, one: '${n} episode', @@ -1106,10 +1080,13 @@ class _TranslationsExploreNb extends TranslationsExploreEn { @override String get watchlistUpdateFailed => 'Kunne ikke oppdatere ønskelisten'; @override String get notInLibrary => 'Ikke i biblioteket ditt'; @override String get inTheseLibraries => 'I disse bibliotekene'; - @override String availableOn({required Object server}) => 'Tilgjengelig på ${server}'; @override String get checkingLibrary => 'Sjekker biblioteket ditt...'; @override String get emptyTitle => 'Ingenting her ennå'; @override String emptyMessage({required Object source}) => 'Rader fra ${source} vises her når de har innhold.'; + @override String searchHint({required Object source}) => 'Søk i ${source}'; + @override String searchEmpty({required Object query}) => 'Ingen treff for "${query}"'; + @override String searchPrompt({required Object source}) => 'Søk etter filmer og serier på ${source}.'; + @override String get searchFailed => 'Søk mislyktes. Sjekk tilkoblingen og prøv igjen.'; } // Path: liveTv @@ -1123,6 +1100,8 @@ class _TranslationsLiveTvNb extends TranslationsLiveTvEn { @override String get guide => 'Programguide'; @override String get noChannels => 'Ingen kanaler tilgjengelig'; @override String get noDvr => 'Ingen DVR konfigurert på noen server'; + @override String get serverUnavailable => 'Direkte-TV-serveren er ikke tilgjengelig.'; + @override String get serverNotConnected => 'Direkte-TV-serveren er ikke tilkoblet.'; @override String get noPrograms => 'Ingen programdata tilgjengelig'; @override String get liveStreamFailed => 'Direktesending mislyktes'; @override String get unknownProgram => 'Ukjent program'; @@ -1158,7 +1137,6 @@ class _TranslationsLiveTvNb extends TranslationsLiveTvEn { @override String get scheduledRecordings => 'Planlagt'; @override String get recordingRules => 'Opptaksregler'; @override String get noScheduledRecordings => 'Ingen planlagte opptak'; - @override String get noRecordingRules => 'Ingen opptaksregler ennå'; @override String get manageRecording => 'Administrer opptak'; @override String get cancelRecording => 'Avbryt opptak'; @override String get cancelRecordingTitle => 'Avbryte dette opptaket?'; @@ -1175,7 +1153,6 @@ class _TranslationsLiveTvNb extends TranslationsLiveTvEn { @override String get recordingCancelled => 'Opptak avbrutt'; @override String get recordingRuleDeleted => 'Opptaksregel slettet'; @override String get processRecordingRules => 'Vurder regler på nytt'; - @override String get loadingRecordings => 'Laster opptak ...'; @override String get recordingInProgress => 'Tar opp nå'; @override String recordingsCount({required Object count}) => '${count} planlagt'; @override String get editRule => 'Rediger regel'; @@ -1196,7 +1173,6 @@ class _TranslationsCollectionsNb extends TranslationsCollectionsEn { @override String get title => 'Samlinger'; @override String get collection => 'Samling'; @override String get empty => 'Samlingen er tom'; - @override String get unknownLibrarySection => 'Kan ikke slette: Ukjent bibliotekseksjon'; @override String get deleteCollection => 'Slett samling'; @override String deleteConfirm({required Object title}) => 'Slette "${title}"? Dette kan ikke angres.'; @override String get deleted => 'Samling slettet'; @@ -1243,6 +1219,7 @@ class _TranslationsPlaylistsNb extends TranslationsPlaylistsEn { @override String get itemAdded => 'Lagt til i spilleliste'; @override String get itemRemoved => 'Fjernet fra spilleliste'; @override String get selectPlaylist => 'Velg spilleliste'; + @override String get searchPlaylists => 'Søk i spillelister...'; @override String get errorCreating => 'Kunne ikke opprette spilleliste'; @override String get errorDeleting => 'Kunne ikke slette spilleliste'; @override String get errorLoading => 'Kunne ikke laste spillelister'; @@ -1346,15 +1323,15 @@ class _TranslationsWatchTogetherNb extends TranslationsWatchTogetherEn { @override String participantResumed({required Object name}) => '${name} gjenopptok'; @override String participantSeeked({required Object name}) => '${name} spolet'; @override String participantBuffering({required Object name}) => '${name} buffrer'; + @override String participantNeedsUpdate({required Object name}) => '${name} bruker en eldre appversjon — synkronisering er ikke tilgjengelig'; + @override String resumingWithout({required Object name}) => 'Fortsetter uten ${name}'; @override String get waitingForParticipants => 'Venter på at andre laster inn...'; + @override String waitingForName({required Object name}) => 'Venter på ${name}...'; @override String get recentRooms => 'Nylige rom'; @override String get renameRoom => 'Gi nytt navn til rom'; @override String get removeRoom => 'Fjern'; @override String get guestSwitchUnavailable => 'Kunne ikke bytte — server ikke tilgjengelig for synkronisering'; @override String get guestSwitchFailed => 'Kunne ikke bytte — innhold ble ikke funnet på denne serveren'; - @override String participantNeedsUpdate({required Object name}) => '${name} bruker en eldre appversjon — synkronisering er ikke tilgjengelig'; - @override String resumingWithout({required Object name}) => 'Fortsetter uten ${name}'; - @override String waitingForName({required Object name}) => 'Venter på ${name}...'; } // Path: downloads @@ -1406,7 +1383,6 @@ class _TranslationsDownloadsNb extends TranslationsDownloadsEn { @override String get customAmount => 'Egendefinert antall...'; @override String get includeSpecials => 'Inkluder spesialepisoder'; @override String get howManyEpisodes => 'Hvor mange episoder?'; - @override String itemsQueued({required Object count}) => '${count} elementer i nedlastingskø'; @override String get keepSynced => 'Hold synkronisert'; @override String get downloadOnce => 'Last ned én gang'; @override String keepNUnwatched({required Object count}) => 'Behold ${count} usette'; @@ -1780,7 +1756,6 @@ class _TranslationsAddServerNb extends TranslationsAddServerEn { @override String quickConnectFailed({required Object error}) => 'Quick Connect mislyktes: ${error}'; @override String get addPlexTitle => 'Logg på med Plex'; @override String get pinExpired => 'PIN-koden gikk ut før pålogging. Prøv igjen.'; - @override String get duplicatePlexAccount => 'Allerede logget inn på Plex. Logg ut for å bytte konto.'; @override String failedToRegisterAccount({required Object error}) => 'Kunne ikke registrere kontoen: ${error}'; @override String get enterJellyfinUrlError => 'Oppgi URL-en til Jellyfin-serveren din'; @override String get addConnectionTitle => 'Legg til tilkobling'; @@ -1906,7 +1881,6 @@ class _TranslationsLibrariesSortLabelsNb extends TranslationsLibrariesSortLabels @override String get communityRating => 'Fellesskapsvurdering'; @override String get criticRating => 'Kritikervurdering'; @override String get userRating => 'Brukervurdering'; - @override String get lastPlayed => 'Sist spilt'; @override String get datePlayed => 'Avspillingsdato'; @override String get playCount => 'Avspillinger'; @override String get productionYear => 'Produksjonsår'; @@ -1965,7 +1939,6 @@ class _TranslationsCompanionRemoteSessionNb extends TranslationsCompanionRemoteS // Translations @override String get startingServer => 'Starter fjernserver...'; - @override String get failedToCreate => 'Kunne ikke starte fjernserver:'; @override String get hostAddress => 'Vertsadresse'; @override String get connected => 'Tilkoblet'; @override String get serverRunning => 'Fjernserver aktiv'; @@ -2047,6 +2020,8 @@ class _TranslationsCompanionRemoteErrorsNb extends TranslationsCompanionRemoteEr // Translations @override String get noNetworkInterface => 'Fant ingen nettverksgrensesnitt'; @override String get authenticationFailed => 'Autentisering mislyktes'; + @override String serverStartFailed({required Object error}) => 'Kunne ikke starte fjernserveren: ${error}'; + @override String commandFailed({required Object error}) => 'Kunne ikke sende fjernkommando: ${error}'; @override String get joinTimedOut => 'Tidsavbrudd ved tilkobling til økt'; @override String get failedToConnectAnyAddress => 'Kunne ikke koble til noen adresse'; @override String connectionLostAfterAttempts({required Object attempts}) => 'Tilkobling mistet etter ${attempts} forsøk'; @@ -2123,7 +2098,6 @@ extension on TranslationsNb { dynamic _flatMapFunction(String path) { return switch (path) { 'app.title' => 'Plezy', - 'auth.signIn' => 'Logg på', 'auth.signInWithPlex' => 'Logg inn med Plex', 'auth.showQRCode' => 'Vis QR-kode', 'auth.authenticate' => 'Autentiser', @@ -2174,10 +2148,8 @@ extension on TranslationsNb { 'common.episodeNumberTitle' => ({required Object number, required Object title}) => 'Episode ${number} - ${title}', 'common.chapterNumber' => ({required Object number}) => 'Kapittel ${number}', 'common.reconnect' => 'Koble til på nytt', - 'common.exit' => 'Avslutt', 'common.viewAll' => 'Vis alle', 'common.checkingNetwork' => 'Sjekker nettverk...', - 'common.refreshingServers' => 'Oppdaterer servere...', 'common.loadingServers' => 'Laster servere...', 'common.connectingToServers' => 'Kobler til servere...', 'common.startingOfflineMode' => 'Starter frakoblet modus...', @@ -2251,6 +2223,12 @@ extension on TranslationsNb { 'settings.tvFullCardLayoutDescription' => 'Bruk bildebaserte TV-kort med skuespillernavn lagt over', 'settings.focusGlow' => 'Fokusglød', 'settings.focusGlowDescription' => 'Vis en myk glød rundt kortet i fokus', + 'settings.visualEffects' => 'Visuelle effekter', + 'settings.visualEffectsAuto' => 'Automatisk', + 'settings.visualEffectsAutoDescription' => 'Reduser effekter automatisk på enheter med lavt strømforbruk', + 'settings.visualEffectsFull' => 'Full', + 'settings.visualEffectsReduced' => 'Redusert', + 'settings.visualEffectsReducedDescription' => 'Færre animasjoner og grafikk med lavere oppløsning', 'settings.hideSpoilers' => 'Skjul spoilere for usette episoder', 'settings.hideSpoilersDescription' => 'Slør miniatyrbilder og beskrivelser for usette episoder', 'settings.playerBackend' => 'Spillermotor', @@ -2263,7 +2241,7 @@ extension on TranslationsNb { 'settings.bufferSizeAuto' => 'Auto (Anbefalt)', 'settings.bufferSizeWarning' => ({required Object heap, required Object size}) => '${heap}MB minne tilgjengelig. En buffer på ${size}MB kan påvirke avspilling.', 'settings.defaultQualityTitle' => 'Standardkvalitet', - 'settings.defaultQualityDescription' => 'Brukes ved start av avspilling. Lavere verdier reduserer båndbredden.', + 'settings.musicQualityTitle' => 'Musikkvalitet', 'settings.subtitleStyling' => 'Undertekststil', 'settings.subtitleStylingDescription' => 'Tilpass utseendet på undertekster', 'settings.smallSkipDuration' => 'Kort hoppvarighet', @@ -2357,10 +2335,9 @@ extension on TranslationsNb { 'settings.maxVolumePercent' => ({required Object percent}) => '${percent}%', 'settings.discordRichPresence' => 'Discord Rich Presence', 'settings.discordRichPresenceDescription' => 'Vis hva du ser på Discord', - 'settings.trakt' => 'Trakt', - 'settings.traktDescription' => 'Synkroniser visningshistorikk med Trakt', 'settings.services' => 'Tjenester', 'settings.servicesDescription' => 'Koble til Trakt, MyAnimeList, Seerr og mer', + 'settings.manageLibrariesDescription' => 'Omorganiser og skjul biblioteker', 'settings.companionRemoteServer' => 'Companion Remote-server', 'settings.companionRemoteServerDescription' => 'Tillat mobilenheter på nettverket ditt å styre denne appen', 'settings.autoPip' => 'Auto bilde-i-bilde', @@ -2423,7 +2400,6 @@ extension on TranslationsNb { 'settings.showNavBarLabels' => 'Vis navigasjonsfeltlabeler', 'settings.showNavBarLabelsDescription' => 'Vis tekstlabeler under navigasjonsfeltikoner', 'settings.startupSection' => 'Oppstartsseksjon', - 'settings.startupSectionDescription' => 'Velg hvilken seksjon Plezy åpner ved oppstart', 'settings.liveTvDefaultFavorites' => 'Standard til favorittkanaler', 'settings.liveTvDefaultFavoritesDescription' => 'Vis kun favorittkanaler når du åpner Live TV', 'settings.display' => 'Skjerm', @@ -2435,13 +2411,6 @@ extension on TranslationsNb { 'settings.subtitlesAndConfig' => 'Undertekster og konfigurasjon', 'settings.seekAndTiming' => 'Søk og tidtaking', 'settings.behavior' => 'Atferd', - 'settings.manageLibrariesDescription' => 'Omorganiser og skjul biblioteker', - 'settings.visualEffects' => 'Visuelle effekter', - 'settings.visualEffectsAuto' => 'Automatisk', - 'settings.visualEffectsAutoDescription' => 'Reduser effekter automatisk på enheter med lavt strømforbruk', - 'settings.visualEffectsFull' => 'Full', - 'settings.visualEffectsReduced' => 'Redusert', - 'settings.visualEffectsReducedDescription' => 'Færre animasjoner og grafikk med lavere oppløsning', 'search.hint' => 'Søk i filmer, serier, musikk...', 'search.tryDifferentTerm' => 'Prøv et annet søkeord', 'search.searchYourMedia' => 'Søk i mediene dine', @@ -2518,14 +2487,11 @@ extension on TranslationsNb { 'mediaMenu.playVersion' => 'Spill av versjon...', 'rateSheet.title' => 'Vurder', 'rateSheet.server' => 'Server', - 'rateSheet.starValue' => ({required Object rating}) => '${rating} / 5', - 'rateSheet.scoreValue' => ({required Object score}) => '${score} / 10', - 'rateSheet.setScore' => 'Sett en poengsum', + 'rateSheet.favorite' => 'Favoritt', + 'rateSheet.favorited' => 'Lagt til i favoritter', 'rateSheet.saved' => 'Lagret', 'rateSheet.notAvailable' => 'Ingen treff', 'rateSheet.noConnectedServices' => 'Koble til en tjeneste i Innstillinger for å vurdere her.', - 'rateSheet.favorite' => 'Favoritt', - 'rateSheet.favorited' => 'Lagt til i favoritter', 'accessibility.mediaCardMovie' => ({required Object title}) => '${title}, film', 'accessibility.mediaCardShow' => ({required Object title}) => '${title}, TV-serie', 'accessibility.mediaCardEpisode' => ({required Object title, required Object episodeInfo}) => '${title}, ${episodeInfo}', @@ -2534,6 +2500,14 @@ extension on TranslationsNb { 'accessibility.mediaCardPartiallyWatched' => ({required Object percent}) => '${percent} prosent sett', 'accessibility.mediaCardUnwatched' => 'usett', 'accessibility.tapToPlay' => 'Trykk for å spille', + 'accessibility.decrease' => 'Reduser', + 'accessibility.increase' => 'Øk', + 'accessibility.decreaseValue' => ({required Object label}) => 'Reduser ${label}', + 'accessibility.increaseValue' => ({required Object label}) => 'Øk ${label}', + 'accessibility.hue' => 'Fargetone', + 'accessibility.saturation' => 'Metning', + 'accessibility.brightness' => 'Lysstyrke', + 'accessibility.hexColor' => 'Heksadesimal farge', 'tooltips.shufflePlay' => 'Tilfeldig avspilling', 'tooltips.playTrailer' => 'Spill trailer', 'tooltips.markAsWatched' => 'Merk som sett', @@ -2575,13 +2549,11 @@ extension on TranslationsNb { 'videoControls.settingsButton' => 'Avspillingsinnstillinger', 'videoControls.tracksButton' => 'Lyd og undertekster', 'videoControls.chaptersButton' => 'Kapitler', - 'videoControls.versionsButton' => 'Videoversjoner', 'videoControls.versionQualityButton' => 'Versjon og kvalitet', 'videoControls.versionColumnHeader' => 'Versjon', 'videoControls.qualityColumnHeader' => 'Kvalitet', 'videoControls.qualityOriginal' => 'Original', 'videoControls.qualityPresetLabel' => ({required Object resolution, required Object bitrate}) => '${resolution}p ${bitrate} Mbps', - 'videoControls.qualityBandwidthEstimate' => ({required Object bitrate}) => '~${bitrate} Mbps', 'videoControls.transcodeUnavailableFallback' => 'Transkoding utilgjengelig — spiller av i original kvalitet', 'videoControls.pipButton' => 'Bilde-i-bilde-modus', 'videoControls.aspectRatioButton' => 'Sideforhold', @@ -2621,10 +2593,6 @@ extension on TranslationsNb { 'videoControls.subtitleDownloaded' => 'Undertekst lastet ned', 'videoControls.subtitleDownloadFailed' => 'Kunne ikke laste ned undertekst', 'videoControls.searchLanguages' => 'Søk etter språk...', - 'userStatus.admin' => 'Administrator', - 'userStatus.restricted' => 'Begrenset', - 'userStatus.protected' => 'Beskyttet', - 'userStatus.current' => 'GJELDENDE', 'messages.markedAsWatched' => 'Merket som sett', 'messages.markedAsUnwatched' => 'Merket som usett', 'messages.markedAsWatchedOffline' => 'Merket som sett (synkroniseres når tilkoblet)', @@ -2634,8 +2602,6 @@ extension on TranslationsNb { 'messages.errorLoading' => ({required Object error}) => 'Feil: ${error}', 'messages.streamInterrupted' => 'Avspillingen ble avbrutt. Trykk på Spill av eller spol for å prøve på nytt.', 'messages.fileInfoNotAvailable' => 'Filinformasjon ikke tilgjengelig', - _ => null, - } ?? switch (path) { 'messages.errorLoadingFileInfo' => ({required Object error}) => 'Feil ved lasting av filinformasjon: ${error}', 'messages.errorLoadingSeries' => 'Feil ved lasting av serie', 'messages.musicNotSupported' => 'Musikkavspilling støttes ikke ennå', @@ -2643,6 +2609,8 @@ extension on TranslationsNb { 'messages.noProfilesAvailable' => 'Ingen profiler tilgjengelige', 'messages.contactAdminForProfiles' => 'Kontakt serveradministratoren din for å legge til profiler', 'messages.unableToDetermineLibrarySection' => 'Kan ikke fastslå bibliotekseksjonen for dette elementet', + _ => null, + } ?? switch (path) { 'messages.logsCleared' => 'Logger tømt', 'messages.logsCopied' => 'Logger kopiert til utklippstavle', 'messages.noLogsAvailable' => 'Ingen logger tilgjengelig', @@ -2759,7 +2727,6 @@ extension on TranslationsNb { 'profiles.pinExplain' => '4-sifret PIN kreves for å bytte profiler.', 'profiles.continueButton' => 'Fortsett', 'profiles.pinsDontMatch' => 'PIN-ene samsvarer ikke', - 'profiles.initializeServicesFailed' => 'Kunne ikke initialisere profiltjenester', 'connections.sectionTitle' => 'Tilkoblinger', 'connections.addConnection' => 'Legg til tilkobling', 'connections.addConnectionSubtitleNoProfile' => 'Logg inn med Plex eller koble til en Jellyfin-server', @@ -2770,7 +2737,6 @@ extension on TranslationsNb { 'connections.editJellyfinTitle' => 'Rediger Jellyfin-tilkobling', 'connections.editJellyfinIntro' => ({required Object serverName}) => 'Legg til eller fjern URL-er for ${serverName}. Plezy bruker den tilgjengelige URL-en med lavest forsinkelse.', 'discover.title' => 'Oppdag', - 'discover.switchProfile' => 'Bytt profil', 'discover.noContentAvailable' => 'Ingen innhold tilgjengelig', 'discover.addMediaToLibraries' => 'Legg til medier i bibliotekene dine', 'discover.continueWatching' => 'Fortsett å se', @@ -2797,8 +2763,6 @@ extension on TranslationsNb { 'errors.connectionFailed' => 'Kan ikke koble til medieserver', 'errors.failedToLoad' => ({required Object context, required Object error}) => 'Kunne ikke laste ${context}: ${error}', 'errors.noClientAvailable' => 'Ingen klient tilgjengelig', - 'errors.authenticationFailed' => ({required Object error}) => 'Autentisering mislyktes: ${error}', - 'errors.couldNotLaunchUrl' => 'Kunne ikke åpne autentiserings-URL', 'errors.pleaseEnterToken' => 'Vennligst skriv inn et token', 'errors.invalidToken' => 'Ugyldig token', 'errors.failedToVerifyToken' => ({required Object error}) => 'Kunne ikke verifisere token: ${error}', @@ -2823,6 +2787,8 @@ extension on TranslationsNb { 'libraries.allLibrariesHidden' => 'Alle biblioteker er skjult', 'libraries.hiddenLibrariesCount' => ({required Object count}) => 'Skjulte biblioteker (${count})', 'libraries.thisLibraryIsEmpty' => 'Dette biblioteket er tomt', + 'libraries.noItemsMatchFilters' => 'Ingen elementer samsvarer med de aktive filtrene', + 'libraries.resetFilters' => 'Tilbakestill filtre', 'libraries.all' => 'Alle', 'libraries.clearAll' => 'Tøm alle', 'libraries.scanLibraryConfirm' => ({required Object title}) => 'Er du sikker på at du vil skanne "${title}"?', @@ -2871,7 +2837,6 @@ extension on TranslationsNb { 'libraries.sortLabels.communityRating' => 'Fellesskapsvurdering', 'libraries.sortLabels.criticRating' => 'Kritikervurdering', 'libraries.sortLabels.userRating' => 'Brukervurdering', - 'libraries.sortLabels.lastPlayed' => 'Sist spilt', 'libraries.sortLabels.datePlayed' => 'Avspillingsdato', 'libraries.sortLabels.playCount' => 'Avspillinger', 'libraries.sortLabels.productionYear' => 'Produksjonsår', @@ -2885,14 +2850,11 @@ extension on TranslationsNb { 'libraries.sortLabels.dateShared' => 'Delingsdato', 'libraries.sortLabels.latestEpisodeAirDate' => 'Siste episodes sendedato', 'libraries.sortLabels.lastEpisodeDateAdded' => 'Dato for sist lagt til episode', - 'libraries.noItemsMatchFilters' => 'Ingen elementer samsvarer med de aktive filtrene', - 'libraries.resetFilters' => 'Tilbakestill filtre', 'about.title' => 'Om', 'about.openSourceLicenses' => 'Åpen kildekode-lisenser', 'about.versionLabel' => ({required Object version}) => 'Versjon ${version}', 'about.appDescription' => 'En vakker Plex- og Jellyfin-klient for Flutter', 'about.viewLicensesDescription' => 'Vis lisenser for tredjepartsbiblioteker', - 'serverSelection.allServerConnectionsFailed' => 'Kunne ikke koble til noen servere. Sjekk nettverket ditt.', 'serverSelection.noServersFoundForAccount' => ({required Object username, required Object email}) => 'Ingen servere funnet for ${username} (${email})', 'serverSelection.failedToLoadServers' => ({required Object error}) => 'Kunne ikke laste servere: ${error}', 'hubDetail.title' => 'Tittel', @@ -2926,10 +2888,6 @@ extension on TranslationsNb { 'explore.rows.trending' => 'Trending', 'explore.rows.upcomingMovies' => 'Kommende filmer', 'explore.rows.upcomingShows' => 'Kommende serier', - 'explore.searchHint' => ({required Object source}) => 'Søk i ${source}', - 'explore.searchEmpty' => ({required Object query}) => 'Ingen treff for "${query}"', - 'explore.searchPrompt' => ({required Object source}) => 'Søk etter filmer og serier på ${source}.', - 'explore.searchFailed' => 'Søk mislyktes. Sjekk tilkoblingen og prøv igjen.', 'explore.status.airing' => 'Sendes', 'explore.status.ended' => 'Avsluttet', 'explore.status.canceled' => 'Avlyst', @@ -2942,14 +2900,19 @@ extension on TranslationsNb { 'explore.watchlistUpdateFailed' => 'Kunne ikke oppdatere ønskelisten', 'explore.notInLibrary' => 'Ikke i biblioteket ditt', 'explore.inTheseLibraries' => 'I disse bibliotekene', - 'explore.availableOn' => ({required Object server}) => 'Tilgjengelig på ${server}', 'explore.checkingLibrary' => 'Sjekker biblioteket ditt...', 'explore.emptyTitle' => 'Ingenting her ennå', 'explore.emptyMessage' => ({required Object source}) => 'Rader fra ${source} vises her når de har innhold.', + 'explore.searchHint' => ({required Object source}) => 'Søk i ${source}', + 'explore.searchEmpty' => ({required Object query}) => 'Ingen treff for "${query}"', + 'explore.searchPrompt' => ({required Object source}) => 'Søk etter filmer og serier på ${source}.', + 'explore.searchFailed' => 'Søk mislyktes. Sjekk tilkoblingen og prøv igjen.', 'liveTv.title' => 'Direkte-TV', 'liveTv.guide' => 'Programguide', 'liveTv.noChannels' => 'Ingen kanaler tilgjengelig', 'liveTv.noDvr' => 'Ingen DVR konfigurert på noen server', + 'liveTv.serverUnavailable' => 'Direkte-TV-serveren er ikke tilgjengelig.', + 'liveTv.serverNotConnected' => 'Direkte-TV-serveren er ikke tilkoblet.', 'liveTv.noPrograms' => 'Ingen programdata tilgjengelig', 'liveTv.liveStreamFailed' => 'Direktesending mislyktes', 'liveTv.unknownProgram' => 'Ukjent program', @@ -2985,7 +2948,6 @@ extension on TranslationsNb { 'liveTv.scheduledRecordings' => 'Planlagt', 'liveTv.recordingRules' => 'Opptaksregler', 'liveTv.noScheduledRecordings' => 'Ingen planlagte opptak', - 'liveTv.noRecordingRules' => 'Ingen opptaksregler ennå', 'liveTv.manageRecording' => 'Administrer opptak', 'liveTv.cancelRecording' => 'Avbryt opptak', 'liveTv.cancelRecordingTitle' => 'Avbryte dette opptaket?', @@ -3002,7 +2964,6 @@ extension on TranslationsNb { 'liveTv.recordingCancelled' => 'Opptak avbrutt', 'liveTv.recordingRuleDeleted' => 'Opptaksregel slettet', 'liveTv.processRecordingRules' => 'Vurder regler på nytt', - 'liveTv.loadingRecordings' => 'Laster opptak ...', 'liveTv.recordingInProgress' => 'Tar opp nå', 'liveTv.recordingsCount' => ({required Object count}) => '${count} planlagt', 'liveTv.editRule' => 'Rediger regel', @@ -3014,7 +2975,6 @@ extension on TranslationsNb { 'collections.title' => 'Samlinger', 'collections.collection' => 'Samling', 'collections.empty' => 'Samlingen er tom', - 'collections.unknownLibrarySection' => 'Kan ikke slette: Ukjent bibliotekseksjon', 'collections.deleteCollection' => 'Slett samling', 'collections.deleteConfirm' => ({required Object title}) => 'Slette "${title}"? Dette kan ikke angres.', 'collections.deleted' => 'Samling slettet', @@ -3052,6 +3012,7 @@ extension on TranslationsNb { 'playlists.itemAdded' => 'Lagt til i spilleliste', 'playlists.itemRemoved' => 'Fjernet fra spilleliste', 'playlists.selectPlaylist' => 'Velg spilleliste', + 'playlists.searchPlaylists' => 'Søk i spillelister...', 'playlists.errorCreating' => 'Kunne ikke opprette spilleliste', 'playlists.errorDeleting' => 'Kunne ikke slette spilleliste', 'playlists.errorLoading' => 'Kunne ikke laste spillelister', @@ -3134,22 +3095,20 @@ extension on TranslationsNb { 'watchTogether.participantResumed' => ({required Object name}) => '${name} gjenopptok', 'watchTogether.participantSeeked' => ({required Object name}) => '${name} spolet', 'watchTogether.participantBuffering' => ({required Object name}) => '${name} buffrer', + 'watchTogether.participantNeedsUpdate' => ({required Object name}) => '${name} bruker en eldre appversjon — synkronisering er ikke tilgjengelig', + 'watchTogether.resumingWithout' => ({required Object name}) => 'Fortsetter uten ${name}', 'watchTogether.waitingForParticipants' => 'Venter på at andre laster inn...', + 'watchTogether.waitingForName' => ({required Object name}) => 'Venter på ${name}...', 'watchTogether.recentRooms' => 'Nylige rom', 'watchTogether.renameRoom' => 'Gi nytt navn til rom', 'watchTogether.removeRoom' => 'Fjern', 'watchTogether.guestSwitchUnavailable' => 'Kunne ikke bytte — server ikke tilgjengelig for synkronisering', 'watchTogether.guestSwitchFailed' => 'Kunne ikke bytte — innhold ble ikke funnet på denne serveren', - 'watchTogether.participantNeedsUpdate' => ({required Object name}) => '${name} bruker en eldre appversjon — synkronisering er ikke tilgjengelig', - 'watchTogether.resumingWithout' => ({required Object name}) => 'Fortsetter uten ${name}', - 'watchTogether.waitingForName' => ({required Object name}) => 'Venter på ${name}...', 'downloads.title' => 'Nedlastinger', 'downloads.manage' => 'Administrer', 'downloads.tvShows' => 'TV-serier', 'downloads.movies' => 'Filmer', 'downloads.music' => 'Musikk', - _ => null, - } ?? switch (path) { 'downloads.tracksQueued' => ({required Object count}) => '${count} spor i nedlastingskø', 'downloads.noDownloads' => 'Ingen nedlastinger ennå', 'downloads.noDownloadsDescription' => 'Nedlastet innhold vil vises her for frakoblet visning', @@ -3164,6 +3123,8 @@ extension on TranslationsNb { 'downloads.deleteConfirm' => ({required Object title}) => 'Slette "${title}" fra denne enheten?', 'downloads.cancelledDownloadTitle' => 'Avbrutt nedlasting', 'downloads.cancelledDownloadMessage' => 'Denne nedlastingen ble avbrutt. Hva vil du gjøre?', + _ => null, + } ?? switch (path) { 'downloads.allEpisodesAlreadyDownloaded' => 'Alle episoder er allerede lastet ned', 'downloads.resumeDownload' => 'Gjenoppta nedlasting', 'downloads.cancelledDownload' => 'Avbrutt nedlasting', @@ -3187,7 +3148,6 @@ extension on TranslationsNb { 'downloads.customAmount' => 'Egendefinert antall...', 'downloads.includeSpecials' => 'Inkluder spesialepisoder', 'downloads.howManyEpisodes' => 'Hvor mange episoder?', - 'downloads.itemsQueued' => ({required Object count}) => '${count} elementer i nedlastingskø', 'downloads.keepSynced' => 'Hold synkronisert', 'downloads.downloadOnce' => 'Last ned én gang', 'downloads.keepNUnwatched' => ({required Object count}) => 'Behold ${count} usette', @@ -3231,7 +3191,6 @@ extension on TranslationsNb { 'companionRemote.connectedTo' => ({required Object name}) => 'Tilkoblet ${name}', 'companionRemote.unknownDevice' => 'Ukjent enhet', 'companionRemote.session.startingServer' => 'Starter fjernserver...', - 'companionRemote.session.failedToCreate' => 'Kunne ikke starte fjernserver:', 'companionRemote.session.hostAddress' => 'Vertsadresse', 'companionRemote.session.connected' => 'Tilkoblet', 'companionRemote.session.serverRunning' => 'Fjernserver aktiv', @@ -3286,6 +3245,8 @@ extension on TranslationsNb { 'companionRemote.remote.searchHint' => 'Søk på stasjonær...', 'companionRemote.errors.noNetworkInterface' => 'Fant ingen nettverksgrensesnitt', 'companionRemote.errors.authenticationFailed' => 'Autentisering mislyktes', + 'companionRemote.errors.serverStartFailed' => ({required Object error}) => 'Kunne ikke starte fjernserveren: ${error}', + 'companionRemote.errors.commandFailed' => ({required Object error}) => 'Kunne ikke sende fjernkommando: ${error}', 'companionRemote.errors.joinTimedOut' => 'Tidsavbrudd ved tilkobling til økt', 'companionRemote.errors.failedToConnectAnyAddress' => 'Kunne ikke koble til noen adresse', 'companionRemote.errors.connectionLostAfterAttempts' => ({required Object attempts}) => 'Tilkobling mistet etter ${attempts} forsøk', @@ -3530,7 +3491,6 @@ extension on TranslationsNb { 'addServer.quickConnectFailed' => ({required Object error}) => 'Quick Connect mislyktes: ${error}', 'addServer.addPlexTitle' => 'Logg på med Plex', 'addServer.pinExpired' => 'PIN-koden gikk ut før pålogging. Prøv igjen.', - 'addServer.duplicatePlexAccount' => 'Allerede logget inn på Plex. Logg ut for å bytte konto.', 'addServer.failedToRegisterAccount' => ({required Object error}) => 'Kunne ikke registrere kontoen: ${error}', 'addServer.enterJellyfinUrlError' => 'Oppgi URL-en til Jellyfin-serveren din', 'addServer.addConnectionTitle' => 'Legg til tilkobling', diff --git a/lib/i18n/strings_nl.g.dart b/lib/i18n/strings_nl.g.dart index 02e050e1..d10f8abd 100644 --- a/lib/i18n/strings_nl.g.dart +++ b/lib/i18n/strings_nl.g.dart @@ -53,7 +53,6 @@ class TranslationsNl extends Translations with BaseTranslations 'Inloggen'; @override String get signInWithPlex => 'Inloggen met Plex'; @override String get showQRCode => 'Toon QR-code'; @override String get authenticate => 'Authenticeren'; @@ -167,10 +165,8 @@ class _TranslationsCommonNl extends TranslationsCommonEn { @override String episodeNumberTitle({required Object number, required Object title}) => 'Aflevering ${number} - ${title}'; @override String chapterNumber({required Object number}) => 'Hoofdstuk ${number}'; @override String get reconnect => 'Opnieuw verbinden'; - @override String get exit => 'Afsluiten'; @override String get viewAll => 'Alles weergeven'; @override String get checkingNetwork => 'Netwerk controleren...'; - @override String get refreshingServers => 'Servers vernieuwen...'; @override String get loadingServers => 'Servers laden...'; @override String get connectingToServers => 'Verbinden met servers...'; @override String get startingOfflineMode => 'Offlinemodus starten...'; @@ -271,6 +267,12 @@ class _TranslationsSettingsNl extends TranslationsSettingsEn { @override String get tvFullCardLayoutDescription => 'Gebruik tv-kaarten met alleen afbeeldingen en namen van acteurs als overlay'; @override String get focusGlow => 'Focusgloed'; @override String get focusGlowDescription => 'Toon een zachte gloed rond de kaart met focus'; + @override String get visualEffects => 'Visuele effecten'; + @override String get visualEffectsAuto => 'Automatisch'; + @override String get visualEffectsAutoDescription => 'Effecten automatisch verminderen op apparaten met laag vermogen'; + @override String get visualEffectsFull => 'Volledig'; + @override String get visualEffectsReduced => 'Verminderd'; + @override String get visualEffectsReducedDescription => 'Minder animaties en illustraties met lagere resolutie'; @override String get hideSpoilers => 'Spoilers voor ongekeken afleveringen verbergen'; @override String get hideSpoilersDescription => 'Vervaag miniaturen en beschrijvingen voor niet-bekeken afleveringen'; @override String get playerBackend => 'Speler backend'; @@ -283,7 +285,7 @@ class _TranslationsSettingsNl extends TranslationsSettingsEn { @override String get bufferSizeAuto => 'Auto (Aanbevolen)'; @override String bufferSizeWarning({required Object heap, required Object size}) => '${heap}MB geheugen beschikbaar. Een buffer van ${size}MB kan afspelen beïnvloeden.'; @override String get defaultQualityTitle => 'Standaardkwaliteit'; - @override String get defaultQualityDescription => 'Wordt gebruikt bij het starten van de weergave. Lagere waarden verminderen de bandbreedte.'; + @override String get musicQualityTitle => 'Muziekkwaliteit'; @override String get subtitleStyling => 'Ondertitel opmaak'; @override String get subtitleStylingDescription => 'Pas ondertitel uiterlijk aan'; @override String get smallSkipDuration => 'Korte skip duur'; @@ -377,10 +379,9 @@ class _TranslationsSettingsNl extends TranslationsSettingsEn { @override String maxVolumePercent({required Object percent}) => '${percent}%'; @override String get discordRichPresence => 'Discord Rich Presence'; @override String get discordRichPresenceDescription => 'Toon op Discord wat je aan het kijken bent'; - @override String get trakt => 'Trakt'; - @override String get traktDescription => 'Kijkgeschiedenis synchroniseren met Trakt'; @override String get services => 'Services'; @override String get servicesDescription => 'Verbind Trakt, MyAnimeList, Seerr en meer'; + @override String get manageLibrariesDescription => 'Bibliotheken herordenen en verbergen'; @override String get companionRemoteServer => 'Companion Remote-server'; @override String get companionRemoteServerDescription => 'Sta mobiele apparaten op je netwerk toe om deze app te bedienen'; @override String get autoPip => 'Automatische beeld-in-beeld'; @@ -443,7 +444,6 @@ class _TranslationsSettingsNl extends TranslationsSettingsEn { @override String get showNavBarLabels => 'Navigatiebalk labels tonen'; @override String get showNavBarLabelsDescription => 'Tekstlabels onder de pictogrammen van de navigatiebalk weergeven'; @override String get startupSection => 'Opstartsectie'; - @override String get startupSectionDescription => 'Kies welke sectie Plezy opent bij het opstarten'; @override String get liveTvDefaultFavorites => 'Standaard favoriete zenders'; @override String get liveTvDefaultFavoritesDescription => 'Toon alleen favoriete zenders bij het openen van Live TV'; @override String get display => 'Weergave'; @@ -455,13 +455,6 @@ class _TranslationsSettingsNl extends TranslationsSettingsEn { @override String get subtitlesAndConfig => 'Ondertitels en configuratie'; @override String get seekAndTiming => 'Zoeken en timing'; @override String get behavior => 'Gedrag'; - @override String get manageLibrariesDescription => 'Bibliotheken herordenen en verbergen'; - @override String get visualEffects => 'Visuele effecten'; - @override String get visualEffectsAuto => 'Automatisch'; - @override String get visualEffectsAutoDescription => 'Effecten automatisch verminderen op apparaten met laag vermogen'; - @override String get visualEffectsFull => 'Volledig'; - @override String get visualEffectsReduced => 'Verminderd'; - @override String get visualEffectsReducedDescription => 'Minder animaties en illustraties met lagere resolutie'; } // Path: search @@ -559,14 +552,11 @@ class _TranslationsRateSheetNl extends TranslationsRateSheetEn { // Translations @override String get title => 'Beoordelen'; @override String get server => 'Server'; - @override String starValue({required Object rating}) => '${rating} / 5'; - @override String scoreValue({required Object score}) => '${score} / 10'; - @override String get setScore => 'Score instellen'; + @override String get favorite => 'Favoriet'; + @override String get favorited => 'Toegevoegd aan favorieten'; @override String get saved => 'Opgeslagen'; @override String get notAvailable => 'Geen match gevonden'; @override String get noConnectedServices => 'Verbind een service in Instellingen om daar te beoordelen.'; - @override String get favorite => 'Favoriet'; - @override String get favorited => 'Toegevoegd aan favorieten'; } // Path: accessibility @@ -584,6 +574,14 @@ class _TranslationsAccessibilityNl extends TranslationsAccessibilityEn { @override String mediaCardPartiallyWatched({required Object percent}) => '${percent} procent bekeken'; @override String get mediaCardUnwatched => 'niet bekeken'; @override String get tapToPlay => 'Tik om af te spelen'; + @override String get decrease => 'Verlagen'; + @override String get increase => 'Verhogen'; + @override String decreaseValue({required Object label}) => '${label} verlagen'; + @override String increaseValue({required Object label}) => '${label} verhogen'; + @override String get hue => 'Tint'; + @override String get saturation => 'Verzadiging'; + @override String get brightness => 'Helderheid'; + @override String get hexColor => 'Hexkleur'; } // Path: tooltips @@ -643,13 +641,11 @@ class _TranslationsVideoControlsNl extends TranslationsVideoControlsEn { @override String get settingsButton => 'Afspeelinstellingen'; @override String get tracksButton => 'Audio en ondertitels'; @override String get chaptersButton => 'Hoofdstukken'; - @override String get versionsButton => 'Videoversies'; @override String get versionQualityButton => 'Versie en kwaliteit'; @override String get versionColumnHeader => 'Versie'; @override String get qualityColumnHeader => 'Kwaliteit'; @override String get qualityOriginal => 'Origineel'; @override String qualityPresetLabel({required Object resolution, required Object bitrate}) => '${resolution}p ${bitrate} Mbps'; - @override String qualityBandwidthEstimate({required Object bitrate}) => '~${bitrate} Mbps'; @override String get transcodeUnavailableFallback => 'Transcoderen niet beschikbaar — originele kwaliteit wordt afgespeeld'; @override String get pipButton => 'Beeld-in-beeld modus'; @override String get aspectRatioButton => 'Beeldverhouding'; @@ -685,19 +681,6 @@ class _TranslationsVideoControlsNl extends TranslationsVideoControlsEn { @override String get searchLanguages => 'Talen zoeken...'; } -// Path: userStatus -class _TranslationsUserStatusNl extends TranslationsUserStatusEn { - _TranslationsUserStatusNl._(TranslationsNl root) : this._root = root, super.internal(root); - - final TranslationsNl _root; // ignore: unused_field - - // Translations - @override String get admin => 'Beheerder'; - @override String get restricted => 'Beperkt'; - @override String get protected => 'Beschermd'; - @override String get current => 'HUIDIG'; -} - // Path: messages class _TranslationsMessagesNl extends TranslationsMessagesEn { _TranslationsMessagesNl._(TranslationsNl root) : this._root = root, super.internal(root); @@ -873,7 +856,6 @@ class _TranslationsProfilesNl extends TranslationsProfilesEn { @override String get pinExplain => '4-cijferige PIN vereist om profielen te wisselen.'; @override String get continueButton => 'Doorgaan'; @override String get pinsDontMatch => 'PIN-codes komen niet overeen'; - @override String get initializeServicesFailed => 'Kan profielservices niet initialiseren'; } // Path: connections @@ -902,7 +884,6 @@ class _TranslationsDiscoverNl extends TranslationsDiscoverEn { // Translations @override String get title => 'Ontdekken'; - @override String get switchProfile => 'Wissel van profiel'; @override String get noContentAvailable => 'Geen inhoud beschikbaar'; @override String get addMediaToLibraries => 'Voeg wat media toe aan je bibliotheken'; @override String get continueWatching => 'Verder kijken'; @@ -938,8 +919,6 @@ class _TranslationsErrorsNl extends TranslationsErrorsEn { @override String get connectionFailed => 'Kan geen verbinding maken met mediaserver'; @override String failedToLoad({required Object context, required Object error}) => 'Kon ${context} niet laden: ${error}'; @override String get noClientAvailable => 'Geen client beschikbaar'; - @override String authenticationFailed({required Object error}) => 'Authenticatie mislukt: ${error}'; - @override String get couldNotLaunchUrl => 'Kon auth URL niet openen'; @override String get pleaseEnterToken => 'Voer een token in'; @override String get invalidToken => 'Ongeldig token'; @override String failedToVerifyToken({required Object error}) => 'Kon token niet verifiëren: ${error}'; @@ -973,6 +952,8 @@ class _TranslationsLibrariesNl extends TranslationsLibrariesEn { @override String get allLibrariesHidden => 'Alle bibliotheken zijn verborgen'; @override String hiddenLibrariesCount({required Object count}) => 'Verborgen bibliotheken (${count})'; @override String get thisLibraryIsEmpty => 'Deze bibliotheek is leeg'; + @override String get noItemsMatchFilters => 'Geen items komen overeen met de actieve filters'; + @override String get resetFilters => 'Filters opnieuw instellen'; @override String get all => 'Alles'; @override String get clearAll => 'Alles wissen'; @override String scanLibraryConfirm({required Object title}) => 'Weet je zeker dat je "${title}" wilt scannen?'; @@ -998,8 +979,6 @@ class _TranslationsLibrariesNl extends TranslationsLibrariesEn { @override late final _TranslationsLibrariesGroupingsNl groupings = _TranslationsLibrariesGroupingsNl._(_root); @override late final _TranslationsLibrariesFilterCategoriesNl filterCategories = _TranslationsLibrariesFilterCategoriesNl._(_root); @override late final _TranslationsLibrariesSortLabelsNl sortLabels = _TranslationsLibrariesSortLabelsNl._(_root); - @override String get noItemsMatchFilters => 'Geen items komen overeen met de actieve filters'; - @override String get resetFilters => 'Filters opnieuw instellen'; } // Path: about @@ -1023,7 +1002,6 @@ class _TranslationsServerSelectionNl extends TranslationsServerSelectionEn { final TranslationsNl _root; // ignore: unused_field // Translations - @override String get allServerConnectionsFailed => 'Kon met geen enkele server verbinden. Controleer je netwerk.'; @override String noServersFoundForAccount({required Object username, required Object email}) => 'Geen servers gevonden voor ${username} (${email})'; @override String failedToLoadServers({required Object error}) => 'Kon servers niet laden: ${error}'; } @@ -1090,10 +1068,6 @@ class _TranslationsExploreNl extends TranslationsExploreEn { @override String get title => 'Verkennen'; @override String get selectSource => 'Bron kiezen'; @override late final _TranslationsExploreRowsNl rows = _TranslationsExploreRowsNl._(_root); - @override String searchHint({required Object source}) => 'Zoeken in ${source}'; - @override String searchEmpty({required Object query}) => 'Geen resultaten voor "${query}"'; - @override String searchPrompt({required Object source}) => 'Zoek naar films en series op ${source}.'; - @override String get searchFailed => 'Zoeken mislukt. Controleer je verbinding en probeer opnieuw.'; @override late final _TranslationsExploreStatusNl status = _TranslationsExploreStatusNl._(_root); @override String episodeCount({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('nl'))(n, one: '${n} aflevering', @@ -1106,10 +1080,13 @@ class _TranslationsExploreNl extends TranslationsExploreEn { @override String get watchlistUpdateFailed => 'Kon kijklijst niet bijwerken'; @override String get notInLibrary => 'Niet in je bibliotheek'; @override String get inTheseLibraries => 'In deze bibliotheken'; - @override String availableOn({required Object server}) => 'Beschikbaar op ${server}'; @override String get checkingLibrary => 'Je bibliotheek controleren...'; @override String get emptyTitle => 'Hier is nog niets'; @override String emptyMessage({required Object source}) => 'Rijen van ${source} verschijnen hier zodra ze inhoud hebben.'; + @override String searchHint({required Object source}) => 'Zoeken in ${source}'; + @override String searchEmpty({required Object query}) => 'Geen resultaten voor "${query}"'; + @override String searchPrompt({required Object source}) => 'Zoek naar films en series op ${source}.'; + @override String get searchFailed => 'Zoeken mislukt. Controleer je verbinding en probeer opnieuw.'; } // Path: liveTv @@ -1123,6 +1100,8 @@ class _TranslationsLiveTvNl extends TranslationsLiveTvEn { @override String get guide => 'Gids'; @override String get noChannels => 'Geen zenders beschikbaar'; @override String get noDvr => 'Geen DVR geconfigureerd op een server'; + @override String get serverUnavailable => 'De live-tv-server is niet beschikbaar.'; + @override String get serverNotConnected => 'De live-tv-server is niet verbonden.'; @override String get noPrograms => 'Geen programmagegevens beschikbaar'; @override String get liveStreamFailed => 'Livestream mislukt'; @override String get unknownProgram => 'Onbekend programma'; @@ -1158,7 +1137,6 @@ class _TranslationsLiveTvNl extends TranslationsLiveTvEn { @override String get scheduledRecordings => 'Gepland'; @override String get recordingRules => 'Opnameregels'; @override String get noScheduledRecordings => 'Geen geplande opnames'; - @override String get noRecordingRules => 'Nog geen opnameregels'; @override String get manageRecording => 'Opname beheren'; @override String get cancelRecording => 'Opname annuleren'; @override String get cancelRecordingTitle => 'Deze opname annuleren?'; @@ -1175,7 +1153,6 @@ class _TranslationsLiveTvNl extends TranslationsLiveTvEn { @override String get recordingCancelled => 'Opname geannuleerd'; @override String get recordingRuleDeleted => 'Opnameregel verwijderd'; @override String get processRecordingRules => 'Regels opnieuw evalueren'; - @override String get loadingRecordings => 'Opnames laden...'; @override String get recordingInProgress => 'Nu aan het opnemen'; @override String recordingsCount({required Object count}) => '${count} gepland'; @override String get editRule => 'Regel bewerken'; @@ -1196,7 +1173,6 @@ class _TranslationsCollectionsNl extends TranslationsCollectionsEn { @override String get title => 'Collecties'; @override String get collection => 'Collectie'; @override String get empty => 'Collectie is leeg'; - @override String get unknownLibrarySection => 'Kan niet verwijderen: onbekende bibliotheeksectie'; @override String get deleteCollection => 'Collectie verwijderen'; @override String deleteConfirm({required Object title}) => '"${title}" verwijderen? Dit kan niet ongedaan worden gemaakt.'; @override String get deleted => 'Collectie verwijderd'; @@ -1243,6 +1219,7 @@ class _TranslationsPlaylistsNl extends TranslationsPlaylistsEn { @override String get itemAdded => 'Toegevoegd aan afspeellijst'; @override String get itemRemoved => 'Verwijderd uit afspeellijst'; @override String get selectPlaylist => 'Selecteer afspeellijst'; + @override String get searchPlaylists => 'Afspeellijsten zoeken...'; @override String get errorCreating => 'Fout bij maken afspeellijst'; @override String get errorDeleting => 'Fout bij verwijderen afspeellijst'; @override String get errorLoading => 'Fout bij laden afspeellijsten'; @@ -1346,15 +1323,15 @@ class _TranslationsWatchTogetherNl extends TranslationsWatchTogetherEn { @override String participantResumed({required Object name}) => '${name} heeft hervat'; @override String participantSeeked({required Object name}) => '${name} heeft gespoeld'; @override String participantBuffering({required Object name}) => '${name} is aan het bufferen'; + @override String participantNeedsUpdate({required Object name}) => '${name} gebruikt een oudere appversie — synchronisatie niet beschikbaar'; + @override String resumingWithout({required Object name}) => 'Hervatten zonder ${name}'; @override String get waitingForParticipants => 'Wachten tot anderen geladen zijn...'; + @override String waitingForName({required Object name}) => 'Wachten op ${name}...'; @override String get recentRooms => 'Recente kamers'; @override String get renameRoom => 'Kamer hernoemen'; @override String get removeRoom => 'Verwijderen'; @override String get guestSwitchUnavailable => 'Kon niet schakelen — server niet beschikbaar voor synchronisatie'; @override String get guestSwitchFailed => 'Kon niet schakelen — inhoud niet gevonden op deze server'; - @override String participantNeedsUpdate({required Object name}) => '${name} gebruikt een oudere appversie — synchronisatie niet beschikbaar'; - @override String resumingWithout({required Object name}) => 'Hervatten zonder ${name}'; - @override String waitingForName({required Object name}) => 'Wachten op ${name}...'; } // Path: downloads @@ -1406,7 +1383,6 @@ class _TranslationsDownloadsNl extends TranslationsDownloadsEn { @override String get customAmount => 'Aangepast aantal...'; @override String get includeSpecials => 'Specials opnemen'; @override String get howManyEpisodes => 'Hoeveel afleveringen?'; - @override String itemsQueued({required Object count}) => '${count} items in downloadwachtrij'; @override String get keepSynced => 'Gesynchroniseerd houden'; @override String get downloadOnce => 'Eenmalig downloaden'; @override String keepNUnwatched({required Object count}) => '${count} onbekeken behouden'; @@ -1780,7 +1756,6 @@ class _TranslationsAddServerNl extends TranslationsAddServerEn { @override String quickConnectFailed({required Object error}) => 'Quick Connect mislukt: ${error}'; @override String get addPlexTitle => 'Inloggen met Plex'; @override String get pinExpired => 'PIN verlopen vóór inloggen. Probeer opnieuw.'; - @override String get duplicatePlexAccount => 'Al aangemeld bij Plex. Meld je af om van account te wisselen.'; @override String failedToRegisterAccount({required Object error}) => 'Account registreren mislukt: ${error}'; @override String get enterJellyfinUrlError => 'Voer de URL van je Jellyfin-server in'; @override String get addConnectionTitle => 'Verbinding toevoegen'; @@ -1906,7 +1881,6 @@ class _TranslationsLibrariesSortLabelsNl extends TranslationsLibrariesSortLabels @override String get communityRating => 'Communitybeoordeling'; @override String get criticRating => 'Criticusbeoordeling'; @override String get userRating => 'Gebruikersbeoordeling'; - @override String get lastPlayed => 'Laatst afgespeeld'; @override String get datePlayed => 'Afspeeldatum'; @override String get playCount => 'Aantal afspelingen'; @override String get productionYear => 'Productiejaar'; @@ -1965,7 +1939,6 @@ class _TranslationsCompanionRemoteSessionNl extends TranslationsCompanionRemoteS // Translations @override String get startingServer => 'Externe server starten...'; - @override String get failedToCreate => 'Kan externe server niet starten:'; @override String get hostAddress => 'Hostadres'; @override String get connected => 'Verbonden'; @override String get serverRunning => 'Externe server actief'; @@ -2047,6 +2020,8 @@ class _TranslationsCompanionRemoteErrorsNl extends TranslationsCompanionRemoteEr // Translations @override String get noNetworkInterface => 'Geen netwerkinterface gevonden'; @override String get authenticationFailed => 'Authenticatie mislukt'; + @override String serverStartFailed({required Object error}) => 'Kan de externe server niet starten: ${error}'; + @override String commandFailed({required Object error}) => 'Kan de externe opdracht niet verzenden: ${error}'; @override String get joinTimedOut => 'Time-out bij deelnemen aan sessie'; @override String get failedToConnectAnyAddress => 'Kan met geen enkel adres verbinden'; @override String connectionLostAfterAttempts({required Object attempts}) => 'Verbinding verloren na ${attempts} pogingen'; @@ -2123,7 +2098,6 @@ extension on TranslationsNl { dynamic _flatMapFunction(String path) { return switch (path) { 'app.title' => 'Plezy', - 'auth.signIn' => 'Inloggen', 'auth.signInWithPlex' => 'Inloggen met Plex', 'auth.showQRCode' => 'Toon QR-code', 'auth.authenticate' => 'Authenticeren', @@ -2174,10 +2148,8 @@ extension on TranslationsNl { 'common.episodeNumberTitle' => ({required Object number, required Object title}) => 'Aflevering ${number} - ${title}', 'common.chapterNumber' => ({required Object number}) => 'Hoofdstuk ${number}', 'common.reconnect' => 'Opnieuw verbinden', - 'common.exit' => 'Afsluiten', 'common.viewAll' => 'Alles weergeven', 'common.checkingNetwork' => 'Netwerk controleren...', - 'common.refreshingServers' => 'Servers vernieuwen...', 'common.loadingServers' => 'Servers laden...', 'common.connectingToServers' => 'Verbinden met servers...', 'common.startingOfflineMode' => 'Offlinemodus starten...', @@ -2251,6 +2223,12 @@ extension on TranslationsNl { 'settings.tvFullCardLayoutDescription' => 'Gebruik tv-kaarten met alleen afbeeldingen en namen van acteurs als overlay', 'settings.focusGlow' => 'Focusgloed', 'settings.focusGlowDescription' => 'Toon een zachte gloed rond de kaart met focus', + 'settings.visualEffects' => 'Visuele effecten', + 'settings.visualEffectsAuto' => 'Automatisch', + 'settings.visualEffectsAutoDescription' => 'Effecten automatisch verminderen op apparaten met laag vermogen', + 'settings.visualEffectsFull' => 'Volledig', + 'settings.visualEffectsReduced' => 'Verminderd', + 'settings.visualEffectsReducedDescription' => 'Minder animaties en illustraties met lagere resolutie', 'settings.hideSpoilers' => 'Spoilers voor ongekeken afleveringen verbergen', 'settings.hideSpoilersDescription' => 'Vervaag miniaturen en beschrijvingen voor niet-bekeken afleveringen', 'settings.playerBackend' => 'Speler backend', @@ -2263,7 +2241,7 @@ extension on TranslationsNl { 'settings.bufferSizeAuto' => 'Auto (Aanbevolen)', 'settings.bufferSizeWarning' => ({required Object heap, required Object size}) => '${heap}MB geheugen beschikbaar. Een buffer van ${size}MB kan afspelen beïnvloeden.', 'settings.defaultQualityTitle' => 'Standaardkwaliteit', - 'settings.defaultQualityDescription' => 'Wordt gebruikt bij het starten van de weergave. Lagere waarden verminderen de bandbreedte.', + 'settings.musicQualityTitle' => 'Muziekkwaliteit', 'settings.subtitleStyling' => 'Ondertitel opmaak', 'settings.subtitleStylingDescription' => 'Pas ondertitel uiterlijk aan', 'settings.smallSkipDuration' => 'Korte skip duur', @@ -2357,10 +2335,9 @@ extension on TranslationsNl { 'settings.maxVolumePercent' => ({required Object percent}) => '${percent}%', 'settings.discordRichPresence' => 'Discord Rich Presence', 'settings.discordRichPresenceDescription' => 'Toon op Discord wat je aan het kijken bent', - 'settings.trakt' => 'Trakt', - 'settings.traktDescription' => 'Kijkgeschiedenis synchroniseren met Trakt', 'settings.services' => 'Services', 'settings.servicesDescription' => 'Verbind Trakt, MyAnimeList, Seerr en meer', + 'settings.manageLibrariesDescription' => 'Bibliotheken herordenen en verbergen', 'settings.companionRemoteServer' => 'Companion Remote-server', 'settings.companionRemoteServerDescription' => 'Sta mobiele apparaten op je netwerk toe om deze app te bedienen', 'settings.autoPip' => 'Automatische beeld-in-beeld', @@ -2423,7 +2400,6 @@ extension on TranslationsNl { 'settings.showNavBarLabels' => 'Navigatiebalk labels tonen', 'settings.showNavBarLabelsDescription' => 'Tekstlabels onder de pictogrammen van de navigatiebalk weergeven', 'settings.startupSection' => 'Opstartsectie', - 'settings.startupSectionDescription' => 'Kies welke sectie Plezy opent bij het opstarten', 'settings.liveTvDefaultFavorites' => 'Standaard favoriete zenders', 'settings.liveTvDefaultFavoritesDescription' => 'Toon alleen favoriete zenders bij het openen van Live TV', 'settings.display' => 'Weergave', @@ -2435,13 +2411,6 @@ extension on TranslationsNl { 'settings.subtitlesAndConfig' => 'Ondertitels en configuratie', 'settings.seekAndTiming' => 'Zoeken en timing', 'settings.behavior' => 'Gedrag', - 'settings.manageLibrariesDescription' => 'Bibliotheken herordenen en verbergen', - 'settings.visualEffects' => 'Visuele effecten', - 'settings.visualEffectsAuto' => 'Automatisch', - 'settings.visualEffectsAutoDescription' => 'Effecten automatisch verminderen op apparaten met laag vermogen', - 'settings.visualEffectsFull' => 'Volledig', - 'settings.visualEffectsReduced' => 'Verminderd', - 'settings.visualEffectsReducedDescription' => 'Minder animaties en illustraties met lagere resolutie', 'search.hint' => 'Zoek films, series, muziek...', 'search.tryDifferentTerm' => 'Probeer een andere zoekterm', 'search.searchYourMedia' => 'Zoek in je media', @@ -2518,14 +2487,11 @@ extension on TranslationsNl { 'mediaMenu.playVersion' => 'Versie afspelen...', 'rateSheet.title' => 'Beoordelen', 'rateSheet.server' => 'Server', - 'rateSheet.starValue' => ({required Object rating}) => '${rating} / 5', - 'rateSheet.scoreValue' => ({required Object score}) => '${score} / 10', - 'rateSheet.setScore' => 'Score instellen', + 'rateSheet.favorite' => 'Favoriet', + 'rateSheet.favorited' => 'Toegevoegd aan favorieten', 'rateSheet.saved' => 'Opgeslagen', 'rateSheet.notAvailable' => 'Geen match gevonden', 'rateSheet.noConnectedServices' => 'Verbind een service in Instellingen om daar te beoordelen.', - 'rateSheet.favorite' => 'Favoriet', - 'rateSheet.favorited' => 'Toegevoegd aan favorieten', 'accessibility.mediaCardMovie' => ({required Object title}) => '${title}, film', 'accessibility.mediaCardShow' => ({required Object title}) => '${title}, TV-serie', 'accessibility.mediaCardEpisode' => ({required Object title, required Object episodeInfo}) => '${title}, ${episodeInfo}', @@ -2534,6 +2500,14 @@ extension on TranslationsNl { 'accessibility.mediaCardPartiallyWatched' => ({required Object percent}) => '${percent} procent bekeken', 'accessibility.mediaCardUnwatched' => 'niet bekeken', 'accessibility.tapToPlay' => 'Tik om af te spelen', + 'accessibility.decrease' => 'Verlagen', + 'accessibility.increase' => 'Verhogen', + 'accessibility.decreaseValue' => ({required Object label}) => '${label} verlagen', + 'accessibility.increaseValue' => ({required Object label}) => '${label} verhogen', + 'accessibility.hue' => 'Tint', + 'accessibility.saturation' => 'Verzadiging', + 'accessibility.brightness' => 'Helderheid', + 'accessibility.hexColor' => 'Hexkleur', 'tooltips.shufflePlay' => 'Willekeurig afspelen', 'tooltips.playTrailer' => 'Trailer afspelen', 'tooltips.markAsWatched' => 'Markeer als gekeken', @@ -2575,13 +2549,11 @@ extension on TranslationsNl { 'videoControls.settingsButton' => 'Afspeelinstellingen', 'videoControls.tracksButton' => 'Audio en ondertitels', 'videoControls.chaptersButton' => 'Hoofdstukken', - 'videoControls.versionsButton' => 'Videoversies', 'videoControls.versionQualityButton' => 'Versie en kwaliteit', 'videoControls.versionColumnHeader' => 'Versie', 'videoControls.qualityColumnHeader' => 'Kwaliteit', 'videoControls.qualityOriginal' => 'Origineel', 'videoControls.qualityPresetLabel' => ({required Object resolution, required Object bitrate}) => '${resolution}p ${bitrate} Mbps', - 'videoControls.qualityBandwidthEstimate' => ({required Object bitrate}) => '~${bitrate} Mbps', 'videoControls.transcodeUnavailableFallback' => 'Transcoderen niet beschikbaar — originele kwaliteit wordt afgespeeld', 'videoControls.pipButton' => 'Beeld-in-beeld modus', 'videoControls.aspectRatioButton' => 'Beeldverhouding', @@ -2621,10 +2593,6 @@ extension on TranslationsNl { 'videoControls.subtitleDownloaded' => 'Ondertitel gedownload', 'videoControls.subtitleDownloadFailed' => 'Ondertitel downloaden mislukt', 'videoControls.searchLanguages' => 'Talen zoeken...', - 'userStatus.admin' => 'Beheerder', - 'userStatus.restricted' => 'Beperkt', - 'userStatus.protected' => 'Beschermd', - 'userStatus.current' => 'HUIDIG', 'messages.markedAsWatched' => 'Gemarkeerd als gekeken', 'messages.markedAsUnwatched' => 'Gemarkeerd als ongekeken', 'messages.markedAsWatchedOffline' => 'Gemarkeerd als gekeken (sync wanneer online)', @@ -2634,8 +2602,6 @@ extension on TranslationsNl { 'messages.errorLoading' => ({required Object error}) => 'Fout: ${error}', 'messages.streamInterrupted' => 'De stream is onderbroken. Druk op afspelen of spoel om het opnieuw te proberen.', 'messages.fileInfoNotAvailable' => 'Bestand informatie niet beschikbaar', - _ => null, - } ?? switch (path) { 'messages.errorLoadingFileInfo' => ({required Object error}) => 'Fout bij laden bestand info: ${error}', 'messages.errorLoadingSeries' => 'Fout bij laden serie', 'messages.musicNotSupported' => 'Muziek afspelen wordt nog niet ondersteund', @@ -2643,6 +2609,8 @@ extension on TranslationsNl { 'messages.noProfilesAvailable' => 'Geen profielen beschikbaar', 'messages.contactAdminForProfiles' => 'Neem contact op met je serverbeheerder om profielen toe te voegen', 'messages.unableToDetermineLibrarySection' => 'Kan bibliotheeksectie voor dit item niet bepalen', + _ => null, + } ?? switch (path) { 'messages.logsCleared' => 'Logs gewist', 'messages.logsCopied' => 'Logs gekopieerd naar klembord', 'messages.noLogsAvailable' => 'Geen logs beschikbaar', @@ -2759,7 +2727,6 @@ extension on TranslationsNl { 'profiles.pinExplain' => '4-cijferige PIN vereist om profielen te wisselen.', 'profiles.continueButton' => 'Doorgaan', 'profiles.pinsDontMatch' => 'PIN-codes komen niet overeen', - 'profiles.initializeServicesFailed' => 'Kan profielservices niet initialiseren', 'connections.sectionTitle' => 'Verbindingen', 'connections.addConnection' => 'Verbinding toevoegen', 'connections.addConnectionSubtitleNoProfile' => 'Meld je aan met Plex of verbind een Jellyfin-server', @@ -2770,7 +2737,6 @@ extension on TranslationsNl { 'connections.editJellyfinTitle' => 'Jellyfin-verbinding bewerken', 'connections.editJellyfinIntro' => ({required Object serverName}) => 'Voeg URL\'s voor ${serverName} toe of verwijder ze. Plezy gebruikt de bereikbare URL met de laagste latentie.', 'discover.title' => 'Ontdekken', - 'discover.switchProfile' => 'Wissel van profiel', 'discover.noContentAvailable' => 'Geen inhoud beschikbaar', 'discover.addMediaToLibraries' => 'Voeg wat media toe aan je bibliotheken', 'discover.continueWatching' => 'Verder kijken', @@ -2797,8 +2763,6 @@ extension on TranslationsNl { 'errors.connectionFailed' => 'Kan geen verbinding maken met mediaserver', 'errors.failedToLoad' => ({required Object context, required Object error}) => 'Kon ${context} niet laden: ${error}', 'errors.noClientAvailable' => 'Geen client beschikbaar', - 'errors.authenticationFailed' => ({required Object error}) => 'Authenticatie mislukt: ${error}', - 'errors.couldNotLaunchUrl' => 'Kon auth URL niet openen', 'errors.pleaseEnterToken' => 'Voer een token in', 'errors.invalidToken' => 'Ongeldig token', 'errors.failedToVerifyToken' => ({required Object error}) => 'Kon token niet verifiëren: ${error}', @@ -2823,6 +2787,8 @@ extension on TranslationsNl { 'libraries.allLibrariesHidden' => 'Alle bibliotheken zijn verborgen', 'libraries.hiddenLibrariesCount' => ({required Object count}) => 'Verborgen bibliotheken (${count})', 'libraries.thisLibraryIsEmpty' => 'Deze bibliotheek is leeg', + 'libraries.noItemsMatchFilters' => 'Geen items komen overeen met de actieve filters', + 'libraries.resetFilters' => 'Filters opnieuw instellen', 'libraries.all' => 'Alles', 'libraries.clearAll' => 'Alles wissen', 'libraries.scanLibraryConfirm' => ({required Object title}) => 'Weet je zeker dat je "${title}" wilt scannen?', @@ -2871,7 +2837,6 @@ extension on TranslationsNl { 'libraries.sortLabels.communityRating' => 'Communitybeoordeling', 'libraries.sortLabels.criticRating' => 'Criticusbeoordeling', 'libraries.sortLabels.userRating' => 'Gebruikersbeoordeling', - 'libraries.sortLabels.lastPlayed' => 'Laatst afgespeeld', 'libraries.sortLabels.datePlayed' => 'Afspeeldatum', 'libraries.sortLabels.playCount' => 'Aantal afspelingen', 'libraries.sortLabels.productionYear' => 'Productiejaar', @@ -2885,14 +2850,11 @@ extension on TranslationsNl { 'libraries.sortLabels.dateShared' => 'Gedeeld op', 'libraries.sortLabels.latestEpisodeAirDate' => 'Laatste afleveringsuitzending', 'libraries.sortLabels.lastEpisodeDateAdded' => 'Datum laatst toegevoegde aflevering', - 'libraries.noItemsMatchFilters' => 'Geen items komen overeen met de actieve filters', - 'libraries.resetFilters' => 'Filters opnieuw instellen', 'about.title' => 'Over', 'about.openSourceLicenses' => 'Open Source licenties', 'about.versionLabel' => ({required Object version}) => 'Versie ${version}', 'about.appDescription' => 'Een mooie Plex- en Jellyfin-client voor Flutter', 'about.viewLicensesDescription' => 'Bekijk licenties van third-party bibliotheken', - 'serverSelection.allServerConnectionsFailed' => 'Kon met geen enkele server verbinden. Controleer je netwerk.', 'serverSelection.noServersFoundForAccount' => ({required Object username, required Object email}) => 'Geen servers gevonden voor ${username} (${email})', 'serverSelection.failedToLoadServers' => ({required Object error}) => 'Kon servers niet laden: ${error}', 'hubDetail.title' => 'Titel', @@ -2926,10 +2888,6 @@ extension on TranslationsNl { 'explore.rows.trending' => 'Trending', 'explore.rows.upcomingMovies' => 'Aankomende films', 'explore.rows.upcomingShows' => 'Aankomende series', - 'explore.searchHint' => ({required Object source}) => 'Zoeken in ${source}', - 'explore.searchEmpty' => ({required Object query}) => 'Geen resultaten voor "${query}"', - 'explore.searchPrompt' => ({required Object source}) => 'Zoek naar films en series op ${source}.', - 'explore.searchFailed' => 'Zoeken mislukt. Controleer je verbinding en probeer opnieuw.', 'explore.status.airing' => 'Lopend', 'explore.status.ended' => 'Afgelopen', 'explore.status.canceled' => 'Geannuleerd', @@ -2942,14 +2900,19 @@ extension on TranslationsNl { 'explore.watchlistUpdateFailed' => 'Kon kijklijst niet bijwerken', 'explore.notInLibrary' => 'Niet in je bibliotheek', 'explore.inTheseLibraries' => 'In deze bibliotheken', - 'explore.availableOn' => ({required Object server}) => 'Beschikbaar op ${server}', 'explore.checkingLibrary' => 'Je bibliotheek controleren...', 'explore.emptyTitle' => 'Hier is nog niets', 'explore.emptyMessage' => ({required Object source}) => 'Rijen van ${source} verschijnen hier zodra ze inhoud hebben.', + 'explore.searchHint' => ({required Object source}) => 'Zoeken in ${source}', + 'explore.searchEmpty' => ({required Object query}) => 'Geen resultaten voor "${query}"', + 'explore.searchPrompt' => ({required Object source}) => 'Zoek naar films en series op ${source}.', + 'explore.searchFailed' => 'Zoeken mislukt. Controleer je verbinding en probeer opnieuw.', 'liveTv.title' => 'Live TV', 'liveTv.guide' => 'Gids', 'liveTv.noChannels' => 'Geen zenders beschikbaar', 'liveTv.noDvr' => 'Geen DVR geconfigureerd op een server', + 'liveTv.serverUnavailable' => 'De live-tv-server is niet beschikbaar.', + 'liveTv.serverNotConnected' => 'De live-tv-server is niet verbonden.', 'liveTv.noPrograms' => 'Geen programmagegevens beschikbaar', 'liveTv.liveStreamFailed' => 'Livestream mislukt', 'liveTv.unknownProgram' => 'Onbekend programma', @@ -2985,7 +2948,6 @@ extension on TranslationsNl { 'liveTv.scheduledRecordings' => 'Gepland', 'liveTv.recordingRules' => 'Opnameregels', 'liveTv.noScheduledRecordings' => 'Geen geplande opnames', - 'liveTv.noRecordingRules' => 'Nog geen opnameregels', 'liveTv.manageRecording' => 'Opname beheren', 'liveTv.cancelRecording' => 'Opname annuleren', 'liveTv.cancelRecordingTitle' => 'Deze opname annuleren?', @@ -3002,7 +2964,6 @@ extension on TranslationsNl { 'liveTv.recordingCancelled' => 'Opname geannuleerd', 'liveTv.recordingRuleDeleted' => 'Opnameregel verwijderd', 'liveTv.processRecordingRules' => 'Regels opnieuw evalueren', - 'liveTv.loadingRecordings' => 'Opnames laden...', 'liveTv.recordingInProgress' => 'Nu aan het opnemen', 'liveTv.recordingsCount' => ({required Object count}) => '${count} gepland', 'liveTv.editRule' => 'Regel bewerken', @@ -3014,7 +2975,6 @@ extension on TranslationsNl { 'collections.title' => 'Collecties', 'collections.collection' => 'Collectie', 'collections.empty' => 'Collectie is leeg', - 'collections.unknownLibrarySection' => 'Kan niet verwijderen: onbekende bibliotheeksectie', 'collections.deleteCollection' => 'Collectie verwijderen', 'collections.deleteConfirm' => ({required Object title}) => '"${title}" verwijderen? Dit kan niet ongedaan worden gemaakt.', 'collections.deleted' => 'Collectie verwijderd', @@ -3052,6 +3012,7 @@ extension on TranslationsNl { 'playlists.itemAdded' => 'Toegevoegd aan afspeellijst', 'playlists.itemRemoved' => 'Verwijderd uit afspeellijst', 'playlists.selectPlaylist' => 'Selecteer afspeellijst', + 'playlists.searchPlaylists' => 'Afspeellijsten zoeken...', 'playlists.errorCreating' => 'Fout bij maken afspeellijst', 'playlists.errorDeleting' => 'Fout bij verwijderen afspeellijst', 'playlists.errorLoading' => 'Fout bij laden afspeellijsten', @@ -3134,22 +3095,20 @@ extension on TranslationsNl { 'watchTogether.participantResumed' => ({required Object name}) => '${name} heeft hervat', 'watchTogether.participantSeeked' => ({required Object name}) => '${name} heeft gespoeld', 'watchTogether.participantBuffering' => ({required Object name}) => '${name} is aan het bufferen', + 'watchTogether.participantNeedsUpdate' => ({required Object name}) => '${name} gebruikt een oudere appversie — synchronisatie niet beschikbaar', + 'watchTogether.resumingWithout' => ({required Object name}) => 'Hervatten zonder ${name}', 'watchTogether.waitingForParticipants' => 'Wachten tot anderen geladen zijn...', + 'watchTogether.waitingForName' => ({required Object name}) => 'Wachten op ${name}...', 'watchTogether.recentRooms' => 'Recente kamers', 'watchTogether.renameRoom' => 'Kamer hernoemen', 'watchTogether.removeRoom' => 'Verwijderen', 'watchTogether.guestSwitchUnavailable' => 'Kon niet schakelen — server niet beschikbaar voor synchronisatie', 'watchTogether.guestSwitchFailed' => 'Kon niet schakelen — inhoud niet gevonden op deze server', - 'watchTogether.participantNeedsUpdate' => ({required Object name}) => '${name} gebruikt een oudere appversie — synchronisatie niet beschikbaar', - 'watchTogether.resumingWithout' => ({required Object name}) => 'Hervatten zonder ${name}', - 'watchTogether.waitingForName' => ({required Object name}) => 'Wachten op ${name}...', 'downloads.title' => 'Downloads', 'downloads.manage' => 'Beheren', 'downloads.tvShows' => 'Series', 'downloads.movies' => 'Films', 'downloads.music' => 'Muziek', - _ => null, - } ?? switch (path) { 'downloads.tracksQueued' => ({required Object count}) => '${count} nummers in wachtrij voor download', 'downloads.noDownloads' => 'Nog geen downloads', 'downloads.noDownloadsDescription' => 'Gedownloade content verschijnt hier voor offline weergave', @@ -3164,6 +3123,8 @@ extension on TranslationsNl { 'downloads.deleteConfirm' => ({required Object title}) => '"${title}" van dit apparaat verwijderen?', 'downloads.cancelledDownloadTitle' => 'Geannuleerde download', 'downloads.cancelledDownloadMessage' => 'Deze download is geannuleerd. Wat wil je doen?', + _ => null, + } ?? switch (path) { 'downloads.allEpisodesAlreadyDownloaded' => 'Alle afleveringen zijn al gedownload', 'downloads.resumeDownload' => 'Download hervatten', 'downloads.cancelledDownload' => 'Geannuleerde download', @@ -3187,7 +3148,6 @@ extension on TranslationsNl { 'downloads.customAmount' => 'Aangepast aantal...', 'downloads.includeSpecials' => 'Specials opnemen', 'downloads.howManyEpisodes' => 'Hoeveel afleveringen?', - 'downloads.itemsQueued' => ({required Object count}) => '${count} items in downloadwachtrij', 'downloads.keepSynced' => 'Gesynchroniseerd houden', 'downloads.downloadOnce' => 'Eenmalig downloaden', 'downloads.keepNUnwatched' => ({required Object count}) => '${count} onbekeken behouden', @@ -3231,7 +3191,6 @@ extension on TranslationsNl { 'companionRemote.connectedTo' => ({required Object name}) => 'Verbonden met ${name}', 'companionRemote.unknownDevice' => 'Onbekend apparaat', 'companionRemote.session.startingServer' => 'Externe server starten...', - 'companionRemote.session.failedToCreate' => 'Kan externe server niet starten:', 'companionRemote.session.hostAddress' => 'Hostadres', 'companionRemote.session.connected' => 'Verbonden', 'companionRemote.session.serverRunning' => 'Externe server actief', @@ -3286,6 +3245,8 @@ extension on TranslationsNl { 'companionRemote.remote.searchHint' => 'Zoeken op desktop...', 'companionRemote.errors.noNetworkInterface' => 'Geen netwerkinterface gevonden', 'companionRemote.errors.authenticationFailed' => 'Authenticatie mislukt', + 'companionRemote.errors.serverStartFailed' => ({required Object error}) => 'Kan de externe server niet starten: ${error}', + 'companionRemote.errors.commandFailed' => ({required Object error}) => 'Kan de externe opdracht niet verzenden: ${error}', 'companionRemote.errors.joinTimedOut' => 'Time-out bij deelnemen aan sessie', 'companionRemote.errors.failedToConnectAnyAddress' => 'Kan met geen enkel adres verbinden', 'companionRemote.errors.connectionLostAfterAttempts' => ({required Object attempts}) => 'Verbinding verloren na ${attempts} pogingen', @@ -3530,7 +3491,6 @@ extension on TranslationsNl { 'addServer.quickConnectFailed' => ({required Object error}) => 'Quick Connect mislukt: ${error}', 'addServer.addPlexTitle' => 'Inloggen met Plex', 'addServer.pinExpired' => 'PIN verlopen vóór inloggen. Probeer opnieuw.', - 'addServer.duplicatePlexAccount' => 'Al aangemeld bij Plex. Meld je af om van account te wisselen.', 'addServer.failedToRegisterAccount' => ({required Object error}) => 'Account registreren mislukt: ${error}', 'addServer.enterJellyfinUrlError' => 'Voer de URL van je Jellyfin-server in', 'addServer.addConnectionTitle' => 'Verbinding toevoegen', diff --git a/lib/i18n/strings_pl.g.dart b/lib/i18n/strings_pl.g.dart index 3c72f91f..3412e1ea 100644 --- a/lib/i18n/strings_pl.g.dart +++ b/lib/i18n/strings_pl.g.dart @@ -53,7 +53,6 @@ class TranslationsPl extends Translations with BaseTranslations 'Zaloguj się'; @override String get signInWithPlex => 'Zaloguj się przez Plex'; @override String get showQRCode => 'Pokaż kod QR'; @override String get authenticate => 'Uwierzytelnienie'; @@ -167,10 +165,8 @@ class _TranslationsCommonPl extends TranslationsCommonEn { @override String episodeNumberTitle({required Object number, required Object title}) => 'Odcinek ${number} - ${title}'; @override String chapterNumber({required Object number}) => 'Rozdział ${number}'; @override String get reconnect => 'Połącz ponownie'; - @override String get exit => 'Wyjdź'; @override String get viewAll => 'Pokaż wszystko'; @override String get checkingNetwork => 'Sprawdzanie sieci...'; - @override String get refreshingServers => 'Odświeżanie serwerów...'; @override String get loadingServers => 'Ładowanie serwerów...'; @override String get connectingToServers => 'Łączenie z serwerami...'; @override String get startingOfflineMode => 'Uruchamianie trybu offline...'; @@ -271,6 +267,12 @@ class _TranslationsSettingsPl extends TranslationsSettingsEn { @override String get tvFullCardLayoutDescription => 'Używaj kart TV tylko z obrazem i nałożonymi nazwiskami aktorów'; @override String get focusGlow => 'Poświata zaznaczenia'; @override String get focusGlowDescription => 'Wyświetlaj delikatną poświatę wokół zaznaczonej karty'; + @override String get visualEffects => 'Efekty wizualne'; + @override String get visualEffectsAuto => 'Automatycznie'; + @override String get visualEffectsAutoDescription => 'Automatycznie ograniczaj efekty na urządzeniach o niższej wydajności'; + @override String get visualEffectsFull => 'Pełne'; + @override String get visualEffectsReduced => 'Ograniczone'; + @override String get visualEffectsReducedDescription => 'Mniej animacji i grafiki o niższej rozdzielczości'; @override String get hideSpoilers => 'Ukryj spoilery nieobejrzanych odcinków'; @override String get hideSpoilersDescription => 'Rozmywaj miniatury i opisy nieobejrzanych odcinków'; @override String get playerBackend => 'Backend odtwarzacza'; @@ -283,7 +285,7 @@ class _TranslationsSettingsPl extends TranslationsSettingsEn { @override String get bufferSizeAuto => 'Automatyczny (Zalecany)'; @override String bufferSizeWarning({required Object heap, required Object size}) => 'Dostępna pamięć: ${heap}MB. Bufor ${size}MB może wpłynąć na odtwarzanie.'; @override String get defaultQualityTitle => 'Domyślna jakość'; - @override String get defaultQualityDescription => 'Używane podczas rozpoczynania odtwarzania. Niższe wartości zmniejszają przepustowość.'; + @override String get musicQualityTitle => 'Jakość muzyki'; @override String get subtitleStyling => 'Styl napisów'; @override String get subtitleStylingDescription => 'Dostosuj wygląd napisów'; @override String get smallSkipDuration => 'Krótki skok'; @@ -377,10 +379,9 @@ class _TranslationsSettingsPl extends TranslationsSettingsEn { @override String maxVolumePercent({required Object percent}) => '${percent}%'; @override String get discordRichPresence => 'Discord Rich Presence'; @override String get discordRichPresenceDescription => 'Pokaż, co oglądasz na Discordzie'; - @override String get trakt => 'Trakt'; - @override String get traktDescription => 'Synchronizuj historię oglądania z Trakt'; @override String get services => 'Usługi'; @override String get servicesDescription => 'Połącz Trakt, MyAnimeList, Seerr i inne'; + @override String get manageLibrariesDescription => 'Zmieniaj kolejność i ukrywaj biblioteki'; @override String get companionRemoteServer => 'Serwer zdalnego sterowania'; @override String get companionRemoteServerDescription => 'Pozwól urządzeniom mobilnym w sieci sterować tą aplikacją'; @override String get autoPip => 'Automatyczny obraz w obrazie'; @@ -443,7 +444,6 @@ class _TranslationsSettingsPl extends TranslationsSettingsEn { @override String get showNavBarLabels => 'Pokaż etykiety paska nawigacji'; @override String get showNavBarLabelsDescription => 'Wyświetl tekstowe etykiety pod ikonami paska nawigacji'; @override String get startupSection => 'Sekcja startowa'; - @override String get startupSectionDescription => 'Wybierz, którą sekcję Plezy otwiera przy uruchomieniu'; @override String get liveTvDefaultFavorites => 'Domyślnie ulubione kanały'; @override String get liveTvDefaultFavoritesDescription => 'Pokaż tylko ulubione kanały po otwarciu telewizji na żywo'; @override String get display => 'Ekran'; @@ -455,13 +455,6 @@ class _TranslationsSettingsPl extends TranslationsSettingsEn { @override String get subtitlesAndConfig => 'Napisy i konfiguracja'; @override String get seekAndTiming => 'Przewijanie i czas'; @override String get behavior => 'Zachowanie'; - @override String get manageLibrariesDescription => 'Zmieniaj kolejność i ukrywaj biblioteki'; - @override String get visualEffects => 'Efekty wizualne'; - @override String get visualEffectsAuto => 'Automatycznie'; - @override String get visualEffectsAutoDescription => 'Automatycznie ograniczaj efekty na urządzeniach o niższej wydajności'; - @override String get visualEffectsFull => 'Pełne'; - @override String get visualEffectsReduced => 'Ograniczone'; - @override String get visualEffectsReducedDescription => 'Mniej animacji i grafiki o niższej rozdzielczości'; } // Path: search @@ -559,14 +552,11 @@ class _TranslationsRateSheetPl extends TranslationsRateSheetEn { // Translations @override String get title => 'Oceń'; @override String get server => 'Serwer'; - @override String starValue({required Object rating}) => '${rating} / 5'; - @override String scoreValue({required Object score}) => '${score} / 10'; - @override String get setScore => 'Ustaw ocenę'; + @override String get favorite => 'Dodaj do ulubionych'; + @override String get favorited => 'Dodano do ulubionych'; @override String get saved => 'Zapisano'; @override String get notAvailable => 'Nie znaleziono dopasowania'; @override String get noConnectedServices => 'Połącz usługę w Ustawieniach, aby tam oceniać.'; - @override String get favorite => 'Dodaj do ulubionych'; - @override String get favorited => 'Dodano do ulubionych'; } // Path: accessibility @@ -584,6 +574,14 @@ class _TranslationsAccessibilityPl extends TranslationsAccessibilityEn { @override String mediaCardPartiallyWatched({required Object percent}) => '${percent} procent obejrzane'; @override String get mediaCardUnwatched => 'nieobejrzane'; @override String get tapToPlay => 'Dotknij, aby odtworzyć'; + @override String get decrease => 'Zmniejsz'; + @override String get increase => 'Zwiększ'; + @override String decreaseValue({required Object label}) => 'Zmniejsz ${label}'; + @override String increaseValue({required Object label}) => 'Zwiększ ${label}'; + @override String get hue => 'Odcień'; + @override String get saturation => 'Nasycenie'; + @override String get brightness => 'Jasność'; + @override String get hexColor => 'Kolor szesnastkowy'; } // Path: tooltips @@ -643,13 +641,11 @@ class _TranslationsVideoControlsPl extends TranslationsVideoControlsEn { @override String get settingsButton => 'Ustawienia odtwarzania'; @override String get tracksButton => 'Audio i napisy'; @override String get chaptersButton => 'Rozdziały'; - @override String get versionsButton => 'Wersje wideo'; @override String get versionQualityButton => 'Wersja i jakość'; @override String get versionColumnHeader => 'Wersja'; @override String get qualityColumnHeader => 'Jakość'; @override String get qualityOriginal => 'Oryginalna'; @override String qualityPresetLabel({required Object resolution, required Object bitrate}) => '${resolution}p ${bitrate} Mbps'; - @override String qualityBandwidthEstimate({required Object bitrate}) => '~${bitrate} Mbps'; @override String get transcodeUnavailableFallback => 'Transkodowanie niedostępne — odtwarzanie w oryginalnej jakości'; @override String get pipButton => 'Tryb obraz w obrazie'; @override String get aspectRatioButton => 'Proporcje'; @@ -685,19 +681,6 @@ class _TranslationsVideoControlsPl extends TranslationsVideoControlsEn { @override String get searchLanguages => 'Szukaj języków...'; } -// Path: userStatus -class _TranslationsUserStatusPl extends TranslationsUserStatusEn { - _TranslationsUserStatusPl._(TranslationsPl root) : this._root = root, super.internal(root); - - final TranslationsPl _root; // ignore: unused_field - - // Translations - @override String get admin => 'Administrator'; - @override String get restricted => 'Ograniczony'; - @override String get protected => 'Chroniony'; - @override String get current => 'BIEŻĄCY'; -} - // Path: messages class _TranslationsMessagesPl extends TranslationsMessagesEn { _TranslationsMessagesPl._(TranslationsPl root) : this._root = root, super.internal(root); @@ -873,7 +856,6 @@ class _TranslationsProfilesPl extends TranslationsProfilesEn { @override String get pinExplain => 'Do przełączania profili wymagany jest 4-cyfrowy PIN.'; @override String get continueButton => 'Kontynuuj'; @override String get pinsDontMatch => 'PIN-y nie pasują'; - @override String get initializeServicesFailed => 'Nie udało się zainicjować usług profilu'; } // Path: connections @@ -902,7 +884,6 @@ class _TranslationsDiscoverPl extends TranslationsDiscoverEn { // Translations @override String get title => 'Odkryj'; - @override String get switchProfile => 'Zmień profil'; @override String get noContentAvailable => 'Brak dostępnych treści'; @override String get addMediaToLibraries => 'Dodaj multimedia do swoich bibliotek'; @override String get continueWatching => 'Kontynuuj oglądanie'; @@ -938,8 +919,6 @@ class _TranslationsErrorsPl extends TranslationsErrorsEn { @override String get connectionFailed => 'Nie można połączyć się z serwerem multimediów'; @override String failedToLoad({required Object context, required Object error}) => 'Nie udało się załadować ${context}: ${error}'; @override String get noClientAvailable => 'Brak dostępnego klienta'; - @override String authenticationFailed({required Object error}) => 'Uwierzytelnienie nie powiodło się: ${error}'; - @override String get couldNotLaunchUrl => 'Nie można otworzyć URL uwierzytelniania'; @override String get pleaseEnterToken => 'Wprowadź token'; @override String get invalidToken => 'Nieprawidłowy token'; @override String failedToVerifyToken({required Object error}) => 'Nie udało się zweryfikować tokena: ${error}'; @@ -973,6 +952,8 @@ class _TranslationsLibrariesPl extends TranslationsLibrariesEn { @override String get allLibrariesHidden => 'Wszystkie biblioteki są ukryte'; @override String hiddenLibrariesCount({required Object count}) => 'Ukryte biblioteki (${count})'; @override String get thisLibraryIsEmpty => 'Ta biblioteka jest pusta'; + @override String get noItemsMatchFilters => 'Żadne elementy nie pasują do aktywnych filtrów'; + @override String get resetFilters => 'Resetuj filtry'; @override String get all => 'Wszystkie'; @override String get clearAll => 'Wyczyść wszystko'; @override String scanLibraryConfirm({required Object title}) => 'Czy na pewno chcesz zeskanować "${title}"?'; @@ -998,8 +979,6 @@ class _TranslationsLibrariesPl extends TranslationsLibrariesEn { @override late final _TranslationsLibrariesGroupingsPl groupings = _TranslationsLibrariesGroupingsPl._(_root); @override late final _TranslationsLibrariesFilterCategoriesPl filterCategories = _TranslationsLibrariesFilterCategoriesPl._(_root); @override late final _TranslationsLibrariesSortLabelsPl sortLabels = _TranslationsLibrariesSortLabelsPl._(_root); - @override String get noItemsMatchFilters => 'Żadne elementy nie pasują do aktywnych filtrów'; - @override String get resetFilters => 'Resetuj filtry'; } // Path: about @@ -1023,7 +1002,6 @@ class _TranslationsServerSelectionPl extends TranslationsServerSelectionEn { final TranslationsPl _root; // ignore: unused_field // Translations - @override String get allServerConnectionsFailed => 'Nie udało się połączyć z żadnym serwerem. Sprawdź sieć.'; @override String noServersFoundForAccount({required Object username, required Object email}) => 'Nie znaleziono serwerów dla ${username} (${email})'; @override String failedToLoadServers({required Object error}) => 'Nie udało się załadować serwerów: ${error}'; } @@ -1104,7 +1082,6 @@ class _TranslationsExplorePl extends TranslationsExploreEn { @override String get watchlistUpdateFailed => 'Nie udało się zaktualizować listy do obejrzenia'; @override String get notInLibrary => 'Nie ma tego w Twojej bibliotece'; @override String get inTheseLibraries => 'W tych bibliotekach'; - @override String availableOn({required Object server}) => 'Dostępne na ${server}'; @override String get checkingLibrary => 'Sprawdzanie Twojej biblioteki...'; @override String get emptyTitle => 'Jeszcze nic tu nie ma'; @override String emptyMessage({required Object source}) => 'Wiersze z ${source} pojawią się tutaj, gdy będą zawierać treści.'; @@ -1125,6 +1102,8 @@ class _TranslationsLiveTvPl extends TranslationsLiveTvEn { @override String get guide => 'Przewodnik'; @override String get noChannels => 'Brak dostępnych kanałów'; @override String get noDvr => 'Brak skonfigurowanego DVR na żadnym serwerze'; + @override String get serverUnavailable => 'Serwer telewizji na żywo jest niedostępny.'; + @override String get serverNotConnected => 'Serwer telewizji na żywo nie jest połączony.'; @override String get noPrograms => 'Brak danych o programach'; @override String get liveStreamFailed => 'Transmisja na żywo nie powiodła się'; @override String get unknownProgram => 'Nieznany program'; @@ -1160,7 +1139,6 @@ class _TranslationsLiveTvPl extends TranslationsLiveTvEn { @override String get scheduledRecordings => 'Zaplanowane'; @override String get recordingRules => 'Reguły nagrywania'; @override String get noScheduledRecordings => 'Brak zaplanowanych nagrań'; - @override String get noRecordingRules => 'Brak reguł nagrywania'; @override String get manageRecording => 'Zarządzaj nagraniem'; @override String get cancelRecording => 'Anuluj nagrywanie'; @override String get cancelRecordingTitle => 'Anulować to nagrywanie?'; @@ -1177,7 +1155,6 @@ class _TranslationsLiveTvPl extends TranslationsLiveTvEn { @override String get recordingCancelled => 'Nagrywanie anulowane'; @override String get recordingRuleDeleted => 'Reguła nagrywania usunięta'; @override String get processRecordingRules => 'Ponów ocenę reguł'; - @override String get loadingRecordings => 'Wczytywanie nagrań...'; @override String get recordingInProgress => 'Trwa nagrywanie'; @override String recordingsCount({required Object count}) => '${count} zaplanowanych'; @override String get editRule => 'Edytuj regułę'; @@ -1198,7 +1175,6 @@ class _TranslationsCollectionsPl extends TranslationsCollectionsEn { @override String get title => 'Kolekcje'; @override String get collection => 'Kolekcja'; @override String get empty => 'Kolekcja jest pusta'; - @override String get unknownLibrarySection => 'Nie można usunąć: Nieznana sekcja biblioteki'; @override String get deleteCollection => 'Usuń kolekcję'; @override String deleteConfirm({required Object title}) => 'Usunąć "${title}"? Tego nie można cofnąć.'; @override String get deleted => 'Kolekcja usunięta'; @@ -1245,6 +1221,7 @@ class _TranslationsPlaylistsPl extends TranslationsPlaylistsEn { @override String get itemAdded => 'Dodano do playlisty'; @override String get itemRemoved => 'Usunięto z playlisty'; @override String get selectPlaylist => 'Wybierz playlistę'; + @override String get searchPlaylists => 'Szukaj playlist...'; @override String get errorCreating => 'Nie udało się utworzyć playlisty'; @override String get errorDeleting => 'Nie udało się usunąć playlisty'; @override String get errorLoading => 'Nie udało się załadować playlist'; @@ -1350,15 +1327,15 @@ class _TranslationsWatchTogetherPl extends TranslationsWatchTogetherEn { @override String participantResumed({required Object name}) => '${name} wznowił'; @override String participantSeeked({required Object name}) => '${name} przewinął'; @override String participantBuffering({required Object name}) => '${name} buforuje'; + @override String participantNeedsUpdate({required Object name}) => '${name} używa starszej wersji aplikacji — synchronizacja jest niedostępna'; + @override String resumingWithout({required Object name}) => 'Wznawianie bez ${name}'; @override String get waitingForParticipants => 'Oczekiwanie na załadowanie u innych...'; + @override String waitingForName({required Object name}) => 'Oczekiwanie na ${name}...'; @override String get recentRooms => 'Ostatnie pokoje'; @override String get renameRoom => 'Zmień nazwę pokoju'; @override String get removeRoom => 'Usuń'; @override String get guestSwitchUnavailable => 'Nie można przełączyć — serwer niedostępny do synchronizacji'; @override String get guestSwitchFailed => 'Nie można przełączyć — nie znaleziono treści na tym serwerze'; - @override String participantNeedsUpdate({required Object name}) => '${name} używa starszej wersji aplikacji — synchronizacja jest niedostępna'; - @override String resumingWithout({required Object name}) => 'Wznawianie bez ${name}'; - @override String waitingForName({required Object name}) => 'Oczekiwanie na ${name}...'; } // Path: downloads @@ -1410,7 +1387,6 @@ class _TranslationsDownloadsPl extends TranslationsDownloadsEn { @override String get customAmount => 'Własna ilość...'; @override String get includeSpecials => 'Uwzględnij odcinki specjalne'; @override String get howManyEpisodes => 'Ile odcinków?'; - @override String itemsQueued({required Object count}) => '${count} elementów dodanych do kolejki pobierania'; @override String get keepSynced => 'Synchronizuj na bieżąco'; @override String get downloadOnce => 'Pobierz raz'; @override String keepNUnwatched({required Object count}) => 'Zachowaj ${count} nieobejrzanych'; @@ -1784,7 +1760,6 @@ class _TranslationsAddServerPl extends TranslationsAddServerEn { @override String quickConnectFailed({required Object error}) => 'Quick Connect nie powiodło się: ${error}'; @override String get addPlexTitle => 'Zaloguj się przez Plex'; @override String get pinExpired => 'PIN wygasł przed zalogowaniem. Spróbuj ponownie.'; - @override String get duplicatePlexAccount => 'Już zalogowano do Plex. Wyloguj się, aby zmienić konto.'; @override String failedToRegisterAccount({required Object error}) => 'Nie udało się zarejestrować konta: ${error}'; @override String get enterJellyfinUrlError => 'Podaj URL serwera Jellyfin'; @override String get addConnectionTitle => 'Dodaj połączenie'; @@ -1910,7 +1885,6 @@ class _TranslationsLibrariesSortLabelsPl extends TranslationsLibrariesSortLabels @override String get communityRating => 'Ocena społeczności'; @override String get criticRating => 'Ocena krytyków'; @override String get userRating => 'Ocena użytkownika'; - @override String get lastPlayed => 'Ostatnio odtwarzane'; @override String get datePlayed => 'Data odtworzenia'; @override String get playCount => 'Liczba odtworzeń'; @override String get productionYear => 'Rok produkcji'; @@ -1969,7 +1943,6 @@ class _TranslationsCompanionRemoteSessionPl extends TranslationsCompanionRemoteS // Translations @override String get startingServer => 'Uruchamianie serwera zdalnego...'; - @override String get failedToCreate => 'Nie udało się uruchomić serwera zdalnego:'; @override String get hostAddress => 'Adres hosta'; @override String get connected => 'Połączono'; @override String get serverRunning => 'Serwer zdalny aktywny'; @@ -2051,6 +2024,8 @@ class _TranslationsCompanionRemoteErrorsPl extends TranslationsCompanionRemoteEr // Translations @override String get noNetworkInterface => 'Nie znaleziono interfejsu sieciowego'; @override String get authenticationFailed => 'Uwierzytelnianie nie powiodło się'; + @override String serverStartFailed({required Object error}) => 'Nie udało się uruchomić serwera zdalnego: ${error}'; + @override String commandFailed({required Object error}) => 'Nie udało się wysłać polecenia zdalnego: ${error}'; @override String get joinTimedOut => 'Upłynął limit czasu dołączania do sesji'; @override String get failedToConnectAnyAddress => 'Nie udało się połączyć z żadnym adresem'; @override String connectionLostAfterAttempts({required Object attempts}) => 'Połączenie utracone po ${attempts} próbach'; @@ -2127,7 +2102,6 @@ extension on TranslationsPl { dynamic _flatMapFunction(String path) { return switch (path) { 'app.title' => 'Plezy', - 'auth.signIn' => 'Zaloguj się', 'auth.signInWithPlex' => 'Zaloguj się przez Plex', 'auth.showQRCode' => 'Pokaż kod QR', 'auth.authenticate' => 'Uwierzytelnienie', @@ -2178,10 +2152,8 @@ extension on TranslationsPl { 'common.episodeNumberTitle' => ({required Object number, required Object title}) => 'Odcinek ${number} - ${title}', 'common.chapterNumber' => ({required Object number}) => 'Rozdział ${number}', 'common.reconnect' => 'Połącz ponownie', - 'common.exit' => 'Wyjdź', 'common.viewAll' => 'Pokaż wszystko', 'common.checkingNetwork' => 'Sprawdzanie sieci...', - 'common.refreshingServers' => 'Odświeżanie serwerów...', 'common.loadingServers' => 'Ładowanie serwerów...', 'common.connectingToServers' => 'Łączenie z serwerami...', 'common.startingOfflineMode' => 'Uruchamianie trybu offline...', @@ -2255,6 +2227,12 @@ extension on TranslationsPl { 'settings.tvFullCardLayoutDescription' => 'Używaj kart TV tylko z obrazem i nałożonymi nazwiskami aktorów', 'settings.focusGlow' => 'Poświata zaznaczenia', 'settings.focusGlowDescription' => 'Wyświetlaj delikatną poświatę wokół zaznaczonej karty', + 'settings.visualEffects' => 'Efekty wizualne', + 'settings.visualEffectsAuto' => 'Automatycznie', + 'settings.visualEffectsAutoDescription' => 'Automatycznie ograniczaj efekty na urządzeniach o niższej wydajności', + 'settings.visualEffectsFull' => 'Pełne', + 'settings.visualEffectsReduced' => 'Ograniczone', + 'settings.visualEffectsReducedDescription' => 'Mniej animacji i grafiki o niższej rozdzielczości', 'settings.hideSpoilers' => 'Ukryj spoilery nieobejrzanych odcinków', 'settings.hideSpoilersDescription' => 'Rozmywaj miniatury i opisy nieobejrzanych odcinków', 'settings.playerBackend' => 'Backend odtwarzacza', @@ -2267,7 +2245,7 @@ extension on TranslationsPl { 'settings.bufferSizeAuto' => 'Automatyczny (Zalecany)', 'settings.bufferSizeWarning' => ({required Object heap, required Object size}) => 'Dostępna pamięć: ${heap}MB. Bufor ${size}MB może wpłynąć na odtwarzanie.', 'settings.defaultQualityTitle' => 'Domyślna jakość', - 'settings.defaultQualityDescription' => 'Używane podczas rozpoczynania odtwarzania. Niższe wartości zmniejszają przepustowość.', + 'settings.musicQualityTitle' => 'Jakość muzyki', 'settings.subtitleStyling' => 'Styl napisów', 'settings.subtitleStylingDescription' => 'Dostosuj wygląd napisów', 'settings.smallSkipDuration' => 'Krótki skok', @@ -2361,10 +2339,9 @@ extension on TranslationsPl { 'settings.maxVolumePercent' => ({required Object percent}) => '${percent}%', 'settings.discordRichPresence' => 'Discord Rich Presence', 'settings.discordRichPresenceDescription' => 'Pokaż, co oglądasz na Discordzie', - 'settings.trakt' => 'Trakt', - 'settings.traktDescription' => 'Synchronizuj historię oglądania z Trakt', 'settings.services' => 'Usługi', 'settings.servicesDescription' => 'Połącz Trakt, MyAnimeList, Seerr i inne', + 'settings.manageLibrariesDescription' => 'Zmieniaj kolejność i ukrywaj biblioteki', 'settings.companionRemoteServer' => 'Serwer zdalnego sterowania', 'settings.companionRemoteServerDescription' => 'Pozwól urządzeniom mobilnym w sieci sterować tą aplikacją', 'settings.autoPip' => 'Automatyczny obraz w obrazie', @@ -2427,7 +2404,6 @@ extension on TranslationsPl { 'settings.showNavBarLabels' => 'Pokaż etykiety paska nawigacji', 'settings.showNavBarLabelsDescription' => 'Wyświetl tekstowe etykiety pod ikonami paska nawigacji', 'settings.startupSection' => 'Sekcja startowa', - 'settings.startupSectionDescription' => 'Wybierz, którą sekcję Plezy otwiera przy uruchomieniu', 'settings.liveTvDefaultFavorites' => 'Domyślnie ulubione kanały', 'settings.liveTvDefaultFavoritesDescription' => 'Pokaż tylko ulubione kanały po otwarciu telewizji na żywo', 'settings.display' => 'Ekran', @@ -2439,13 +2415,6 @@ extension on TranslationsPl { 'settings.subtitlesAndConfig' => 'Napisy i konfiguracja', 'settings.seekAndTiming' => 'Przewijanie i czas', 'settings.behavior' => 'Zachowanie', - 'settings.manageLibrariesDescription' => 'Zmieniaj kolejność i ukrywaj biblioteki', - 'settings.visualEffects' => 'Efekty wizualne', - 'settings.visualEffectsAuto' => 'Automatycznie', - 'settings.visualEffectsAutoDescription' => 'Automatycznie ograniczaj efekty na urządzeniach o niższej wydajności', - 'settings.visualEffectsFull' => 'Pełne', - 'settings.visualEffectsReduced' => 'Ograniczone', - 'settings.visualEffectsReducedDescription' => 'Mniej animacji i grafiki o niższej rozdzielczości', 'search.hint' => 'Szukaj filmów, seriali, muzyki...', 'search.tryDifferentTerm' => 'Spróbuj innego wyszukiwania', 'search.searchYourMedia' => 'Przeszukaj swoje media', @@ -2522,14 +2491,11 @@ extension on TranslationsPl { 'mediaMenu.playVersion' => 'Odtwórz wersję...', 'rateSheet.title' => 'Oceń', 'rateSheet.server' => 'Serwer', - 'rateSheet.starValue' => ({required Object rating}) => '${rating} / 5', - 'rateSheet.scoreValue' => ({required Object score}) => '${score} / 10', - 'rateSheet.setScore' => 'Ustaw ocenę', + 'rateSheet.favorite' => 'Dodaj do ulubionych', + 'rateSheet.favorited' => 'Dodano do ulubionych', 'rateSheet.saved' => 'Zapisano', 'rateSheet.notAvailable' => 'Nie znaleziono dopasowania', 'rateSheet.noConnectedServices' => 'Połącz usługę w Ustawieniach, aby tam oceniać.', - 'rateSheet.favorite' => 'Dodaj do ulubionych', - 'rateSheet.favorited' => 'Dodano do ulubionych', 'accessibility.mediaCardMovie' => ({required Object title}) => '${title}, film', 'accessibility.mediaCardShow' => ({required Object title}) => '${title}, serial TV', 'accessibility.mediaCardEpisode' => ({required Object title, required Object episodeInfo}) => '${title}, ${episodeInfo}', @@ -2538,6 +2504,14 @@ extension on TranslationsPl { 'accessibility.mediaCardPartiallyWatched' => ({required Object percent}) => '${percent} procent obejrzane', 'accessibility.mediaCardUnwatched' => 'nieobejrzane', 'accessibility.tapToPlay' => 'Dotknij, aby odtworzyć', + 'accessibility.decrease' => 'Zmniejsz', + 'accessibility.increase' => 'Zwiększ', + 'accessibility.decreaseValue' => ({required Object label}) => 'Zmniejsz ${label}', + 'accessibility.increaseValue' => ({required Object label}) => 'Zwiększ ${label}', + 'accessibility.hue' => 'Odcień', + 'accessibility.saturation' => 'Nasycenie', + 'accessibility.brightness' => 'Jasność', + 'accessibility.hexColor' => 'Kolor szesnastkowy', 'tooltips.shufflePlay' => 'Odtwarzanie losowe', 'tooltips.playTrailer' => 'Odtwórz zwiastun', 'tooltips.markAsWatched' => 'Oznacz jako obejrzane', @@ -2579,13 +2553,11 @@ extension on TranslationsPl { 'videoControls.settingsButton' => 'Ustawienia odtwarzania', 'videoControls.tracksButton' => 'Audio i napisy', 'videoControls.chaptersButton' => 'Rozdziały', - 'videoControls.versionsButton' => 'Wersje wideo', 'videoControls.versionQualityButton' => 'Wersja i jakość', 'videoControls.versionColumnHeader' => 'Wersja', 'videoControls.qualityColumnHeader' => 'Jakość', 'videoControls.qualityOriginal' => 'Oryginalna', 'videoControls.qualityPresetLabel' => ({required Object resolution, required Object bitrate}) => '${resolution}p ${bitrate} Mbps', - 'videoControls.qualityBandwidthEstimate' => ({required Object bitrate}) => '~${bitrate} Mbps', 'videoControls.transcodeUnavailableFallback' => 'Transkodowanie niedostępne — odtwarzanie w oryginalnej jakości', 'videoControls.pipButton' => 'Tryb obraz w obrazie', 'videoControls.aspectRatioButton' => 'Proporcje', @@ -2625,10 +2597,6 @@ extension on TranslationsPl { 'videoControls.subtitleDownloaded' => 'Napisy pobrane', 'videoControls.subtitleDownloadFailed' => 'Nie udało się pobrać napisów', 'videoControls.searchLanguages' => 'Szukaj języków...', - 'userStatus.admin' => 'Administrator', - 'userStatus.restricted' => 'Ograniczony', - 'userStatus.protected' => 'Chroniony', - 'userStatus.current' => 'BIEŻĄCY', 'messages.markedAsWatched' => 'Oznaczono jako obejrzane', 'messages.markedAsUnwatched' => 'Oznaczono jako nieobejrzane', 'messages.markedAsWatchedOffline' => 'Oznaczono jako obejrzane (zsynchronizuje się po połączeniu)', @@ -2638,8 +2606,6 @@ extension on TranslationsPl { 'messages.errorLoading' => ({required Object error}) => 'Błąd: ${error}', 'messages.streamInterrupted' => 'Strumień został przerwany. Naciśnij odtwarzanie lub przewiń, aby spróbować ponownie.', 'messages.fileInfoNotAvailable' => 'Informacje o pliku niedostępne', - _ => null, - } ?? switch (path) { 'messages.errorLoadingFileInfo' => ({required Object error}) => 'Błąd ładowania informacji o pliku: ${error}', 'messages.errorLoadingSeries' => 'Błąd ładowania serialu', 'messages.musicNotSupported' => 'Odtwarzanie muzyki nie jest jeszcze obsługiwane', @@ -2647,6 +2613,8 @@ extension on TranslationsPl { 'messages.noProfilesAvailable' => 'Brak dostępnych profili', 'messages.contactAdminForProfiles' => 'Skontaktuj się z administratorem serwera, aby dodać profile', 'messages.unableToDetermineLibrarySection' => 'Nie można określić sekcji biblioteki dla tego elementu', + _ => null, + } ?? switch (path) { 'messages.logsCleared' => 'Logi wyczyszczone', 'messages.logsCopied' => 'Logi skopiowane do schowka', 'messages.noLogsAvailable' => 'Brak dostępnych logów', @@ -2763,7 +2731,6 @@ extension on TranslationsPl { 'profiles.pinExplain' => 'Do przełączania profili wymagany jest 4-cyfrowy PIN.', 'profiles.continueButton' => 'Kontynuuj', 'profiles.pinsDontMatch' => 'PIN-y nie pasują', - 'profiles.initializeServicesFailed' => 'Nie udało się zainicjować usług profilu', 'connections.sectionTitle' => 'Połączenia', 'connections.addConnection' => 'Dodaj połączenie', 'connections.addConnectionSubtitleNoProfile' => 'Zaloguj się przez Plex lub połącz serwer Jellyfin', @@ -2774,7 +2741,6 @@ extension on TranslationsPl { 'connections.editJellyfinTitle' => 'Edytuj połączenie Jellyfin', 'connections.editJellyfinIntro' => ({required Object serverName}) => 'Dodaj lub usuń adresy URL dla ${serverName}. Plezy użyje osiągalnego URL-a o najniższym opóźnieniu.', 'discover.title' => 'Odkryj', - 'discover.switchProfile' => 'Zmień profil', 'discover.noContentAvailable' => 'Brak dostępnych treści', 'discover.addMediaToLibraries' => 'Dodaj multimedia do swoich bibliotek', 'discover.continueWatching' => 'Kontynuuj oglądanie', @@ -2801,8 +2767,6 @@ extension on TranslationsPl { 'errors.connectionFailed' => 'Nie można połączyć się z serwerem multimediów', 'errors.failedToLoad' => ({required Object context, required Object error}) => 'Nie udało się załadować ${context}: ${error}', 'errors.noClientAvailable' => 'Brak dostępnego klienta', - 'errors.authenticationFailed' => ({required Object error}) => 'Uwierzytelnienie nie powiodło się: ${error}', - 'errors.couldNotLaunchUrl' => 'Nie można otworzyć URL uwierzytelniania', 'errors.pleaseEnterToken' => 'Wprowadź token', 'errors.invalidToken' => 'Nieprawidłowy token', 'errors.failedToVerifyToken' => ({required Object error}) => 'Nie udało się zweryfikować tokena: ${error}', @@ -2827,6 +2791,8 @@ extension on TranslationsPl { 'libraries.allLibrariesHidden' => 'Wszystkie biblioteki są ukryte', 'libraries.hiddenLibrariesCount' => ({required Object count}) => 'Ukryte biblioteki (${count})', 'libraries.thisLibraryIsEmpty' => 'Ta biblioteka jest pusta', + 'libraries.noItemsMatchFilters' => 'Żadne elementy nie pasują do aktywnych filtrów', + 'libraries.resetFilters' => 'Resetuj filtry', 'libraries.all' => 'Wszystkie', 'libraries.clearAll' => 'Wyczyść wszystko', 'libraries.scanLibraryConfirm' => ({required Object title}) => 'Czy na pewno chcesz zeskanować "${title}"?', @@ -2875,7 +2841,6 @@ extension on TranslationsPl { 'libraries.sortLabels.communityRating' => 'Ocena społeczności', 'libraries.sortLabels.criticRating' => 'Ocena krytyków', 'libraries.sortLabels.userRating' => 'Ocena użytkownika', - 'libraries.sortLabels.lastPlayed' => 'Ostatnio odtwarzane', 'libraries.sortLabels.datePlayed' => 'Data odtworzenia', 'libraries.sortLabels.playCount' => 'Liczba odtworzeń', 'libraries.sortLabels.productionYear' => 'Rok produkcji', @@ -2889,14 +2854,11 @@ extension on TranslationsPl { 'libraries.sortLabels.dateShared' => 'Data udostępnienia', 'libraries.sortLabels.latestEpisodeAirDate' => 'Data emisji ostatniego odcinka', 'libraries.sortLabels.lastEpisodeDateAdded' => 'Data dodania ostatniego odcinka', - 'libraries.noItemsMatchFilters' => 'Żadne elementy nie pasują do aktywnych filtrów', - 'libraries.resetFilters' => 'Resetuj filtry', 'about.title' => 'O aplikacji', 'about.openSourceLicenses' => 'Licencje open source', 'about.versionLabel' => ({required Object version}) => 'Wersja ${version}', 'about.appDescription' => 'Piękny klient Plex i Jellyfin na Flutter', 'about.viewLicensesDescription' => 'Zobacz licencje bibliotek zewnętrznych', - 'serverSelection.allServerConnectionsFailed' => 'Nie udało się połączyć z żadnym serwerem. Sprawdź sieć.', 'serverSelection.noServersFoundForAccount' => ({required Object username, required Object email}) => 'Nie znaleziono serwerów dla ${username} (${email})', 'serverSelection.failedToLoadServers' => ({required Object error}) => 'Nie udało się załadować serwerów: ${error}', 'hubDetail.title' => 'Tytuł', @@ -2942,7 +2904,6 @@ extension on TranslationsPl { 'explore.watchlistUpdateFailed' => 'Nie udało się zaktualizować listy do obejrzenia', 'explore.notInLibrary' => 'Nie ma tego w Twojej bibliotece', 'explore.inTheseLibraries' => 'W tych bibliotekach', - 'explore.availableOn' => ({required Object server}) => 'Dostępne na ${server}', 'explore.checkingLibrary' => 'Sprawdzanie Twojej biblioteki...', 'explore.emptyTitle' => 'Jeszcze nic tu nie ma', 'explore.emptyMessage' => ({required Object source}) => 'Wiersze z ${source} pojawią się tutaj, gdy będą zawierać treści.', @@ -2954,6 +2915,8 @@ extension on TranslationsPl { 'liveTv.guide' => 'Przewodnik', 'liveTv.noChannels' => 'Brak dostępnych kanałów', 'liveTv.noDvr' => 'Brak skonfigurowanego DVR na żadnym serwerze', + 'liveTv.serverUnavailable' => 'Serwer telewizji na żywo jest niedostępny.', + 'liveTv.serverNotConnected' => 'Serwer telewizji na żywo nie jest połączony.', 'liveTv.noPrograms' => 'Brak danych o programach', 'liveTv.liveStreamFailed' => 'Transmisja na żywo nie powiodła się', 'liveTv.unknownProgram' => 'Nieznany program', @@ -2989,7 +2952,6 @@ extension on TranslationsPl { 'liveTv.scheduledRecordings' => 'Zaplanowane', 'liveTv.recordingRules' => 'Reguły nagrywania', 'liveTv.noScheduledRecordings' => 'Brak zaplanowanych nagrań', - 'liveTv.noRecordingRules' => 'Brak reguł nagrywania', 'liveTv.manageRecording' => 'Zarządzaj nagraniem', 'liveTv.cancelRecording' => 'Anuluj nagrywanie', 'liveTv.cancelRecordingTitle' => 'Anulować to nagrywanie?', @@ -3006,7 +2968,6 @@ extension on TranslationsPl { 'liveTv.recordingCancelled' => 'Nagrywanie anulowane', 'liveTv.recordingRuleDeleted' => 'Reguła nagrywania usunięta', 'liveTv.processRecordingRules' => 'Ponów ocenę reguł', - 'liveTv.loadingRecordings' => 'Wczytywanie nagrań...', 'liveTv.recordingInProgress' => 'Trwa nagrywanie', 'liveTv.recordingsCount' => ({required Object count}) => '${count} zaplanowanych', 'liveTv.editRule' => 'Edytuj regułę', @@ -3018,7 +2979,6 @@ extension on TranslationsPl { 'collections.title' => 'Kolekcje', 'collections.collection' => 'Kolekcja', 'collections.empty' => 'Kolekcja jest pusta', - 'collections.unknownLibrarySection' => 'Nie można usunąć: Nieznana sekcja biblioteki', 'collections.deleteCollection' => 'Usuń kolekcję', 'collections.deleteConfirm' => ({required Object title}) => 'Usunąć "${title}"? Tego nie można cofnąć.', 'collections.deleted' => 'Kolekcja usunięta', @@ -3056,6 +3016,7 @@ extension on TranslationsPl { 'playlists.itemAdded' => 'Dodano do playlisty', 'playlists.itemRemoved' => 'Usunięto z playlisty', 'playlists.selectPlaylist' => 'Wybierz playlistę', + 'playlists.searchPlaylists' => 'Szukaj playlist...', 'playlists.errorCreating' => 'Nie udało się utworzyć playlisty', 'playlists.errorDeleting' => 'Nie udało się usunąć playlisty', 'playlists.errorLoading' => 'Nie udało się załadować playlist', @@ -3138,22 +3099,20 @@ extension on TranslationsPl { 'watchTogether.participantResumed' => ({required Object name}) => '${name} wznowił', 'watchTogether.participantSeeked' => ({required Object name}) => '${name} przewinął', 'watchTogether.participantBuffering' => ({required Object name}) => '${name} buforuje', + 'watchTogether.participantNeedsUpdate' => ({required Object name}) => '${name} używa starszej wersji aplikacji — synchronizacja jest niedostępna', + 'watchTogether.resumingWithout' => ({required Object name}) => 'Wznawianie bez ${name}', 'watchTogether.waitingForParticipants' => 'Oczekiwanie na załadowanie u innych...', + 'watchTogether.waitingForName' => ({required Object name}) => 'Oczekiwanie na ${name}...', 'watchTogether.recentRooms' => 'Ostatnie pokoje', 'watchTogether.renameRoom' => 'Zmień nazwę pokoju', 'watchTogether.removeRoom' => 'Usuń', 'watchTogether.guestSwitchUnavailable' => 'Nie można przełączyć — serwer niedostępny do synchronizacji', 'watchTogether.guestSwitchFailed' => 'Nie można przełączyć — nie znaleziono treści na tym serwerze', - 'watchTogether.participantNeedsUpdate' => ({required Object name}) => '${name} używa starszej wersji aplikacji — synchronizacja jest niedostępna', - 'watchTogether.resumingWithout' => ({required Object name}) => 'Wznawianie bez ${name}', - 'watchTogether.waitingForName' => ({required Object name}) => 'Oczekiwanie na ${name}...', 'downloads.title' => 'Pobrania', 'downloads.manage' => 'Zarządzaj', 'downloads.tvShows' => 'Seriale TV', 'downloads.movies' => 'Filmy', 'downloads.music' => 'Muzyka', - _ => null, - } ?? switch (path) { 'downloads.tracksQueued' => ({required Object count}) => '${count} utworów w kolejce do pobrania', 'downloads.noDownloads' => 'Brak pobrań', 'downloads.noDownloadsDescription' => 'Pobrane treści pojawią się tutaj do oglądania offline', @@ -3168,6 +3127,8 @@ extension on TranslationsPl { 'downloads.deleteConfirm' => ({required Object title}) => 'Usunąć "${title}" z tego urządzenia?', 'downloads.cancelledDownloadTitle' => 'Anulowane pobieranie', 'downloads.cancelledDownloadMessage' => 'To pobieranie zostało anulowane. Co chcesz zrobić?', + _ => null, + } ?? switch (path) { 'downloads.allEpisodesAlreadyDownloaded' => 'Wszystkie odcinki są już pobrane', 'downloads.resumeDownload' => 'Wznów pobieranie', 'downloads.cancelledDownload' => 'Anulowane pobieranie', @@ -3191,7 +3152,6 @@ extension on TranslationsPl { 'downloads.customAmount' => 'Własna ilość...', 'downloads.includeSpecials' => 'Uwzględnij odcinki specjalne', 'downloads.howManyEpisodes' => 'Ile odcinków?', - 'downloads.itemsQueued' => ({required Object count}) => '${count} elementów dodanych do kolejki pobierania', 'downloads.keepSynced' => 'Synchronizuj na bieżąco', 'downloads.downloadOnce' => 'Pobierz raz', 'downloads.keepNUnwatched' => ({required Object count}) => 'Zachowaj ${count} nieobejrzanych', @@ -3235,7 +3195,6 @@ extension on TranslationsPl { 'companionRemote.connectedTo' => ({required Object name}) => 'Połączono z ${name}', 'companionRemote.unknownDevice' => 'Nieznane urządzenie', 'companionRemote.session.startingServer' => 'Uruchamianie serwera zdalnego...', - 'companionRemote.session.failedToCreate' => 'Nie udało się uruchomić serwera zdalnego:', 'companionRemote.session.hostAddress' => 'Adres hosta', 'companionRemote.session.connected' => 'Połączono', 'companionRemote.session.serverRunning' => 'Serwer zdalny aktywny', @@ -3290,6 +3249,8 @@ extension on TranslationsPl { 'companionRemote.remote.searchHint' => 'Szukaj na komputerze...', 'companionRemote.errors.noNetworkInterface' => 'Nie znaleziono interfejsu sieciowego', 'companionRemote.errors.authenticationFailed' => 'Uwierzytelnianie nie powiodło się', + 'companionRemote.errors.serverStartFailed' => ({required Object error}) => 'Nie udało się uruchomić serwera zdalnego: ${error}', + 'companionRemote.errors.commandFailed' => ({required Object error}) => 'Nie udało się wysłać polecenia zdalnego: ${error}', 'companionRemote.errors.joinTimedOut' => 'Upłynął limit czasu dołączania do sesji', 'companionRemote.errors.failedToConnectAnyAddress' => 'Nie udało się połączyć z żadnym adresem', 'companionRemote.errors.connectionLostAfterAttempts' => ({required Object attempts}) => 'Połączenie utracone po ${attempts} próbach', @@ -3534,7 +3495,6 @@ extension on TranslationsPl { 'addServer.quickConnectFailed' => ({required Object error}) => 'Quick Connect nie powiodło się: ${error}', 'addServer.addPlexTitle' => 'Zaloguj się przez Plex', 'addServer.pinExpired' => 'PIN wygasł przed zalogowaniem. Spróbuj ponownie.', - 'addServer.duplicatePlexAccount' => 'Już zalogowano do Plex. Wyloguj się, aby zmienić konto.', 'addServer.failedToRegisterAccount' => ({required Object error}) => 'Nie udało się zarejestrować konta: ${error}', 'addServer.enterJellyfinUrlError' => 'Podaj URL serwera Jellyfin', 'addServer.addConnectionTitle' => 'Dodaj połączenie', diff --git a/lib/i18n/strings_pt.g.dart b/lib/i18n/strings_pt.g.dart index b3b3f925..a2f1fb60 100644 --- a/lib/i18n/strings_pt.g.dart +++ b/lib/i18n/strings_pt.g.dart @@ -53,7 +53,6 @@ class TranslationsPt extends Translations with BaseTranslations 'Entrar'; @override String get signInWithPlex => 'Entrar com Plex'; @override String get showQRCode => 'Mostrar QR Code'; @override String get authenticate => 'Autenticar'; @@ -167,10 +165,8 @@ class _TranslationsCommonPt extends TranslationsCommonEn { @override String episodeNumberTitle({required Object number, required Object title}) => 'Episódio ${number} - ${title}'; @override String chapterNumber({required Object number}) => 'Capítulo ${number}'; @override String get reconnect => 'Reconectar'; - @override String get exit => 'Sair'; @override String get viewAll => 'Ver Tudo'; @override String get checkingNetwork => 'Verificando rede...'; - @override String get refreshingServers => 'Atualizando servidores...'; @override String get loadingServers => 'Carregando servidores...'; @override String get connectingToServers => 'Conectando aos servidores...'; @override String get startingOfflineMode => 'Iniciando modo offline...'; @@ -271,6 +267,12 @@ class _TranslationsSettingsPt extends TranslationsSettingsEn { @override String get tvFullCardLayoutDescription => 'Usar cartões de TV só com imagem e nomes dos atores sobrepostos'; @override String get focusGlow => 'Brilho de foco'; @override String get focusGlowDescription => 'Mostrar um brilho suave à volta do cartão em foco'; + @override String get visualEffects => 'Efeitos visuais'; + @override String get visualEffectsAuto => 'Automático'; + @override String get visualEffectsAutoDescription => 'Reduza automaticamente os efeitos em dispositivos de baixo consumo'; + @override String get visualEffectsFull => 'Completos'; + @override String get visualEffectsReduced => 'Reduzidos'; + @override String get visualEffectsReducedDescription => 'Menos animações e artes em menor resolução'; @override String get hideSpoilers => 'Ocultar Spoilers de Episódios Não Assistidos'; @override String get hideSpoilersDescription => 'Desfocar miniaturas e descrições de episódios não vistos'; @override String get playerBackend => 'Backend do Player'; @@ -283,7 +285,7 @@ class _TranslationsSettingsPt extends TranslationsSettingsEn { @override String get bufferSizeAuto => 'Automático (Recomendado)'; @override String bufferSizeWarning({required Object heap, required Object size}) => '${heap}MB de memória disponível. Um buffer de ${size}MB pode afetar a reprodução.'; @override String get defaultQualityTitle => 'Qualidade padrão'; - @override String get defaultQualityDescription => 'Usado ao iniciar a reprodução. Valores menores reduzem a largura de banda.'; + @override String get musicQualityTitle => 'Qualidade da música'; @override String get subtitleStyling => 'Estilo de Legendas'; @override String get subtitleStylingDescription => 'Personalizar aparência das legendas'; @override String get smallSkipDuration => 'Duração do Avanço Curto'; @@ -377,10 +379,9 @@ class _TranslationsSettingsPt extends TranslationsSettingsEn { @override String maxVolumePercent({required Object percent}) => '${percent}%'; @override String get discordRichPresence => 'Discord Rich Presence'; @override String get discordRichPresenceDescription => 'Mostrar o que você está assistindo no Discord'; - @override String get trakt => 'Trakt'; - @override String get traktDescription => 'Sincronizar histórico de exibição com Trakt'; @override String get services => 'Serviços'; @override String get servicesDescription => 'Conecte Trakt, MyAnimeList, Seerr e mais'; + @override String get manageLibrariesDescription => 'Reordene e oculte bibliotecas'; @override String get companionRemoteServer => 'Servidor de controlo remoto'; @override String get companionRemoteServerDescription => 'Permitir que dispositivos móveis na sua rede controlem esta aplicação'; @override String get autoPip => 'Picture-in-Picture Automático'; @@ -443,7 +444,6 @@ class _TranslationsSettingsPt extends TranslationsSettingsEn { @override String get showNavBarLabels => 'Mostrar Rótulos da Barra de Navegação'; @override String get showNavBarLabelsDescription => 'Exibir rótulos de texto sob os ícones da barra de navegação'; @override String get startupSection => 'Seção inicial'; - @override String get startupSectionDescription => 'Escolha qual seção o Plezy abre ao iniciar'; @override String get liveTvDefaultFavorites => 'Canais favoritos por padrão'; @override String get liveTvDefaultFavoritesDescription => 'Mostrar apenas canais favoritos ao abrir TV ao vivo'; @override String get display => 'Tela'; @@ -455,13 +455,6 @@ class _TranslationsSettingsPt extends TranslationsSettingsEn { @override String get subtitlesAndConfig => 'Legendas e configuração'; @override String get seekAndTiming => 'Busca e tempo'; @override String get behavior => 'Comportamento'; - @override String get manageLibrariesDescription => 'Reordene e oculte bibliotecas'; - @override String get visualEffects => 'Efeitos visuais'; - @override String get visualEffectsAuto => 'Automático'; - @override String get visualEffectsAutoDescription => 'Reduza automaticamente os efeitos em dispositivos de baixo consumo'; - @override String get visualEffectsFull => 'Completos'; - @override String get visualEffectsReduced => 'Reduzidos'; - @override String get visualEffectsReducedDescription => 'Menos animações e artes em menor resolução'; } // Path: search @@ -559,14 +552,11 @@ class _TranslationsRateSheetPt extends TranslationsRateSheetEn { // Translations @override String get title => 'Avaliar'; @override String get server => 'Servidor'; - @override String starValue({required Object rating}) => '${rating} / 5'; - @override String scoreValue({required Object score}) => '${score} / 10'; - @override String get setScore => 'Definir pontuação'; + @override String get favorite => 'Favorito'; + @override String get favorited => 'Adicionado aos favoritos'; @override String get saved => 'Salvo'; @override String get notAvailable => 'Nenhuma correspondência encontrada'; @override String get noConnectedServices => 'Conecte um serviço nas Configurações para avaliar por lá.'; - @override String get favorite => 'Favorito'; - @override String get favorited => 'Adicionado aos favoritos'; } // Path: accessibility @@ -584,6 +574,14 @@ class _TranslationsAccessibilityPt extends TranslationsAccessibilityEn { @override String mediaCardPartiallyWatched({required Object percent}) => '${percent} por cento assistido'; @override String get mediaCardUnwatched => 'não assistido'; @override String get tapToPlay => 'Toque para reproduzir'; + @override String get decrease => 'Diminuir'; + @override String get increase => 'Aumentar'; + @override String decreaseValue({required Object label}) => 'Diminuir ${label}'; + @override String increaseValue({required Object label}) => 'Aumentar ${label}'; + @override String get hue => 'Matiz'; + @override String get saturation => 'Saturação'; + @override String get brightness => 'Brilho'; + @override String get hexColor => 'Cor hexadecimal'; } // Path: tooltips @@ -643,13 +641,11 @@ class _TranslationsVideoControlsPt extends TranslationsVideoControlsEn { @override String get settingsButton => 'Configurações de Reprodução'; @override String get tracksButton => 'Áudio e Legendas'; @override String get chaptersButton => 'Capítulos'; - @override String get versionsButton => 'Versões do vídeo'; @override String get versionQualityButton => 'Versão e qualidade'; @override String get versionColumnHeader => 'Versão'; @override String get qualityColumnHeader => 'Qualidade'; @override String get qualityOriginal => 'Original'; @override String qualityPresetLabel({required Object resolution, required Object bitrate}) => '${resolution}p ${bitrate} Mbps'; - @override String qualityBandwidthEstimate({required Object bitrate}) => '~${bitrate} Mbps'; @override String get transcodeUnavailableFallback => 'Transcodificação indisponível — reproduzindo qualidade original'; @override String get pipButton => 'Modo Picture-in-Picture'; @override String get aspectRatioButton => 'Proporção'; @@ -685,19 +681,6 @@ class _TranslationsVideoControlsPt extends TranslationsVideoControlsEn { @override String get searchLanguages => 'Pesquisar idiomas...'; } -// Path: userStatus -class _TranslationsUserStatusPt extends TranslationsUserStatusEn { - _TranslationsUserStatusPt._(TranslationsPt root) : this._root = root, super.internal(root); - - final TranslationsPt _root; // ignore: unused_field - - // Translations - @override String get admin => 'Admin'; - @override String get restricted => 'Restrito'; - @override String get protected => 'Protegido'; - @override String get current => 'ATUAL'; -} - // Path: messages class _TranslationsMessagesPt extends TranslationsMessagesEn { _TranslationsMessagesPt._(TranslationsPt root) : this._root = root, super.internal(root); @@ -873,7 +856,6 @@ class _TranslationsProfilesPt extends TranslationsProfilesEn { @override String get pinExplain => 'PIN de 4 dígitos necessário para trocar perfis.'; @override String get continueButton => 'Continuar'; @override String get pinsDontMatch => 'Os PINs não correspondem'; - @override String get initializeServicesFailed => 'Falha ao inicializar serviços de perfil'; } // Path: connections @@ -902,7 +884,6 @@ class _TranslationsDiscoverPt extends TranslationsDiscoverEn { // Translations @override String get title => 'Descobrir'; - @override String get switchProfile => 'Trocar Perfil'; @override String get noContentAvailable => 'Nenhum conteúdo disponível'; @override String get addMediaToLibraries => 'Adicione mídias às suas bibliotecas'; @override String get continueWatching => 'Continuar Assistindo'; @@ -938,8 +919,6 @@ class _TranslationsErrorsPt extends TranslationsErrorsEn { @override String get connectionFailed => 'Não foi possível conectar ao servidor de mídia'; @override String failedToLoad({required Object context, required Object error}) => 'Falha ao carregar ${context}: ${error}'; @override String get noClientAvailable => 'Nenhum cliente disponível'; - @override String authenticationFailed({required Object error}) => 'Falha na autenticação: ${error}'; - @override String get couldNotLaunchUrl => 'Não foi possível abrir a URL de autenticação'; @override String get pleaseEnterToken => 'Insira um token'; @override String get invalidToken => 'Token inválido'; @override String failedToVerifyToken({required Object error}) => 'Falha ao verificar token: ${error}'; @@ -973,6 +952,8 @@ class _TranslationsLibrariesPt extends TranslationsLibrariesEn { @override String get allLibrariesHidden => 'Todas as bibliotecas estão ocultas'; @override String hiddenLibrariesCount({required Object count}) => 'Bibliotecas ocultas (${count})'; @override String get thisLibraryIsEmpty => 'Esta biblioteca está vazia'; + @override String get noItemsMatchFilters => 'Nenhum item corresponde aos filtros ativos'; + @override String get resetFilters => 'Redefinir filtros'; @override String get all => 'Todos'; @override String get clearAll => 'Limpar Tudo'; @override String scanLibraryConfirm({required Object title}) => 'Tem certeza que deseja escanear "${title}"?'; @@ -998,8 +979,6 @@ class _TranslationsLibrariesPt extends TranslationsLibrariesEn { @override late final _TranslationsLibrariesGroupingsPt groupings = _TranslationsLibrariesGroupingsPt._(_root); @override late final _TranslationsLibrariesFilterCategoriesPt filterCategories = _TranslationsLibrariesFilterCategoriesPt._(_root); @override late final _TranslationsLibrariesSortLabelsPt sortLabels = _TranslationsLibrariesSortLabelsPt._(_root); - @override String get noItemsMatchFilters => 'Nenhum item corresponde aos filtros ativos'; - @override String get resetFilters => 'Redefinir filtros'; } // Path: about @@ -1023,7 +1002,6 @@ class _TranslationsServerSelectionPt extends TranslationsServerSelectionEn { final TranslationsPt _root; // ignore: unused_field // Translations - @override String get allServerConnectionsFailed => 'Não foi possível conectar a nenhum servidor. Verifique sua rede.'; @override String noServersFoundForAccount({required Object username, required Object email}) => 'Nenhum servidor encontrado para ${username} (${email})'; @override String failedToLoadServers({required Object error}) => 'Falha ao carregar servidores: ${error}'; } @@ -1102,7 +1080,6 @@ class _TranslationsExplorePt extends TranslationsExploreEn { @override String get watchlistUpdateFailed => 'Não foi possível atualizar a lista para ver'; @override String get notInLibrary => 'Não está na sua biblioteca'; @override String get inTheseLibraries => 'Nestas bibliotecas'; - @override String availableOn({required Object server}) => 'Disponível em ${server}'; @override String get checkingLibrary => 'Verificando a sua biblioteca...'; @override String get emptyTitle => 'Ainda não há nada aqui'; @override String emptyMessage({required Object source}) => 'As linhas de ${source} aparecerão aqui quando tiverem conteúdo.'; @@ -1123,6 +1100,8 @@ class _TranslationsLiveTvPt extends TranslationsLiveTvEn { @override String get guide => 'Guia'; @override String get noChannels => 'Nenhum canal disponível'; @override String get noDvr => 'Nenhum DVR configurado em nenhum servidor'; + @override String get serverUnavailable => 'O servidor de TV em direto não está disponível.'; + @override String get serverNotConnected => 'O servidor de TV em direto não está ligado.'; @override String get noPrograms => 'Nenhum dado de programação disponível'; @override String get liveStreamFailed => 'Falha no stream ao vivo'; @override String get unknownProgram => 'Programa desconhecido'; @@ -1158,7 +1137,6 @@ class _TranslationsLiveTvPt extends TranslationsLiveTvEn { @override String get scheduledRecordings => 'Agendadas'; @override String get recordingRules => 'Regras de gravação'; @override String get noScheduledRecordings => 'Sem gravações agendadas'; - @override String get noRecordingRules => 'Sem regras de gravação'; @override String get manageRecording => 'Gerenciar gravação'; @override String get cancelRecording => 'Cancelar gravação'; @override String get cancelRecordingTitle => 'Cancelar esta gravação?'; @@ -1175,7 +1153,6 @@ class _TranslationsLiveTvPt extends TranslationsLiveTvEn { @override String get recordingCancelled => 'Gravação cancelada'; @override String get recordingRuleDeleted => 'Regra de gravação excluída'; @override String get processRecordingRules => 'Reavaliar regras'; - @override String get loadingRecordings => 'Carregando gravações...'; @override String get recordingInProgress => 'Gravando agora'; @override String recordingsCount({required Object count}) => '${count} agendadas'; @override String get editRule => 'Editar regra'; @@ -1196,7 +1173,6 @@ class _TranslationsCollectionsPt extends TranslationsCollectionsEn { @override String get title => 'Coleções'; @override String get collection => 'Coleção'; @override String get empty => 'A coleção está vazia'; - @override String get unknownLibrarySection => 'Não é possível excluir: Seção de biblioteca desconhecida'; @override String get deleteCollection => 'Excluir Coleção'; @override String deleteConfirm({required Object title}) => 'Excluir "${title}"? Não pode ser desfeito.'; @override String get deleted => 'Coleção excluída'; @@ -1243,6 +1219,7 @@ class _TranslationsPlaylistsPt extends TranslationsPlaylistsEn { @override String get itemAdded => 'Adicionado à playlist'; @override String get itemRemoved => 'Removido da playlist'; @override String get selectPlaylist => 'Selecionar Playlist'; + @override String get searchPlaylists => 'Pesquisar playlists...'; @override String get errorCreating => 'Falha ao criar playlist'; @override String get errorDeleting => 'Falha ao excluir playlist'; @override String get errorLoading => 'Falha ao carregar playlists'; @@ -1346,15 +1323,15 @@ class _TranslationsWatchTogetherPt extends TranslationsWatchTogetherEn { @override String participantResumed({required Object name}) => '${name} retomou'; @override String participantSeeked({required Object name}) => '${name} avançou'; @override String participantBuffering({required Object name}) => '${name} está carregando'; + @override String participantNeedsUpdate({required Object name}) => '${name} está em uma versão mais antiga do aplicativo — sincronização indisponível'; + @override String resumingWithout({required Object name}) => 'Retomando sem ${name}'; @override String get waitingForParticipants => 'Aguardando outros carregarem...'; + @override String waitingForName({required Object name}) => 'Aguardando ${name}...'; @override String get recentRooms => 'Salas recentes'; @override String get renameRoom => 'Renomear sala'; @override String get removeRoom => 'Remover'; @override String get guestSwitchUnavailable => 'Não foi possível trocar — servidor indisponível para sincronização'; @override String get guestSwitchFailed => 'Não foi possível trocar — conteúdo não encontrado neste servidor'; - @override String participantNeedsUpdate({required Object name}) => '${name} está em uma versão mais antiga do aplicativo — sincronização indisponível'; - @override String resumingWithout({required Object name}) => 'Retomando sem ${name}'; - @override String waitingForName({required Object name}) => 'Aguardando ${name}...'; } // Path: downloads @@ -1406,7 +1383,6 @@ class _TranslationsDownloadsPt extends TranslationsDownloadsEn { @override String get customAmount => 'Quantidade personalizada...'; @override String get includeSpecials => 'Incluir especiais'; @override String get howManyEpisodes => 'Quantos episódios?'; - @override String itemsQueued({required Object count}) => '${count} itens na fila de download'; @override String get keepSynced => 'Manter sincronizado'; @override String get downloadOnce => 'Baixar uma vez'; @override String keepNUnwatched({required Object count}) => 'Manter ${count} não assistidos'; @@ -1780,7 +1756,6 @@ class _TranslationsAddServerPt extends TranslationsAddServerEn { @override String quickConnectFailed({required Object error}) => 'Quick Connect falhou: ${error}'; @override String get addPlexTitle => 'Entrar com Plex'; @override String get pinExpired => 'O PIN expirou antes do login. Tente novamente.'; - @override String get duplicatePlexAccount => 'Você já entrou no Plex. Saia para trocar de conta.'; @override String failedToRegisterAccount({required Object error}) => 'Falha ao registrar a conta: ${error}'; @override String get enterJellyfinUrlError => 'Insira a URL do seu servidor Jellyfin'; @override String get addConnectionTitle => 'Adicionar conexão'; @@ -1906,7 +1881,6 @@ class _TranslationsLibrariesSortLabelsPt extends TranslationsLibrariesSortLabels @override String get communityRating => 'Avaliação da comunidade'; @override String get criticRating => 'Avaliação da crítica'; @override String get userRating => 'Avaliação do usuário'; - @override String get lastPlayed => 'Última reprodução'; @override String get datePlayed => 'Data de reprodução'; @override String get playCount => 'Reproduções'; @override String get productionYear => 'Ano de produção'; @@ -1965,7 +1939,6 @@ class _TranslationsCompanionRemoteSessionPt extends TranslationsCompanionRemoteS // Translations @override String get startingServer => 'A iniciar servidor remoto...'; - @override String get failedToCreate => 'Falha ao iniciar o servidor remoto:'; @override String get hostAddress => 'Endereço do host'; @override String get connected => 'Conectado'; @override String get serverRunning => 'Servidor remoto ativo'; @@ -2047,6 +2020,8 @@ class _TranslationsCompanionRemoteErrorsPt extends TranslationsCompanionRemoteEr // Translations @override String get noNetworkInterface => 'Nenhuma interface de rede encontrada'; @override String get authenticationFailed => 'Falha na autenticação'; + @override String serverStartFailed({required Object error}) => 'Falha ao iniciar o servidor remoto: ${error}'; + @override String commandFailed({required Object error}) => 'Falha ao enviar o comando remoto: ${error}'; @override String get joinTimedOut => 'Tempo esgotado ao entrar na sessão'; @override String get failedToConnectAnyAddress => 'Falha ao conectar a qualquer endereço'; @override String connectionLostAfterAttempts({required Object attempts}) => 'Conexão perdida após ${attempts} tentativas'; @@ -2123,7 +2098,6 @@ extension on TranslationsPt { dynamic _flatMapFunction(String path) { return switch (path) { 'app.title' => 'Plezy', - 'auth.signIn' => 'Entrar', 'auth.signInWithPlex' => 'Entrar com Plex', 'auth.showQRCode' => 'Mostrar QR Code', 'auth.authenticate' => 'Autenticar', @@ -2174,10 +2148,8 @@ extension on TranslationsPt { 'common.episodeNumberTitle' => ({required Object number, required Object title}) => 'Episódio ${number} - ${title}', 'common.chapterNumber' => ({required Object number}) => 'Capítulo ${number}', 'common.reconnect' => 'Reconectar', - 'common.exit' => 'Sair', 'common.viewAll' => 'Ver Tudo', 'common.checkingNetwork' => 'Verificando rede...', - 'common.refreshingServers' => 'Atualizando servidores...', 'common.loadingServers' => 'Carregando servidores...', 'common.connectingToServers' => 'Conectando aos servidores...', 'common.startingOfflineMode' => 'Iniciando modo offline...', @@ -2251,6 +2223,12 @@ extension on TranslationsPt { 'settings.tvFullCardLayoutDescription' => 'Usar cartões de TV só com imagem e nomes dos atores sobrepostos', 'settings.focusGlow' => 'Brilho de foco', 'settings.focusGlowDescription' => 'Mostrar um brilho suave à volta do cartão em foco', + 'settings.visualEffects' => 'Efeitos visuais', + 'settings.visualEffectsAuto' => 'Automático', + 'settings.visualEffectsAutoDescription' => 'Reduza automaticamente os efeitos em dispositivos de baixo consumo', + 'settings.visualEffectsFull' => 'Completos', + 'settings.visualEffectsReduced' => 'Reduzidos', + 'settings.visualEffectsReducedDescription' => 'Menos animações e artes em menor resolução', 'settings.hideSpoilers' => 'Ocultar Spoilers de Episódios Não Assistidos', 'settings.hideSpoilersDescription' => 'Desfocar miniaturas e descrições de episódios não vistos', 'settings.playerBackend' => 'Backend do Player', @@ -2263,7 +2241,7 @@ extension on TranslationsPt { 'settings.bufferSizeAuto' => 'Automático (Recomendado)', 'settings.bufferSizeWarning' => ({required Object heap, required Object size}) => '${heap}MB de memória disponível. Um buffer de ${size}MB pode afetar a reprodução.', 'settings.defaultQualityTitle' => 'Qualidade padrão', - 'settings.defaultQualityDescription' => 'Usado ao iniciar a reprodução. Valores menores reduzem a largura de banda.', + 'settings.musicQualityTitle' => 'Qualidade da música', 'settings.subtitleStyling' => 'Estilo de Legendas', 'settings.subtitleStylingDescription' => 'Personalizar aparência das legendas', 'settings.smallSkipDuration' => 'Duração do Avanço Curto', @@ -2357,10 +2335,9 @@ extension on TranslationsPt { 'settings.maxVolumePercent' => ({required Object percent}) => '${percent}%', 'settings.discordRichPresence' => 'Discord Rich Presence', 'settings.discordRichPresenceDescription' => 'Mostrar o que você está assistindo no Discord', - 'settings.trakt' => 'Trakt', - 'settings.traktDescription' => 'Sincronizar histórico de exibição com Trakt', 'settings.services' => 'Serviços', 'settings.servicesDescription' => 'Conecte Trakt, MyAnimeList, Seerr e mais', + 'settings.manageLibrariesDescription' => 'Reordene e oculte bibliotecas', 'settings.companionRemoteServer' => 'Servidor de controlo remoto', 'settings.companionRemoteServerDescription' => 'Permitir que dispositivos móveis na sua rede controlem esta aplicação', 'settings.autoPip' => 'Picture-in-Picture Automático', @@ -2423,7 +2400,6 @@ extension on TranslationsPt { 'settings.showNavBarLabels' => 'Mostrar Rótulos da Barra de Navegação', 'settings.showNavBarLabelsDescription' => 'Exibir rótulos de texto sob os ícones da barra de navegação', 'settings.startupSection' => 'Seção inicial', - 'settings.startupSectionDescription' => 'Escolha qual seção o Plezy abre ao iniciar', 'settings.liveTvDefaultFavorites' => 'Canais favoritos por padrão', 'settings.liveTvDefaultFavoritesDescription' => 'Mostrar apenas canais favoritos ao abrir TV ao vivo', 'settings.display' => 'Tela', @@ -2435,13 +2411,6 @@ extension on TranslationsPt { 'settings.subtitlesAndConfig' => 'Legendas e configuração', 'settings.seekAndTiming' => 'Busca e tempo', 'settings.behavior' => 'Comportamento', - 'settings.manageLibrariesDescription' => 'Reordene e oculte bibliotecas', - 'settings.visualEffects' => 'Efeitos visuais', - 'settings.visualEffectsAuto' => 'Automático', - 'settings.visualEffectsAutoDescription' => 'Reduza automaticamente os efeitos em dispositivos de baixo consumo', - 'settings.visualEffectsFull' => 'Completos', - 'settings.visualEffectsReduced' => 'Reduzidos', - 'settings.visualEffectsReducedDescription' => 'Menos animações e artes em menor resolução', 'search.hint' => 'Buscar filmes, séries, músicas...', 'search.tryDifferentTerm' => 'Tente um termo de busca diferente', 'search.searchYourMedia' => 'Buscar suas mídias', @@ -2518,14 +2487,11 @@ extension on TranslationsPt { 'mediaMenu.playVersion' => 'Reproduzir versão...', 'rateSheet.title' => 'Avaliar', 'rateSheet.server' => 'Servidor', - 'rateSheet.starValue' => ({required Object rating}) => '${rating} / 5', - 'rateSheet.scoreValue' => ({required Object score}) => '${score} / 10', - 'rateSheet.setScore' => 'Definir pontuação', + 'rateSheet.favorite' => 'Favorito', + 'rateSheet.favorited' => 'Adicionado aos favoritos', 'rateSheet.saved' => 'Salvo', 'rateSheet.notAvailable' => 'Nenhuma correspondência encontrada', 'rateSheet.noConnectedServices' => 'Conecte um serviço nas Configurações para avaliar por lá.', - 'rateSheet.favorite' => 'Favorito', - 'rateSheet.favorited' => 'Adicionado aos favoritos', 'accessibility.mediaCardMovie' => ({required Object title}) => '${title}, filme', 'accessibility.mediaCardShow' => ({required Object title}) => '${title}, série de TV', 'accessibility.mediaCardEpisode' => ({required Object title, required Object episodeInfo}) => '${title}, ${episodeInfo}', @@ -2534,6 +2500,14 @@ extension on TranslationsPt { 'accessibility.mediaCardPartiallyWatched' => ({required Object percent}) => '${percent} por cento assistido', 'accessibility.mediaCardUnwatched' => 'não assistido', 'accessibility.tapToPlay' => 'Toque para reproduzir', + 'accessibility.decrease' => 'Diminuir', + 'accessibility.increase' => 'Aumentar', + 'accessibility.decreaseValue' => ({required Object label}) => 'Diminuir ${label}', + 'accessibility.increaseValue' => ({required Object label}) => 'Aumentar ${label}', + 'accessibility.hue' => 'Matiz', + 'accessibility.saturation' => 'Saturação', + 'accessibility.brightness' => 'Brilho', + 'accessibility.hexColor' => 'Cor hexadecimal', 'tooltips.shufflePlay' => 'Reprodução aleatória', 'tooltips.playTrailer' => 'Reproduzir trailer', 'tooltips.markAsWatched' => 'Marcar como assistido', @@ -2575,13 +2549,11 @@ extension on TranslationsPt { 'videoControls.settingsButton' => 'Configurações de Reprodução', 'videoControls.tracksButton' => 'Áudio e Legendas', 'videoControls.chaptersButton' => 'Capítulos', - 'videoControls.versionsButton' => 'Versões do vídeo', 'videoControls.versionQualityButton' => 'Versão e qualidade', 'videoControls.versionColumnHeader' => 'Versão', 'videoControls.qualityColumnHeader' => 'Qualidade', 'videoControls.qualityOriginal' => 'Original', 'videoControls.qualityPresetLabel' => ({required Object resolution, required Object bitrate}) => '${resolution}p ${bitrate} Mbps', - 'videoControls.qualityBandwidthEstimate' => ({required Object bitrate}) => '~${bitrate} Mbps', 'videoControls.transcodeUnavailableFallback' => 'Transcodificação indisponível — reproduzindo qualidade original', 'videoControls.pipButton' => 'Modo Picture-in-Picture', 'videoControls.aspectRatioButton' => 'Proporção', @@ -2621,10 +2593,6 @@ extension on TranslationsPt { 'videoControls.subtitleDownloaded' => 'Legenda baixada', 'videoControls.subtitleDownloadFailed' => 'Falha ao baixar legenda', 'videoControls.searchLanguages' => 'Pesquisar idiomas...', - 'userStatus.admin' => 'Admin', - 'userStatus.restricted' => 'Restrito', - 'userStatus.protected' => 'Protegido', - 'userStatus.current' => 'ATUAL', 'messages.markedAsWatched' => 'Marcado como assistido', 'messages.markedAsUnwatched' => 'Marcado como não assistido', 'messages.markedAsWatchedOffline' => 'Marcado como assistido (será sincronizado quando online)', @@ -2634,8 +2602,6 @@ extension on TranslationsPt { 'messages.errorLoading' => ({required Object error}) => 'Erro: ${error}', 'messages.streamInterrupted' => 'A transmissão foi interrompida. Toque em reproduzir ou avance para tentar novamente.', 'messages.fileInfoNotAvailable' => 'Informações do arquivo não disponíveis', - _ => null, - } ?? switch (path) { 'messages.errorLoadingFileInfo' => ({required Object error}) => 'Erro ao carregar info do arquivo: ${error}', 'messages.errorLoadingSeries' => 'Erro ao carregar série', 'messages.musicNotSupported' => 'Reprodução de música ainda não é suportada', @@ -2643,6 +2609,8 @@ extension on TranslationsPt { 'messages.noProfilesAvailable' => 'Nenhum perfil disponível', 'messages.contactAdminForProfiles' => 'Contate o administrador do servidor para adicionar perfis', 'messages.unableToDetermineLibrarySection' => 'Não é possível determinar a secção da biblioteca para este item', + _ => null, + } ?? switch (path) { 'messages.logsCleared' => 'Logs limpos', 'messages.logsCopied' => 'Logs copiados para a área de transferência', 'messages.noLogsAvailable' => 'Nenhum log disponível', @@ -2759,7 +2727,6 @@ extension on TranslationsPt { 'profiles.pinExplain' => 'PIN de 4 dígitos necessário para trocar perfis.', 'profiles.continueButton' => 'Continuar', 'profiles.pinsDontMatch' => 'Os PINs não correspondem', - 'profiles.initializeServicesFailed' => 'Falha ao inicializar serviços de perfil', 'connections.sectionTitle' => 'Conexões', 'connections.addConnection' => 'Adicionar conexão', 'connections.addConnectionSubtitleNoProfile' => 'Faça login com Plex ou conecte um servidor Jellyfin', @@ -2770,7 +2737,6 @@ extension on TranslationsPt { 'connections.editJellyfinTitle' => 'Editar conexão Jellyfin', 'connections.editJellyfinIntro' => ({required Object serverName}) => 'Adicione ou remova URLs de ${serverName}. O Plezy usará a URL acessível com a menor latência.', 'discover.title' => 'Descobrir', - 'discover.switchProfile' => 'Trocar Perfil', 'discover.noContentAvailable' => 'Nenhum conteúdo disponível', 'discover.addMediaToLibraries' => 'Adicione mídias às suas bibliotecas', 'discover.continueWatching' => 'Continuar Assistindo', @@ -2797,8 +2763,6 @@ extension on TranslationsPt { 'errors.connectionFailed' => 'Não foi possível conectar ao servidor de mídia', 'errors.failedToLoad' => ({required Object context, required Object error}) => 'Falha ao carregar ${context}: ${error}', 'errors.noClientAvailable' => 'Nenhum cliente disponível', - 'errors.authenticationFailed' => ({required Object error}) => 'Falha na autenticação: ${error}', - 'errors.couldNotLaunchUrl' => 'Não foi possível abrir a URL de autenticação', 'errors.pleaseEnterToken' => 'Insira um token', 'errors.invalidToken' => 'Token inválido', 'errors.failedToVerifyToken' => ({required Object error}) => 'Falha ao verificar token: ${error}', @@ -2823,6 +2787,8 @@ extension on TranslationsPt { 'libraries.allLibrariesHidden' => 'Todas as bibliotecas estão ocultas', 'libraries.hiddenLibrariesCount' => ({required Object count}) => 'Bibliotecas ocultas (${count})', 'libraries.thisLibraryIsEmpty' => 'Esta biblioteca está vazia', + 'libraries.noItemsMatchFilters' => 'Nenhum item corresponde aos filtros ativos', + 'libraries.resetFilters' => 'Redefinir filtros', 'libraries.all' => 'Todos', 'libraries.clearAll' => 'Limpar Tudo', 'libraries.scanLibraryConfirm' => ({required Object title}) => 'Tem certeza que deseja escanear "${title}"?', @@ -2871,7 +2837,6 @@ extension on TranslationsPt { 'libraries.sortLabels.communityRating' => 'Avaliação da comunidade', 'libraries.sortLabels.criticRating' => 'Avaliação da crítica', 'libraries.sortLabels.userRating' => 'Avaliação do usuário', - 'libraries.sortLabels.lastPlayed' => 'Última reprodução', 'libraries.sortLabels.datePlayed' => 'Data de reprodução', 'libraries.sortLabels.playCount' => 'Reproduções', 'libraries.sortLabels.productionYear' => 'Ano de produção', @@ -2885,14 +2850,11 @@ extension on TranslationsPt { 'libraries.sortLabels.dateShared' => 'Data de compartilhamento', 'libraries.sortLabels.latestEpisodeAirDate' => 'Última data de exibição do episódio', 'libraries.sortLabels.lastEpisodeDateAdded' => 'Data de adição do último episódio', - 'libraries.noItemsMatchFilters' => 'Nenhum item corresponde aos filtros ativos', - 'libraries.resetFilters' => 'Redefinir filtros', 'about.title' => 'Sobre', 'about.openSourceLicenses' => 'Licenças Open Source', 'about.versionLabel' => ({required Object version}) => 'Versão ${version}', 'about.appDescription' => 'Um belo cliente Plex e Jellyfin para Flutter', 'about.viewLicensesDescription' => 'Ver licenças de bibliotecas de terceiros', - 'serverSelection.allServerConnectionsFailed' => 'Não foi possível conectar a nenhum servidor. Verifique sua rede.', 'serverSelection.noServersFoundForAccount' => ({required Object username, required Object email}) => 'Nenhum servidor encontrado para ${username} (${email})', 'serverSelection.failedToLoadServers' => ({required Object error}) => 'Falha ao carregar servidores: ${error}', 'hubDetail.title' => 'Título', @@ -2938,7 +2900,6 @@ extension on TranslationsPt { 'explore.watchlistUpdateFailed' => 'Não foi possível atualizar a lista para ver', 'explore.notInLibrary' => 'Não está na sua biblioteca', 'explore.inTheseLibraries' => 'Nestas bibliotecas', - 'explore.availableOn' => ({required Object server}) => 'Disponível em ${server}', 'explore.checkingLibrary' => 'Verificando a sua biblioteca...', 'explore.emptyTitle' => 'Ainda não há nada aqui', 'explore.emptyMessage' => ({required Object source}) => 'As linhas de ${source} aparecerão aqui quando tiverem conteúdo.', @@ -2950,6 +2911,8 @@ extension on TranslationsPt { 'liveTv.guide' => 'Guia', 'liveTv.noChannels' => 'Nenhum canal disponível', 'liveTv.noDvr' => 'Nenhum DVR configurado em nenhum servidor', + 'liveTv.serverUnavailable' => 'O servidor de TV em direto não está disponível.', + 'liveTv.serverNotConnected' => 'O servidor de TV em direto não está ligado.', 'liveTv.noPrograms' => 'Nenhum dado de programação disponível', 'liveTv.liveStreamFailed' => 'Falha no stream ao vivo', 'liveTv.unknownProgram' => 'Programa desconhecido', @@ -2985,7 +2948,6 @@ extension on TranslationsPt { 'liveTv.scheduledRecordings' => 'Agendadas', 'liveTv.recordingRules' => 'Regras de gravação', 'liveTv.noScheduledRecordings' => 'Sem gravações agendadas', - 'liveTv.noRecordingRules' => 'Sem regras de gravação', 'liveTv.manageRecording' => 'Gerenciar gravação', 'liveTv.cancelRecording' => 'Cancelar gravação', 'liveTv.cancelRecordingTitle' => 'Cancelar esta gravação?', @@ -3002,7 +2964,6 @@ extension on TranslationsPt { 'liveTv.recordingCancelled' => 'Gravação cancelada', 'liveTv.recordingRuleDeleted' => 'Regra de gravação excluída', 'liveTv.processRecordingRules' => 'Reavaliar regras', - 'liveTv.loadingRecordings' => 'Carregando gravações...', 'liveTv.recordingInProgress' => 'Gravando agora', 'liveTv.recordingsCount' => ({required Object count}) => '${count} agendadas', 'liveTv.editRule' => 'Editar regra', @@ -3014,7 +2975,6 @@ extension on TranslationsPt { 'collections.title' => 'Coleções', 'collections.collection' => 'Coleção', 'collections.empty' => 'A coleção está vazia', - 'collections.unknownLibrarySection' => 'Não é possível excluir: Seção de biblioteca desconhecida', 'collections.deleteCollection' => 'Excluir Coleção', 'collections.deleteConfirm' => ({required Object title}) => 'Excluir "${title}"? Não pode ser desfeito.', 'collections.deleted' => 'Coleção excluída', @@ -3052,6 +3012,7 @@ extension on TranslationsPt { 'playlists.itemAdded' => 'Adicionado à playlist', 'playlists.itemRemoved' => 'Removido da playlist', 'playlists.selectPlaylist' => 'Selecionar Playlist', + 'playlists.searchPlaylists' => 'Pesquisar playlists...', 'playlists.errorCreating' => 'Falha ao criar playlist', 'playlists.errorDeleting' => 'Falha ao excluir playlist', 'playlists.errorLoading' => 'Falha ao carregar playlists', @@ -3134,22 +3095,20 @@ extension on TranslationsPt { 'watchTogether.participantResumed' => ({required Object name}) => '${name} retomou', 'watchTogether.participantSeeked' => ({required Object name}) => '${name} avançou', 'watchTogether.participantBuffering' => ({required Object name}) => '${name} está carregando', + 'watchTogether.participantNeedsUpdate' => ({required Object name}) => '${name} está em uma versão mais antiga do aplicativo — sincronização indisponível', + 'watchTogether.resumingWithout' => ({required Object name}) => 'Retomando sem ${name}', 'watchTogether.waitingForParticipants' => 'Aguardando outros carregarem...', + 'watchTogether.waitingForName' => ({required Object name}) => 'Aguardando ${name}...', 'watchTogether.recentRooms' => 'Salas recentes', 'watchTogether.renameRoom' => 'Renomear sala', 'watchTogether.removeRoom' => 'Remover', 'watchTogether.guestSwitchUnavailable' => 'Não foi possível trocar — servidor indisponível para sincronização', 'watchTogether.guestSwitchFailed' => 'Não foi possível trocar — conteúdo não encontrado neste servidor', - 'watchTogether.participantNeedsUpdate' => ({required Object name}) => '${name} está em uma versão mais antiga do aplicativo — sincronização indisponível', - 'watchTogether.resumingWithout' => ({required Object name}) => 'Retomando sem ${name}', - 'watchTogether.waitingForName' => ({required Object name}) => 'Aguardando ${name}...', 'downloads.title' => 'Downloads', 'downloads.manage' => 'Gerenciar', 'downloads.tvShows' => 'Séries de TV', 'downloads.movies' => 'Filmes', 'downloads.music' => 'Música', - _ => null, - } ?? switch (path) { 'downloads.tracksQueued' => ({required Object count}) => '${count} faixas na fila para download', 'downloads.noDownloads' => 'Nenhum download ainda', 'downloads.noDownloadsDescription' => 'Conteúdo baixado aparecerá aqui para visualização offline', @@ -3164,6 +3123,8 @@ extension on TranslationsPt { 'downloads.deleteConfirm' => ({required Object title}) => 'Excluir "${title}" deste dispositivo?', 'downloads.cancelledDownloadTitle' => 'Download cancelado', 'downloads.cancelledDownloadMessage' => 'Este download foi cancelado. O que você deseja fazer?', + _ => null, + } ?? switch (path) { 'downloads.allEpisodesAlreadyDownloaded' => 'Todos os episódios já foram baixados', 'downloads.resumeDownload' => 'Retomar download', 'downloads.cancelledDownload' => 'Download cancelado', @@ -3187,7 +3148,6 @@ extension on TranslationsPt { 'downloads.customAmount' => 'Quantidade personalizada...', 'downloads.includeSpecials' => 'Incluir especiais', 'downloads.howManyEpisodes' => 'Quantos episódios?', - 'downloads.itemsQueued' => ({required Object count}) => '${count} itens na fila de download', 'downloads.keepSynced' => 'Manter sincronizado', 'downloads.downloadOnce' => 'Baixar uma vez', 'downloads.keepNUnwatched' => ({required Object count}) => 'Manter ${count} não assistidos', @@ -3231,7 +3191,6 @@ extension on TranslationsPt { 'companionRemote.connectedTo' => ({required Object name}) => 'Conectado a ${name}', 'companionRemote.unknownDevice' => 'Dispositivo desconhecido', 'companionRemote.session.startingServer' => 'A iniciar servidor remoto...', - 'companionRemote.session.failedToCreate' => 'Falha ao iniciar o servidor remoto:', 'companionRemote.session.hostAddress' => 'Endereço do host', 'companionRemote.session.connected' => 'Conectado', 'companionRemote.session.serverRunning' => 'Servidor remoto ativo', @@ -3286,6 +3245,8 @@ extension on TranslationsPt { 'companionRemote.remote.searchHint' => 'Buscar no desktop...', 'companionRemote.errors.noNetworkInterface' => 'Nenhuma interface de rede encontrada', 'companionRemote.errors.authenticationFailed' => 'Falha na autenticação', + 'companionRemote.errors.serverStartFailed' => ({required Object error}) => 'Falha ao iniciar o servidor remoto: ${error}', + 'companionRemote.errors.commandFailed' => ({required Object error}) => 'Falha ao enviar o comando remoto: ${error}', 'companionRemote.errors.joinTimedOut' => 'Tempo esgotado ao entrar na sessão', 'companionRemote.errors.failedToConnectAnyAddress' => 'Falha ao conectar a qualquer endereço', 'companionRemote.errors.connectionLostAfterAttempts' => ({required Object attempts}) => 'Conexão perdida após ${attempts} tentativas', @@ -3530,7 +3491,6 @@ extension on TranslationsPt { 'addServer.quickConnectFailed' => ({required Object error}) => 'Quick Connect falhou: ${error}', 'addServer.addPlexTitle' => 'Entrar com Plex', 'addServer.pinExpired' => 'O PIN expirou antes do login. Tente novamente.', - 'addServer.duplicatePlexAccount' => 'Você já entrou no Plex. Saia para trocar de conta.', 'addServer.failedToRegisterAccount' => ({required Object error}) => 'Falha ao registrar a conta: ${error}', 'addServer.enterJellyfinUrlError' => 'Insira a URL do seu servidor Jellyfin', 'addServer.addConnectionTitle' => 'Adicionar conexão', diff --git a/lib/i18n/strings_ru.g.dart b/lib/i18n/strings_ru.g.dart index 004ba397..845cf1a2 100644 --- a/lib/i18n/strings_ru.g.dart +++ b/lib/i18n/strings_ru.g.dart @@ -53,7 +53,6 @@ class TranslationsRu extends Translations with BaseTranslations 'Войти'; @override String get signInWithPlex => 'Войти через Plex'; @override String get showQRCode => 'Показать QR-код'; @override String get authenticate => 'Аутентификация'; @@ -167,10 +165,8 @@ class _TranslationsCommonRu extends TranslationsCommonEn { @override String episodeNumberTitle({required Object number, required Object title}) => 'Эпизод ${number} - ${title}'; @override String chapterNumber({required Object number}) => 'Глава ${number}'; @override String get reconnect => 'Переподключить'; - @override String get exit => 'Выход'; @override String get viewAll => 'Показать все'; @override String get checkingNetwork => 'Проверка сети...'; - @override String get refreshingServers => 'Обновление серверов...'; @override String get loadingServers => 'Загрузка серверов...'; @override String get connectingToServers => 'Подключение к серверам...'; @override String get startingOfflineMode => 'Запуск автономного режима...'; @@ -271,6 +267,12 @@ class _TranslationsSettingsRu extends TranslationsSettingsEn { @override String get tvFullCardLayoutDescription => 'Использовать TV-карточки только с изображением и именами актёров поверх него'; @override String get focusGlow => 'Свечение при фокусе'; @override String get focusGlowDescription => 'Показывать мягкое свечение вокруг карточки в фокусе'; + @override String get visualEffects => 'Визуальные эффекты'; + @override String get visualEffectsAuto => 'Автоматически'; + @override String get visualEffectsAutoDescription => 'Автоматически уменьшать эффекты на маломощных устройствах'; + @override String get visualEffectsFull => 'Полные'; + @override String get visualEffectsReduced => 'Уменьшенные'; + @override String get visualEffectsReducedDescription => 'Меньше анимаций и графика с более низким разрешением'; @override String get hideSpoilers => 'Скрыть спойлеры непросмотренных эпизодов'; @override String get hideSpoilersDescription => 'Размывать миниатюры и описания непросмотренных серий'; @override String get playerBackend => 'Бэкенд плеера'; @@ -283,7 +285,7 @@ class _TranslationsSettingsRu extends TranslationsSettingsEn { @override String get bufferSizeAuto => 'Авто (Рекомендуется)'; @override String bufferSizeWarning({required Object heap, required Object size}) => 'Доступно памяти: ${heap}MB. Буфер ${size}MB может повлиять на воспроизведение.'; @override String get defaultQualityTitle => 'Качество по умолчанию'; - @override String get defaultQualityDescription => 'Используется при запуске воспроизведения. Более низкие значения снижают пропускную способность.'; + @override String get musicQualityTitle => 'Качество музыки'; @override String get subtitleStyling => 'Стиль субтитров'; @override String get subtitleStylingDescription => 'Настроить внешний вид субтитров'; @override String get smallSkipDuration => 'Малая перемотка'; @@ -377,10 +379,9 @@ class _TranslationsSettingsRu extends TranslationsSettingsEn { @override String maxVolumePercent({required Object percent}) => '${percent}%'; @override String get discordRichPresence => 'Discord Rich Presence'; @override String get discordRichPresenceDescription => 'Показывать, что вы смотрите, в Discord'; - @override String get trakt => 'Trakt'; - @override String get traktDescription => 'Синхронизировать историю просмотров с Trakt'; @override String get services => 'Сервисы'; @override String get servicesDescription => 'Подключите Trakt, MyAnimeList, Seerr и другие'; + @override String get manageLibrariesDescription => 'Изменять порядок и скрывать библиотеки'; @override String get companionRemoteServer => 'Сервер удалённого управления'; @override String get companionRemoteServerDescription => 'Разрешить мобильным устройствам в сети управлять этим приложением'; @override String get autoPip => 'Автоматический «картинка в картинке»'; @@ -443,7 +444,6 @@ class _TranslationsSettingsRu extends TranslationsSettingsEn { @override String get showNavBarLabels => 'Показывать подписи панели навигации'; @override String get showNavBarLabelsDescription => 'Отображать текстовые подписи под иконками панели навигации'; @override String get startupSection => 'Начальный раздел'; - @override String get startupSectionDescription => 'Выберите, какой раздел Plezy открывает при запуске'; @override String get liveTvDefaultFavorites => 'Избранные каналы по умолчанию'; @override String get liveTvDefaultFavoritesDescription => 'Показывать только избранные каналы при открытии ТВ'; @override String get display => 'Экран'; @@ -455,13 +455,6 @@ class _TranslationsSettingsRu extends TranslationsSettingsEn { @override String get subtitlesAndConfig => 'Субтитры и конфигурация'; @override String get seekAndTiming => 'Перемотка и время'; @override String get behavior => 'Поведение'; - @override String get manageLibrariesDescription => 'Изменять порядок и скрывать библиотеки'; - @override String get visualEffects => 'Визуальные эффекты'; - @override String get visualEffectsAuto => 'Автоматически'; - @override String get visualEffectsAutoDescription => 'Автоматически уменьшать эффекты на маломощных устройствах'; - @override String get visualEffectsFull => 'Полные'; - @override String get visualEffectsReduced => 'Уменьшенные'; - @override String get visualEffectsReducedDescription => 'Меньше анимаций и графика с более низким разрешением'; } // Path: search @@ -559,14 +552,11 @@ class _TranslationsRateSheetRu extends TranslationsRateSheetEn { // Translations @override String get title => 'Оценить'; @override String get server => 'Сервер'; - @override String starValue({required Object rating}) => '${rating} / 5'; - @override String scoreValue({required Object score}) => '${score} / 10'; - @override String get setScore => 'Установить оценку'; + @override String get favorite => 'Добавить в избранное'; + @override String get favorited => 'Добавлено в избранное'; @override String get saved => 'Сохранено'; @override String get notAvailable => 'Совпадений не найдено'; @override String get noConnectedServices => 'Подключите сервис в настройках, чтобы оценивать здесь.'; - @override String get favorite => 'Добавить в избранное'; - @override String get favorited => 'Добавлено в избранное'; } // Path: accessibility @@ -584,6 +574,14 @@ class _TranslationsAccessibilityRu extends TranslationsAccessibilityEn { @override String mediaCardPartiallyWatched({required Object percent}) => 'просмотрено ${percent} процентов'; @override String get mediaCardUnwatched => 'не просмотрено'; @override String get tapToPlay => 'Нажмите для воспроизведения'; + @override String get decrease => 'Уменьшить'; + @override String get increase => 'Увеличить'; + @override String decreaseValue({required Object label}) => 'Уменьшить ${label}'; + @override String increaseValue({required Object label}) => 'Увеличить ${label}'; + @override String get hue => 'Цветовой тон'; + @override String get saturation => 'Насыщенность'; + @override String get brightness => 'Яркость'; + @override String get hexColor => 'Шестнадцатеричный цвет'; } // Path: tooltips @@ -643,13 +641,11 @@ class _TranslationsVideoControlsRu extends TranslationsVideoControlsEn { @override String get settingsButton => 'Настройки воспроизведения'; @override String get tracksButton => 'Аудио и субтитры'; @override String get chaptersButton => 'Главы'; - @override String get versionsButton => 'Версии видео'; @override String get versionQualityButton => 'Версия и качество'; @override String get versionColumnHeader => 'Версия'; @override String get qualityColumnHeader => 'Качество'; @override String get qualityOriginal => 'Оригинал'; @override String qualityPresetLabel({required Object resolution, required Object bitrate}) => '${resolution}p ${bitrate} Mbps'; - @override String qualityBandwidthEstimate({required Object bitrate}) => '~${bitrate} Mbps'; @override String get transcodeUnavailableFallback => 'Транскодирование недоступно — воспроизведение в оригинальном качестве'; @override String get pipButton => 'Режим «картинка в картинке»'; @override String get aspectRatioButton => 'Соотношение сторон'; @@ -685,19 +681,6 @@ class _TranslationsVideoControlsRu extends TranslationsVideoControlsEn { @override String get searchLanguages => 'Поиск языков...'; } -// Path: userStatus -class _TranslationsUserStatusRu extends TranslationsUserStatusEn { - _TranslationsUserStatusRu._(TranslationsRu root) : this._root = root, super.internal(root); - - final TranslationsRu _root; // ignore: unused_field - - // Translations - @override String get admin => 'Администратор'; - @override String get restricted => 'Ограниченный'; - @override String get protected => 'Защищённый'; - @override String get current => 'ТЕКУЩИЙ'; -} - // Path: messages class _TranslationsMessagesRu extends TranslationsMessagesEn { _TranslationsMessagesRu._(TranslationsRu root) : this._root = root, super.internal(root); @@ -873,7 +856,6 @@ class _TranslationsProfilesRu extends TranslationsProfilesEn { @override String get pinExplain => 'Для переключения профилей нужен 4-значный PIN.'; @override String get continueButton => 'Продолжить'; @override String get pinsDontMatch => 'PIN-коды не совпадают'; - @override String get initializeServicesFailed => 'Не удалось инициализировать службы профиля'; } // Path: connections @@ -902,7 +884,6 @@ class _TranslationsDiscoverRu extends TranslationsDiscoverEn { // Translations @override String get title => 'Обзор'; - @override String get switchProfile => 'Сменить профиль'; @override String get noContentAvailable => 'Контент недоступен'; @override String get addMediaToLibraries => 'Добавьте медиафайлы в ваши библиотеки'; @override String get continueWatching => 'Продолжить просмотр'; @@ -938,8 +919,6 @@ class _TranslationsErrorsRu extends TranslationsErrorsEn { @override String get connectionFailed => 'Не удалось подключиться к медиасерверу'; @override String failedToLoad({required Object context, required Object error}) => 'Не удалось загрузить ${context}: ${error}'; @override String get noClientAvailable => 'Клиент недоступен'; - @override String authenticationFailed({required Object error}) => 'Ошибка аутентификации: ${error}'; - @override String get couldNotLaunchUrl => 'Не удалось открыть URL аутентификации'; @override String get pleaseEnterToken => 'Введите токен'; @override String get invalidToken => 'Недействительный токен'; @override String failedToVerifyToken({required Object error}) => 'Не удалось проверить токен: ${error}'; @@ -973,6 +952,8 @@ class _TranslationsLibrariesRu extends TranslationsLibrariesEn { @override String get allLibrariesHidden => 'Все библиотеки скрыты'; @override String hiddenLibrariesCount({required Object count}) => 'Скрытые библиотеки (${count})'; @override String get thisLibraryIsEmpty => 'Эта библиотека пуста'; + @override String get noItemsMatchFilters => 'Нет элементов, соответствующих активным фильтрам'; + @override String get resetFilters => 'Сбросить фильтры'; @override String get all => 'Все'; @override String get clearAll => 'Очистить все'; @override String scanLibraryConfirm({required Object title}) => 'Вы уверены, что хотите сканировать "${title}"?'; @@ -998,8 +979,6 @@ class _TranslationsLibrariesRu extends TranslationsLibrariesEn { @override late final _TranslationsLibrariesGroupingsRu groupings = _TranslationsLibrariesGroupingsRu._(_root); @override late final _TranslationsLibrariesFilterCategoriesRu filterCategories = _TranslationsLibrariesFilterCategoriesRu._(_root); @override late final _TranslationsLibrariesSortLabelsRu sortLabels = _TranslationsLibrariesSortLabelsRu._(_root); - @override String get noItemsMatchFilters => 'Нет элементов, соответствующих активным фильтрам'; - @override String get resetFilters => 'Сбросить фильтры'; } // Path: about @@ -1023,7 +1002,6 @@ class _TranslationsServerSelectionRu extends TranslationsServerSelectionEn { final TranslationsRu _root; // ignore: unused_field // Translations - @override String get allServerConnectionsFailed => 'Не удалось подключиться ни к одному серверу. Проверьте сеть.'; @override String noServersFoundForAccount({required Object username, required Object email}) => 'Серверы не найдены для ${username} (${email})'; @override String failedToLoadServers({required Object error}) => 'Не удалось загрузить серверы: ${error}'; } @@ -1104,7 +1082,6 @@ class _TranslationsExploreRu extends TranslationsExploreEn { @override String get watchlistUpdateFailed => 'Не удалось обновить список для просмотра'; @override String get notInLibrary => 'Нет в вашей библиотеке'; @override String get inTheseLibraries => 'В этих библиотеках'; - @override String availableOn({required Object server}) => 'Доступно на ${server}'; @override String get checkingLibrary => 'Проверка вашей библиотеки...'; @override String get emptyTitle => 'Здесь пока ничего нет'; @override String emptyMessage({required Object source}) => 'Строки из ${source} появятся здесь, когда в них будет контент.'; @@ -1125,6 +1102,8 @@ class _TranslationsLiveTvRu extends TranslationsLiveTvEn { @override String get guide => 'Программа'; @override String get noChannels => 'Нет доступных каналов'; @override String get noDvr => 'DVR не настроен ни на одном сервере'; + @override String get serverUnavailable => 'Сервер прямого эфира недоступен.'; + @override String get serverNotConnected => 'Сервер прямого эфира не подключён.'; @override String get noPrograms => 'Нет данных о программах'; @override String get liveStreamFailed => 'Не удалось запустить прямой эфир'; @override String get unknownProgram => 'Неизвестная программа'; @@ -1160,7 +1139,6 @@ class _TranslationsLiveTvRu extends TranslationsLiveTvEn { @override String get scheduledRecordings => 'Запланировано'; @override String get recordingRules => 'Правила записи'; @override String get noScheduledRecordings => 'Нет запланированных записей'; - @override String get noRecordingRules => 'Правил записи пока нет'; @override String get manageRecording => 'Управление записью'; @override String get cancelRecording => 'Отменить запись'; @override String get cancelRecordingTitle => 'Отменить эту запись?'; @@ -1177,7 +1155,6 @@ class _TranslationsLiveTvRu extends TranslationsLiveTvEn { @override String get recordingCancelled => 'Запись отменена'; @override String get recordingRuleDeleted => 'Правило записи удалено'; @override String get processRecordingRules => 'Пересчитать правила'; - @override String get loadingRecordings => 'Загрузка записей...'; @override String get recordingInProgress => 'Идёт запись'; @override String recordingsCount({required Object count}) => 'Запланировано: ${count}'; @override String get editRule => 'Изменить правило'; @@ -1198,7 +1175,6 @@ class _TranslationsCollectionsRu extends TranslationsCollectionsEn { @override String get title => 'Коллекции'; @override String get collection => 'Коллекция'; @override String get empty => 'Коллекция пуста'; - @override String get unknownLibrarySection => 'Невозможно удалить: неизвестный раздел библиотеки'; @override String get deleteCollection => 'Удалить коллекцию'; @override String deleteConfirm({required Object title}) => 'Удалить "${title}"? Это нельзя отменить.'; @override String get deleted => 'Коллекция удалена'; @@ -1245,6 +1221,7 @@ class _TranslationsPlaylistsRu extends TranslationsPlaylistsEn { @override String get itemAdded => 'Добавлено в плейлист'; @override String get itemRemoved => 'Удалено из плейлиста'; @override String get selectPlaylist => 'Выбрать плейлист'; + @override String get searchPlaylists => 'Поиск плейлистов...'; @override String get errorCreating => 'Не удалось создать плейлист'; @override String get errorDeleting => 'Не удалось удалить плейлист'; @override String get errorLoading => 'Не удалось загрузить плейлисты'; @@ -1350,15 +1327,15 @@ class _TranslationsWatchTogetherRu extends TranslationsWatchTogetherEn { @override String participantResumed({required Object name}) => '${name} возобновил'; @override String participantSeeked({required Object name}) => '${name} перемотал'; @override String participantBuffering({required Object name}) => '${name} буферизует'; + @override String participantNeedsUpdate({required Object name}) => '${name} использует старую версию приложения — синхронизация недоступна'; + @override String resumingWithout({required Object name}) => 'Возобновление без ${name}'; @override String get waitingForParticipants => 'Ожидание загрузки у других...'; + @override String waitingForName({required Object name}) => 'Ожидание ${name}...'; @override String get recentRooms => 'Недавние комнаты'; @override String get renameRoom => 'Переименовать комнату'; @override String get removeRoom => 'Удалить'; @override String get guestSwitchUnavailable => 'Не удалось переключиться — сервер недоступен для синхронизации'; @override String get guestSwitchFailed => 'Не удалось переключиться — содержимое не найдено на этом сервере'; - @override String participantNeedsUpdate({required Object name}) => '${name} использует старую версию приложения — синхронизация недоступна'; - @override String resumingWithout({required Object name}) => 'Возобновление без ${name}'; - @override String waitingForName({required Object name}) => 'Ожидание ${name}...'; } // Path: downloads @@ -1410,7 +1387,6 @@ class _TranslationsDownloadsRu extends TranslationsDownloadsEn { @override String get customAmount => 'Указать количество...'; @override String get includeSpecials => 'Включить спецвыпуски'; @override String get howManyEpisodes => 'Сколько эпизодов?'; - @override String itemsQueued({required Object count}) => '${count} элементов добавлено в очередь загрузки'; @override String get keepSynced => 'Синхронизировать'; @override String get downloadOnce => 'Скачать один раз'; @override String keepNUnwatched({required Object count}) => 'Хранить ${count} непросмотренных'; @@ -1784,7 +1760,6 @@ class _TranslationsAddServerRu extends TranslationsAddServerEn { @override String quickConnectFailed({required Object error}) => 'Quick Connect не удался: ${error}'; @override String get addPlexTitle => 'Войти через Plex'; @override String get pinExpired => 'Срок действия PIN истёк до входа. Попробуйте снова.'; - @override String get duplicatePlexAccount => 'В Plex уже выполнен вход. Выйдите, чтобы сменить аккаунт.'; @override String failedToRegisterAccount({required Object error}) => 'Не удалось зарегистрировать учётную запись: ${error}'; @override String get enterJellyfinUrlError => 'Введите URL вашего сервера Jellyfin'; @override String get addConnectionTitle => 'Добавить подключение'; @@ -1910,7 +1885,6 @@ class _TranslationsLibrariesSortLabelsRu extends TranslationsLibrariesSortLabels @override String get communityRating => 'Оценка сообщества'; @override String get criticRating => 'Оценка критиков'; @override String get userRating => 'Пользовательская оценка'; - @override String get lastPlayed => 'Последний просмотр'; @override String get datePlayed => 'Дата просмотра'; @override String get playCount => 'Количество просмотров'; @override String get productionYear => 'Год производства'; @@ -1969,7 +1943,6 @@ class _TranslationsCompanionRemoteSessionRu extends TranslationsCompanionRemoteS // Translations @override String get startingServer => 'Запуск удалённого сервера...'; - @override String get failedToCreate => 'Не удалось запустить удалённый сервер:'; @override String get hostAddress => 'Адрес хоста'; @override String get connected => 'Подключено'; @override String get serverRunning => 'Удалённый сервер активен'; @@ -2051,6 +2024,8 @@ class _TranslationsCompanionRemoteErrorsRu extends TranslationsCompanionRemoteEr // Translations @override String get noNetworkInterface => 'Сетевой интерфейс не найден'; @override String get authenticationFailed => 'Ошибка аутентификации'; + @override String serverStartFailed({required Object error}) => 'Не удалось запустить удалённый сервер: ${error}'; + @override String commandFailed({required Object error}) => 'Не удалось отправить удалённую команду: ${error}'; @override String get joinTimedOut => 'Время подключения к сеансу истекло'; @override String get failedToConnectAnyAddress => 'Не удалось подключиться ни к одному адресу'; @override String connectionLostAfterAttempts({required Object attempts}) => 'Соединение потеряно после ${attempts} попыток'; @@ -2127,7 +2102,6 @@ extension on TranslationsRu { dynamic _flatMapFunction(String path) { return switch (path) { 'app.title' => 'Plezy', - 'auth.signIn' => 'Войти', 'auth.signInWithPlex' => 'Войти через Plex', 'auth.showQRCode' => 'Показать QR-код', 'auth.authenticate' => 'Аутентификация', @@ -2178,10 +2152,8 @@ extension on TranslationsRu { 'common.episodeNumberTitle' => ({required Object number, required Object title}) => 'Эпизод ${number} - ${title}', 'common.chapterNumber' => ({required Object number}) => 'Глава ${number}', 'common.reconnect' => 'Переподключить', - 'common.exit' => 'Выход', 'common.viewAll' => 'Показать все', 'common.checkingNetwork' => 'Проверка сети...', - 'common.refreshingServers' => 'Обновление серверов...', 'common.loadingServers' => 'Загрузка серверов...', 'common.connectingToServers' => 'Подключение к серверам...', 'common.startingOfflineMode' => 'Запуск автономного режима...', @@ -2255,6 +2227,12 @@ extension on TranslationsRu { 'settings.tvFullCardLayoutDescription' => 'Использовать TV-карточки только с изображением и именами актёров поверх него', 'settings.focusGlow' => 'Свечение при фокусе', 'settings.focusGlowDescription' => 'Показывать мягкое свечение вокруг карточки в фокусе', + 'settings.visualEffects' => 'Визуальные эффекты', + 'settings.visualEffectsAuto' => 'Автоматически', + 'settings.visualEffectsAutoDescription' => 'Автоматически уменьшать эффекты на маломощных устройствах', + 'settings.visualEffectsFull' => 'Полные', + 'settings.visualEffectsReduced' => 'Уменьшенные', + 'settings.visualEffectsReducedDescription' => 'Меньше анимаций и графика с более низким разрешением', 'settings.hideSpoilers' => 'Скрыть спойлеры непросмотренных эпизодов', 'settings.hideSpoilersDescription' => 'Размывать миниатюры и описания непросмотренных серий', 'settings.playerBackend' => 'Бэкенд плеера', @@ -2267,7 +2245,7 @@ extension on TranslationsRu { 'settings.bufferSizeAuto' => 'Авто (Рекомендуется)', 'settings.bufferSizeWarning' => ({required Object heap, required Object size}) => 'Доступно памяти: ${heap}MB. Буфер ${size}MB может повлиять на воспроизведение.', 'settings.defaultQualityTitle' => 'Качество по умолчанию', - 'settings.defaultQualityDescription' => 'Используется при запуске воспроизведения. Более низкие значения снижают пропускную способность.', + 'settings.musicQualityTitle' => 'Качество музыки', 'settings.subtitleStyling' => 'Стиль субтитров', 'settings.subtitleStylingDescription' => 'Настроить внешний вид субтитров', 'settings.smallSkipDuration' => 'Малая перемотка', @@ -2361,10 +2339,9 @@ extension on TranslationsRu { 'settings.maxVolumePercent' => ({required Object percent}) => '${percent}%', 'settings.discordRichPresence' => 'Discord Rich Presence', 'settings.discordRichPresenceDescription' => 'Показывать, что вы смотрите, в Discord', - 'settings.trakt' => 'Trakt', - 'settings.traktDescription' => 'Синхронизировать историю просмотров с Trakt', 'settings.services' => 'Сервисы', 'settings.servicesDescription' => 'Подключите Trakt, MyAnimeList, Seerr и другие', + 'settings.manageLibrariesDescription' => 'Изменять порядок и скрывать библиотеки', 'settings.companionRemoteServer' => 'Сервер удалённого управления', 'settings.companionRemoteServerDescription' => 'Разрешить мобильным устройствам в сети управлять этим приложением', 'settings.autoPip' => 'Автоматический «картинка в картинке»', @@ -2427,7 +2404,6 @@ extension on TranslationsRu { 'settings.showNavBarLabels' => 'Показывать подписи панели навигации', 'settings.showNavBarLabelsDescription' => 'Отображать текстовые подписи под иконками панели навигации', 'settings.startupSection' => 'Начальный раздел', - 'settings.startupSectionDescription' => 'Выберите, какой раздел Plezy открывает при запуске', 'settings.liveTvDefaultFavorites' => 'Избранные каналы по умолчанию', 'settings.liveTvDefaultFavoritesDescription' => 'Показывать только избранные каналы при открытии ТВ', 'settings.display' => 'Экран', @@ -2439,13 +2415,6 @@ extension on TranslationsRu { 'settings.subtitlesAndConfig' => 'Субтитры и конфигурация', 'settings.seekAndTiming' => 'Перемотка и время', 'settings.behavior' => 'Поведение', - 'settings.manageLibrariesDescription' => 'Изменять порядок и скрывать библиотеки', - 'settings.visualEffects' => 'Визуальные эффекты', - 'settings.visualEffectsAuto' => 'Автоматически', - 'settings.visualEffectsAutoDescription' => 'Автоматически уменьшать эффекты на маломощных устройствах', - 'settings.visualEffectsFull' => 'Полные', - 'settings.visualEffectsReduced' => 'Уменьшенные', - 'settings.visualEffectsReducedDescription' => 'Меньше анимаций и графика с более низким разрешением', 'search.hint' => 'Поиск фильмов, сериалов, музыки...', 'search.tryDifferentTerm' => 'Попробуйте другой запрос', 'search.searchYourMedia' => 'Поиск в вашей медиатеке', @@ -2522,14 +2491,11 @@ extension on TranslationsRu { 'mediaMenu.playVersion' => 'Воспроизвести версию...', 'rateSheet.title' => 'Оценить', 'rateSheet.server' => 'Сервер', - 'rateSheet.starValue' => ({required Object rating}) => '${rating} / 5', - 'rateSheet.scoreValue' => ({required Object score}) => '${score} / 10', - 'rateSheet.setScore' => 'Установить оценку', + 'rateSheet.favorite' => 'Добавить в избранное', + 'rateSheet.favorited' => 'Добавлено в избранное', 'rateSheet.saved' => 'Сохранено', 'rateSheet.notAvailable' => 'Совпадений не найдено', 'rateSheet.noConnectedServices' => 'Подключите сервис в настройках, чтобы оценивать здесь.', - 'rateSheet.favorite' => 'Добавить в избранное', - 'rateSheet.favorited' => 'Добавлено в избранное', 'accessibility.mediaCardMovie' => ({required Object title}) => '${title}, фильм', 'accessibility.mediaCardShow' => ({required Object title}) => '${title}, сериал', 'accessibility.mediaCardEpisode' => ({required Object title, required Object episodeInfo}) => '${title}, ${episodeInfo}', @@ -2538,6 +2504,14 @@ extension on TranslationsRu { 'accessibility.mediaCardPartiallyWatched' => ({required Object percent}) => 'просмотрено ${percent} процентов', 'accessibility.mediaCardUnwatched' => 'не просмотрено', 'accessibility.tapToPlay' => 'Нажмите для воспроизведения', + 'accessibility.decrease' => 'Уменьшить', + 'accessibility.increase' => 'Увеличить', + 'accessibility.decreaseValue' => ({required Object label}) => 'Уменьшить ${label}', + 'accessibility.increaseValue' => ({required Object label}) => 'Увеличить ${label}', + 'accessibility.hue' => 'Цветовой тон', + 'accessibility.saturation' => 'Насыщенность', + 'accessibility.brightness' => 'Яркость', + 'accessibility.hexColor' => 'Шестнадцатеричный цвет', 'tooltips.shufflePlay' => 'Случайное воспроизведение', 'tooltips.playTrailer' => 'Воспроизвести трейлер', 'tooltips.markAsWatched' => 'Отметить как просмотренное', @@ -2579,13 +2553,11 @@ extension on TranslationsRu { 'videoControls.settingsButton' => 'Настройки воспроизведения', 'videoControls.tracksButton' => 'Аудио и субтитры', 'videoControls.chaptersButton' => 'Главы', - 'videoControls.versionsButton' => 'Версии видео', 'videoControls.versionQualityButton' => 'Версия и качество', 'videoControls.versionColumnHeader' => 'Версия', 'videoControls.qualityColumnHeader' => 'Качество', 'videoControls.qualityOriginal' => 'Оригинал', 'videoControls.qualityPresetLabel' => ({required Object resolution, required Object bitrate}) => '${resolution}p ${bitrate} Mbps', - 'videoControls.qualityBandwidthEstimate' => ({required Object bitrate}) => '~${bitrate} Mbps', 'videoControls.transcodeUnavailableFallback' => 'Транскодирование недоступно — воспроизведение в оригинальном качестве', 'videoControls.pipButton' => 'Режим «картинка в картинке»', 'videoControls.aspectRatioButton' => 'Соотношение сторон', @@ -2625,10 +2597,6 @@ extension on TranslationsRu { 'videoControls.subtitleDownloaded' => 'Субтитры загружены', 'videoControls.subtitleDownloadFailed' => 'Не удалось загрузить субтитры', 'videoControls.searchLanguages' => 'Поиск языков...', - 'userStatus.admin' => 'Администратор', - 'userStatus.restricted' => 'Ограниченный', - 'userStatus.protected' => 'Защищённый', - 'userStatus.current' => 'ТЕКУЩИЙ', 'messages.markedAsWatched' => 'Отмечено как просмотренное', 'messages.markedAsUnwatched' => 'Отмечено как непросмотренное', 'messages.markedAsWatchedOffline' => 'Отмечено как просмотренное (синхронизируется при подключении)', @@ -2638,8 +2606,6 @@ extension on TranslationsRu { 'messages.errorLoading' => ({required Object error}) => 'Ошибка: ${error}', 'messages.streamInterrupted' => 'Поток прервался. Нажмите «Воспроизвести» или перемотайте, чтобы повторить попытку.', 'messages.fileInfoNotAvailable' => 'Информация о файле недоступна', - _ => null, - } ?? switch (path) { 'messages.errorLoadingFileInfo' => ({required Object error}) => 'Ошибка загрузки информации о файле: ${error}', 'messages.errorLoadingSeries' => 'Ошибка загрузки сериала', 'messages.musicNotSupported' => 'Воспроизведение музыки пока не поддерживается', @@ -2647,6 +2613,8 @@ extension on TranslationsRu { 'messages.noProfilesAvailable' => 'Профили недоступны', 'messages.contactAdminForProfiles' => 'Обратитесь к администратору сервера для добавления профилей', 'messages.unableToDetermineLibrarySection' => 'Не удаётся определить раздел библиотеки для этого элемента', + _ => null, + } ?? switch (path) { 'messages.logsCleared' => 'Логи очищены', 'messages.logsCopied' => 'Логи скопированы в буфер обмена', 'messages.noLogsAvailable' => 'Логи отсутствуют', @@ -2763,7 +2731,6 @@ extension on TranslationsRu { 'profiles.pinExplain' => 'Для переключения профилей нужен 4-значный PIN.', 'profiles.continueButton' => 'Продолжить', 'profiles.pinsDontMatch' => 'PIN-коды не совпадают', - 'profiles.initializeServicesFailed' => 'Не удалось инициализировать службы профиля', 'connections.sectionTitle' => 'Подключения', 'connections.addConnection' => 'Добавить подключение', 'connections.addConnectionSubtitleNoProfile' => 'Войдите через Plex или подключите сервер Jellyfin', @@ -2774,7 +2741,6 @@ extension on TranslationsRu { 'connections.editJellyfinTitle' => 'Изменить подключение Jellyfin', 'connections.editJellyfinIntro' => ({required Object serverName}) => 'Добавьте или удалите URL для ${serverName}. Plezy будет использовать доступный URL с минимальной задержкой.', 'discover.title' => 'Обзор', - 'discover.switchProfile' => 'Сменить профиль', 'discover.noContentAvailable' => 'Контент недоступен', 'discover.addMediaToLibraries' => 'Добавьте медиафайлы в ваши библиотеки', 'discover.continueWatching' => 'Продолжить просмотр', @@ -2801,8 +2767,6 @@ extension on TranslationsRu { 'errors.connectionFailed' => 'Не удалось подключиться к медиасерверу', 'errors.failedToLoad' => ({required Object context, required Object error}) => 'Не удалось загрузить ${context}: ${error}', 'errors.noClientAvailable' => 'Клиент недоступен', - 'errors.authenticationFailed' => ({required Object error}) => 'Ошибка аутентификации: ${error}', - 'errors.couldNotLaunchUrl' => 'Не удалось открыть URL аутентификации', 'errors.pleaseEnterToken' => 'Введите токен', 'errors.invalidToken' => 'Недействительный токен', 'errors.failedToVerifyToken' => ({required Object error}) => 'Не удалось проверить токен: ${error}', @@ -2827,6 +2791,8 @@ extension on TranslationsRu { 'libraries.allLibrariesHidden' => 'Все библиотеки скрыты', 'libraries.hiddenLibrariesCount' => ({required Object count}) => 'Скрытые библиотеки (${count})', 'libraries.thisLibraryIsEmpty' => 'Эта библиотека пуста', + 'libraries.noItemsMatchFilters' => 'Нет элементов, соответствующих активным фильтрам', + 'libraries.resetFilters' => 'Сбросить фильтры', 'libraries.all' => 'Все', 'libraries.clearAll' => 'Очистить все', 'libraries.scanLibraryConfirm' => ({required Object title}) => 'Вы уверены, что хотите сканировать "${title}"?', @@ -2875,7 +2841,6 @@ extension on TranslationsRu { 'libraries.sortLabels.communityRating' => 'Оценка сообщества', 'libraries.sortLabels.criticRating' => 'Оценка критиков', 'libraries.sortLabels.userRating' => 'Пользовательская оценка', - 'libraries.sortLabels.lastPlayed' => 'Последний просмотр', 'libraries.sortLabels.datePlayed' => 'Дата просмотра', 'libraries.sortLabels.playCount' => 'Количество просмотров', 'libraries.sortLabels.productionYear' => 'Год производства', @@ -2889,14 +2854,11 @@ extension on TranslationsRu { 'libraries.sortLabels.dateShared' => 'Дата открытия доступа', 'libraries.sortLabels.latestEpisodeAirDate' => 'Дата выхода последнего эпизода', 'libraries.sortLabels.lastEpisodeDateAdded' => 'Дата добавления последнего эпизода', - 'libraries.noItemsMatchFilters' => 'Нет элементов, соответствующих активным фильтрам', - 'libraries.resetFilters' => 'Сбросить фильтры', 'about.title' => 'О приложении', 'about.openSourceLicenses' => 'Лицензии открытого ПО', 'about.versionLabel' => ({required Object version}) => 'Версия ${version}', 'about.appDescription' => 'Красивый клиент Plex и Jellyfin на Flutter', 'about.viewLicensesDescription' => 'Просмотр лицензий сторонних библиотек', - 'serverSelection.allServerConnectionsFailed' => 'Не удалось подключиться ни к одному серверу. Проверьте сеть.', 'serverSelection.noServersFoundForAccount' => ({required Object username, required Object email}) => 'Серверы не найдены для ${username} (${email})', 'serverSelection.failedToLoadServers' => ({required Object error}) => 'Не удалось загрузить серверы: ${error}', 'hubDetail.title' => 'Название', @@ -2942,7 +2904,6 @@ extension on TranslationsRu { 'explore.watchlistUpdateFailed' => 'Не удалось обновить список для просмотра', 'explore.notInLibrary' => 'Нет в вашей библиотеке', 'explore.inTheseLibraries' => 'В этих библиотеках', - 'explore.availableOn' => ({required Object server}) => 'Доступно на ${server}', 'explore.checkingLibrary' => 'Проверка вашей библиотеки...', 'explore.emptyTitle' => 'Здесь пока ничего нет', 'explore.emptyMessage' => ({required Object source}) => 'Строки из ${source} появятся здесь, когда в них будет контент.', @@ -2954,6 +2915,8 @@ extension on TranslationsRu { 'liveTv.guide' => 'Программа', 'liveTv.noChannels' => 'Нет доступных каналов', 'liveTv.noDvr' => 'DVR не настроен ни на одном сервере', + 'liveTv.serverUnavailable' => 'Сервер прямого эфира недоступен.', + 'liveTv.serverNotConnected' => 'Сервер прямого эфира не подключён.', 'liveTv.noPrograms' => 'Нет данных о программах', 'liveTv.liveStreamFailed' => 'Не удалось запустить прямой эфир', 'liveTv.unknownProgram' => 'Неизвестная программа', @@ -2989,7 +2952,6 @@ extension on TranslationsRu { 'liveTv.scheduledRecordings' => 'Запланировано', 'liveTv.recordingRules' => 'Правила записи', 'liveTv.noScheduledRecordings' => 'Нет запланированных записей', - 'liveTv.noRecordingRules' => 'Правил записи пока нет', 'liveTv.manageRecording' => 'Управление записью', 'liveTv.cancelRecording' => 'Отменить запись', 'liveTv.cancelRecordingTitle' => 'Отменить эту запись?', @@ -3006,7 +2968,6 @@ extension on TranslationsRu { 'liveTv.recordingCancelled' => 'Запись отменена', 'liveTv.recordingRuleDeleted' => 'Правило записи удалено', 'liveTv.processRecordingRules' => 'Пересчитать правила', - 'liveTv.loadingRecordings' => 'Загрузка записей...', 'liveTv.recordingInProgress' => 'Идёт запись', 'liveTv.recordingsCount' => ({required Object count}) => 'Запланировано: ${count}', 'liveTv.editRule' => 'Изменить правило', @@ -3018,7 +2979,6 @@ extension on TranslationsRu { 'collections.title' => 'Коллекции', 'collections.collection' => 'Коллекция', 'collections.empty' => 'Коллекция пуста', - 'collections.unknownLibrarySection' => 'Невозможно удалить: неизвестный раздел библиотеки', 'collections.deleteCollection' => 'Удалить коллекцию', 'collections.deleteConfirm' => ({required Object title}) => 'Удалить "${title}"? Это нельзя отменить.', 'collections.deleted' => 'Коллекция удалена', @@ -3056,6 +3016,7 @@ extension on TranslationsRu { 'playlists.itemAdded' => 'Добавлено в плейлист', 'playlists.itemRemoved' => 'Удалено из плейлиста', 'playlists.selectPlaylist' => 'Выбрать плейлист', + 'playlists.searchPlaylists' => 'Поиск плейлистов...', 'playlists.errorCreating' => 'Не удалось создать плейлист', 'playlists.errorDeleting' => 'Не удалось удалить плейлист', 'playlists.errorLoading' => 'Не удалось загрузить плейлисты', @@ -3138,22 +3099,20 @@ extension on TranslationsRu { 'watchTogether.participantResumed' => ({required Object name}) => '${name} возобновил', 'watchTogether.participantSeeked' => ({required Object name}) => '${name} перемотал', 'watchTogether.participantBuffering' => ({required Object name}) => '${name} буферизует', + 'watchTogether.participantNeedsUpdate' => ({required Object name}) => '${name} использует старую версию приложения — синхронизация недоступна', + 'watchTogether.resumingWithout' => ({required Object name}) => 'Возобновление без ${name}', 'watchTogether.waitingForParticipants' => 'Ожидание загрузки у других...', + 'watchTogether.waitingForName' => ({required Object name}) => 'Ожидание ${name}...', 'watchTogether.recentRooms' => 'Недавние комнаты', 'watchTogether.renameRoom' => 'Переименовать комнату', 'watchTogether.removeRoom' => 'Удалить', 'watchTogether.guestSwitchUnavailable' => 'Не удалось переключиться — сервер недоступен для синхронизации', 'watchTogether.guestSwitchFailed' => 'Не удалось переключиться — содержимое не найдено на этом сервере', - 'watchTogether.participantNeedsUpdate' => ({required Object name}) => '${name} использует старую версию приложения — синхронизация недоступна', - 'watchTogether.resumingWithout' => ({required Object name}) => 'Возобновление без ${name}', - 'watchTogether.waitingForName' => ({required Object name}) => 'Ожидание ${name}...', 'downloads.title' => 'Загрузки', 'downloads.manage' => 'Управление', 'downloads.tvShows' => 'Сериалы', 'downloads.movies' => 'Фильмы', 'downloads.music' => 'Музыка', - _ => null, - } ?? switch (path) { 'downloads.tracksQueued' => ({required Object count}) => '${count} треков в очереди на загрузку', 'downloads.noDownloads' => 'Загрузок пока нет', 'downloads.noDownloadsDescription' => 'Загруженный контент появится здесь для просмотра офлайн', @@ -3168,6 +3127,8 @@ extension on TranslationsRu { 'downloads.deleteConfirm' => ({required Object title}) => 'Удалить "${title}" с этого устройства?', 'downloads.cancelledDownloadTitle' => 'Загрузка отменена', 'downloads.cancelledDownloadMessage' => 'Эта загрузка была отменена. Что вы хотите сделать?', + _ => null, + } ?? switch (path) { 'downloads.allEpisodesAlreadyDownloaded' => 'Все эпизоды уже загружены', 'downloads.resumeDownload' => 'Возобновить загрузку', 'downloads.cancelledDownload' => 'Загрузка отменена', @@ -3191,7 +3152,6 @@ extension on TranslationsRu { 'downloads.customAmount' => 'Указать количество...', 'downloads.includeSpecials' => 'Включить спецвыпуски', 'downloads.howManyEpisodes' => 'Сколько эпизодов?', - 'downloads.itemsQueued' => ({required Object count}) => '${count} элементов добавлено в очередь загрузки', 'downloads.keepSynced' => 'Синхронизировать', 'downloads.downloadOnce' => 'Скачать один раз', 'downloads.keepNUnwatched' => ({required Object count}) => 'Хранить ${count} непросмотренных', @@ -3235,7 +3195,6 @@ extension on TranslationsRu { 'companionRemote.connectedTo' => ({required Object name}) => 'Подключено к ${name}', 'companionRemote.unknownDevice' => 'Неизвестное устройство', 'companionRemote.session.startingServer' => 'Запуск удалённого сервера...', - 'companionRemote.session.failedToCreate' => 'Не удалось запустить удалённый сервер:', 'companionRemote.session.hostAddress' => 'Адрес хоста', 'companionRemote.session.connected' => 'Подключено', 'companionRemote.session.serverRunning' => 'Удалённый сервер активен', @@ -3290,6 +3249,8 @@ extension on TranslationsRu { 'companionRemote.remote.searchHint' => 'Поиск на десктопе...', 'companionRemote.errors.noNetworkInterface' => 'Сетевой интерфейс не найден', 'companionRemote.errors.authenticationFailed' => 'Ошибка аутентификации', + 'companionRemote.errors.serverStartFailed' => ({required Object error}) => 'Не удалось запустить удалённый сервер: ${error}', + 'companionRemote.errors.commandFailed' => ({required Object error}) => 'Не удалось отправить удалённую команду: ${error}', 'companionRemote.errors.joinTimedOut' => 'Время подключения к сеансу истекло', 'companionRemote.errors.failedToConnectAnyAddress' => 'Не удалось подключиться ни к одному адресу', 'companionRemote.errors.connectionLostAfterAttempts' => ({required Object attempts}) => 'Соединение потеряно после ${attempts} попыток', @@ -3534,7 +3495,6 @@ extension on TranslationsRu { 'addServer.quickConnectFailed' => ({required Object error}) => 'Quick Connect не удался: ${error}', 'addServer.addPlexTitle' => 'Войти через Plex', 'addServer.pinExpired' => 'Срок действия PIN истёк до входа. Попробуйте снова.', - 'addServer.duplicatePlexAccount' => 'В Plex уже выполнен вход. Выйдите, чтобы сменить аккаунт.', 'addServer.failedToRegisterAccount' => ({required Object error}) => 'Не удалось зарегистрировать учётную запись: ${error}', 'addServer.enterJellyfinUrlError' => 'Введите URL вашего сервера Jellyfin', 'addServer.addConnectionTitle' => 'Добавить подключение', diff --git a/lib/i18n/strings_sv.g.dart b/lib/i18n/strings_sv.g.dart index 91cfb20d..8808a5bf 100644 --- a/lib/i18n/strings_sv.g.dart +++ b/lib/i18n/strings_sv.g.dart @@ -53,7 +53,6 @@ class TranslationsSv extends Translations with BaseTranslations 'Logga in'; @override String get signInWithPlex => 'Logga in med Plex'; @override String get showQRCode => 'Visa QR-kod'; @override String get authenticate => 'Autentisera'; @@ -167,10 +165,8 @@ class _TranslationsCommonSv extends TranslationsCommonEn { @override String episodeNumberTitle({required Object number, required Object title}) => 'Avsnitt ${number} - ${title}'; @override String chapterNumber({required Object number}) => 'Kapitel ${number}'; @override String get reconnect => 'Återanslut'; - @override String get exit => 'Avsluta'; @override String get viewAll => 'Visa alla'; @override String get checkingNetwork => 'Kontrollerar nätverk...'; - @override String get refreshingServers => 'Uppdaterar servrar...'; @override String get loadingServers => 'Laddar servrar...'; @override String get connectingToServers => 'Ansluter till servrar...'; @override String get startingOfflineMode => 'Startar offlineläge...'; @@ -271,6 +267,12 @@ class _TranslationsSettingsSv extends TranslationsSettingsEn { @override String get tvFullCardLayoutDescription => 'Använd TV-kort med enbart bild och skådespelarnamn ovanpå'; @override String get focusGlow => 'Fokusglöd'; @override String get focusGlowDescription => 'Visa en mjuk glöd runt kortet i fokus'; + @override String get visualEffects => 'Visuella effekter'; + @override String get visualEffectsAuto => 'Automatiskt'; + @override String get visualEffectsAutoDescription => 'Minska effekter automatiskt på enheter med låg effekt'; + @override String get visualEffectsFull => 'Fullständiga'; + @override String get visualEffectsReduced => 'Minskade'; + @override String get visualEffectsReducedDescription => 'Färre animationer och grafik med lägre upplösning'; @override String get hideSpoilers => 'Dölj spoilers för osedda avsnitt'; @override String get hideSpoilersDescription => 'Sudda miniatyrbilder och beskrivningar för osedda avsnitt'; @override String get playerBackend => 'Spelarmotor'; @@ -283,7 +285,7 @@ class _TranslationsSettingsSv extends TranslationsSettingsEn { @override String get bufferSizeAuto => 'Auto (Rekommenderat)'; @override String bufferSizeWarning({required Object heap, required Object size}) => '${heap}MB minne tillgängligt. En buffert på ${size}MB kan påverka uppspelningen.'; @override String get defaultQualityTitle => 'Standardkvalitet'; - @override String get defaultQualityDescription => 'Används vid start av uppspelning. Lägre värden minskar bandbredden.'; + @override String get musicQualityTitle => 'Musikkvalitet'; @override String get subtitleStyling => 'Undertext-styling'; @override String get subtitleStylingDescription => 'Anpassa undertextutseende'; @override String get smallSkipDuration => 'Kort hoppvaraktighet'; @@ -377,10 +379,9 @@ class _TranslationsSettingsSv extends TranslationsSettingsEn { @override String maxVolumePercent({required Object percent}) => '${percent}%'; @override String get discordRichPresence => 'Discord Rich Presence'; @override String get discordRichPresenceDescription => 'Visa vad du tittar på i Discord'; - @override String get trakt => 'Trakt'; - @override String get traktDescription => 'Synkronisera visningshistorik med Trakt'; @override String get services => 'Tjänster'; @override String get servicesDescription => 'Anslut Trakt, MyAnimeList, Seerr med mera'; + @override String get manageLibrariesDescription => 'Ordna om och dölj bibliotek'; @override String get companionRemoteServer => 'Companion Remote-server'; @override String get companionRemoteServerDescription => 'Tillåt mobila enheter i ditt nätverk att styra denna app'; @override String get autoPip => 'Automatisk bild-i-bild'; @@ -443,7 +444,6 @@ class _TranslationsSettingsSv extends TranslationsSettingsEn { @override String get showNavBarLabels => 'Visa navigeringsfältets etiketter'; @override String get showNavBarLabelsDescription => 'Visa textetiketter under navigeringsfältets ikoner'; @override String get startupSection => 'Startsektion'; - @override String get startupSectionDescription => 'Välj vilken sektion Plezy öppnar vid start'; @override String get liveTvDefaultFavorites => 'Standard till favoritkanaler'; @override String get liveTvDefaultFavoritesDescription => 'Visa bara favoritkanaler när du öppnar Live TV'; @override String get display => 'Skärm'; @@ -455,13 +455,6 @@ class _TranslationsSettingsSv extends TranslationsSettingsEn { @override String get subtitlesAndConfig => 'Undertexter och konfiguration'; @override String get seekAndTiming => 'Sök och timing'; @override String get behavior => 'Beteende'; - @override String get manageLibrariesDescription => 'Ordna om och dölj bibliotek'; - @override String get visualEffects => 'Visuella effekter'; - @override String get visualEffectsAuto => 'Automatiskt'; - @override String get visualEffectsAutoDescription => 'Minska effekter automatiskt på enheter med låg effekt'; - @override String get visualEffectsFull => 'Fullständiga'; - @override String get visualEffectsReduced => 'Minskade'; - @override String get visualEffectsReducedDescription => 'Färre animationer och grafik med lägre upplösning'; } // Path: search @@ -559,14 +552,11 @@ class _TranslationsRateSheetSv extends TranslationsRateSheetEn { // Translations @override String get title => 'Betygsätt'; @override String get server => 'Server'; - @override String starValue({required Object rating}) => '${rating} / 5'; - @override String scoreValue({required Object score}) => '${score} / 10'; - @override String get setScore => 'Ange betyg'; + @override String get favorite => 'Favorit'; + @override String get favorited => 'Tillagd i favoriter'; @override String get saved => 'Sparat'; @override String get notAvailable => 'Ingen matchning hittades'; @override String get noConnectedServices => 'Anslut en tjänst i Inställningar för att betygsätta där.'; - @override String get favorite => 'Favorit'; - @override String get favorited => 'Tillagd i favoriter'; } // Path: accessibility @@ -584,6 +574,14 @@ class _TranslationsAccessibilitySv extends TranslationsAccessibilityEn { @override String mediaCardPartiallyWatched({required Object percent}) => '${percent} procent sedd'; @override String get mediaCardUnwatched => 'osedd'; @override String get tapToPlay => 'Tryck för att spela'; + @override String get decrease => 'Minska'; + @override String get increase => 'Öka'; + @override String decreaseValue({required Object label}) => 'Minska ${label}'; + @override String increaseValue({required Object label}) => 'Öka ${label}'; + @override String get hue => 'Nyans'; + @override String get saturation => 'Mättnad'; + @override String get brightness => 'Ljusstyrka'; + @override String get hexColor => 'Hexfärg'; } // Path: tooltips @@ -643,13 +641,11 @@ class _TranslationsVideoControlsSv extends TranslationsVideoControlsEn { @override String get settingsButton => 'Uppspelningsinställningar'; @override String get tracksButton => 'Ljud och undertexter'; @override String get chaptersButton => 'Kapitel'; - @override String get versionsButton => 'Videoversioner'; @override String get versionQualityButton => 'Version och kvalitet'; @override String get versionColumnHeader => 'Version'; @override String get qualityColumnHeader => 'Kvalitet'; @override String get qualityOriginal => 'Original'; @override String qualityPresetLabel({required Object resolution, required Object bitrate}) => '${resolution}p ${bitrate} Mbps'; - @override String qualityBandwidthEstimate({required Object bitrate}) => '~${bitrate} Mbps'; @override String get transcodeUnavailableFallback => 'Transkodning otillgänglig — spelar upp i originalkvalitet'; @override String get pipButton => 'Bild-i-bild läge'; @override String get aspectRatioButton => 'Bildförhållande'; @@ -685,19 +681,6 @@ class _TranslationsVideoControlsSv extends TranslationsVideoControlsEn { @override String get searchLanguages => 'Sök språk...'; } -// Path: userStatus -class _TranslationsUserStatusSv extends TranslationsUserStatusEn { - _TranslationsUserStatusSv._(TranslationsSv root) : this._root = root, super.internal(root); - - final TranslationsSv _root; // ignore: unused_field - - // Translations - @override String get admin => 'Admin'; - @override String get restricted => 'Begränsad'; - @override String get protected => 'Skyddad'; - @override String get current => 'NUVARANDE'; -} - // Path: messages class _TranslationsMessagesSv extends TranslationsMessagesEn { _TranslationsMessagesSv._(TranslationsSv root) : this._root = root, super.internal(root); @@ -873,7 +856,6 @@ class _TranslationsProfilesSv extends TranslationsProfilesEn { @override String get pinExplain => '4-siffrig PIN krävs för att byta profiler.'; @override String get continueButton => 'Fortsätt'; @override String get pinsDontMatch => 'PIN-koderna stämmer inte överens'; - @override String get initializeServicesFailed => 'Kunde inte initiera profiltjänster'; } // Path: connections @@ -902,7 +884,6 @@ class _TranslationsDiscoverSv extends TranslationsDiscoverEn { // Translations @override String get title => 'Upptäck'; - @override String get switchProfile => 'Byt profil'; @override String get noContentAvailable => 'Inget innehåll tillgängligt'; @override String get addMediaToLibraries => 'Lägg till media till dina bibliotek'; @override String get continueWatching => 'Fortsätt titta'; @@ -938,8 +919,6 @@ class _TranslationsErrorsSv extends TranslationsErrorsEn { @override String get connectionFailed => 'Kan inte ansluta till mediaserver'; @override String failedToLoad({required Object context, required Object error}) => 'Misslyckades att ladda ${context}: ${error}'; @override String get noClientAvailable => 'Ingen klient tillgänglig'; - @override String authenticationFailed({required Object error}) => 'Autentisering misslyckades: ${error}'; - @override String get couldNotLaunchUrl => 'Kunde inte öppna autentiserings-URL'; @override String get pleaseEnterToken => 'Vänligen ange en token'; @override String get invalidToken => 'Ogiltig token'; @override String failedToVerifyToken({required Object error}) => 'Misslyckades att verifiera token: ${error}'; @@ -973,6 +952,8 @@ class _TranslationsLibrariesSv extends TranslationsLibrariesEn { @override String get allLibrariesHidden => 'Alla bibliotek är dolda'; @override String hiddenLibrariesCount({required Object count}) => 'Dolda bibliotek (${count})'; @override String get thisLibraryIsEmpty => 'Detta bibliotek är tomt'; + @override String get noItemsMatchFilters => 'Inga objekt matchar de aktiva filtren'; + @override String get resetFilters => 'Återställ filter'; @override String get all => 'Alla'; @override String get clearAll => 'Rensa alla'; @override String scanLibraryConfirm({required Object title}) => 'Är du säker på att du vill skanna "${title}"?'; @@ -998,8 +979,6 @@ class _TranslationsLibrariesSv extends TranslationsLibrariesEn { @override late final _TranslationsLibrariesGroupingsSv groupings = _TranslationsLibrariesGroupingsSv._(_root); @override late final _TranslationsLibrariesFilterCategoriesSv filterCategories = _TranslationsLibrariesFilterCategoriesSv._(_root); @override late final _TranslationsLibrariesSortLabelsSv sortLabels = _TranslationsLibrariesSortLabelsSv._(_root); - @override String get noItemsMatchFilters => 'Inga objekt matchar de aktiva filtren'; - @override String get resetFilters => 'Återställ filter'; } // Path: about @@ -1023,7 +1002,6 @@ class _TranslationsServerSelectionSv extends TranslationsServerSelectionEn { final TranslationsSv _root; // ignore: unused_field // Translations - @override String get allServerConnectionsFailed => 'Kunde inte ansluta till några servrar. Kontrollera nätverket.'; @override String noServersFoundForAccount({required Object username, required Object email}) => 'Inga servrar hittades för ${username} (${email})'; @override String failedToLoadServers({required Object error}) => 'Misslyckades att ladda servrar: ${error}'; } @@ -1102,7 +1080,6 @@ class _TranslationsExploreSv extends TranslationsExploreEn { @override String get watchlistUpdateFailed => 'Det gick inte att uppdatera bevakningslistan'; @override String get notInLibrary => 'Finns inte i ditt bibliotek'; @override String get inTheseLibraries => 'I dessa bibliotek'; - @override String availableOn({required Object server}) => 'Tillgänglig på ${server}'; @override String get checkingLibrary => 'Kontrollerar ditt bibliotek...'; @override String get emptyTitle => 'Inget här ännu'; @override String emptyMessage({required Object source}) => 'Rader från ${source} visas här när de har innehåll.'; @@ -1123,6 +1100,8 @@ class _TranslationsLiveTvSv extends TranslationsLiveTvEn { @override String get guide => 'Programguide'; @override String get noChannels => 'Inga kanaler tillgängliga'; @override String get noDvr => 'Ingen DVR konfigurerad på någon server'; + @override String get serverUnavailable => 'Live-tv-servern är inte tillgänglig.'; + @override String get serverNotConnected => 'Live-tv-servern är inte ansluten.'; @override String get noPrograms => 'Ingen programdata tillgänglig'; @override String get liveStreamFailed => 'Liveström misslyckades'; @override String get unknownProgram => 'Okänt program'; @@ -1158,7 +1137,6 @@ class _TranslationsLiveTvSv extends TranslationsLiveTvEn { @override String get scheduledRecordings => 'Schemalagda'; @override String get recordingRules => 'Inspelningsregler'; @override String get noScheduledRecordings => 'Inga schemalagda inspelningar'; - @override String get noRecordingRules => 'Inga inspelningsregler än'; @override String get manageRecording => 'Hantera inspelning'; @override String get cancelRecording => 'Avbryt inspelning'; @override String get cancelRecordingTitle => 'Avbryt denna inspelning?'; @@ -1175,7 +1153,6 @@ class _TranslationsLiveTvSv extends TranslationsLiveTvEn { @override String get recordingCancelled => 'Inspelning avbruten'; @override String get recordingRuleDeleted => 'Inspelningsregel borttagen'; @override String get processRecordingRules => 'Utvärdera regler igen'; - @override String get loadingRecordings => 'Laddar inspelningar ...'; @override String get recordingInProgress => 'Spelar in nu'; @override String recordingsCount({required Object count}) => '${count} schemalagda'; @override String get editRule => 'Redigera regel'; @@ -1196,7 +1173,6 @@ class _TranslationsCollectionsSv extends TranslationsCollectionsEn { @override String get title => 'Samlingar'; @override String get collection => 'Samling'; @override String get empty => 'Samlingen är tom'; - @override String get unknownLibrarySection => 'Kan inte ta bort: okänd bibliotekssektion'; @override String get deleteCollection => 'Ta bort samling'; @override String deleteConfirm({required Object title}) => 'Ta bort "${title}"? Detta kan inte ångras.'; @override String get deleted => 'Samling borttagen'; @@ -1243,6 +1219,7 @@ class _TranslationsPlaylistsSv extends TranslationsPlaylistsEn { @override String get itemAdded => 'Tillagd i spellista'; @override String get itemRemoved => 'Borttagen från spellista'; @override String get selectPlaylist => 'Välj spellista'; + @override String get searchPlaylists => 'Sök i spellistor...'; @override String get errorCreating => 'Det gick inte att skapa spellista'; @override String get errorDeleting => 'Det gick inte att ta bort spellista'; @override String get errorLoading => 'Det gick inte att ladda spellistor'; @@ -1346,15 +1323,15 @@ class _TranslationsWatchTogetherSv extends TranslationsWatchTogetherEn { @override String participantResumed({required Object name}) => '${name} återupptog'; @override String participantSeeked({required Object name}) => '${name} spolade'; @override String participantBuffering({required Object name}) => '${name} buffrar'; + @override String participantNeedsUpdate({required Object name}) => '${name} använder en äldre appversion — synkronisering är inte tillgänglig'; + @override String resumingWithout({required Object name}) => 'Återupptar utan ${name}'; @override String get waitingForParticipants => 'Väntar på att andra laddar...'; + @override String waitingForName({required Object name}) => 'Väntar på ${name}...'; @override String get recentRooms => 'Senaste rum'; @override String get renameRoom => 'Byt namn på rum'; @override String get removeRoom => 'Ta bort'; @override String get guestSwitchUnavailable => 'Kunde inte byta — server inte tillgänglig för synkronisering'; @override String get guestSwitchFailed => 'Kunde inte byta — innehåll hittades inte på denna server'; - @override String participantNeedsUpdate({required Object name}) => '${name} använder en äldre appversion — synkronisering är inte tillgänglig'; - @override String resumingWithout({required Object name}) => 'Återupptar utan ${name}'; - @override String waitingForName({required Object name}) => 'Väntar på ${name}...'; } // Path: downloads @@ -1406,7 +1383,6 @@ class _TranslationsDownloadsSv extends TranslationsDownloadsEn { @override String get customAmount => 'Ange antal...'; @override String get includeSpecials => 'Inkludera specialavsnitt'; @override String get howManyEpisodes => 'Hur många avsnitt?'; - @override String itemsQueued({required Object count}) => '${count} objekt köade för nedladdning'; @override String get keepSynced => 'Håll synkroniserad'; @override String get downloadOnce => 'Ladda ner en gång'; @override String keepNUnwatched({required Object count}) => 'Behåll ${count} osedda'; @@ -1780,7 +1756,6 @@ class _TranslationsAddServerSv extends TranslationsAddServerEn { @override String quickConnectFailed({required Object error}) => 'Quick Connect misslyckades: ${error}'; @override String get addPlexTitle => 'Logga in med Plex'; @override String get pinExpired => 'PIN-koden gick ut innan inloggning. Försök igen.'; - @override String get duplicatePlexAccount => 'Redan inloggad på Plex. Logga ut för att byta konto.'; @override String failedToRegisterAccount({required Object error}) => 'Kunde inte registrera kontot: ${error}'; @override String get enterJellyfinUrlError => 'Ange URL till din Jellyfin-server'; @override String get addConnectionTitle => 'Lägg till anslutning'; @@ -1906,7 +1881,6 @@ class _TranslationsLibrariesSortLabelsSv extends TranslationsLibrariesSortLabels @override String get communityRating => 'Användarbetyg'; @override String get criticRating => 'Kritikerbetyg'; @override String get userRating => 'Användarbetyg'; - @override String get lastPlayed => 'Senast spelad'; @override String get datePlayed => 'Speldatum'; @override String get playCount => 'Antal spelningar'; @override String get productionYear => 'Produktionsår'; @@ -1965,7 +1939,6 @@ class _TranslationsCompanionRemoteSessionSv extends TranslationsCompanionRemoteS // Translations @override String get startingServer => 'Startar fjärrserver...'; - @override String get failedToCreate => 'Kunde inte starta fjärrserver:'; @override String get hostAddress => 'Värdadress'; @override String get connected => 'Ansluten'; @override String get serverRunning => 'Fjärrserver aktiv'; @@ -2047,6 +2020,8 @@ class _TranslationsCompanionRemoteErrorsSv extends TranslationsCompanionRemoteEr // Translations @override String get noNetworkInterface => 'Inget nätverksgränssnitt hittades'; @override String get authenticationFailed => 'Autentisering misslyckades'; + @override String serverStartFailed({required Object error}) => 'Det gick inte att starta fjärrservern: ${error}'; + @override String commandFailed({required Object error}) => 'Det gick inte att skicka fjärrkommandot: ${error}'; @override String get joinTimedOut => 'Tidsgräns vid anslutning till session'; @override String get failedToConnectAnyAddress => 'Kunde inte ansluta till någon adress'; @override String connectionLostAfterAttempts({required Object attempts}) => 'Anslutning förlorad efter ${attempts} försök'; @@ -2123,7 +2098,6 @@ extension on TranslationsSv { dynamic _flatMapFunction(String path) { return switch (path) { 'app.title' => 'Plezy', - 'auth.signIn' => 'Logga in', 'auth.signInWithPlex' => 'Logga in med Plex', 'auth.showQRCode' => 'Visa QR-kod', 'auth.authenticate' => 'Autentisera', @@ -2174,10 +2148,8 @@ extension on TranslationsSv { 'common.episodeNumberTitle' => ({required Object number, required Object title}) => 'Avsnitt ${number} - ${title}', 'common.chapterNumber' => ({required Object number}) => 'Kapitel ${number}', 'common.reconnect' => 'Återanslut', - 'common.exit' => 'Avsluta', 'common.viewAll' => 'Visa alla', 'common.checkingNetwork' => 'Kontrollerar nätverk...', - 'common.refreshingServers' => 'Uppdaterar servrar...', 'common.loadingServers' => 'Laddar servrar...', 'common.connectingToServers' => 'Ansluter till servrar...', 'common.startingOfflineMode' => 'Startar offlineläge...', @@ -2251,6 +2223,12 @@ extension on TranslationsSv { 'settings.tvFullCardLayoutDescription' => 'Använd TV-kort med enbart bild och skådespelarnamn ovanpå', 'settings.focusGlow' => 'Fokusglöd', 'settings.focusGlowDescription' => 'Visa en mjuk glöd runt kortet i fokus', + 'settings.visualEffects' => 'Visuella effekter', + 'settings.visualEffectsAuto' => 'Automatiskt', + 'settings.visualEffectsAutoDescription' => 'Minska effekter automatiskt på enheter med låg effekt', + 'settings.visualEffectsFull' => 'Fullständiga', + 'settings.visualEffectsReduced' => 'Minskade', + 'settings.visualEffectsReducedDescription' => 'Färre animationer och grafik med lägre upplösning', 'settings.hideSpoilers' => 'Dölj spoilers för osedda avsnitt', 'settings.hideSpoilersDescription' => 'Sudda miniatyrbilder och beskrivningar för osedda avsnitt', 'settings.playerBackend' => 'Spelarmotor', @@ -2263,7 +2241,7 @@ extension on TranslationsSv { 'settings.bufferSizeAuto' => 'Auto (Rekommenderat)', 'settings.bufferSizeWarning' => ({required Object heap, required Object size}) => '${heap}MB minne tillgängligt. En buffert på ${size}MB kan påverka uppspelningen.', 'settings.defaultQualityTitle' => 'Standardkvalitet', - 'settings.defaultQualityDescription' => 'Används vid start av uppspelning. Lägre värden minskar bandbredden.', + 'settings.musicQualityTitle' => 'Musikkvalitet', 'settings.subtitleStyling' => 'Undertext-styling', 'settings.subtitleStylingDescription' => 'Anpassa undertextutseende', 'settings.smallSkipDuration' => 'Kort hoppvaraktighet', @@ -2357,10 +2335,9 @@ extension on TranslationsSv { 'settings.maxVolumePercent' => ({required Object percent}) => '${percent}%', 'settings.discordRichPresence' => 'Discord Rich Presence', 'settings.discordRichPresenceDescription' => 'Visa vad du tittar på i Discord', - 'settings.trakt' => 'Trakt', - 'settings.traktDescription' => 'Synkronisera visningshistorik med Trakt', 'settings.services' => 'Tjänster', 'settings.servicesDescription' => 'Anslut Trakt, MyAnimeList, Seerr med mera', + 'settings.manageLibrariesDescription' => 'Ordna om och dölj bibliotek', 'settings.companionRemoteServer' => 'Companion Remote-server', 'settings.companionRemoteServerDescription' => 'Tillåt mobila enheter i ditt nätverk att styra denna app', 'settings.autoPip' => 'Automatisk bild-i-bild', @@ -2423,7 +2400,6 @@ extension on TranslationsSv { 'settings.showNavBarLabels' => 'Visa navigeringsfältets etiketter', 'settings.showNavBarLabelsDescription' => 'Visa textetiketter under navigeringsfältets ikoner', 'settings.startupSection' => 'Startsektion', - 'settings.startupSectionDescription' => 'Välj vilken sektion Plezy öppnar vid start', 'settings.liveTvDefaultFavorites' => 'Standard till favoritkanaler', 'settings.liveTvDefaultFavoritesDescription' => 'Visa bara favoritkanaler när du öppnar Live TV', 'settings.display' => 'Skärm', @@ -2435,13 +2411,6 @@ extension on TranslationsSv { 'settings.subtitlesAndConfig' => 'Undertexter och konfiguration', 'settings.seekAndTiming' => 'Sök och timing', 'settings.behavior' => 'Beteende', - 'settings.manageLibrariesDescription' => 'Ordna om och dölj bibliotek', - 'settings.visualEffects' => 'Visuella effekter', - 'settings.visualEffectsAuto' => 'Automatiskt', - 'settings.visualEffectsAutoDescription' => 'Minska effekter automatiskt på enheter med låg effekt', - 'settings.visualEffectsFull' => 'Fullständiga', - 'settings.visualEffectsReduced' => 'Minskade', - 'settings.visualEffectsReducedDescription' => 'Färre animationer och grafik med lägre upplösning', 'search.hint' => 'Sök filmer, serier, musik...', 'search.tryDifferentTerm' => 'Prova en annan sökterm', 'search.searchYourMedia' => 'Sök i dina media', @@ -2518,14 +2487,11 @@ extension on TranslationsSv { 'mediaMenu.playVersion' => 'Spela version...', 'rateSheet.title' => 'Betygsätt', 'rateSheet.server' => 'Server', - 'rateSheet.starValue' => ({required Object rating}) => '${rating} / 5', - 'rateSheet.scoreValue' => ({required Object score}) => '${score} / 10', - 'rateSheet.setScore' => 'Ange betyg', + 'rateSheet.favorite' => 'Favorit', + 'rateSheet.favorited' => 'Tillagd i favoriter', 'rateSheet.saved' => 'Sparat', 'rateSheet.notAvailable' => 'Ingen matchning hittades', 'rateSheet.noConnectedServices' => 'Anslut en tjänst i Inställningar för att betygsätta där.', - 'rateSheet.favorite' => 'Favorit', - 'rateSheet.favorited' => 'Tillagd i favoriter', 'accessibility.mediaCardMovie' => ({required Object title}) => '${title}, film', 'accessibility.mediaCardShow' => ({required Object title}) => '${title}, TV-serie', 'accessibility.mediaCardEpisode' => ({required Object title, required Object episodeInfo}) => '${title}, ${episodeInfo}', @@ -2534,6 +2500,14 @@ extension on TranslationsSv { 'accessibility.mediaCardPartiallyWatched' => ({required Object percent}) => '${percent} procent sedd', 'accessibility.mediaCardUnwatched' => 'osedd', 'accessibility.tapToPlay' => 'Tryck för att spela', + 'accessibility.decrease' => 'Minska', + 'accessibility.increase' => 'Öka', + 'accessibility.decreaseValue' => ({required Object label}) => 'Minska ${label}', + 'accessibility.increaseValue' => ({required Object label}) => 'Öka ${label}', + 'accessibility.hue' => 'Nyans', + 'accessibility.saturation' => 'Mättnad', + 'accessibility.brightness' => 'Ljusstyrka', + 'accessibility.hexColor' => 'Hexfärg', 'tooltips.shufflePlay' => 'Blanda uppspelning', 'tooltips.playTrailer' => 'Spela trailer', 'tooltips.markAsWatched' => 'Markera som sedd', @@ -2575,13 +2549,11 @@ extension on TranslationsSv { 'videoControls.settingsButton' => 'Uppspelningsinställningar', 'videoControls.tracksButton' => 'Ljud och undertexter', 'videoControls.chaptersButton' => 'Kapitel', - 'videoControls.versionsButton' => 'Videoversioner', 'videoControls.versionQualityButton' => 'Version och kvalitet', 'videoControls.versionColumnHeader' => 'Version', 'videoControls.qualityColumnHeader' => 'Kvalitet', 'videoControls.qualityOriginal' => 'Original', 'videoControls.qualityPresetLabel' => ({required Object resolution, required Object bitrate}) => '${resolution}p ${bitrate} Mbps', - 'videoControls.qualityBandwidthEstimate' => ({required Object bitrate}) => '~${bitrate} Mbps', 'videoControls.transcodeUnavailableFallback' => 'Transkodning otillgänglig — spelar upp i originalkvalitet', 'videoControls.pipButton' => 'Bild-i-bild läge', 'videoControls.aspectRatioButton' => 'Bildförhållande', @@ -2621,10 +2593,6 @@ extension on TranslationsSv { 'videoControls.subtitleDownloaded' => 'Undertext nedladdad', 'videoControls.subtitleDownloadFailed' => 'Kunde inte ladda ner undertext', 'videoControls.searchLanguages' => 'Sök språk...', - 'userStatus.admin' => 'Admin', - 'userStatus.restricted' => 'Begränsad', - 'userStatus.protected' => 'Skyddad', - 'userStatus.current' => 'NUVARANDE', 'messages.markedAsWatched' => 'Markerad som sedd', 'messages.markedAsUnwatched' => 'Markerad som osedd', 'messages.markedAsWatchedOffline' => 'Markerad som sedd (synkroniseras när online)', @@ -2634,8 +2602,6 @@ extension on TranslationsSv { 'messages.errorLoading' => ({required Object error}) => 'Fel: ${error}', 'messages.streamInterrupted' => 'Uppspelningen avbröts. Tryck på play eller spola för att försöka igen.', 'messages.fileInfoNotAvailable' => 'Filinformation inte tillgänglig', - _ => null, - } ?? switch (path) { 'messages.errorLoadingFileInfo' => ({required Object error}) => 'Fel vid laddning av filinformation: ${error}', 'messages.errorLoadingSeries' => 'Fel vid laddning av serie', 'messages.musicNotSupported' => 'Musikuppspelning stöds inte ännu', @@ -2643,6 +2609,8 @@ extension on TranslationsSv { 'messages.noProfilesAvailable' => 'Inga profiler tillgängliga', 'messages.contactAdminForProfiles' => 'Kontakta din serveradministratör för att lägga till profiler', 'messages.unableToDetermineLibrarySection' => 'Kan inte avgöra biblioteksavdelningen för detta objekt', + _ => null, + } ?? switch (path) { 'messages.logsCleared' => 'Loggar rensade', 'messages.logsCopied' => 'Loggar kopierade till urklipp', 'messages.noLogsAvailable' => 'Inga loggar tillgängliga', @@ -2759,7 +2727,6 @@ extension on TranslationsSv { 'profiles.pinExplain' => '4-siffrig PIN krävs för att byta profiler.', 'profiles.continueButton' => 'Fortsätt', 'profiles.pinsDontMatch' => 'PIN-koderna stämmer inte överens', - 'profiles.initializeServicesFailed' => 'Kunde inte initiera profiltjänster', 'connections.sectionTitle' => 'Anslutningar', 'connections.addConnection' => 'Lägg till anslutning', 'connections.addConnectionSubtitleNoProfile' => 'Logga in med Plex eller anslut en Jellyfin-server', @@ -2770,7 +2737,6 @@ extension on TranslationsSv { 'connections.editJellyfinTitle' => 'Redigera Jellyfin-anslutning', 'connections.editJellyfinIntro' => ({required Object serverName}) => 'Lägg till eller ta bort URL:er för ${serverName}. Plezy använder den nåbara URL:en med lägst latens.', 'discover.title' => 'Upptäck', - 'discover.switchProfile' => 'Byt profil', 'discover.noContentAvailable' => 'Inget innehåll tillgängligt', 'discover.addMediaToLibraries' => 'Lägg till media till dina bibliotek', 'discover.continueWatching' => 'Fortsätt titta', @@ -2797,8 +2763,6 @@ extension on TranslationsSv { 'errors.connectionFailed' => 'Kan inte ansluta till mediaserver', 'errors.failedToLoad' => ({required Object context, required Object error}) => 'Misslyckades att ladda ${context}: ${error}', 'errors.noClientAvailable' => 'Ingen klient tillgänglig', - 'errors.authenticationFailed' => ({required Object error}) => 'Autentisering misslyckades: ${error}', - 'errors.couldNotLaunchUrl' => 'Kunde inte öppna autentiserings-URL', 'errors.pleaseEnterToken' => 'Vänligen ange en token', 'errors.invalidToken' => 'Ogiltig token', 'errors.failedToVerifyToken' => ({required Object error}) => 'Misslyckades att verifiera token: ${error}', @@ -2823,6 +2787,8 @@ extension on TranslationsSv { 'libraries.allLibrariesHidden' => 'Alla bibliotek är dolda', 'libraries.hiddenLibrariesCount' => ({required Object count}) => 'Dolda bibliotek (${count})', 'libraries.thisLibraryIsEmpty' => 'Detta bibliotek är tomt', + 'libraries.noItemsMatchFilters' => 'Inga objekt matchar de aktiva filtren', + 'libraries.resetFilters' => 'Återställ filter', 'libraries.all' => 'Alla', 'libraries.clearAll' => 'Rensa alla', 'libraries.scanLibraryConfirm' => ({required Object title}) => 'Är du säker på att du vill skanna "${title}"?', @@ -2871,7 +2837,6 @@ extension on TranslationsSv { 'libraries.sortLabels.communityRating' => 'Användarbetyg', 'libraries.sortLabels.criticRating' => 'Kritikerbetyg', 'libraries.sortLabels.userRating' => 'Användarbetyg', - 'libraries.sortLabels.lastPlayed' => 'Senast spelad', 'libraries.sortLabels.datePlayed' => 'Speldatum', 'libraries.sortLabels.playCount' => 'Antal spelningar', 'libraries.sortLabels.productionYear' => 'Produktionsår', @@ -2885,14 +2850,11 @@ extension on TranslationsSv { 'libraries.sortLabels.dateShared' => 'Delningsdatum', 'libraries.sortLabels.latestEpisodeAirDate' => 'Senaste avsnittets sändningsdatum', 'libraries.sortLabels.lastEpisodeDateAdded' => 'Datum då senaste avsnittet lades till', - 'libraries.noItemsMatchFilters' => 'Inga objekt matchar de aktiva filtren', - 'libraries.resetFilters' => 'Återställ filter', 'about.title' => 'Om', 'about.openSourceLicenses' => 'Öppen källkod-licenser', 'about.versionLabel' => ({required Object version}) => 'Version ${version}', 'about.appDescription' => 'En vacker Plex- och Jellyfin-klient för Flutter', 'about.viewLicensesDescription' => 'Visa licenser för tredjepartsbibliotek', - 'serverSelection.allServerConnectionsFailed' => 'Kunde inte ansluta till några servrar. Kontrollera nätverket.', 'serverSelection.noServersFoundForAccount' => ({required Object username, required Object email}) => 'Inga servrar hittades för ${username} (${email})', 'serverSelection.failedToLoadServers' => ({required Object error}) => 'Misslyckades att ladda servrar: ${error}', 'hubDetail.title' => 'Titel', @@ -2938,7 +2900,6 @@ extension on TranslationsSv { 'explore.watchlistUpdateFailed' => 'Det gick inte att uppdatera bevakningslistan', 'explore.notInLibrary' => 'Finns inte i ditt bibliotek', 'explore.inTheseLibraries' => 'I dessa bibliotek', - 'explore.availableOn' => ({required Object server}) => 'Tillgänglig på ${server}', 'explore.checkingLibrary' => 'Kontrollerar ditt bibliotek...', 'explore.emptyTitle' => 'Inget här ännu', 'explore.emptyMessage' => ({required Object source}) => 'Rader från ${source} visas här när de har innehåll.', @@ -2950,6 +2911,8 @@ extension on TranslationsSv { 'liveTv.guide' => 'Programguide', 'liveTv.noChannels' => 'Inga kanaler tillgängliga', 'liveTv.noDvr' => 'Ingen DVR konfigurerad på någon server', + 'liveTv.serverUnavailable' => 'Live-tv-servern är inte tillgänglig.', + 'liveTv.serverNotConnected' => 'Live-tv-servern är inte ansluten.', 'liveTv.noPrograms' => 'Ingen programdata tillgänglig', 'liveTv.liveStreamFailed' => 'Liveström misslyckades', 'liveTv.unknownProgram' => 'Okänt program', @@ -2985,7 +2948,6 @@ extension on TranslationsSv { 'liveTv.scheduledRecordings' => 'Schemalagda', 'liveTv.recordingRules' => 'Inspelningsregler', 'liveTv.noScheduledRecordings' => 'Inga schemalagda inspelningar', - 'liveTv.noRecordingRules' => 'Inga inspelningsregler än', 'liveTv.manageRecording' => 'Hantera inspelning', 'liveTv.cancelRecording' => 'Avbryt inspelning', 'liveTv.cancelRecordingTitle' => 'Avbryt denna inspelning?', @@ -3002,7 +2964,6 @@ extension on TranslationsSv { 'liveTv.recordingCancelled' => 'Inspelning avbruten', 'liveTv.recordingRuleDeleted' => 'Inspelningsregel borttagen', 'liveTv.processRecordingRules' => 'Utvärdera regler igen', - 'liveTv.loadingRecordings' => 'Laddar inspelningar ...', 'liveTv.recordingInProgress' => 'Spelar in nu', 'liveTv.recordingsCount' => ({required Object count}) => '${count} schemalagda', 'liveTv.editRule' => 'Redigera regel', @@ -3014,7 +2975,6 @@ extension on TranslationsSv { 'collections.title' => 'Samlingar', 'collections.collection' => 'Samling', 'collections.empty' => 'Samlingen är tom', - 'collections.unknownLibrarySection' => 'Kan inte ta bort: okänd bibliotekssektion', 'collections.deleteCollection' => 'Ta bort samling', 'collections.deleteConfirm' => ({required Object title}) => 'Ta bort "${title}"? Detta kan inte ångras.', 'collections.deleted' => 'Samling borttagen', @@ -3052,6 +3012,7 @@ extension on TranslationsSv { 'playlists.itemAdded' => 'Tillagd i spellista', 'playlists.itemRemoved' => 'Borttagen från spellista', 'playlists.selectPlaylist' => 'Välj spellista', + 'playlists.searchPlaylists' => 'Sök i spellistor...', 'playlists.errorCreating' => 'Det gick inte att skapa spellista', 'playlists.errorDeleting' => 'Det gick inte att ta bort spellista', 'playlists.errorLoading' => 'Det gick inte att ladda spellistor', @@ -3134,22 +3095,20 @@ extension on TranslationsSv { 'watchTogether.participantResumed' => ({required Object name}) => '${name} återupptog', 'watchTogether.participantSeeked' => ({required Object name}) => '${name} spolade', 'watchTogether.participantBuffering' => ({required Object name}) => '${name} buffrar', + 'watchTogether.participantNeedsUpdate' => ({required Object name}) => '${name} använder en äldre appversion — synkronisering är inte tillgänglig', + 'watchTogether.resumingWithout' => ({required Object name}) => 'Återupptar utan ${name}', 'watchTogether.waitingForParticipants' => 'Väntar på att andra laddar...', + 'watchTogether.waitingForName' => ({required Object name}) => 'Väntar på ${name}...', 'watchTogether.recentRooms' => 'Senaste rum', 'watchTogether.renameRoom' => 'Byt namn på rum', 'watchTogether.removeRoom' => 'Ta bort', 'watchTogether.guestSwitchUnavailable' => 'Kunde inte byta — server inte tillgänglig för synkronisering', 'watchTogether.guestSwitchFailed' => 'Kunde inte byta — innehåll hittades inte på denna server', - 'watchTogether.participantNeedsUpdate' => ({required Object name}) => '${name} använder en äldre appversion — synkronisering är inte tillgänglig', - 'watchTogether.resumingWithout' => ({required Object name}) => 'Återupptar utan ${name}', - 'watchTogether.waitingForName' => ({required Object name}) => 'Väntar på ${name}...', 'downloads.title' => 'Nedladdningar', 'downloads.manage' => 'Hantera', 'downloads.tvShows' => 'TV-serier', 'downloads.movies' => 'Filmer', 'downloads.music' => 'Musik', - _ => null, - } ?? switch (path) { 'downloads.tracksQueued' => ({required Object count}) => '${count} låtar i nedladdningskö', 'downloads.noDownloads' => 'Inga nedladdningar ännu', 'downloads.noDownloadsDescription' => 'Nedladdat innehåll visas här för offline-visning', @@ -3164,6 +3123,8 @@ extension on TranslationsSv { 'downloads.deleteConfirm' => ({required Object title}) => 'Ta bort "${title}" från den här enheten?', 'downloads.cancelledDownloadTitle' => 'Avbruten nedladdning', 'downloads.cancelledDownloadMessage' => 'Den här nedladdningen avbröts. Vad vill du göra?', + _ => null, + } ?? switch (path) { 'downloads.allEpisodesAlreadyDownloaded' => 'Alla avsnitt är redan nedladdade', 'downloads.resumeDownload' => 'Återuppta nedladdning', 'downloads.cancelledDownload' => 'Avbruten nedladdning', @@ -3187,7 +3148,6 @@ extension on TranslationsSv { 'downloads.customAmount' => 'Ange antal...', 'downloads.includeSpecials' => 'Inkludera specialavsnitt', 'downloads.howManyEpisodes' => 'Hur många avsnitt?', - 'downloads.itemsQueued' => ({required Object count}) => '${count} objekt köade för nedladdning', 'downloads.keepSynced' => 'Håll synkroniserad', 'downloads.downloadOnce' => 'Ladda ner en gång', 'downloads.keepNUnwatched' => ({required Object count}) => 'Behåll ${count} osedda', @@ -3231,7 +3191,6 @@ extension on TranslationsSv { 'companionRemote.connectedTo' => ({required Object name}) => 'Ansluten till ${name}', 'companionRemote.unknownDevice' => 'Okänd enhet', 'companionRemote.session.startingServer' => 'Startar fjärrserver...', - 'companionRemote.session.failedToCreate' => 'Kunde inte starta fjärrserver:', 'companionRemote.session.hostAddress' => 'Värdadress', 'companionRemote.session.connected' => 'Ansluten', 'companionRemote.session.serverRunning' => 'Fjärrserver aktiv', @@ -3286,6 +3245,8 @@ extension on TranslationsSv { 'companionRemote.remote.searchHint' => 'Sök på datorn...', 'companionRemote.errors.noNetworkInterface' => 'Inget nätverksgränssnitt hittades', 'companionRemote.errors.authenticationFailed' => 'Autentisering misslyckades', + 'companionRemote.errors.serverStartFailed' => ({required Object error}) => 'Det gick inte att starta fjärrservern: ${error}', + 'companionRemote.errors.commandFailed' => ({required Object error}) => 'Det gick inte att skicka fjärrkommandot: ${error}', 'companionRemote.errors.joinTimedOut' => 'Tidsgräns vid anslutning till session', 'companionRemote.errors.failedToConnectAnyAddress' => 'Kunde inte ansluta till någon adress', 'companionRemote.errors.connectionLostAfterAttempts' => ({required Object attempts}) => 'Anslutning förlorad efter ${attempts} försök', @@ -3530,7 +3491,6 @@ extension on TranslationsSv { 'addServer.quickConnectFailed' => ({required Object error}) => 'Quick Connect misslyckades: ${error}', 'addServer.addPlexTitle' => 'Logga in med Plex', 'addServer.pinExpired' => 'PIN-koden gick ut innan inloggning. Försök igen.', - 'addServer.duplicatePlexAccount' => 'Redan inloggad på Plex. Logga ut för att byta konto.', 'addServer.failedToRegisterAccount' => ({required Object error}) => 'Kunde inte registrera kontot: ${error}', 'addServer.enterJellyfinUrlError' => 'Ange URL till din Jellyfin-server', 'addServer.addConnectionTitle' => 'Lägg till anslutning', diff --git a/lib/i18n/strings_zh.g.dart b/lib/i18n/strings_zh.g.dart index ae924243..d92c34c4 100644 --- a/lib/i18n/strings_zh.g.dart +++ b/lib/i18n/strings_zh.g.dart @@ -53,7 +53,6 @@ class TranslationsZh extends Translations with BaseTranslations '登录'; @override String get signInWithPlex => '使用 Plex 登录'; @override String get showQRCode => '显示二维码'; @override String get authenticate => '验证'; @@ -167,10 +165,8 @@ class _TranslationsCommonZh extends TranslationsCommonEn { @override String episodeNumberTitle({required Object number, required Object title}) => '第${number}集 - ${title}'; @override String chapterNumber({required Object number}) => '章节 ${number}'; @override String get reconnect => '重新连接'; - @override String get exit => '退出'; @override String get viewAll => '查看全部'; @override String get checkingNetwork => '正在检查网络...'; - @override String get refreshingServers => '正在刷新服务器...'; @override String get loadingServers => '正在加载服务器...'; @override String get connectingToServers => '正在连接服务器...'; @override String get startingOfflineMode => '正在启动离线模式...'; @@ -271,6 +267,12 @@ class _TranslationsSettingsZh extends TranslationsSettingsEn { @override String get tvFullCardLayoutDescription => '使用仅显示图片的 TV 卡片,并叠加演员姓名'; @override String get focusGlow => '焦点光晕'; @override String get focusGlowDescription => '在获得焦点的卡片周围显示柔和的光晕'; + @override String get visualEffects => '视觉效果'; + @override String get visualEffectsAuto => '自动'; + @override String get visualEffectsAutoDescription => '在性能较低的设备上自动减少效果'; + @override String get visualEffectsFull => '完整'; + @override String get visualEffectsReduced => '简化'; + @override String get visualEffectsReducedDescription => '减少动画并使用较低分辨率的封面图片'; @override String get hideSpoilers => '隐藏未看剧集的剧透内容'; @override String get hideSpoilersDescription => '模糊未观看剧集的缩略图和描述'; @override String get playerBackend => '播放器引擎'; @@ -283,7 +285,7 @@ class _TranslationsSettingsZh extends TranslationsSettingsEn { @override String get bufferSizeAuto => '自动(推荐)'; @override String bufferSizeWarning({required Object heap, required Object size}) => '可用内存 ${heap}MB。${size}MB 缓冲可能影响播放。'; @override String get defaultQualityTitle => '默认画质'; - @override String get defaultQualityDescription => '开始播放时使用。较低的值可减少带宽。'; + @override String get musicQualityTitle => '音乐质量'; @override String get subtitleStyling => '字幕样式'; @override String get subtitleStylingDescription => '调整字幕外观'; @override String get smallSkipDuration => '短跳过时长'; @@ -377,10 +379,9 @@ class _TranslationsSettingsZh extends TranslationsSettingsEn { @override String maxVolumePercent({required Object percent}) => '${percent}%'; @override String get discordRichPresence => 'Discord 动态状态'; @override String get discordRichPresenceDescription => '在 Discord 上显示您正在观看的内容'; - @override String get trakt => 'Trakt'; - @override String get traktDescription => '将观看历史与 Trakt 同步'; @override String get services => '服务'; @override String get servicesDescription => '连接 Trakt、MyAnimeList、Seerr 等'; + @override String get manageLibrariesDescription => '重新排序和隐藏媒体库'; @override String get companionRemoteServer => '配套遥控服务器'; @override String get companionRemoteServerDescription => '允许网络上的移动设备控制此应用'; @override String get autoPip => '自动画中画'; @@ -443,7 +444,6 @@ class _TranslationsSettingsZh extends TranslationsSettingsEn { @override String get showNavBarLabels => '显示导航栏标签'; @override String get showNavBarLabelsDescription => '在导航栏图标下方显示文字标签'; @override String get startupSection => '启动页面'; - @override String get startupSectionDescription => '选择 Plezy 启动时打开的页面'; @override String get liveTvDefaultFavorites => '默认显示收藏频道'; @override String get liveTvDefaultFavoritesDescription => '打开直播电视时仅显示收藏频道'; @override String get display => '显示'; @@ -455,13 +455,6 @@ class _TranslationsSettingsZh extends TranslationsSettingsEn { @override String get subtitlesAndConfig => '字幕与配置'; @override String get seekAndTiming => '跳转与计时'; @override String get behavior => '行为'; - @override String get manageLibrariesDescription => '重新排序和隐藏媒体库'; - @override String get visualEffects => '视觉效果'; - @override String get visualEffectsAuto => '自动'; - @override String get visualEffectsAutoDescription => '在性能较低的设备上自动减少效果'; - @override String get visualEffectsFull => '完整'; - @override String get visualEffectsReduced => '简化'; - @override String get visualEffectsReducedDescription => '减少动画并使用较低分辨率的封面图片'; } // Path: search @@ -559,14 +552,11 @@ class _TranslationsRateSheetZh extends TranslationsRateSheetEn { // Translations @override String get title => '评分'; @override String get server => '服务器'; - @override String starValue({required Object rating}) => '${rating} / 5'; - @override String scoreValue({required Object score}) => '${score} / 10'; - @override String get setScore => '设置分数'; + @override String get favorite => '收藏'; + @override String get favorited => '已收藏'; @override String get saved => '已保存'; @override String get notAvailable => '未找到匹配项'; @override String get noConnectedServices => '在设置中连接服务,即可在此评分。'; - @override String get favorite => '收藏'; - @override String get favorited => '已收藏'; } // Path: accessibility @@ -584,6 +574,14 @@ class _TranslationsAccessibilityZh extends TranslationsAccessibilityEn { @override String mediaCardPartiallyWatched({required Object percent}) => '已观看 ${percent} 百分比'; @override String get mediaCardUnwatched => '未观看'; @override String get tapToPlay => '点击播放'; + @override String get decrease => '减小'; + @override String get increase => '增大'; + @override String decreaseValue({required Object label}) => '减小${label}'; + @override String increaseValue({required Object label}) => '增大${label}'; + @override String get hue => '色相'; + @override String get saturation => '饱和度'; + @override String get brightness => '亮度'; + @override String get hexColor => '十六进制颜色'; } // Path: tooltips @@ -643,13 +641,11 @@ class _TranslationsVideoControlsZh extends TranslationsVideoControlsEn { @override String get settingsButton => '播放设置'; @override String get tracksButton => '音频和字幕'; @override String get chaptersButton => '章节'; - @override String get versionsButton => '视频版本'; @override String get versionQualityButton => '版本与画质'; @override String get versionColumnHeader => '版本'; @override String get qualityColumnHeader => '画质'; @override String get qualityOriginal => '原始'; @override String qualityPresetLabel({required Object resolution, required Object bitrate}) => '${resolution}p ${bitrate} Mbps'; - @override String qualityBandwidthEstimate({required Object bitrate}) => '~${bitrate} Mbps'; @override String get transcodeUnavailableFallback => '转码不可用 — 以原始画质播放'; @override String get pipButton => '画中画模式'; @override String get aspectRatioButton => '宽高比'; @@ -685,19 +681,6 @@ class _TranslationsVideoControlsZh extends TranslationsVideoControlsEn { @override String get searchLanguages => '搜索语言...'; } -// Path: userStatus -class _TranslationsUserStatusZh extends TranslationsUserStatusEn { - _TranslationsUserStatusZh._(TranslationsZh root) : this._root = root, super.internal(root); - - final TranslationsZh _root; // ignore: unused_field - - // Translations - @override String get admin => '管理员'; - @override String get restricted => '受限'; - @override String get protected => '受保护'; - @override String get current => '当前'; -} - // Path: messages class _TranslationsMessagesZh extends TranslationsMessagesEn { _TranslationsMessagesZh._(TranslationsZh root) : this._root = root, super.internal(root); @@ -873,7 +856,6 @@ class _TranslationsProfilesZh extends TranslationsProfilesEn { @override String get pinExplain => '切换个人资料需要 4 位 PIN。'; @override String get continueButton => '继续'; @override String get pinsDontMatch => 'PIN 不匹配'; - @override String get initializeServicesFailed => '无法初始化个人资料服务'; } // Path: connections @@ -902,7 +884,6 @@ class _TranslationsDiscoverZh extends TranslationsDiscoverEn { // Translations @override String get title => '发现'; - @override String get switchProfile => '切换用户'; @override String get noContentAvailable => '没有可用内容'; @override String get addMediaToLibraries => '请向你的媒体库添加一些媒体'; @override String get continueWatching => '继续观看'; @@ -938,8 +919,6 @@ class _TranslationsErrorsZh extends TranslationsErrorsEn { @override String get connectionFailed => '无法连接到媒体服务器'; @override String failedToLoad({required Object context, required Object error}) => '无法加载 ${context}: ${error}'; @override String get noClientAvailable => '没有可用客户端'; - @override String authenticationFailed({required Object error}) => '验证失败: ${error}'; - @override String get couldNotLaunchUrl => '无法打开授权 URL'; @override String get pleaseEnterToken => '请输入一个令牌'; @override String get invalidToken => '令牌无效'; @override String failedToVerifyToken({required Object error}) => '无法验证令牌: ${error}'; @@ -973,6 +952,8 @@ class _TranslationsLibrariesZh extends TranslationsLibrariesEn { @override String get allLibrariesHidden => '所有媒体库已隐藏'; @override String hiddenLibrariesCount({required Object count}) => '已隐藏的媒体库 (${count})'; @override String get thisLibraryIsEmpty => '此媒体库为空'; + @override String get noItemsMatchFilters => '没有项目符合当前筛选条件'; + @override String get resetFilters => '重置筛选条件'; @override String get all => '全部'; @override String get clearAll => '全部清除'; @override String scanLibraryConfirm({required Object title}) => '确定要扫描 “${title}” 吗?'; @@ -998,8 +979,6 @@ class _TranslationsLibrariesZh extends TranslationsLibrariesEn { @override late final _TranslationsLibrariesGroupingsZh groupings = _TranslationsLibrariesGroupingsZh._(_root); @override late final _TranslationsLibrariesFilterCategoriesZh filterCategories = _TranslationsLibrariesFilterCategoriesZh._(_root); @override late final _TranslationsLibrariesSortLabelsZh sortLabels = _TranslationsLibrariesSortLabelsZh._(_root); - @override String get noItemsMatchFilters => '没有项目符合当前筛选条件'; - @override String get resetFilters => '重置筛选条件'; } // Path: about @@ -1023,7 +1002,6 @@ class _TranslationsServerSelectionZh extends TranslationsServerSelectionEn { final TranslationsZh _root; // ignore: unused_field // Translations - @override String get allServerConnectionsFailed => '无法连接到任何服务器。请检查网络。'; @override String noServersFoundForAccount({required Object username, required Object email}) => '未找到 ${username} (${email}) 的服务器'; @override String failedToLoadServers({required Object error}) => '无法加载服务器: ${error}'; } @@ -1101,7 +1079,6 @@ class _TranslationsExploreZh extends TranslationsExploreEn { @override String get watchlistUpdateFailed => '无法更新想看列表'; @override String get notInLibrary => '不在你的媒体库中'; @override String get inTheseLibraries => '在这些媒体库中'; - @override String availableOn({required Object server}) => '在 ${server} 上可用'; @override String get checkingLibrary => '正在检查你的媒体库...'; @override String get emptyTitle => '这里还什么都没有'; @override String emptyMessage({required Object source}) => '当 ${source} 有内容时,相关内容将显示在这里。'; @@ -1122,6 +1099,8 @@ class _TranslationsLiveTvZh extends TranslationsLiveTvEn { @override String get guide => '节目指南'; @override String get noChannels => '没有可用的频道'; @override String get noDvr => '没有服务器配置了DVR'; + @override String get serverUnavailable => '直播电视服务器不可用。'; + @override String get serverNotConnected => '直播电视服务器未连接。'; @override String get noPrograms => '没有可用的节目数据'; @override String get liveStreamFailed => '直播流失败'; @override String get unknownProgram => '未知节目'; @@ -1157,7 +1136,6 @@ class _TranslationsLiveTvZh extends TranslationsLiveTvEn { @override String get scheduledRecordings => '已安排'; @override String get recordingRules => '录制规则'; @override String get noScheduledRecordings => '没有安排的录制'; - @override String get noRecordingRules => '还没有录制规则'; @override String get manageRecording => '管理录制'; @override String get cancelRecording => '取消录制'; @override String get cancelRecordingTitle => '取消此次录制?'; @@ -1174,7 +1152,6 @@ class _TranslationsLiveTvZh extends TranslationsLiveTvEn { @override String get recordingCancelled => '录制已取消'; @override String get recordingRuleDeleted => '录制规则已删除'; @override String get processRecordingRules => '重新评估规则'; - @override String get loadingRecordings => '正在加载录制内容...'; @override String get recordingInProgress => '正在录制'; @override String recordingsCount({required Object count}) => '已安排 ${count} 个'; @override String get editRule => '编辑规则'; @@ -1195,7 +1172,6 @@ class _TranslationsCollectionsZh extends TranslationsCollectionsEn { @override String get title => '合集'; @override String get collection => '合集'; @override String get empty => '合集为空'; - @override String get unknownLibrarySection => '无法删除:未知的媒体库分区'; @override String get deleteCollection => '删除合集'; @override String deleteConfirm({required Object title}) => '要删除“${title}”吗?此操作无法撤销。'; @override String get deleted => '已删除合集'; @@ -1242,6 +1218,7 @@ class _TranslationsPlaylistsZh extends TranslationsPlaylistsEn { @override String get itemAdded => '已添加到播放列表'; @override String get itemRemoved => '已从播放列表中移除'; @override String get selectPlaylist => '选择播放列表'; + @override String get searchPlaylists => '搜索播放列表...'; @override String get errorCreating => '创建播放列表失败'; @override String get errorDeleting => '删除播放列表失败'; @override String get errorLoading => '加载播放列表失败'; @@ -1344,15 +1321,15 @@ class _TranslationsWatchTogetherZh extends TranslationsWatchTogetherEn { @override String participantResumed({required Object name}) => '${name} 继续播放了'; @override String participantSeeked({required Object name}) => '${name} 跳转了'; @override String participantBuffering({required Object name}) => '${name} 正在缓冲'; + @override String participantNeedsUpdate({required Object name}) => '${name} 正在使用较旧版本的应用,无法同步'; + @override String resumingWithout({required Object name}) => '不等待 ${name},继续播放'; @override String get waitingForParticipants => '等待其他人加载...'; + @override String waitingForName({required Object name}) => '正在等待 ${name}...'; @override String get recentRooms => '最近的房间'; @override String get renameRoom => '重命名房间'; @override String get removeRoom => '移除'; @override String get guestSwitchUnavailable => '无法切换 — 服务器无法同步'; @override String get guestSwitchFailed => '无法切换 — 在此服务器上未找到内容'; - @override String participantNeedsUpdate({required Object name}) => '${name} 正在使用较旧版本的应用,无法同步'; - @override String resumingWithout({required Object name}) => '不等待 ${name},继续播放'; - @override String waitingForName({required Object name}) => '正在等待 ${name}...'; } // Path: downloads @@ -1404,7 +1381,6 @@ class _TranslationsDownloadsZh extends TranslationsDownloadsEn { @override String get customAmount => '自定义数量...'; @override String get includeSpecials => '包含特别篇'; @override String get howManyEpisodes => '下载几集?'; - @override String itemsQueued({required Object count}) => '${count} 个项目已加入下载队列'; @override String get keepSynced => '保持同步'; @override String get downloadOnce => '下载一次'; @override String keepNUnwatched({required Object count}) => '保留${count}个未观看'; @@ -1778,7 +1754,6 @@ class _TranslationsAddServerZh extends TranslationsAddServerEn { @override String quickConnectFailed({required Object error}) => 'Quick Connect 失败: ${error}'; @override String get addPlexTitle => '使用 Plex 登录'; @override String get pinExpired => 'PIN 在登录前已过期。请重试。'; - @override String get duplicatePlexAccount => '已登录 Plex。请退出登录以切换账号。'; @override String failedToRegisterAccount({required Object error}) => '注册帐户失败: ${error}'; @override String get enterJellyfinUrlError => '输入你的 Jellyfin 服务器 URL'; @override String get addConnectionTitle => '添加连接'; @@ -1904,7 +1879,6 @@ class _TranslationsLibrariesSortLabelsZh extends TranslationsLibrariesSortLabels @override String get communityRating => '社区评分'; @override String get criticRating => '影评人评分'; @override String get userRating => '用户评分'; - @override String get lastPlayed => '最近播放'; @override String get datePlayed => '播放日期'; @override String get playCount => '播放次数'; @override String get productionYear => '制作年份'; @@ -1963,7 +1937,6 @@ class _TranslationsCompanionRemoteSessionZh extends TranslationsCompanionRemoteS // Translations @override String get startingServer => '正在启动远程服务器...'; - @override String get failedToCreate => '启动远程服务器失败:'; @override String get hostAddress => '主机地址'; @override String get connected => '已连接'; @override String get serverRunning => '远程服务器已启动'; @@ -2045,6 +2018,8 @@ class _TranslationsCompanionRemoteErrorsZh extends TranslationsCompanionRemoteEr // Translations @override String get noNetworkInterface => '未找到网络接口'; @override String get authenticationFailed => '身份验证失败'; + @override String serverStartFailed({required Object error}) => '无法启动远程服务器:${error}'; + @override String commandFailed({required Object error}) => '无法发送远程命令:${error}'; @override String get joinTimedOut => '加入会话超时'; @override String get failedToConnectAnyAddress => '无法连接到任何地址'; @override String connectionLostAfterAttempts({required Object attempts}) => '${attempts} 次尝试后连接丢失'; @@ -2121,7 +2096,6 @@ extension on TranslationsZh { dynamic _flatMapFunction(String path) { return switch (path) { 'app.title' => 'Plezy', - 'auth.signIn' => '登录', 'auth.signInWithPlex' => '使用 Plex 登录', 'auth.showQRCode' => '显示二维码', 'auth.authenticate' => '验证', @@ -2172,10 +2146,8 @@ extension on TranslationsZh { 'common.episodeNumberTitle' => ({required Object number, required Object title}) => '第${number}集 - ${title}', 'common.chapterNumber' => ({required Object number}) => '章节 ${number}', 'common.reconnect' => '重新连接', - 'common.exit' => '退出', 'common.viewAll' => '查看全部', 'common.checkingNetwork' => '正在检查网络...', - 'common.refreshingServers' => '正在刷新服务器...', 'common.loadingServers' => '正在加载服务器...', 'common.connectingToServers' => '正在连接服务器...', 'common.startingOfflineMode' => '正在启动离线模式...', @@ -2249,6 +2221,12 @@ extension on TranslationsZh { 'settings.tvFullCardLayoutDescription' => '使用仅显示图片的 TV 卡片,并叠加演员姓名', 'settings.focusGlow' => '焦点光晕', 'settings.focusGlowDescription' => '在获得焦点的卡片周围显示柔和的光晕', + 'settings.visualEffects' => '视觉效果', + 'settings.visualEffectsAuto' => '自动', + 'settings.visualEffectsAutoDescription' => '在性能较低的设备上自动减少效果', + 'settings.visualEffectsFull' => '完整', + 'settings.visualEffectsReduced' => '简化', + 'settings.visualEffectsReducedDescription' => '减少动画并使用较低分辨率的封面图片', 'settings.hideSpoilers' => '隐藏未看剧集的剧透内容', 'settings.hideSpoilersDescription' => '模糊未观看剧集的缩略图和描述', 'settings.playerBackend' => '播放器引擎', @@ -2261,7 +2239,7 @@ extension on TranslationsZh { 'settings.bufferSizeAuto' => '自动(推荐)', 'settings.bufferSizeWarning' => ({required Object heap, required Object size}) => '可用内存 ${heap}MB。${size}MB 缓冲可能影响播放。', 'settings.defaultQualityTitle' => '默认画质', - 'settings.defaultQualityDescription' => '开始播放时使用。较低的值可减少带宽。', + 'settings.musicQualityTitle' => '音乐质量', 'settings.subtitleStyling' => '字幕样式', 'settings.subtitleStylingDescription' => '调整字幕外观', 'settings.smallSkipDuration' => '短跳过时长', @@ -2355,10 +2333,9 @@ extension on TranslationsZh { 'settings.maxVolumePercent' => ({required Object percent}) => '${percent}%', 'settings.discordRichPresence' => 'Discord 动态状态', 'settings.discordRichPresenceDescription' => '在 Discord 上显示您正在观看的内容', - 'settings.trakt' => 'Trakt', - 'settings.traktDescription' => '将观看历史与 Trakt 同步', 'settings.services' => '服务', 'settings.servicesDescription' => '连接 Trakt、MyAnimeList、Seerr 等', + 'settings.manageLibrariesDescription' => '重新排序和隐藏媒体库', 'settings.companionRemoteServer' => '配套遥控服务器', 'settings.companionRemoteServerDescription' => '允许网络上的移动设备控制此应用', 'settings.autoPip' => '自动画中画', @@ -2421,7 +2398,6 @@ extension on TranslationsZh { 'settings.showNavBarLabels' => '显示导航栏标签', 'settings.showNavBarLabelsDescription' => '在导航栏图标下方显示文字标签', 'settings.startupSection' => '启动页面', - 'settings.startupSectionDescription' => '选择 Plezy 启动时打开的页面', 'settings.liveTvDefaultFavorites' => '默认显示收藏频道', 'settings.liveTvDefaultFavoritesDescription' => '打开直播电视时仅显示收藏频道', 'settings.display' => '显示', @@ -2433,13 +2409,6 @@ extension on TranslationsZh { 'settings.subtitlesAndConfig' => '字幕与配置', 'settings.seekAndTiming' => '跳转与计时', 'settings.behavior' => '行为', - 'settings.manageLibrariesDescription' => '重新排序和隐藏媒体库', - 'settings.visualEffects' => '视觉效果', - 'settings.visualEffectsAuto' => '自动', - 'settings.visualEffectsAutoDescription' => '在性能较低的设备上自动减少效果', - 'settings.visualEffectsFull' => '完整', - 'settings.visualEffectsReduced' => '简化', - 'settings.visualEffectsReducedDescription' => '减少动画并使用较低分辨率的封面图片', 'search.hint' => '搜索电影、系列、音乐...', 'search.tryDifferentTerm' => '尝试不同的搜索词', 'search.searchYourMedia' => '搜索媒体', @@ -2516,14 +2485,11 @@ extension on TranslationsZh { 'mediaMenu.playVersion' => '播放版本...', 'rateSheet.title' => '评分', 'rateSheet.server' => '服务器', - 'rateSheet.starValue' => ({required Object rating}) => '${rating} / 5', - 'rateSheet.scoreValue' => ({required Object score}) => '${score} / 10', - 'rateSheet.setScore' => '设置分数', + 'rateSheet.favorite' => '收藏', + 'rateSheet.favorited' => '已收藏', 'rateSheet.saved' => '已保存', 'rateSheet.notAvailable' => '未找到匹配项', 'rateSheet.noConnectedServices' => '在设置中连接服务,即可在此评分。', - 'rateSheet.favorite' => '收藏', - 'rateSheet.favorited' => '已收藏', 'accessibility.mediaCardMovie' => ({required Object title}) => '${title}, 电影', 'accessibility.mediaCardShow' => ({required Object title}) => '${title}, 电视剧', 'accessibility.mediaCardEpisode' => ({required Object title, required Object episodeInfo}) => '${title}, ${episodeInfo}', @@ -2532,6 +2498,14 @@ extension on TranslationsZh { 'accessibility.mediaCardPartiallyWatched' => ({required Object percent}) => '已观看 ${percent} 百分比', 'accessibility.mediaCardUnwatched' => '未观看', 'accessibility.tapToPlay' => '点击播放', + 'accessibility.decrease' => '减小', + 'accessibility.increase' => '增大', + 'accessibility.decreaseValue' => ({required Object label}) => '减小${label}', + 'accessibility.increaseValue' => ({required Object label}) => '增大${label}', + 'accessibility.hue' => '色相', + 'accessibility.saturation' => '饱和度', + 'accessibility.brightness' => '亮度', + 'accessibility.hexColor' => '十六进制颜色', 'tooltips.shufflePlay' => '随机播放', 'tooltips.playTrailer' => '播放预告片', 'tooltips.markAsWatched' => '标记为已观看', @@ -2573,13 +2547,11 @@ extension on TranslationsZh { 'videoControls.settingsButton' => '播放设置', 'videoControls.tracksButton' => '音频和字幕', 'videoControls.chaptersButton' => '章节', - 'videoControls.versionsButton' => '视频版本', 'videoControls.versionQualityButton' => '版本与画质', 'videoControls.versionColumnHeader' => '版本', 'videoControls.qualityColumnHeader' => '画质', 'videoControls.qualityOriginal' => '原始', 'videoControls.qualityPresetLabel' => ({required Object resolution, required Object bitrate}) => '${resolution}p ${bitrate} Mbps', - 'videoControls.qualityBandwidthEstimate' => ({required Object bitrate}) => '~${bitrate} Mbps', 'videoControls.transcodeUnavailableFallback' => '转码不可用 — 以原始画质播放', 'videoControls.pipButton' => '画中画模式', 'videoControls.aspectRatioButton' => '宽高比', @@ -2619,10 +2591,6 @@ extension on TranslationsZh { 'videoControls.subtitleDownloaded' => '字幕已下载', 'videoControls.subtitleDownloadFailed' => '字幕下载失败', 'videoControls.searchLanguages' => '搜索语言...', - 'userStatus.admin' => '管理员', - 'userStatus.restricted' => '受限', - 'userStatus.protected' => '受保护', - 'userStatus.current' => '当前', 'messages.markedAsWatched' => '已标记为已观看', 'messages.markedAsUnwatched' => '已标记为未观看', 'messages.markedAsWatchedOffline' => '已标记为已观看 (将在联网时同步)', @@ -2632,8 +2600,6 @@ extension on TranslationsZh { 'messages.errorLoading' => ({required Object error}) => '错误: ${error}', 'messages.streamInterrupted' => '视频流已中断。按播放键或拖动进度条重试。', 'messages.fileInfoNotAvailable' => '文件信息不可用', - _ => null, - } ?? switch (path) { 'messages.errorLoadingFileInfo' => ({required Object error}) => '加载文件信息时出错: ${error}', 'messages.errorLoadingSeries' => '加载系列时出错', 'messages.musicNotSupported' => '尚不支持播放音乐', @@ -2641,6 +2607,8 @@ extension on TranslationsZh { 'messages.noProfilesAvailable' => '没有可用的用户', 'messages.contactAdminForProfiles' => '请联系服务器管理员添加用户配置', 'messages.unableToDetermineLibrarySection' => '无法确定此项目的库分区', + _ => null, + } ?? switch (path) { 'messages.logsCleared' => '日志已清除', 'messages.logsCopied' => '日志已复制到剪贴板', 'messages.noLogsAvailable' => '没有可用日志', @@ -2757,7 +2725,6 @@ extension on TranslationsZh { 'profiles.pinExplain' => '切换个人资料需要 4 位 PIN。', 'profiles.continueButton' => '继续', 'profiles.pinsDontMatch' => 'PIN 不匹配', - 'profiles.initializeServicesFailed' => '无法初始化个人资料服务', 'connections.sectionTitle' => '连接', 'connections.addConnection' => '添加连接', 'connections.addConnectionSubtitleNoProfile' => '使用 Plex 登录或连接 Jellyfin 服务器', @@ -2768,7 +2735,6 @@ extension on TranslationsZh { 'connections.editJellyfinTitle' => '编辑 Jellyfin 连接', 'connections.editJellyfinIntro' => ({required Object serverName}) => '添加或移除 ${serverName} 的 URL。Plezy 会使用可访问且延迟最低的 URL。', 'discover.title' => '发现', - 'discover.switchProfile' => '切换用户', 'discover.noContentAvailable' => '没有可用内容', 'discover.addMediaToLibraries' => '请向你的媒体库添加一些媒体', 'discover.continueWatching' => '继续观看', @@ -2795,8 +2761,6 @@ extension on TranslationsZh { 'errors.connectionFailed' => '无法连接到媒体服务器', 'errors.failedToLoad' => ({required Object context, required Object error}) => '无法加载 ${context}: ${error}', 'errors.noClientAvailable' => '没有可用客户端', - 'errors.authenticationFailed' => ({required Object error}) => '验证失败: ${error}', - 'errors.couldNotLaunchUrl' => '无法打开授权 URL', 'errors.pleaseEnterToken' => '请输入一个令牌', 'errors.invalidToken' => '令牌无效', 'errors.failedToVerifyToken' => ({required Object error}) => '无法验证令牌: ${error}', @@ -2821,6 +2785,8 @@ extension on TranslationsZh { 'libraries.allLibrariesHidden' => '所有媒体库已隐藏', 'libraries.hiddenLibrariesCount' => ({required Object count}) => '已隐藏的媒体库 (${count})', 'libraries.thisLibraryIsEmpty' => '此媒体库为空', + 'libraries.noItemsMatchFilters' => '没有项目符合当前筛选条件', + 'libraries.resetFilters' => '重置筛选条件', 'libraries.all' => '全部', 'libraries.clearAll' => '全部清除', 'libraries.scanLibraryConfirm' => ({required Object title}) => '确定要扫描 “${title}” 吗?', @@ -2869,7 +2835,6 @@ extension on TranslationsZh { 'libraries.sortLabels.communityRating' => '社区评分', 'libraries.sortLabels.criticRating' => '影评人评分', 'libraries.sortLabels.userRating' => '用户评分', - 'libraries.sortLabels.lastPlayed' => '最近播放', 'libraries.sortLabels.datePlayed' => '播放日期', 'libraries.sortLabels.playCount' => '播放次数', 'libraries.sortLabels.productionYear' => '制作年份', @@ -2883,14 +2848,11 @@ extension on TranslationsZh { 'libraries.sortLabels.dateShared' => '共享日期', 'libraries.sortLabels.latestEpisodeAirDate' => '最新一集播出日期', 'libraries.sortLabels.lastEpisodeDateAdded' => '最新一集添加日期', - 'libraries.noItemsMatchFilters' => '没有项目符合当前筛选条件', - 'libraries.resetFilters' => '重置筛选条件', 'about.title' => '关于', 'about.openSourceLicenses' => '开源许可证', 'about.versionLabel' => ({required Object version}) => '版本 ${version}', 'about.appDescription' => '一款精美的 Flutter Plex 和 Jellyfin 客户端', 'about.viewLicensesDescription' => '查看第三方库的许可证', - 'serverSelection.allServerConnectionsFailed' => '无法连接到任何服务器。请检查网络。', 'serverSelection.noServersFoundForAccount' => ({required Object username, required Object email}) => '未找到 ${username} (${email}) 的服务器', 'serverSelection.failedToLoadServers' => ({required Object error}) => '无法加载服务器: ${error}', 'hubDetail.title' => '标题', @@ -2936,7 +2898,6 @@ extension on TranslationsZh { 'explore.watchlistUpdateFailed' => '无法更新想看列表', 'explore.notInLibrary' => '不在你的媒体库中', 'explore.inTheseLibraries' => '在这些媒体库中', - 'explore.availableOn' => ({required Object server}) => '在 ${server} 上可用', 'explore.checkingLibrary' => '正在检查你的媒体库...', 'explore.emptyTitle' => '这里还什么都没有', 'explore.emptyMessage' => ({required Object source}) => '当 ${source} 有内容时,相关内容将显示在这里。', @@ -2948,6 +2909,8 @@ extension on TranslationsZh { 'liveTv.guide' => '节目指南', 'liveTv.noChannels' => '没有可用的频道', 'liveTv.noDvr' => '没有服务器配置了DVR', + 'liveTv.serverUnavailable' => '直播电视服务器不可用。', + 'liveTv.serverNotConnected' => '直播电视服务器未连接。', 'liveTv.noPrograms' => '没有可用的节目数据', 'liveTv.liveStreamFailed' => '直播流失败', 'liveTv.unknownProgram' => '未知节目', @@ -2983,7 +2946,6 @@ extension on TranslationsZh { 'liveTv.scheduledRecordings' => '已安排', 'liveTv.recordingRules' => '录制规则', 'liveTv.noScheduledRecordings' => '没有安排的录制', - 'liveTv.noRecordingRules' => '还没有录制规则', 'liveTv.manageRecording' => '管理录制', 'liveTv.cancelRecording' => '取消录制', 'liveTv.cancelRecordingTitle' => '取消此次录制?', @@ -3000,7 +2962,6 @@ extension on TranslationsZh { 'liveTv.recordingCancelled' => '录制已取消', 'liveTv.recordingRuleDeleted' => '录制规则已删除', 'liveTv.processRecordingRules' => '重新评估规则', - 'liveTv.loadingRecordings' => '正在加载录制内容...', 'liveTv.recordingInProgress' => '正在录制', 'liveTv.recordingsCount' => ({required Object count}) => '已安排 ${count} 个', 'liveTv.editRule' => '编辑规则', @@ -3012,7 +2973,6 @@ extension on TranslationsZh { 'collections.title' => '合集', 'collections.collection' => '合集', 'collections.empty' => '合集为空', - 'collections.unknownLibrarySection' => '无法删除:未知的媒体库分区', 'collections.deleteCollection' => '删除合集', 'collections.deleteConfirm' => ({required Object title}) => '要删除“${title}”吗?此操作无法撤销。', 'collections.deleted' => '已删除合集', @@ -3050,6 +3010,7 @@ extension on TranslationsZh { 'playlists.itemAdded' => '已添加到播放列表', 'playlists.itemRemoved' => '已从播放列表中移除', 'playlists.selectPlaylist' => '选择播放列表', + 'playlists.searchPlaylists' => '搜索播放列表...', 'playlists.errorCreating' => '创建播放列表失败', 'playlists.errorDeleting' => '删除播放列表失败', 'playlists.errorLoading' => '加载播放列表失败', @@ -3132,22 +3093,20 @@ extension on TranslationsZh { 'watchTogether.participantResumed' => ({required Object name}) => '${name} 继续播放了', 'watchTogether.participantSeeked' => ({required Object name}) => '${name} 跳转了', 'watchTogether.participantBuffering' => ({required Object name}) => '${name} 正在缓冲', + 'watchTogether.participantNeedsUpdate' => ({required Object name}) => '${name} 正在使用较旧版本的应用,无法同步', + 'watchTogether.resumingWithout' => ({required Object name}) => '不等待 ${name},继续播放', 'watchTogether.waitingForParticipants' => '等待其他人加载...', + 'watchTogether.waitingForName' => ({required Object name}) => '正在等待 ${name}...', 'watchTogether.recentRooms' => '最近的房间', 'watchTogether.renameRoom' => '重命名房间', 'watchTogether.removeRoom' => '移除', 'watchTogether.guestSwitchUnavailable' => '无法切换 — 服务器无法同步', 'watchTogether.guestSwitchFailed' => '无法切换 — 在此服务器上未找到内容', - 'watchTogether.participantNeedsUpdate' => ({required Object name}) => '${name} 正在使用较旧版本的应用,无法同步', - 'watchTogether.resumingWithout' => ({required Object name}) => '不等待 ${name},继续播放', - 'watchTogether.waitingForName' => ({required Object name}) => '正在等待 ${name}...', 'downloads.title' => '下载', 'downloads.manage' => '管理', 'downloads.tvShows' => '电视剧', 'downloads.movies' => '电影', 'downloads.music' => '音乐', - _ => null, - } ?? switch (path) { 'downloads.tracksQueued' => ({required Object count}) => '${count} 首曲目已加入下载队列', 'downloads.noDownloads' => '暂无下载', 'downloads.noDownloadsDescription' => '下载的内容将在此处显示以供离线观看', @@ -3162,6 +3121,8 @@ extension on TranslationsZh { 'downloads.deleteConfirm' => ({required Object title}) => '要从此设备删除“${title}”吗?', 'downloads.cancelledDownloadTitle' => '已取消的下载', 'downloads.cancelledDownloadMessage' => '此下载已取消。你想怎么做?', + _ => null, + } ?? switch (path) { 'downloads.allEpisodesAlreadyDownloaded' => '所有剧集均已下载', 'downloads.resumeDownload' => '继续下载', 'downloads.cancelledDownload' => '已取消的下载', @@ -3185,7 +3146,6 @@ extension on TranslationsZh { 'downloads.customAmount' => '自定义数量...', 'downloads.includeSpecials' => '包含特别篇', 'downloads.howManyEpisodes' => '下载几集?', - 'downloads.itemsQueued' => ({required Object count}) => '${count} 个项目已加入下载队列', 'downloads.keepSynced' => '保持同步', 'downloads.downloadOnce' => '下载一次', 'downloads.keepNUnwatched' => ({required Object count}) => '保留${count}个未观看', @@ -3229,7 +3189,6 @@ extension on TranslationsZh { 'companionRemote.connectedTo' => ({required Object name}) => '已连接到 ${name}', 'companionRemote.unknownDevice' => '未知设备', 'companionRemote.session.startingServer' => '正在启动远程服务器...', - 'companionRemote.session.failedToCreate' => '启动远程服务器失败:', 'companionRemote.session.hostAddress' => '主机地址', 'companionRemote.session.connected' => '已连接', 'companionRemote.session.serverRunning' => '远程服务器已启动', @@ -3284,6 +3243,8 @@ extension on TranslationsZh { 'companionRemote.remote.searchHint' => '在桌面上搜索...', 'companionRemote.errors.noNetworkInterface' => '未找到网络接口', 'companionRemote.errors.authenticationFailed' => '身份验证失败', + 'companionRemote.errors.serverStartFailed' => ({required Object error}) => '无法启动远程服务器:${error}', + 'companionRemote.errors.commandFailed' => ({required Object error}) => '无法发送远程命令:${error}', 'companionRemote.errors.joinTimedOut' => '加入会话超时', 'companionRemote.errors.failedToConnectAnyAddress' => '无法连接到任何地址', 'companionRemote.errors.connectionLostAfterAttempts' => ({required Object attempts}) => '${attempts} 次尝试后连接丢失', @@ -3528,7 +3489,6 @@ extension on TranslationsZh { 'addServer.quickConnectFailed' => ({required Object error}) => 'Quick Connect 失败: ${error}', 'addServer.addPlexTitle' => '使用 Plex 登录', 'addServer.pinExpired' => 'PIN 在登录前已过期。请重试。', - 'addServer.duplicatePlexAccount' => '已登录 Plex。请退出登录以切换账号。', 'addServer.failedToRegisterAccount' => ({required Object error}) => '注册帐户失败: ${error}', 'addServer.enterJellyfinUrlError' => '输入你的 Jellyfin 服务器 URL', 'addServer.addConnectionTitle' => '添加连接', diff --git a/lib/i18n/sv.i18n.json b/lib/i18n/sv.i18n.json index 47c66f77..1daf0bed 100644 --- a/lib/i18n/sv.i18n.json +++ b/lib/i18n/sv.i18n.json @@ -3,7 +3,6 @@ "title": "Plezy" }, "auth": { - "signIn": "Logga in", "signInWithPlex": "Logga in med Plex", "showQRCode": "Visa QR-kod", "authenticate": "Autentisera", @@ -56,10 +55,8 @@ "episodeNumberTitle": "Avsnitt ${number} - ${title}", "chapterNumber": "Kapitel ${number}", "reconnect": "Återanslut", - "exit": "Avsluta", "viewAll": "Visa alla", "checkingNetwork": "Kontrollerar nätverk...", - "refreshingServers": "Uppdaterar servrar...", "loadingServers": "Laddar servrar...", "connectingToServers": "Ansluter till servrar...", "startingOfflineMode": "Startar offlineläge...", @@ -139,6 +136,12 @@ "tvFullCardLayoutDescription": "Använd TV-kort med enbart bild och skådespelarnamn ovanpå", "focusGlow": "Fokusglöd", "focusGlowDescription": "Visa en mjuk glöd runt kortet i fokus", + "visualEffects": "Visuella effekter", + "visualEffectsAuto": "Automatiskt", + "visualEffectsAutoDescription": "Minska effekter automatiskt på enheter med låg effekt", + "visualEffectsFull": "Fullständiga", + "visualEffectsReduced": "Minskade", + "visualEffectsReducedDescription": "Färre animationer och grafik med lägre upplösning", "hideSpoilers": "Dölj spoilers för osedda avsnitt", "hideSpoilersDescription": "Sudda miniatyrbilder och beskrivningar för osedda avsnitt", "playerBackend": "Spelarmotor", @@ -151,7 +154,7 @@ "bufferSizeAuto": "Auto (Rekommenderat)", "bufferSizeWarning": "${heap}MB minne tillgängligt. En buffert på ${size}MB kan påverka uppspelningen.", "defaultQualityTitle": "Standardkvalitet", - "defaultQualityDescription": "Används vid start av uppspelning. Lägre värden minskar bandbredden.", + "musicQualityTitle": "Musikkvalitet", "subtitleStyling": "Undertext-styling", "subtitleStylingDescription": "Anpassa undertextutseende", "smallSkipDuration": "Kort hoppvaraktighet", @@ -245,10 +248,9 @@ "maxVolumePercent": "${percent}%", "discordRichPresence": "Discord Rich Presence", "discordRichPresenceDescription": "Visa vad du tittar på i Discord", - "trakt": "Trakt", - "traktDescription": "Synkronisera visningshistorik med Trakt", "services": "Tjänster", "servicesDescription": "Anslut Trakt, MyAnimeList, Seerr med mera", + "manageLibrariesDescription": "Ordna om och dölj bibliotek", "companionRemoteServer": "Companion Remote-server", "companionRemoteServerDescription": "Tillåt mobila enheter i ditt nätverk att styra denna app", "autoPip": "Automatisk bild-i-bild", @@ -311,7 +313,6 @@ "showNavBarLabels": "Visa navigeringsfältets etiketter", "showNavBarLabelsDescription": "Visa textetiketter under navigeringsfältets ikoner", "startupSection": "Startsektion", - "startupSectionDescription": "Välj vilken sektion Plezy öppnar vid start", "liveTvDefaultFavorites": "Standard till favoritkanaler", "liveTvDefaultFavoritesDescription": "Visa bara favoritkanaler när du öppnar Live TV", "display": "Skärm", @@ -322,14 +323,7 @@ "player": "Spelare", "subtitlesAndConfig": "Undertexter och konfiguration", "seekAndTiming": "Sök och timing", - "behavior": "Beteende", - "manageLibrariesDescription": "Ordna om och dölj bibliotek", - "visualEffects": "Visuella effekter", - "visualEffectsAuto": "Automatiskt", - "visualEffectsAutoDescription": "Minska effekter automatiskt på enheter med låg effekt", - "visualEffectsFull": "Fullständiga", - "visualEffectsReduced": "Minskade", - "visualEffectsReducedDescription": "Färre animationer och grafik med lägre upplösning" + "behavior": "Beteende" }, "search": { "hint": "Sök filmer, serier, musik...", @@ -418,14 +412,11 @@ "rateSheet": { "title": "Betygsätt", "server": "Server", - "starValue": "${rating} / 5", - "scoreValue": "${score} / 10", - "setScore": "Ange betyg", + "favorite": "Favorit", + "favorited": "Tillagd i favoriter", "saved": "Sparat", "notAvailable": "Ingen matchning hittades", - "noConnectedServices": "Anslut en tjänst i Inställningar för att betygsätta där.", - "favorite": "Favorit", - "favorited": "Tillagd i favoriter" + "noConnectedServices": "Anslut en tjänst i Inställningar för att betygsätta där." }, "accessibility": { "mediaCardMovie": "${title}, film", @@ -435,7 +426,15 @@ "mediaCardWatched": "sedd", "mediaCardPartiallyWatched": "${percent} procent sedd", "mediaCardUnwatched": "osedd", - "tapToPlay": "Tryck för att spela" + "tapToPlay": "Tryck för att spela", + "decrease": "Minska", + "increase": "Öka", + "decreaseValue": "Minska ${label}", + "increaseValue": "Öka ${label}", + "hue": "Nyans", + "saturation": "Mättnad", + "brightness": "Ljusstyrka", + "hexColor": "Hexfärg" }, "tooltips": { "shufflePlay": "Blanda uppspelning", @@ -481,13 +480,11 @@ "settingsButton": "Uppspelningsinställningar", "tracksButton": "Ljud och undertexter", "chaptersButton": "Kapitel", - "versionsButton": "Videoversioner", "versionQualityButton": "Version och kvalitet", "versionColumnHeader": "Version", "qualityColumnHeader": "Kvalitet", "qualityOriginal": "Original", "qualityPresetLabel": "${resolution}p ${bitrate} Mbps", - "qualityBandwidthEstimate": "~${bitrate} Mbps", "transcodeUnavailableFallback": "Transkodning otillgänglig — spelar upp i originalkvalitet", "pipButton": "Bild-i-bild läge", "aspectRatioButton": "Bildförhållande", @@ -530,12 +527,7 @@ "subtitleDownloadFailed": "Kunde inte ladda ner undertext", "searchLanguages": "Sök språk..." }, - "userStatus": { - "admin": "Admin", - "restricted": "Begränsad", - "protected": "Skyddad", - "current": "NUVARANDE" - }, + "userStatus": {}, "messages": { "markedAsWatched": "Markerad som sedd", "markedAsUnwatched": "Markerad som osedd", @@ -676,8 +668,7 @@ "pinProtectionOptional": "PIN-skydd (valfritt)", "pinExplain": "4-siffrig PIN krävs för att byta profiler.", "continueButton": "Fortsätt", - "pinsDontMatch": "PIN-koderna stämmer inte överens", - "initializeServicesFailed": "Kunde inte initiera profiltjänster" + "pinsDontMatch": "PIN-koderna stämmer inte överens" }, "connections": { "sectionTitle": "Anslutningar", @@ -692,7 +683,6 @@ }, "discover": { "title": "Upptäck", - "switchProfile": "Byt profil", "noContentAvailable": "Inget innehåll tillgängligt", "addMediaToLibraries": "Lägg till media till dina bibliotek", "continueWatching": "Fortsätt titta", @@ -721,8 +711,6 @@ "connectionFailed": "Kan inte ansluta till mediaserver", "failedToLoad": "Misslyckades att ladda ${context}: ${error}", "noClientAvailable": "Ingen klient tillgänglig", - "authenticationFailed": "Autentisering misslyckades: ${error}", - "couldNotLaunchUrl": "Kunde inte öppna autentiserings-URL", "pleaseEnterToken": "Vänligen ange en token", "invalidToken": "Ogiltig token", "failedToVerifyToken": "Misslyckades att verifiera token: ${error}", @@ -749,6 +737,8 @@ "allLibrariesHidden": "Alla bibliotek är dolda", "hiddenLibrariesCount": "Dolda bibliotek (${count})", "thisLibraryIsEmpty": "Detta bibliotek är tomt", + "noItemsMatchFilters": "Inga objekt matchar de aktiva filtren", + "resetFilters": "Återställ filter", "all": "Alla", "clearAll": "Rensa alla", "scanLibraryConfirm": "Är du säker på att du vill skanna \"${title}\"?", @@ -804,7 +794,6 @@ "communityRating": "Användarbetyg", "criticRating": "Kritikerbetyg", "userRating": "Användarbetyg", - "lastPlayed": "Senast spelad", "datePlayed": "Speldatum", "playCount": "Antal spelningar", "productionYear": "Produktionsår", @@ -818,9 +807,7 @@ "dateShared": "Delningsdatum", "latestEpisodeAirDate": "Senaste avsnittets sändningsdatum", "lastEpisodeDateAdded": "Datum då senaste avsnittet lades till" - }, - "noItemsMatchFilters": "Inga objekt matchar de aktiva filtren", - "resetFilters": "Återställ filter" + } }, "about": { "title": "Om", @@ -830,7 +817,6 @@ "viewLicensesDescription": "Visa licenser för tredjepartsbibliotek" }, "serverSelection": { - "allServerConnectionsFailed": "Kunde inte ansluta till några servrar. Kontrollera nätverket.", "noServersFoundForAccount": "Inga servrar hittades för ${username} (${email})", "failedToLoadServers": "Misslyckades att ladda servrar: ${error}" }, @@ -893,7 +879,6 @@ "watchlistUpdateFailed": "Det gick inte att uppdatera bevakningslistan", "notInLibrary": "Finns inte i ditt bibliotek", "inTheseLibraries": "I dessa bibliotek", - "availableOn": "Tillgänglig på ${server}", "checkingLibrary": "Kontrollerar ditt bibliotek...", "emptyTitle": "Inget här ännu", "emptyMessage": "Rader från ${source} visas här när de har innehåll.", @@ -907,6 +892,8 @@ "guide": "Programguide", "noChannels": "Inga kanaler tillgängliga", "noDvr": "Ingen DVR konfigurerad på någon server", + "serverUnavailable": "Live-tv-servern är inte tillgänglig.", + "serverNotConnected": "Live-tv-servern är inte ansluten.", "noPrograms": "Ingen programdata tillgänglig", "liveStreamFailed": "Liveström misslyckades", "unknownProgram": "Okänt program", @@ -942,7 +929,6 @@ "scheduledRecordings": "Schemalagda", "recordingRules": "Inspelningsregler", "noScheduledRecordings": "Inga schemalagda inspelningar", - "noRecordingRules": "Inga inspelningsregler än", "manageRecording": "Hantera inspelning", "cancelRecording": "Avbryt inspelning", "cancelRecordingTitle": "Avbryt denna inspelning?", @@ -959,7 +945,6 @@ "recordingCancelled": "Inspelning avbruten", "recordingRuleDeleted": "Inspelningsregel borttagen", "processRecordingRules": "Utvärdera regler igen", - "loadingRecordings": "Laddar inspelningar ...", "recordingInProgress": "Spelar in nu", "recordingsCount": "${count} schemalagda", "editRule": "Redigera regel", @@ -973,7 +958,6 @@ "title": "Samlingar", "collection": "Samling", "empty": "Samlingen är tom", - "unknownLibrarySection": "Kan inte ta bort: okänd bibliotekssektion", "deleteCollection": "Ta bort samling", "deleteConfirm": "Ta bort \"${title}\"? Detta kan inte ångras.", "deleted": "Samling borttagen", @@ -1013,6 +997,7 @@ "itemAdded": "Tillagd i spellista", "itemRemoved": "Borttagen från spellista", "selectPlaylist": "Välj spellista", + "searchPlaylists": "Sök i spellistor...", "errorCreating": "Det gick inte att skapa spellista", "errorDeleting": "Det gick inte att ta bort spellista", "errorLoading": "Det gick inte att ladda spellistor", @@ -1102,15 +1087,15 @@ "participantResumed": "${name} återupptog", "participantSeeked": "${name} spolade", "participantBuffering": "${name} buffrar", + "participantNeedsUpdate": "${name} använder en äldre appversion — synkronisering är inte tillgänglig", + "resumingWithout": "Återupptar utan ${name}", "waitingForParticipants": "Väntar på att andra laddar...", + "waitingForName": "Väntar på ${name}...", "recentRooms": "Senaste rum", "renameRoom": "Byt namn på rum", "removeRoom": "Ta bort", "guestSwitchUnavailable": "Kunde inte byta — server inte tillgänglig för synkronisering", - "guestSwitchFailed": "Kunde inte byta — innehåll hittades inte på denna server", - "participantNeedsUpdate": "${name} använder en äldre appversion — synkronisering är inte tillgänglig", - "resumingWithout": "Återupptar utan ${name}", - "waitingForName": "Väntar på ${name}..." + "guestSwitchFailed": "Kunde inte byta — innehåll hittades inte på denna server" }, "downloads": { "title": "Nedladdningar", @@ -1155,7 +1140,6 @@ "customAmount": "Ange antal...", "includeSpecials": "Inkludera specialavsnitt", "howManyEpisodes": "Hur många avsnitt?", - "itemsQueued": "${count} objekt köade för nedladdning", "keepSynced": "Håll synkroniserad", "downloadOnce": "Ladda ner en gång", "keepNUnwatched": "Behåll ${count} osedda", @@ -1204,7 +1188,6 @@ "unknownDevice": "Okänd enhet", "session": { "startingServer": "Startar fjärrserver...", - "failedToCreate": "Kunde inte starta fjärrserver:", "hostAddress": "Värdadress", "connected": "Ansluten", "serverRunning": "Fjärrserver aktiv", @@ -1265,6 +1248,8 @@ "errors": { "noNetworkInterface": "Inget nätverksgränssnitt hittades", "authenticationFailed": "Autentisering misslyckades", + "serverStartFailed": "Det gick inte att starta fjärrservern: ${error}", + "commandFailed": "Det gick inte att skicka fjärrkommandot: ${error}", "joinTimedOut": "Tidsgräns vid anslutning till session", "failedToConnectAnyAddress": "Kunde inte ansluta till någon adress", "connectionLostAfterAttempts": "Anslutning förlorad efter ${attempts} försök", @@ -1538,7 +1523,6 @@ "quickConnectFailed": "Quick Connect misslyckades: ${error}", "addPlexTitle": "Logga in med Plex", "pinExpired": "PIN-koden gick ut innan inloggning. Försök igen.", - "duplicatePlexAccount": "Redan inloggad på Plex. Logga ut för att byta konto.", "failedToRegisterAccount": "Kunde inte registrera kontot: ${error}", "enterJellyfinUrlError": "Ange URL till din Jellyfin-server", "addConnectionTitle": "Lägg till anslutning", diff --git a/lib/i18n/zh.i18n.json b/lib/i18n/zh.i18n.json index 50124a7a..b3d4824a 100644 --- a/lib/i18n/zh.i18n.json +++ b/lib/i18n/zh.i18n.json @@ -3,7 +3,6 @@ "title": "Plezy" }, "auth": { - "signIn": "登录", "signInWithPlex": "使用 Plex 登录", "showQRCode": "显示二维码", "authenticate": "验证", @@ -56,10 +55,8 @@ "episodeNumberTitle": "第${number}集 - ${title}", "chapterNumber": "章节 ${number}", "reconnect": "重新连接", - "exit": "退出", "viewAll": "查看全部", "checkingNetwork": "正在检查网络...", - "refreshingServers": "正在刷新服务器...", "loadingServers": "正在加载服务器...", "connectingToServers": "正在连接服务器...", "startingOfflineMode": "正在启动离线模式...", @@ -139,6 +136,12 @@ "tvFullCardLayoutDescription": "使用仅显示图片的 TV 卡片,并叠加演员姓名", "focusGlow": "焦点光晕", "focusGlowDescription": "在获得焦点的卡片周围显示柔和的光晕", + "visualEffects": "视觉效果", + "visualEffectsAuto": "自动", + "visualEffectsAutoDescription": "在性能较低的设备上自动减少效果", + "visualEffectsFull": "完整", + "visualEffectsReduced": "简化", + "visualEffectsReducedDescription": "减少动画并使用较低分辨率的封面图片", "hideSpoilers": "隐藏未看剧集的剧透内容", "hideSpoilersDescription": "模糊未观看剧集的缩略图和描述", "playerBackend": "播放器引擎", @@ -151,7 +154,7 @@ "bufferSizeAuto": "自动(推荐)", "bufferSizeWarning": "可用内存 ${heap}MB。${size}MB 缓冲可能影响播放。", "defaultQualityTitle": "默认画质", - "defaultQualityDescription": "开始播放时使用。较低的值可减少带宽。", + "musicQualityTitle": "音乐质量", "subtitleStyling": "字幕样式", "subtitleStylingDescription": "调整字幕外观", "smallSkipDuration": "短跳过时长", @@ -245,10 +248,9 @@ "maxVolumePercent": "${percent}%", "discordRichPresence": "Discord 动态状态", "discordRichPresenceDescription": "在 Discord 上显示您正在观看的内容", - "trakt": "Trakt", - "traktDescription": "将观看历史与 Trakt 同步", "services": "服务", "servicesDescription": "连接 Trakt、MyAnimeList、Seerr 等", + "manageLibrariesDescription": "重新排序和隐藏媒体库", "companionRemoteServer": "配套遥控服务器", "companionRemoteServerDescription": "允许网络上的移动设备控制此应用", "autoPip": "自动画中画", @@ -311,7 +313,6 @@ "showNavBarLabels": "显示导航栏标签", "showNavBarLabelsDescription": "在导航栏图标下方显示文字标签", "startupSection": "启动页面", - "startupSectionDescription": "选择 Plezy 启动时打开的页面", "liveTvDefaultFavorites": "默认显示收藏频道", "liveTvDefaultFavoritesDescription": "打开直播电视时仅显示收藏频道", "display": "显示", @@ -322,14 +323,7 @@ "player": "播放器", "subtitlesAndConfig": "字幕与配置", "seekAndTiming": "跳转与计时", - "behavior": "行为", - "manageLibrariesDescription": "重新排序和隐藏媒体库", - "visualEffects": "视觉效果", - "visualEffectsAuto": "自动", - "visualEffectsAutoDescription": "在性能较低的设备上自动减少效果", - "visualEffectsFull": "完整", - "visualEffectsReduced": "简化", - "visualEffectsReducedDescription": "减少动画并使用较低分辨率的封面图片" + "behavior": "行为" }, "search": { "hint": "搜索电影、系列、音乐...", @@ -418,14 +412,11 @@ "rateSheet": { "title": "评分", "server": "服务器", - "starValue": "${rating} / 5", - "scoreValue": "${score} / 10", - "setScore": "设置分数", + "favorite": "收藏", + "favorited": "已收藏", "saved": "已保存", "notAvailable": "未找到匹配项", - "noConnectedServices": "在设置中连接服务,即可在此评分。", - "favorite": "收藏", - "favorited": "已收藏" + "noConnectedServices": "在设置中连接服务,即可在此评分。" }, "accessibility": { "mediaCardMovie": "${title}, 电影", @@ -435,7 +426,15 @@ "mediaCardWatched": "已观看", "mediaCardPartiallyWatched": "已观看 ${percent} 百分比", "mediaCardUnwatched": "未观看", - "tapToPlay": "点击播放" + "tapToPlay": "点击播放", + "decrease": "减小", + "increase": "增大", + "decreaseValue": "减小${label}", + "increaseValue": "增大${label}", + "hue": "色相", + "saturation": "饱和度", + "brightness": "亮度", + "hexColor": "十六进制颜色" }, "tooltips": { "shufflePlay": "随机播放", @@ -481,13 +480,11 @@ "settingsButton": "播放设置", "tracksButton": "音频和字幕", "chaptersButton": "章节", - "versionsButton": "视频版本", "versionQualityButton": "版本与画质", "versionColumnHeader": "版本", "qualityColumnHeader": "画质", "qualityOriginal": "原始", "qualityPresetLabel": "${resolution}p ${bitrate} Mbps", - "qualityBandwidthEstimate": "~${bitrate} Mbps", "transcodeUnavailableFallback": "转码不可用 — 以原始画质播放", "pipButton": "画中画模式", "aspectRatioButton": "宽高比", @@ -530,12 +527,7 @@ "subtitleDownloadFailed": "字幕下载失败", "searchLanguages": "搜索语言..." }, - "userStatus": { - "admin": "管理员", - "restricted": "受限", - "protected": "受保护", - "current": "当前" - }, + "userStatus": {}, "messages": { "markedAsWatched": "已标记为已观看", "markedAsUnwatched": "已标记为未观看", @@ -676,8 +668,7 @@ "pinProtectionOptional": "PIN 保护(可选)", "pinExplain": "切换个人资料需要 4 位 PIN。", "continueButton": "继续", - "pinsDontMatch": "PIN 不匹配", - "initializeServicesFailed": "无法初始化个人资料服务" + "pinsDontMatch": "PIN 不匹配" }, "connections": { "sectionTitle": "连接", @@ -692,7 +683,6 @@ }, "discover": { "title": "发现", - "switchProfile": "切换用户", "noContentAvailable": "没有可用内容", "addMediaToLibraries": "请向你的媒体库添加一些媒体", "continueWatching": "继续观看", @@ -721,8 +711,6 @@ "connectionFailed": "无法连接到媒体服务器", "failedToLoad": "无法加载 ${context}: ${error}", "noClientAvailable": "没有可用客户端", - "authenticationFailed": "验证失败: ${error}", - "couldNotLaunchUrl": "无法打开授权 URL", "pleaseEnterToken": "请输入一个令牌", "invalidToken": "令牌无效", "failedToVerifyToken": "无法验证令牌: ${error}", @@ -749,6 +737,8 @@ "allLibrariesHidden": "所有媒体库已隐藏", "hiddenLibrariesCount": "已隐藏的媒体库 (${count})", "thisLibraryIsEmpty": "此媒体库为空", + "noItemsMatchFilters": "没有项目符合当前筛选条件", + "resetFilters": "重置筛选条件", "all": "全部", "clearAll": "全部清除", "scanLibraryConfirm": "确定要扫描 “${title}” 吗?", @@ -804,7 +794,6 @@ "communityRating": "社区评分", "criticRating": "影评人评分", "userRating": "用户评分", - "lastPlayed": "最近播放", "datePlayed": "播放日期", "playCount": "播放次数", "productionYear": "制作年份", @@ -818,9 +807,7 @@ "dateShared": "共享日期", "latestEpisodeAirDate": "最新一集播出日期", "lastEpisodeDateAdded": "最新一集添加日期" - }, - "noItemsMatchFilters": "没有项目符合当前筛选条件", - "resetFilters": "重置筛选条件" + } }, "about": { "title": "关于", @@ -830,7 +817,6 @@ "viewLicensesDescription": "查看第三方库的许可证" }, "serverSelection": { - "allServerConnectionsFailed": "无法连接到任何服务器。请检查网络。", "noServersFoundForAccount": "未找到 ${username} (${email}) 的服务器", "failedToLoadServers": "无法加载服务器: ${error}" }, @@ -892,7 +878,6 @@ "watchlistUpdateFailed": "无法更新想看列表", "notInLibrary": "不在你的媒体库中", "inTheseLibraries": "在这些媒体库中", - "availableOn": "在 ${server} 上可用", "checkingLibrary": "正在检查你的媒体库...", "emptyTitle": "这里还什么都没有", "emptyMessage": "当 ${source} 有内容时,相关内容将显示在这里。", @@ -906,6 +891,8 @@ "guide": "节目指南", "noChannels": "没有可用的频道", "noDvr": "没有服务器配置了DVR", + "serverUnavailable": "直播电视服务器不可用。", + "serverNotConnected": "直播电视服务器未连接。", "noPrograms": "没有可用的节目数据", "liveStreamFailed": "直播流失败", "unknownProgram": "未知节目", @@ -941,7 +928,6 @@ "scheduledRecordings": "已安排", "recordingRules": "录制规则", "noScheduledRecordings": "没有安排的录制", - "noRecordingRules": "还没有录制规则", "manageRecording": "管理录制", "cancelRecording": "取消录制", "cancelRecordingTitle": "取消此次录制?", @@ -958,7 +944,6 @@ "recordingCancelled": "录制已取消", "recordingRuleDeleted": "录制规则已删除", "processRecordingRules": "重新评估规则", - "loadingRecordings": "正在加载录制内容...", "recordingInProgress": "正在录制", "recordingsCount": "已安排 ${count} 个", "editRule": "编辑规则", @@ -972,7 +957,6 @@ "title": "合集", "collection": "合集", "empty": "合集为空", - "unknownLibrarySection": "无法删除:未知的媒体库分区", "deleteCollection": "删除合集", "deleteConfirm": "要删除“${title}”吗?此操作无法撤销。", "deleted": "已删除合集", @@ -1012,6 +996,7 @@ "itemAdded": "已添加到播放列表", "itemRemoved": "已从播放列表中移除", "selectPlaylist": "选择播放列表", + "searchPlaylists": "搜索播放列表...", "errorCreating": "创建播放列表失败", "errorDeleting": "删除播放列表失败", "errorLoading": "加载播放列表失败", @@ -1100,15 +1085,15 @@ "participantResumed": "${name} 继续播放了", "participantSeeked": "${name} 跳转了", "participantBuffering": "${name} 正在缓冲", + "participantNeedsUpdate": "${name} 正在使用较旧版本的应用,无法同步", + "resumingWithout": "不等待 ${name},继续播放", "waitingForParticipants": "等待其他人加载...", + "waitingForName": "正在等待 ${name}...", "recentRooms": "最近的房间", "renameRoom": "重命名房间", "removeRoom": "移除", "guestSwitchUnavailable": "无法切换 — 服务器无法同步", - "guestSwitchFailed": "无法切换 — 在此服务器上未找到内容", - "participantNeedsUpdate": "${name} 正在使用较旧版本的应用,无法同步", - "resumingWithout": "不等待 ${name},继续播放", - "waitingForName": "正在等待 ${name}..." + "guestSwitchFailed": "无法切换 — 在此服务器上未找到内容" }, "downloads": { "title": "下载", @@ -1153,7 +1138,6 @@ "customAmount": "自定义数量...", "includeSpecials": "包含特别篇", "howManyEpisodes": "下载几集?", - "itemsQueued": "${count} 个项目已加入下载队列", "keepSynced": "保持同步", "downloadOnce": "下载一次", "keepNUnwatched": "保留${count}个未观看", @@ -1202,7 +1186,6 @@ "unknownDevice": "未知设备", "session": { "startingServer": "正在启动远程服务器...", - "failedToCreate": "启动远程服务器失败:", "hostAddress": "主机地址", "connected": "已连接", "serverRunning": "远程服务器已启动", @@ -1263,6 +1246,8 @@ "errors": { "noNetworkInterface": "未找到网络接口", "authenticationFailed": "身份验证失败", + "serverStartFailed": "无法启动远程服务器:${error}", + "commandFailed": "无法发送远程命令:${error}", "joinTimedOut": "加入会话超时", "failedToConnectAnyAddress": "无法连接到任何地址", "connectionLostAfterAttempts": "${attempts} 次尝试后连接丢失", @@ -1536,7 +1521,6 @@ "quickConnectFailed": "Quick Connect 失败: ${error}", "addPlexTitle": "使用 Plex 登录", "pinExpired": "PIN 在登录前已过期。请重试。", - "duplicatePlexAccount": "已登录 Plex。请退出登录以切换账号。", "failedToRegisterAccount": "注册帐户失败: ${error}", "enterJellyfinUrlError": "输入你的 Jellyfin 服务器 URL", "addConnectionTitle": "添加连接", diff --git a/lib/providers/companion_remote_provider.dart b/lib/providers/companion_remote_provider.dart index 7c056727..458031b0 100644 --- a/lib/providers/companion_remote_provider.dart +++ b/lib/providers/companion_remote_provider.dart @@ -26,6 +26,11 @@ export '../services/companion_remote/lan_discovery_service.dart' show Discovered typedef CommandReceivedCallback = void Function(RemoteCommand command); typedef PlexHomeResolver = Future Function(String connectionId); +String _localizedRemoteError(Object error, String Function(String details) fallback) { + if (error is RemotePeerError) return error.message; + return fallback(error.toString().replaceFirst('Exception: ', '')); +} + class CompanionRemoteProvider with ChangeNotifier, DisposableChangeNotifierMixin { RemoteSession? _session; CompanionRemotePeerService? _peerService; @@ -486,7 +491,7 @@ class CompanionRemoteProvider with ChangeNotifier, DisposableChangeNotifierMixin _session = RemoteSession( role: RemoteSessionRole.host, status: RemoteSessionStatus.error, - errorMessage: e.toString(), + errorMessage: _localizedRemoteError(e, (details) => t.companionRemote.errors.serverStartFailed(error: details)), createdAt: DateTime.now(), ); safeNotifyListeners(); @@ -530,11 +535,11 @@ class CompanionRemoteProvider with ChangeNotifier, DisposableChangeNotifierMixin /// Connect to a discovered host as a remote client. Future connectToDiscoveredHost(DiscoveredHost host) async { if (!isCryptoReady) { - throw StateError('Crypto not initialized'); + throw RemotePeerError(type: RemotePeerErrorType.authFailed, message: t.companionRemote.pairing.cryptoInitFailed); } final authContext = _authContextForId(host.authContextId); if (authContext == null) { - throw StateError('Matching auth context is no longer available'); + throw RemotePeerError(type: RemotePeerErrorType.authFailed, message: t.companionRemote.pairing.authFailed); } await leaveSession(); @@ -573,7 +578,10 @@ class CompanionRemoteProvider with ChangeNotifier, DisposableChangeNotifierMixin appLogger.d('CompanionRemote: Connected to ${host.name} via $winner'); } catch (e) { appLogger.e('CompanionRemote: Failed to connect to host', error: e); - _session = _session?.copyWith(status: RemoteSessionStatus.error, errorMessage: e.toString()); + _session = _session?.copyWith( + status: RemoteSessionStatus.error, + errorMessage: _localizedRemoteError(e, (details) => t.companionRemote.pairing.failedToConnect(error: details)), + ); safeNotifyListeners(); rethrow; } @@ -582,7 +590,7 @@ class CompanionRemoteProvider with ChangeNotifier, DisposableChangeNotifierMixin /// Connect to a host by manual IP:port entry. Future connectToManualHost(String hostAddress) async { if (!isCryptoReady) { - throw StateError('Crypto not initialized'); + throw RemotePeerError(type: RemotePeerErrorType.authFailed, message: t.companionRemote.pairing.cryptoInitFailed); } await leaveSession(); @@ -612,7 +620,10 @@ class CompanionRemoteProvider with ChangeNotifier, DisposableChangeNotifierMixin safeNotifyListeners(); } catch (e) { appLogger.e('CompanionRemote: Failed to connect to manual host', error: e); - _session = _session?.copyWith(status: RemoteSessionStatus.error, errorMessage: e.toString()); + _session = _session?.copyWith( + status: RemoteSessionStatus.error, + errorMessage: _localizedRemoteError(e, (details) => t.companionRemote.pairing.failedToConnect(error: details)), + ); safeNotifyListeners(); rethrow; } diff --git a/lib/services/companion_remote/companion_remote_peer_service.dart b/lib/services/companion_remote/companion_remote_peer_service.dart index 603cc886..3c5bf64d 100644 --- a/lib/services/companion_remote/companion_remote_peer_service.dart +++ b/lib/services/companion_remote/companion_remote_peer_service.dart @@ -117,7 +117,10 @@ class CompanionRemotePeerService with KeepaliveMixin { List authContexts, ) async { if (authContexts.isEmpty) { - throw const RemotePeerError(type: RemotePeerErrorType.authFailed, message: 'No auth contexts available'); + throw RemotePeerError( + type: RemotePeerErrorType.authFailed, + message: t.companionRemote.errors.authenticationFailed, + ); } if (_server != null) { @@ -168,7 +171,7 @@ class CompanionRemotePeerService with KeepaliveMixin { _errorController.add( RemotePeerError( type: RemotePeerErrorType.serverError, - message: 'Failed to create server: $e', + message: t.companionRemote.errors.serverStartFailed(error: e.toString()), originalError: e, ), ); @@ -369,7 +372,7 @@ class CompanionRemotePeerService with KeepaliveMixin { _errorController.add( RemotePeerError( type: RemotePeerErrorType.dataChannelError, - message: 'WebSocket error: $error', + message: t.companionRemote.pairing.failedToConnect(error: error.toString()), originalError: error, ), ); @@ -396,7 +399,10 @@ class CompanionRemotePeerService with KeepaliveMixin { String expectedHostClientId = '', }) async { if (authContexts.isEmpty) { - throw const RemotePeerError(type: RemotePeerErrorType.authFailed, message: 'No auth contexts available'); + throw RemotePeerError( + type: RemotePeerErrorType.authFailed, + message: t.companionRemote.errors.authenticationFailed, + ); } if (_channel != null) { @@ -506,7 +512,10 @@ class CompanionRemotePeerService with KeepaliveMixin { appLogger.w('CompanionRemote: No shared auth context with host'); if (!completer.isCompleted) { completer.completeError( - const RemotePeerError(type: RemotePeerErrorType.authFailed, message: 'No shared identity'), + RemotePeerError( + type: RemotePeerErrorType.authFailed, + message: t.companionRemote.errors.authenticationFailed, + ), ); } unawaited(_channel?.sink.close(4003, 'Authentication failed')); @@ -520,7 +529,10 @@ class CompanionRemotePeerService with KeepaliveMixin { appLogger.w('CompanionRemote: Host client ID mismatch'); if (!completer.isCompleted) { completer.completeError( - const RemotePeerError(type: RemotePeerErrorType.authFailed, message: 'Host identity mismatch'), + RemotePeerError( + type: RemotePeerErrorType.authFailed, + message: t.companionRemote.errors.authenticationFailed, + ), ); } unawaited(_channel?.sink.close(4003, 'Authentication failed')); @@ -599,7 +611,7 @@ class CompanionRemotePeerService with KeepaliveMixin { _errorController.add( RemotePeerError( type: RemotePeerErrorType.connectionFailed, - message: 'Connection error: $error', + message: t.companionRemote.pairing.failedToConnect(error: error.toString()), originalError: error, ), ); @@ -614,7 +626,11 @@ class CompanionRemotePeerService with KeepaliveMixin { } _errorController.add( - RemotePeerError(type: RemotePeerErrorType.connectionFailed, message: 'Failed to connect: $e', originalError: e), + RemotePeerError( + type: RemotePeerErrorType.connectionFailed, + message: t.companionRemote.pairing.failedToConnect(error: e.toString()), + originalError: e, + ), ); } @@ -644,7 +660,10 @@ class CompanionRemotePeerService with KeepaliveMixin { String expectedHostClientId = '', }) async { if (authContexts.isEmpty) { - throw const RemotePeerError(type: RemotePeerErrorType.authFailed, message: 'No auth contexts available'); + throw RemotePeerError( + type: RemotePeerErrorType.authFailed, + message: t.companionRemote.errors.authenticationFailed, + ); } if (hostAddresses.length == 1) { @@ -743,7 +762,7 @@ class CompanionRemotePeerService with KeepaliveMixin { return winner; } on TimeoutException { cleanup(); - throw const RemotePeerError(type: RemotePeerErrorType.timeout, message: 'Timed out connecting to all addresses'); + throw RemotePeerError(type: RemotePeerErrorType.timeout, message: t.companionRemote.errors.joinTimedOut); } } @@ -878,7 +897,7 @@ class CompanionRemotePeerService with KeepaliveMixin { _errorController.add( RemotePeerError( type: RemotePeerErrorType.dataChannelError, - message: 'Failed to send command: $e', + message: t.companionRemote.errors.commandFailed(error: e.toString()), originalError: e, ), ); diff --git a/lib/utils/live_tv_player_navigation.dart b/lib/utils/live_tv_player_navigation.dart index 871631a0..3a987ce1 100644 --- a/lib/utils/live_tv_player_navigation.dart +++ b/lib/utils/live_tv_player_navigation.dart @@ -2,6 +2,7 @@ import 'dart:async'; import '../media/ids.dart'; import 'package:flutter/material.dart'; +import '../i18n/strings.g.dart'; import '../media/media_item.dart'; import '../media/media_kind.dart'; @@ -28,13 +29,13 @@ Future navigateToLiveTv( }) async { final serverInfo = liveTvServerInfoForChannel(multiServer, channel); if (serverInfo == null) { - showErrorSnackBar(context, 'Live TV server is not available.'); + showErrorSnackBar(context, Translations.of(context).liveTv.serverUnavailable); return; } final client = multiServer.getClientForServer(ServerId(serverInfo.serverId)); if (client == null) { - showErrorSnackBar(context, 'Live TV server is not connected.'); + showErrorSnackBar(context, Translations.of(context).liveTv.serverNotConnected); return; } diff --git a/lib/widgets/companion_remote/remote_session_dialog.dart b/lib/widgets/companion_remote/remote_session_dialog.dart index 7699e8d6..cf7eccea 100644 --- a/lib/widgets/companion_remote/remote_session_dialog.dart +++ b/lib/widgets/companion_remote/remote_session_dialog.dart @@ -64,7 +64,7 @@ class _RemoteSessionDialogState extends State with MountedS } catch (e) { setStateIfMounted(() { _isStarting = false; - _errorMessage = e.toString(); + _errorMessage = t.companionRemote.errors.serverStartFailed(error: e.toString().replaceFirst('Exception: ', '')); }); } } @@ -113,15 +113,7 @@ class _RemoteSessionDialogState extends State with MountedS if (_errorMessage != null) { return AlertDialog( title: Text(t.common.error), - content: Column( - mainAxisSize: .min, - crossAxisAlignment: .start, - children: [ - Text(t.companionRemote.session.failedToCreate), - const SizedBox(height: 8), - Text(_errorMessage!, style: const TextStyle(fontFamily: 'monospace')), - ], - ), + content: Text(_errorMessage!, style: const TextStyle(fontFamily: 'monospace')), actions: [ FocusableButton( autofocus: true, diff --git a/lib/widgets/tv_color_picker.dart b/lib/widgets/tv_color_picker.dart index 3c874a3e..766233d7 100644 --- a/lib/widgets/tv_color_picker.dart +++ b/lib/widgets/tv_color_picker.dart @@ -1,6 +1,7 @@ import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; +import '../i18n/strings.g.dart'; import '../focus/dpad_navigator.dart'; import '../focus/focus_theme.dart'; import '../focus/focusable_text_field.dart'; @@ -124,6 +125,7 @@ class _TvColorPickerState extends State with ControllerDisposerMi const SizedBox(height: 16), _ColorChannelRow( label: 'H', + semanticLabel: Translations.of(context).accessibility.hue, value: _hue, min: 0, max: 360, @@ -139,6 +141,7 @@ class _TvColorPickerState extends State with ControllerDisposerMi const SizedBox(height: 8), _ColorChannelRow( label: 'S', + semanticLabel: Translations.of(context).accessibility.saturation, value: _saturation, min: 0, max: 100, @@ -153,6 +156,7 @@ class _TvColorPickerState extends State with ControllerDisposerMi const SizedBox(height: 8), _ColorChannelRow( label: 'V', + semanticLabel: Translations.of(context).accessibility.brightness, value: _value, min: 0, max: 100, @@ -168,7 +172,11 @@ class _TvColorPickerState extends State with ControllerDisposerMi FocusableTextField( controller: _hexController, focusNode: _hexFocusNode, - decoration: const InputDecoration(prefixText: '#', labelText: 'Hex', border: OutlineInputBorder()), + decoration: InputDecoration( + prefixText: '#', + labelText: Translations.of(context).accessibility.hexColor, + border: const OutlineInputBorder(), + ), maxLength: 6, inputFormatters: [FilteringTextInputFormatter.allow(RegExp(r'[0-9a-fA-F]'))], onChanged: _onHexChanged, @@ -184,6 +192,7 @@ class _TvColorPickerState extends State with ControllerDisposerMi /// UP/DOWN are ignored so focus traverses normally between rows. class _ColorChannelRow extends StatefulWidget { final String label; + final String semanticLabel; final int value; final int min; final int max; @@ -197,6 +206,7 @@ class _ColorChannelRow extends StatefulWidget { const _ColorChannelRow({ required this.label, + required this.semanticLabel, required this.value, required this.min, required this.max, @@ -317,7 +327,7 @@ class _ColorChannelRowState extends State<_ColorChannelRow> with KeyRepeatHelper _ChannelButton( icon: Symbols.remove_rounded, onPressed: canDecrement ? _decrement : null, - semanticLabel: 'Decrease ${widget.label}', + semanticLabel: Translations.of(context).accessibility.decreaseValue(label: widget.semanticLabel), ), const SizedBox(width: 8), Container( @@ -329,7 +339,7 @@ class _ColorChannelRowState extends State<_ColorChannelRow> with KeyRepeatHelper _ChannelButton( icon: Symbols.add_rounded, onPressed: canIncrement ? _increment : null, - semanticLabel: 'Increase ${widget.label}', + semanticLabel: Translations.of(context).accessibility.increaseValue(label: widget.semanticLabel), ), ], ), diff --git a/lib/widgets/tv_number_spinner.dart b/lib/widgets/tv_number_spinner.dart index 09f62947..6b1d135c 100644 --- a/lib/widgets/tv_number_spinner.dart +++ b/lib/widgets/tv_number_spinner.dart @@ -1,6 +1,7 @@ import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; +import '../i18n/strings.g.dart'; import '../focus/dpad_navigator.dart'; import '../focus/focus_theme.dart'; import '../focus/input_mode_tracker.dart'; @@ -155,7 +156,7 @@ class _TvNumberSpinnerState extends State with KeyRepeatHelper< onPressed: canDecrement ? _decrement : null, onLongPressStart: canDecrement ? () => startRepeat(_decrement) : null, onLongPressEnd: stopRepeat, - semanticLabel: 'Decrease', + semanticLabel: Translations.of(context).accessibility.decrease, ), const SizedBox(width: 16), Container( @@ -172,7 +173,7 @@ class _TvNumberSpinnerState extends State with KeyRepeatHelper< onPressed: canIncrement ? _increment : null, onLongPressStart: canIncrement ? () => startRepeat(_increment) : null, onLongPressEnd: stopRepeat, - semanticLabel: 'Increase', + semanticLabel: Translations.of(context).accessibility.increase, ), ], ), diff --git a/scripts/ci_checks.sh b/scripts/ci_checks.sh index 97b9d71c..ea5a14ef 100755 --- a/scripts/ci_checks.sh +++ b/scripts/ci_checks.sh @@ -71,6 +71,15 @@ else fi rm -f "$out" +# 3. Translation hygiene +section "translation hygiene" +if python3 scripts/clean_translations.py --check --strict; then + ok "locale files normalized and no unused keys found" +else + fail "translation files need cleanup or contain unused keys" + FAILED=1 +fi + # 3. Native formatting section "native format" out="$(mktemp)" diff --git a/scripts/clean_translations.py b/scripts/clean_translations.py index a75e864e..e8cba38d 100755 --- a/scripts/clean_translations.py +++ b/scripts/clean_translations.py @@ -25,8 +25,15 @@ I18N_DIR = ROOT / "lib" / "i18n" LIB_DIR = ROOT / "lib" SOURCE_LOCALE = "en" -USAGE_RE = re.compile(r"\bt\s*\.\s*([A-Za-z_]\w*(?:\s*\.\s*[A-Za-z_]\w*)+)") +USAGE_RES = ( + re.compile(r"\bt\s*\.\s*([A-Za-z_]\w*(?:\s*\.\s*[A-Za-z_]\w*)+)"), + re.compile( + r"\bTranslations\s*\.\s*of\s*\([^)]*\)\s*\.\s*" + r"([A-Za-z_]\w*(?:\s*\.\s*[A-Za-z_]\w*)+)" + ), +) DOT_WS_RE = re.compile(r"\s*\.\s*") +PLURAL_CATEGORIES = ("zero", "one", "two", "few", "many", "other") def load_json(path: Path) -> dict: @@ -37,6 +44,8 @@ def load_json(path: Path) -> dict: def dump_json(obj: dict) -> str: return json.dumps(obj, ensure_ascii=False, indent=2) + "\n" +_MISSING = object() + def empty_shaped_like(node): if isinstance(node, dict): @@ -44,45 +53,79 @@ def empty_shaped_like(node): return "" -def normalize(en_node, loc_node, path: str, stats: dict): - """Rebuild loc_node to match en_node's shape. Returns the new value.""" +def is_plural_map(node) -> bool: + return ( + isinstance(node, dict) + and "other" in node + and bool(node) + and set(node).issubset(PLURAL_CATEGORIES) + and all(not isinstance(value, dict) for value in node.values()) + ) + + +def locale_plural_categories(en_node, loc_node) -> tuple[str, ...]: + found: set[str] = set() + + def visit(en_value, loc_value): + if is_plural_map(en_value): + if isinstance(loc_value, dict): + found.update(key for key in loc_value if key in PLURAL_CATEGORIES) + return + if not isinstance(en_value, dict) or not isinstance(loc_value, dict): + return + for key, child in en_value.items(): + visit(child, loc_value.get(key, _MISSING)) + + visit(en_node, loc_node) + if not found: + found.update(en_node.keys() if is_plural_map(en_node) else ("one", "other")) + return tuple(category for category in PLURAL_CATEGORIES if category in found) + + +def normalize(en_node, loc_node, path: str, stats: dict, plural_categories: tuple[str, ...]): + """Rebuild loc_node to match en_node while preserving locale plural categories.""" + if is_plural_map(en_node): + if not isinstance(loc_node, dict): + if loc_node is not _MISSING: + stats["type_fixed"] += 1 + print(f" WARN type mismatch at '{path}' — replacing with empty plural map") + loc_node = {} + result = {} + for category in plural_categories: + value = loc_node.get(category, _MISSING) + if value is _MISSING or isinstance(value, dict): + stats["added"] += 1 + result[category] = "" + else: + stats["unchanged"] += 1 + result[category] = value + return result + if isinstance(en_node, dict): if not isinstance(loc_node, dict): - # Type mismatch: en is branch, locale is leaf (or missing). if loc_node is not _MISSING: stats["type_fixed"] += 1 print(f" WARN type mismatch at '{path}' — replacing with empty branch") - result = {} - for k, v in en_node.items(): - sub_path = f"{path}.{k}" if path else k - if isinstance(v, dict): - result[k] = normalize(v, _MISSING, sub_path, stats) - else: - stats["added"] += 1 - result[k] = "" - return result + loc_node = {} result = {} - for k, v in en_node.items(): - sub_path = f"{path}.{k}" if path else k - if k in loc_node: - result[k] = normalize(v, loc_node[k], sub_path, stats) - else: - if isinstance(v, dict): - result[k] = normalize(v, _MISSING, sub_path, stats) - else: - stats["added"] += 1 - result[k] = "" - # Detect orphans (keys present in locale but not in en). - for k in loc_node: - if k not in en_node: - sub_path = f"{path}.{k}" if path else k - dropped = count_leaves(loc_node[k]) + for key, value in en_node.items(): + sub_path = f"{path}.{key}" if path else key + result[key] = normalize( + value, + loc_node.get(key, _MISSING), + sub_path, + stats, + plural_categories, + ) + for key in loc_node: + if key not in en_node: + sub_path = f"{path}.{key}" if path else key + dropped = count_leaves(loc_node[key]) stats["removed"] += dropped print(f" INFO dropping orphan '{sub_path}' ({dropped} leaf key{'s' if dropped != 1 else ''})") return result - # en_node is a leaf. if loc_node is _MISSING: stats["added"] += 1 return "" @@ -94,9 +137,6 @@ def normalize(en_node, loc_node, path: str, stats: dict): return loc_node -_MISSING = object() - - def count_leaves(node) -> int: if isinstance(node, dict): return sum(count_leaves(v) for v in node.values()) @@ -123,13 +163,13 @@ def clean_pass(check_only: bool) -> bool: locale_files = sorted( p for p in I18N_DIR.glob("*.i18n.json") if p.name != f"{SOURCE_LOCALE}.i18n.json" ) - for path in locale_files: locale = path.name.split(".")[0] print(f"[{locale}]") loc = load_json(path) stats = {"added": 0, "removed": 0, "type_fixed": 0, "unchanged": 0} - normalized = normalize(en, loc, "", stats) + plural_categories = locale_plural_categories(en, loc) + normalized = normalize(en, loc, "", stats, plural_categories) new_text = dump_json(normalized) old_text = path.read_text(encoding="utf-8") file_changed = new_text != old_text @@ -166,9 +206,10 @@ def collect_references() -> set[str]: if rel.parts and rel.parts[0] == "i18n": continue text = dart_file.read_text(encoding="utf-8", errors="replace") - for match in USAGE_RE.finditer(text): - chain = DOT_WS_RE.sub(".", match.group(1)) - refs.add(chain) + for usage_re in USAGE_RES: + for match in usage_re.finditer(text): + chain = DOT_WS_RE.sub(".", match.group(1)) + refs.add(chain) return refs @@ -264,6 +305,9 @@ def main() -> int: if code: return code + if run_clean and args.check and changed: + return 1 + return 0 diff --git a/scripts/test_clean_translations.py b/scripts/test_clean_translations.py new file mode 100644 index 00000000..9d868a8b --- /dev/null +++ b/scripts/test_clean_translations.py @@ -0,0 +1,121 @@ +import tempfile +import sys +import unittest +from pathlib import Path +from unittest.mock import patch + +sys.path.insert(0, str(Path(__file__).resolve().parent)) + +import clean_translations + + +class CollectReferencesTest(unittest.TestCase): + def test_collects_global_and_explicit_translation_access(self): + with tempfile.TemporaryDirectory() as directory: + lib = Path(directory) + (lib / "widget.dart").write_text( + """ +final first = t.common.home; +final second = Translations.of(context).navigation.liveTv; +final third = Translations . of ( context ) . libraries . hiddenLibrariesCount; +""", + encoding="utf-8", + ) + + with patch.object(clean_translations, "LIB_DIR", lib): + references = clean_translations.collect_references() + + self.assertEqual( + references, + { + "common.home", + "navigation.liveTv", + "libraries.hiddenLibrariesCount", + }, + ) + + def test_skips_generated_i18n_sources(self): + with tempfile.TemporaryDirectory() as directory: + lib = Path(directory) + i18n = lib / "i18n" + i18n.mkdir() + (i18n / "strings.g.dart").write_text( + "final generated = Translations.of(context).unused.generated;", + encoding="utf-8", + ) + + with patch.object(clean_translations, "LIB_DIR", lib): + references = clean_translations.collect_references() + + self.assertEqual(references, set()) + + +class NormalizePluralTest(unittest.TestCase): + def _normalize(self, en, locale): + stats = {"added": 0, "removed": 0, "type_fixed": 0, "unchanged": 0} + categories = clean_translations.locale_plural_categories(en, locale) + return clean_translations.normalize(en, locale, "", stats, categories), stats + + def test_preserves_locale_specific_plural_categories(self): + en = {"count": {"one": "${n} item", "other": "${n} items"}} + locale = { + "count": { + "one": "${n} element", + "few": "${n} elementy", + "many": "${n} elementów", + "other": "${n} elementu", + } + } + + normalized, stats = self._normalize(en, locale) + + self.assertEqual(normalized, locale) + self.assertEqual(stats["removed"], 0) + + def test_does_not_inject_one_into_other_only_locales(self): + en = {"count": {"one": "${n} item", "other": "${n} items"}} + locale = {"count": {"other": "${n} 個"}} + + normalized, stats = self._normalize(en, locale) + + self.assertEqual(normalized, locale) + self.assertEqual(stats["added"], 0) + + def test_new_plural_branches_use_categories_inferred_from_locale(self): + en = { + "existing": {"one": "one", "other": "other"}, + "new": {"one": "one", "other": "other"}, + } + locale = { + "existing": { + "one": "one", + "few": "few", + "many": "many", + "other": "other", + } + } + + normalized, _ = self._normalize(en, locale) + + self.assertEqual(set(normalized["new"]), {"one", "few", "many", "other"}) + + +class MainExitStatusTest(unittest.TestCase): + def test_check_fails_when_locale_normalization_would_change_files(self): + with tempfile.TemporaryDirectory() as directory: + i18n = Path(directory) + (i18n / "en.i18n.json").write_text("{}\n", encoding="utf-8") + with ( + patch.object(clean_translations, "I18N_DIR", i18n), + patch.object(clean_translations, "ROOT", i18n), + patch.object(clean_translations, "clean_pass", return_value=True), + patch.object(clean_translations, "unused_pass", return_value=0), + patch.object(sys, "argv", ["clean_translations.py", "--check", "--strict"]), + ): + result = clean_translations.main() + + self.assertEqual(result, 1) + + +if __name__ == "__main__": + unittest.main() diff --git a/test/providers/companion_remote_provider_test.dart b/test/providers/companion_remote_provider_test.dart index ce2b70d5..d520ccba 100644 --- a/test/providers/companion_remote_provider_test.dart +++ b/test/providers/companion_remote_provider_test.dart @@ -3,6 +3,7 @@ import 'package:flutter_test/flutter_test.dart'; import 'package:plezy/connection/connection.dart'; import 'package:plezy/connection/connection_registry.dart'; import 'package:plezy/database/app_database.dart'; +import 'package:plezy/i18n/strings.g.dart'; import 'package:plezy/models/plex/plex_home.dart'; import 'package:plezy/models/plex/plex_home_user.dart'; import 'package:plezy/models/companion_remote/remote_command.dart'; @@ -14,6 +15,7 @@ import 'package:plezy/profiles/profile_connection.dart'; import 'package:plezy/profiles/profile_connection_registry.dart'; import 'package:plezy/profiles/profile_registry.dart'; import 'package:plezy/providers/companion_remote_provider.dart'; +import 'package:plezy/services/base_peer_service.dart'; import 'package:plezy/services/companion_remote/remote_auth_service.dart'; import 'package:plezy/services/storage_service.dart'; @@ -125,19 +127,25 @@ void main() { }); group('CompanionRemoteProvider — public API safety', () { - test('connectToDiscoveredHost throws StateError when crypto not ready', () async { + test('connectToDiscoveredHost reports localized auth failure when crypto is not ready', () async { final p = CompanionRemoteProvider(); - // Constructing a DiscoveredHost-like object would require importing - // the lan_discovery_service; skip the constructed-instance variant - // and instead exercise connectToManualHost which has the same guard. - await expectLater(() => p.connectToManualHost('192.0.2.1:9999'), throwsA(isA())); + await expectLater( + () => p.connectToManualHost('192.0.2.1:9999'), + throwsA( + isA().having((error) => error.message, 'message', t.companionRemote.pairing.cryptoInitFailed), + ), + ); p.dispose(); }); - test('connectToManualHost rejects empty host strings via crypto guard', () async { + test('connectToManualHost rejects empty host strings via localized crypto guard', () async { final p = CompanionRemoteProvider(); - // Crypto isn't ready → guard fires before any network logic. - await expectLater(() => p.connectToManualHost(''), throwsA(isA())); + await expectLater( + () => p.connectToManualHost(''), + throwsA( + isA().having((error) => error.message, 'message', t.companionRemote.pairing.cryptoInitFailed), + ), + ); p.dispose(); }); }); diff --git a/test/services/companion_remote_peer_service_test.dart b/test/services/companion_remote_peer_service_test.dart index b45ba2ba..28d6f680 100644 --- a/test/services/companion_remote_peer_service_test.dart +++ b/test/services/companion_remote_peer_service_test.dart @@ -1,9 +1,22 @@ import 'package:flutter_test/flutter_test.dart'; +import 'package:plezy/i18n/strings.g.dart'; import 'package:plezy/models/companion_remote/remote_command.dart'; import 'package:plezy/services/companion_remote/companion_remote_peer_service.dart'; import 'package:plezy/services/companion_remote/remote_auth_context.dart'; void main() { + test('auth precondition error uses the active locale', () async { + await LocaleSettings.setLocale(AppLocale.bg); + addTearDown(() => LocaleSettings.setLocaleSync(AppLocale.en)); + final peer = CompanionRemotePeerService(); + addTearDown(peer.dispose); + + await expectLater( + () => peer.createSessionForContexts('Test Host', 'macos', const []), + throwsA(isA().having((error) => error.message, 'message', 'Неуспешно удостоверяване')), + ); + }); + test('host and remote dispatch encrypted commands through the same contract', () async { final host = CompanionRemotePeerService(); final remote = CompanionRemotePeerService(); diff --git a/test/utils/live_tv_player_navigation_test.dart b/test/utils/live_tv_player_navigation_test.dart new file mode 100644 index 00000000..7d5472a8 --- /dev/null +++ b/test/utils/live_tv_player_navigation_test.dart @@ -0,0 +1,67 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_test/flutter_test.dart'; +import 'package:plezy/i18n/strings.g.dart'; +import 'package:plezy/models/livetv_channel.dart'; +import 'package:plezy/providers/multi_server_provider.dart'; +import 'package:plezy/services/data_aggregation_service.dart'; +import 'package:plezy/services/multi_server_manager.dart'; +import 'package:plezy/utils/live_tv_player_navigation.dart'; + +void main() { + late MultiServerManager manager; + late MultiServerProvider multiServer; + + setUp(() async { + await LocaleSettings.setLocale(AppLocale.bg); + manager = MultiServerManager(); + multiServer = MultiServerProvider(manager, DataAggregationService(manager)); + }); + + tearDown(() { + multiServer.dispose(); + manager.dispose(); + LocaleSettings.setLocaleSync(AppLocale.en); + }); + + Future pumpLauncher(WidgetTester tester, LiveTvChannel channel) async { + await tester.pumpWidget( + TranslationProvider( + child: MaterialApp( + home: Scaffold( + body: Builder( + builder: (context) => TextButton( + onPressed: () => + navigateToLiveTv(context, multiServer: multiServer, channel: channel, channels: [channel]), + child: const Text('Open'), + ), + ), + ), + ), + ), + ); + } + + testWidgets('unavailable Live TV server error uses the active locale', (tester) async { + final channel = LiveTvChannel(key: 'channel-1', title: 'Channel'); + await pumpLauncher(tester, channel); + + await tester.tap(find.text('Open')); + await tester.pump(); + + expect(find.text('Сървърът за телевизия на живо не е наличен.'), findsOneWidget); + expect(find.text('Live TV server is not available.'), findsNothing); + }); + + testWidgets('disconnected Live TV server error uses the active locale', (tester) async { + const serverId = 'server-1'; + final channel = LiveTvChannel(key: 'channel-1', title: 'Channel', serverId: serverId, liveDvrKey: 'dvr-1'); + multiServer.debugSetLiveTvServersForTesting([LiveTvServerInfo(serverId: serverId, dvrKey: 'dvr-1')]); + await pumpLauncher(tester, channel); + + await tester.tap(find.text('Open')); + await tester.pump(); + + expect(find.text('Сървърът за телевизия на живо не е свързан.'), findsOneWidget); + expect(find.text('Live TV server is not connected.'), findsNothing); + }); +} diff --git a/test/widgets/tv_accessibility_localization_test.dart b/test/widgets/tv_accessibility_localization_test.dart new file mode 100644 index 00000000..db9f48c0 --- /dev/null +++ b/test/widgets/tv_accessibility_localization_test.dart @@ -0,0 +1,54 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_test/flutter_test.dart'; +import 'package:plezy/i18n/strings.g.dart'; +import 'package:plezy/widgets/tv_color_picker.dart'; +import 'package:plezy/widgets/tv_number_spinner.dart'; + +void main() { + setUp(() async { + await LocaleSettings.setLocale(AppLocale.bg); + }); + + tearDown(() { + LocaleSettings.setLocaleSync(AppLocale.en); + }); + + testWidgets('number spinner exposes localized adjustment labels', (tester) async { + final semantics = tester.ensureSemantics(); + + await tester.pumpWidget( + TranslationProvider( + child: MaterialApp( + home: Scaffold(body: TvNumberSpinner(value: 5, min: 0, max: 10, onChanged: (_) {})), + ), + ), + ); + + expect(find.bySemanticsLabel('Намали'), findsOneWidget); + expect(find.bySemanticsLabel('Увеличи'), findsOneWidget); + expect(find.bySemanticsLabel('Decrease'), findsNothing); + expect(find.bySemanticsLabel('Increase'), findsNothing); + semantics.dispose(); + }); + + testWidgets('color picker exposes localized channel and hex labels', (tester) async { + final semantics = tester.ensureSemantics(); + + await tester.pumpWidget( + TranslationProvider( + child: MaterialApp( + home: Scaffold( + body: TvColorPicker(initialColor: Colors.red, onColorChanged: (_) {}), + ), + ), + ), + ); + + expect(find.bySemanticsLabel('Намали Нюанс'), findsOneWidget); + expect(find.bySemanticsLabel('Увеличи Нюанс'), findsOneWidget); + expect(find.bySemanticsLabel('Шестнадесетичен цвят'), findsOneWidget); + expect(find.bySemanticsLabel('Decrease H'), findsNothing); + expect(find.bySemanticsLabel('Increase H'), findsNothing); + semantics.dispose(); + }); +}