From e0a364e26a784cea651a6f3baafb4ddf8ef12688 Mon Sep 17 00:00:00 2001 From: edde746 <86283021+edde746@users.noreply.github.com> Date: Sun, 9 Aug 2026 11:43:24 +0200 Subject: [PATCH] chore(tvos): remove the Atmos output diagnostics --- ios/Runner.xcodeproj/project.pbxproj | 4 - ios/Runner/AppDelegate.swift | 4 - lib/i18n/az.i18n.json | 24 - lib/i18n/bg.i18n.json | 24 - lib/i18n/da.i18n.json | 24 - lib/i18n/de.i18n.json | 24 - lib/i18n/en.i18n.json | 24 - lib/i18n/es.i18n.json | 24 - lib/i18n/fr.i18n.json | 24 - lib/i18n/hu.i18n.json | 24 - lib/i18n/it.i18n.json | 24 - lib/i18n/ja.i18n.json | 24 - lib/i18n/kk.i18n.json | 24 - lib/i18n/ko.i18n.json | 24 - lib/i18n/nb.i18n.json | 24 - lib/i18n/nl.i18n.json | 24 - lib/i18n/pl.i18n.json | 24 - lib/i18n/pt.i18n.json | 24 - lib/i18n/ru.i18n.json | 24 - lib/i18n/strings.g.dart | 2 +- lib/i18n/strings_az.g.dart | 60 +- lib/i18n/strings_bg.g.dart | 60 +- lib/i18n/strings_da.g.dart | 60 +- lib/i18n/strings_de.g.dart | 60 +- lib/i18n/strings_en.g.dart | 108 +- lib/i18n/strings_es.g.dart | 60 +- lib/i18n/strings_fr.g.dart | 60 +- lib/i18n/strings_hu.g.dart | 60 +- lib/i18n/strings_it.g.dart | 60 +- lib/i18n/strings_ja.g.dart | 60 +- lib/i18n/strings_kk.g.dart | 60 +- lib/i18n/strings_ko.g.dart | 60 +- lib/i18n/strings_nb.g.dart | 60 +- lib/i18n/strings_nl.g.dart | 60 +- lib/i18n/strings_pl.g.dart | 60 +- lib/i18n/strings_pt.g.dart | 60 +- lib/i18n/strings_ru.g.dart | 60 +- lib/i18n/strings_sv.g.dart | 60 +- lib/i18n/strings_tr.g.dart | 60 +- lib/i18n/strings_uz.g.dart | 60 +- lib/i18n/strings_zh.g.dart | 60 +- lib/i18n/strings_zh_Hant.g.dart | 60 +- lib/i18n/sv.i18n.json | 24 - lib/i18n/tr.i18n.json | 24 - lib/i18n/uz.i18n.json | 24 - lib/i18n/zh-Hant.i18n.json | 24 - lib/i18n/zh.i18n.json | 24 - .../settings/atmos_diagnostics_screen.dart | 230 ---- .../settings/playback_settings_screen.dart | 9 - lib/services/settings_service.dart | 7 - .../apple/AtmosProbe/AtmosProbePlugin.swift | 1097 ----------------- .../atmos_diagnostics_screen_test.dart | 83 -- tvos/Runner.xcodeproj/project.pbxproj | 8 - tvos/Runner/AppDelegate.swift | 3 - .../RunnerTests/AtmosProbeContractTests.swift | 61 - tvos/scripts/test_wire_mpv.rb | 2 - tvos/scripts/wire_mpv.rb | 1 - 57 files changed, 133 insertions(+), 3274 deletions(-) delete mode 100644 lib/screens/settings/atmos_diagnostics_screen.dart delete mode 100644 shared/apple/AtmosProbe/AtmosProbePlugin.swift delete mode 100644 test/screens/settings/atmos_diagnostics_screen_test.dart delete mode 100644 tvos/RunnerTests/AtmosProbeContractTests.swift diff --git a/ios/Runner.xcodeproj/project.pbxproj b/ios/Runner.xcodeproj/project.pbxproj index afe86f25..1b647b6e 100644 --- a/ios/Runner.xcodeproj/project.pbxproj +++ b/ios/Runner.xcodeproj/project.pbxproj @@ -24,7 +24,6 @@ B1D51A6A2F00110000000005 /* MpvPlayerPluginShared.swift in Sources */ = {isa = PBXBuildFile; fileRef = B1D51A6A2F00110000000006 /* MpvPlayerPluginShared.swift */; }; B1D51A6A2F0011000000000C /* MpvAudioPlayerCore.swift in Sources */ = {isa = PBXBuildFile; fileRef = B1D51A6A2F0011000000000D /* MpvAudioPlayerCore.swift */; }; B1D51A6A2F0011000000000E /* MpvAudioPlayerPlugin.swift in Sources */ = {isa = PBXBuildFile; fileRef = B1D51A6A2F0011000000000F /* MpvAudioPlayerPlugin.swift */; }; - B1D51A6A2F0011000000000A /* AtmosProbePlugin.swift in Sources */ = {isa = PBXBuildFile; fileRef = B1D51A6A2F0011000000000B /* AtmosProbePlugin.swift */; }; B1D51A6A2F00110000000008 /* ExternalDisplayManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = B1D51A6A2F00110000000007 /* ExternalDisplayManager.swift */; }; 78A318202AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage in Frameworks */ = {isa = PBXBuildFile; productRef = 78A3181F2AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage */; }; /* End PBXBuildFile section */ @@ -80,7 +79,6 @@ B1D51A6A2F00110000000006 /* MpvPlayerPluginShared.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = MpvPlayerPluginShared.swift; path = ../shared/apple/MpvPlayer/MpvPlayerPluginShared.swift; sourceTree = SOURCE_ROOT; }; B1D51A6A2F0011000000000D /* MpvAudioPlayerCore.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = MpvAudioPlayerCore.swift; path = ../shared/apple/MpvPlayer/MpvAudioPlayerCore.swift; sourceTree = SOURCE_ROOT; }; B1D51A6A2F0011000000000F /* MpvAudioPlayerPlugin.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = MpvAudioPlayerPlugin.swift; path = ../shared/apple/MpvPlayer/MpvAudioPlayerPlugin.swift; sourceTree = SOURCE_ROOT; }; - B1D51A6A2F0011000000000B /* AtmosProbePlugin.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = AtmosProbePlugin.swift; path = ../shared/apple/AtmosProbe/AtmosProbePlugin.swift; sourceTree = SOURCE_ROOT; }; B1D51A6A2F00110000000007 /* ExternalDisplayManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ExternalDisplayManager.swift; sourceTree = ""; }; BB346A1D0705AB171F80B11B /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; DE48FF2E074644167608B23D /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; @@ -134,7 +132,6 @@ B1D51A6A2F00110000000006 /* MpvPlayerPluginShared.swift */, B1D51A6A2F0011000000000D /* MpvAudioPlayerCore.swift */, B1D51A6A2F0011000000000F /* MpvAudioPlayerPlugin.swift */, - B1D51A6A2F0011000000000B /* AtmosProbePlugin.swift */, B1D51A6A2F00110000000007 /* ExternalDisplayManager.swift */, 6A8A46222EDB370C0057B88C /* MpvPlayerCore.swift */, 6A8A46232EDB370C0057B88C /* MpvPlayerPlugin.swift */, @@ -428,7 +425,6 @@ B1D51A6A2F00110000000005 /* MpvPlayerPluginShared.swift in Sources */, B1D51A6A2F0011000000000C /* MpvAudioPlayerCore.swift in Sources */, B1D51A6A2F0011000000000E /* MpvAudioPlayerPlugin.swift in Sources */, - B1D51A6A2F0011000000000A /* AtmosProbePlugin.swift in Sources */, B1D51A6A2F00110000000008 /* ExternalDisplayManager.swift in Sources */, 6A8A46252EDB370C0057B88C /* MpvPlayerPlugin.swift in Sources */, 6A8A46262EDB370C0057B88C /* MpvPlayerCore.swift in Sources */, diff --git a/ios/Runner/AppDelegate.swift b/ios/Runner/AppDelegate.swift index a6e34709..60276834 100644 --- a/ios/Runner/AppDelegate.swift +++ b/ios/Runner/AppDelegate.swift @@ -42,10 +42,6 @@ import MediaPlayer MpvAudioPlayerPlugin.register(with: registrar) } - if let registrar = engineBridge.pluginRegistry.registrar(forPlugin: "AtmosProbePlugin") { - AtmosProbePlugin.register(with: registrar) - } - if let registrar = engineBridge.pluginRegistry.registrar(forPlugin: "DeviceAdjustmentChannel") { registerDeviceAdjustmentChannel(messenger: registrar.messenger()) } diff --git a/lib/i18n/az.i18n.json b/lib/i18n/az.i18n.json index bf8971a4..8bbcd7e7 100644 --- a/lib/i18n/az.i18n.json +++ b/lib/i18n/az.i18n.json @@ -300,30 +300,6 @@ "downmixCenterBoostShort": "dB", "audioDownmixNormalize": "Çevirmədə səsi normallaşdır", "audioDownmixNormalizeDescription": "Səs kəsilmələrinin qarşısını almaq üçün səviyyəni endirin.", - "atmosDiagnostics": "Atmos çıxış testi", - "atmosDiagnosticsDescription": "Sistem oynadıcısı vasitəsilə test siqnalları çalan Dolby Atmos çıxışını yoxlayın", - "atmosTestHlsAtmos": "Apple Atmos axını", - "atmosTestHlsAtmosDescription": "Düzgün işlədiyi məlum olan Dolby Atmos axını. Qəbuledici Dolby Atmos göstərməlidir.", - "atmosTestHlsControl": "Apple əhatəli səs axını", - "atmosTestHlsControlDescription": "Atmos olmayan idarəetmə axını.", - "atmosTestRawStream": "Xam EAC3 axını", - "atmosTestRawStreamDescription": "Test faylını eynilə oynadıcı daxili Atmos kimi yayımlayır.", - "atmosTestRawFile": "Xam EAC3 faylı", - "atmosTestRawFileDescription": "Məlum uzunluqda test faylını oynadır.", - "atmosTestAsbarNative": "Nümunə bufer rendereri (daxili)", - "atmosTestAsbarNativeDescription": "Faylın dəyişdirilməmiş sıxılmış səsini birbaşa sistem rendererinə ötürür. Test faylının URL-i tələb olunur.", - "atmosTestAsbarGenerated": "Nümunə bufer rendereri (yenidən qurulmuş)", - "atmosTestAsbarGeneratedDescription": "Eyni, lakin səs təsviri oynatmanın qurduğu kimi yenidən qurulur. Test faylının URL-i tələb olunur.", - "atmosTestSessionMode": "Film oynatma seansı rejimindən istifadə et", - "atmosTestSessionModeDescription": "Söndürüldükdə Dolby-nin sənədləşdirdiyi rejim işlədilir. Yandırıldıqda oynatmanın əvvəl istifadə etdiyi rejim işlədilir.", - "atmosTestShowRoutePicker": "AirPlay çıxışını seç", - "atmosTestHideRoutePicker": "AirPlay çıxış seçicisini gizlət", - "atmosTestRoutePickerDescription": "Testi AirPlay qəbuledicisinə göndərir. Müəyyən edilmiş səs rejimini yalnız AirPlay bildirir.", - "atmosTestStop": "Testi saxla", - "atmosTestUrl": "Test faylı URL-i", - "atmosTestUrlDescription": "Xam .ec3 Dolby Atmos faylının HTTP URL-i", - "atmosTestUrlMissing": "Əvvəlcə test faylı URL-ini təyin edin", - "atmosTestStatus": "Status", "dvConversionMode": "Dolby Vision çevrilməsi", "dvConversionModeDescription": "ExoPlayer-in Dolby Vision Profile 7 fayllarını necə emal edəcəyini seçin.", "dvConversionAuto": "Avtomatik", diff --git a/lib/i18n/bg.i18n.json b/lib/i18n/bg.i18n.json index bba19dfa..7555e0f5 100644 --- a/lib/i18n/bg.i18n.json +++ b/lib/i18n/bg.i18n.json @@ -300,30 +300,6 @@ "downmixCenterBoostShort": "дБ", "audioDownmixNormalize": "Нормализиране на звука при смесване", "audioDownmixNormalizeDescription": "Понижава микса, за да се предотврати клипинг. Изключете, за да запазите оригиналната сила на звука (възможни изкривявания при силни сцени).", - "atmosDiagnostics": "Тест на Atmos изхода", - "atmosDiagnosticsDescription": "Диагностика на Dolby Atmos изхода чрез възпроизвеждане на тестови сигнали през системния плейър", - "atmosTestHlsAtmos": "Apple Atmos поток", - "atmosTestHlsAtmosDescription": "Гарантирано работещ Dolby Atmos поток. Ресийвърът трябва да покаже Dolby Atmos.", - "atmosTestHlsControl": "Apple съраунд поток", - "atmosTestHlsControlDescription": "Контролен поток без Atmos. Ресийвърът трябва да покаже съраунд без Atmos.", - "atmosTestRawStream": "Суров EAC3 поток", - "atmosTestRawStreamDescription": "Стриймва тестовия файл точно както Atmos възпроизвеждането в плейъра. Изисква URL на тестовия файл.", - "atmosTestRawFile": "Суров EAC3 файл", - "atmosTestRawFileDescription": "Възпроизвежда тестовия файл с известна дължина. Изисква URL на тестовия файл.", - "atmosTestAsbarNative": "Рендер със семпъл буфер (native)", - "atmosTestAsbarNativeDescription": "Подава несменения компресиран звук от файла директно към системния рендер. Изисква URL на тестовия файл.", - "atmosTestAsbarGenerated": "Рендер със семпъл буфер (възстановен)", - "atmosTestAsbarGeneratedDescription": "Същото, но с аудиоописание, изградено както при възпроизвеждане. Изисква URL на тестовия файл.", - "atmosTestSessionMode": "Използвай режим за възпроизвеждане на филми", - "atmosTestSessionModeDescription": "Изключено използва режима, документиран от Dolby. Включено използва предишния режим.", - "atmosTestShowRoutePicker": "Избери AirPlay изход", - "atmosTestHideRoutePicker": "Скрий избора на AirPlay изход", - "atmosTestRoutePickerDescription": "Изпраща теста към AirPlay приемник. Само AirPlay съобщава разрешения аудиорежим.", - "atmosTestStop": "Спри теста", - "atmosTestUrl": "URL на тестовия файл", - "atmosTestUrlDescription": "HTTP URL на суров .ec3 Dolby Atmos файл (напр. извлечен с ffmpeg)", - "atmosTestUrlMissing": "Първо задайте URL на тестовия файл", - "atmosTestStatus": "Състояние", "dvConversionMode": "Преобразуване на Dolby Vision", "dvConversionModeDescription": "Изберете как ExoPlayer обработва файлове с Dolby Vision Profile 7.", "dvConversionAuto": "Автоматично", diff --git a/lib/i18n/da.i18n.json b/lib/i18n/da.i18n.json index 88728fb7..9e72c094 100644 --- a/lib/i18n/da.i18n.json +++ b/lib/i18n/da.i18n.json @@ -300,30 +300,6 @@ "downmixCenterBoostShort": "dB", "audioDownmixNormalize": "Normaliser lydstyrken ved downmix", "audioDownmixNormalizeDescription": "Sænk mixets lydstyrke for at undgå clipping. Slå fra for at bevare den oprindelige lydstyrke (høje scener kan blive forvrænget).", - "atmosDiagnostics": "Atmos-outputtest", - "atmosDiagnosticsDescription": "Diagnosticér Dolby Atmos-output ved at afspille testsignaler gennem systemafspilleren", - "atmosTestHlsAtmos": "Apple Atmos-stream", - "atmosTestHlsAtmosDescription": "Kendt god Dolby Atmos-stream. Receiveren bør vise Dolby Atmos.", - "atmosTestHlsControl": "Apple surround-stream", - "atmosTestHlsControlDescription": "Kontrolstream uden Atmos. Receiveren bør vise surround uden Atmos.", - "atmosTestRawStream": "Rå EAC3-stream", - "atmosTestRawStreamDescription": "Streamer testfilen præcis som Atmos-afspilning i afspilleren. Kræver testfilens URL.", - "atmosTestRawFile": "Rå EAC3-fil", - "atmosTestRawFileDescription": "Afspiller testfilen med kendt længde. Kræver testfilens URL.", - "atmosTestAsbarNative": "Sample-buffer-renderer (native)", - "atmosTestAsbarNativeDescription": "Sender filens urørte komprimerede lyd direkte til systemets renderer. Kræver testfilens URL.", - "atmosTestAsbarGenerated": "Sample-buffer-renderer (genopbygget)", - "atmosTestAsbarGeneratedDescription": "Det samme, men med lydbeskrivelsen opbygget som ved afspilning. Kræver testfilens URL.", - "atmosTestSessionMode": "Brug filmafspilningstilstand", - "atmosTestSessionModeDescription": "Fra bruger den tilstand, Dolby dokumenterer. Til bruger den tidligere tilstand.", - "atmosTestShowRoutePicker": "Vælg AirPlay-udgang", - "atmosTestHideRoutePicker": "Skjul AirPlay-udgangsvælger", - "atmosTestRoutePickerDescription": "Sender testen til en AirPlay-modtager. Kun AirPlay rapporterer den valgte lydtilstand.", - "atmosTestStop": "Stop test", - "atmosTestUrl": "Testfilens URL", - "atmosTestUrlDescription": "HTTP-URL til en rå .ec3 Dolby Atmos-fil (f.eks. udtrukket med ffmpeg)", - "atmosTestUrlMissing": "Angiv testfilens URL først", - "atmosTestStatus": "Status", "dvConversionMode": "Dolby Vision-konvertering", "dvConversionModeDescription": "Vælg, hvordan ExoPlayer håndterer Dolby Vision Profile 7-filer.", "dvConversionAuto": "Automatisk", diff --git a/lib/i18n/de.i18n.json b/lib/i18n/de.i18n.json index 9c0f3ef4..ac591d80 100644 --- a/lib/i18n/de.i18n.json +++ b/lib/i18n/de.i18n.json @@ -300,30 +300,6 @@ "downmixCenterBoostShort": "dB", "audioDownmixNormalize": "Lautstärke beim Downmix normalisieren", "audioDownmixNormalizeDescription": "Senkt den Mix ab, um Übersteuerung zu vermeiden. Deaktivieren, um die Originallautstärke zu behalten (laute Szenen können verzerren).", - "atmosDiagnostics": "Atmos-Ausgabetest", - "atmosDiagnosticsDescription": "Dolby-Atmos-Ausgabe diagnostizieren, indem Testsignale über den Systemplayer abgespielt werden", - "atmosTestHlsAtmos": "Apple-Atmos-Stream", - "atmosTestHlsAtmosDescription": "Garantiert funktionierender Dolby-Atmos-Stream. Der Receiver sollte Dolby Atmos anzeigen.", - "atmosTestHlsControl": "Apple-Surround-Stream", - "atmosTestHlsControlDescription": "Kontrollstream ohne Atmos. Der Receiver sollte Surround ohne Atmos anzeigen.", - "atmosTestRawStream": "Roher EAC3-Stream", - "atmosTestRawStreamDescription": "Streamt die Testdatei genau wie die Atmos-Wiedergabe im Player. Benötigt die URL der Testdatei.", - "atmosTestRawFile": "Rohe EAC3-Datei", - "atmosTestRawFileDescription": "Spielt die Testdatei mit bekannter Länge ab. Benötigt die URL der Testdatei.", - "atmosTestAsbarNative": "Sample-Buffer-Renderer (nativ)", - "atmosTestAsbarNativeDescription": "Übergibt die unveränderte komprimierte Audiospur direkt an den System-Renderer. Benötigt die URL der Testdatei.", - "atmosTestAsbarGenerated": "Sample-Buffer-Renderer (neu erstellt)", - "atmosTestAsbarGeneratedDescription": "Dasselbe, aber mit der Audiobeschreibung wie bei der Wiedergabe erstellt. Benötigt die URL der Testdatei.", - "atmosTestSessionMode": "Filmwiedergabe-Modus verwenden", - "atmosTestSessionModeDescription": "Aus verwendet den von Dolby dokumentierten Modus. Ein verwendet den bisherigen Modus.", - "atmosTestShowRoutePicker": "AirPlay-Ausgabe wählen", - "atmosTestHideRoutePicker": "AirPlay-Auswahl ausblenden", - "atmosTestRoutePickerDescription": "Sendet den Test an einen AirPlay-Empfänger. Nur AirPlay meldet den ermittelten Audiomodus.", - "atmosTestStop": "Test stoppen", - "atmosTestUrl": "URL der Testdatei", - "atmosTestUrlDescription": "HTTP-URL einer rohen .ec3-Dolby-Atmos-Datei (z. B. mit ffmpeg extrahiert)", - "atmosTestUrlMissing": "Zuerst die URL der Testdatei festlegen", - "atmosTestStatus": "Status", "dvConversionMode": "Dolby-Vision-Konvertierung", "dvConversionModeDescription": "Wähle, wie ExoPlayer Dateien mit Dolby-Vision-Profil 7 behandelt.", "dvConversionAuto": "Automatisch", diff --git a/lib/i18n/en.i18n.json b/lib/i18n/en.i18n.json index 3a2669f6..0e49cc54 100644 --- a/lib/i18n/en.i18n.json +++ b/lib/i18n/en.i18n.json @@ -300,30 +300,6 @@ "downmixCenterBoostShort": "dB", "audioDownmixNormalize": "Normalize Volume on Downmix", "audioDownmixNormalizeDescription": "Lower the mix to prevent clipping. Turn off to keep the original volume (may distort loud scenes).", - "atmosDiagnostics": "Atmos Output Test", - "atmosDiagnosticsDescription": "Diagnose Dolby Atmos output by playing test signals through the system player", - "atmosTestHlsAtmos": "Apple Atmos stream", - "atmosTestHlsAtmosDescription": "Known-good Dolby Atmos stream. The receiver should show Dolby Atmos.", - "atmosTestHlsControl": "Apple surround stream", - "atmosTestHlsControlDescription": "Non-Atmos control stream. The receiver should show surround without Atmos.", - "atmosTestRawStream": "Raw EAC3 stream", - "atmosTestRawStreamDescription": "Streams the test file exactly like in-player Atmos playback. Needs the test file URL.", - "atmosTestRawFile": "Raw EAC3 file", - "atmosTestRawFileDescription": "Plays the test file with a known length. Needs the test file URL.", - "atmosTestAsbarNative": "Sample-buffer renderer (native)", - "atmosTestAsbarNativeDescription": "Feeds the file's untouched compressed audio straight to the system renderer. Needs the test file URL.", - "atmosTestAsbarGenerated": "Sample-buffer renderer (rebuilt)", - "atmosTestAsbarGeneratedDescription": "Same, but with the audio description rebuilt the way playback builds it. Needs the test file URL.", - "atmosTestSessionMode": "Use movie playback session mode", - "atmosTestSessionModeDescription": "Off uses the mode Dolby documents. On uses the mode playback used previously.", - "atmosTestShowRoutePicker": "Choose AirPlay output", - "atmosTestHideRoutePicker": "Hide AirPlay output picker", - "atmosTestRoutePickerDescription": "Send the test to an AirPlay receiver. Only AirPlay reports the resolved audio mode.", - "atmosTestStop": "Stop test", - "atmosTestUrl": "Test file URL", - "atmosTestUrlDescription": "HTTP URL of a raw .ec3 Dolby Atmos file (e.g. extracted with ffmpeg)", - "atmosTestUrlMissing": "Set the test file URL first", - "atmosTestStatus": "Status", "dvConversionMode": "Dolby Vision Conversion", "dvConversionModeDescription": "Choose how ExoPlayer handles Dolby Vision Profile 7 files.", "dvConversionAuto": "Auto", diff --git a/lib/i18n/es.i18n.json b/lib/i18n/es.i18n.json index 47961665..7e05f7fd 100644 --- a/lib/i18n/es.i18n.json +++ b/lib/i18n/es.i18n.json @@ -300,30 +300,6 @@ "downmixCenterBoostShort": "dB", "audioDownmixNormalize": "Normalizar volumen al mezclar", "audioDownmixNormalizeDescription": "Reduce la mezcla para evitar saturación. Desactívalo para mantener el volumen original (puede distorsionar escenas fuertes).", - "atmosDiagnostics": "Prueba de salida Atmos", - "atmosDiagnosticsDescription": "Diagnostica la salida Dolby Atmos reproduciendo señales de prueba con el reproductor del sistema", - "atmosTestHlsAtmos": "Flujo Atmos de Apple", - "atmosTestHlsAtmosDescription": "Flujo Dolby Atmos de referencia. El receptor debería mostrar Dolby Atmos.", - "atmosTestHlsControl": "Flujo envolvente de Apple", - "atmosTestHlsControlDescription": "Flujo de control sin Atmos. El receptor debería indicar sonido envolvente sin Atmos.", - "atmosTestRawStream": "Flujo EAC3 sin procesar", - "atmosTestRawStreamDescription": "Transmite el archivo de prueba igual que durante la reproducción de Atmos. Requiere la URL del archivo de prueba.", - "atmosTestRawFile": "Archivo EAC3 sin procesar", - "atmosTestRawFileDescription": "Reproduce el archivo de prueba con longitud conocida. Necesita la URL del archivo de prueba.", - "atmosTestAsbarNative": "Renderizador de búfer de muestras (nativo)", - "atmosTestAsbarNativeDescription": "Envía el audio comprimido intacto del archivo directamente al renderizador del sistema. Necesita la URL del archivo de prueba.", - "atmosTestAsbarGenerated": "Renderizador de búfer de muestras (reconstruido)", - "atmosTestAsbarGeneratedDescription": "Igual, pero con la descripción de audio construida como en la reproducción. Necesita la URL del archivo de prueba.", - "atmosTestSessionMode": "Usar modo de reproducción de películas", - "atmosTestSessionModeDescription": "Desactivado usa el modo que documenta Dolby. Activado usa el modo anterior.", - "atmosTestShowRoutePicker": "Elegir salida AirPlay", - "atmosTestHideRoutePicker": "Ocultar selector de salida AirPlay", - "atmosTestRoutePickerDescription": "Envía la prueba a un receptor AirPlay. Solo AirPlay informa del modo de audio resuelto.", - "atmosTestStop": "Detener prueba", - "atmosTestUrl": "URL del archivo de prueba", - "atmosTestUrlDescription": "URL HTTP de un archivo .ec3 Dolby Atmos sin procesar (p. ej., extraído con ffmpeg)", - "atmosTestUrlMissing": "Configura primero la URL del archivo de prueba", - "atmosTestStatus": "Estado", "dvConversionMode": "Conversión de Dolby Vision", "dvConversionModeDescription": "Elige cómo gestiona ExoPlayer los archivos Dolby Vision de perfil 7.", "dvConversionAuto": "Automático", diff --git a/lib/i18n/fr.i18n.json b/lib/i18n/fr.i18n.json index afadacae..9348a495 100644 --- a/lib/i18n/fr.i18n.json +++ b/lib/i18n/fr.i18n.json @@ -300,30 +300,6 @@ "downmixCenterBoostShort": "dB", "audioDownmixNormalize": "Normaliser le volume lors de la conversion en stéréo", "audioDownmixNormalizeDescription": "Atténuer le mixage pour éviter la saturation. Désactivez cette option pour conserver le volume d’origine, au risque de déformer les scènes bruyantes.", - "atmosDiagnostics": "Test de sortie Atmos", - "atmosDiagnosticsDescription": "Diagnostiquer la sortie Dolby Atmos en lisant des signaux de test via le lecteur système", - "atmosTestHlsAtmos": "Flux Atmos d'Apple", - "atmosTestHlsAtmosDescription": "Flux Dolby Atmos réputé fiable. L'ampli devrait afficher Dolby Atmos.", - "atmosTestHlsControl": "Flux surround d'Apple", - "atmosTestHlsControlDescription": "Flux témoin sans Atmos. L'ampli devrait afficher du surround sans Atmos.", - "atmosTestRawStream": "Flux EAC3 brut", - "atmosTestRawStreamDescription": "Diffuse le fichier de test exactement comme la lecture Atmos du lecteur. Nécessite l'URL du fichier de test.", - "atmosTestRawFile": "Fichier EAC3 brut", - "atmosTestRawFileDescription": "Lit le fichier de test avec une longueur connue. Nécessite l'URL du fichier de test.", - "atmosTestAsbarNative": "Moteur de rendu à tampon d'échantillons (natif)", - "atmosTestAsbarNativeDescription": "Transmet l'audio compressé intact du fichier directement au moteur de rendu du système. Nécessite l'URL du fichier de test.", - "atmosTestAsbarGenerated": "Moteur de rendu à tampon d'échantillons (reconstruit)", - "atmosTestAsbarGeneratedDescription": "Identique, mais avec la description audio reconstruite comme à la lecture. Nécessite l'URL du fichier de test.", - "atmosTestSessionMode": "Utiliser le mode lecture de films", - "atmosTestSessionModeDescription": "Désactivé utilise le mode documenté par Dolby. Activé utilise le mode précédent.", - "atmosTestShowRoutePicker": "Choisir la sortie AirPlay", - "atmosTestHideRoutePicker": "Masquer le sélecteur AirPlay", - "atmosTestRoutePickerDescription": "Envoie le test vers un récepteur AirPlay. Seul AirPlay indique le mode audio retenu.", - "atmosTestStop": "Arrêter le test", - "atmosTestUrl": "URL du fichier de test", - "atmosTestUrlDescription": "URL HTTP d'un fichier .ec3 Dolby Atmos brut (extrait par ex. avec ffmpeg)", - "atmosTestUrlMissing": "Définissez d'abord l'URL du fichier de test", - "atmosTestStatus": "État", "dvConversionMode": "Conversion Dolby Vision", "dvConversionModeDescription": "Choisir comment ExoPlayer gère les fichiers Dolby Vision de profil 7.", "dvConversionAuto": "Auto", diff --git a/lib/i18n/hu.i18n.json b/lib/i18n/hu.i18n.json index f9429d36..edac4ca7 100644 --- a/lib/i18n/hu.i18n.json +++ b/lib/i18n/hu.i18n.json @@ -300,30 +300,6 @@ "downmixCenterBoostShort": "dB", "audioDownmixNormalize": "Hangerő normalizálása lekeveréskor", "audioDownmixNormalizeDescription": "A keverés szintjének csökkentése a torzítás elkerülésére. Kapcsold ki az eredeti hangerő megőrzéséhez (a hangos jelenetek torzíthatnak).", - "atmosDiagnostics": "Atmos kimeneti teszt", - "atmosDiagnosticsDescription": "Dolby Atmos kimenet diagnosztizálása tesztjelek lejátszásával a rendszerlejátszón keresztül", - "atmosTestHlsAtmos": "Apple Atmos folyam", - "atmosTestHlsAtmosDescription": "Igazoltan működő Dolby Atmos-adatfolyam. Az erősítő kijelzőjén a Dolby Atmos formátumnak kell megjelennie.", - "atmosTestHlsControl": "Apple térhangzású folyam", - "atmosTestHlsControlDescription": "Atmos nélküli ellenőrző adatfolyam. Az erősítő kijelzőjén térhangzásnak kell megjelennie, Atmos nélkül.", - "atmosTestRawStream": "Nyers EAC3 folyam", - "atmosTestRawStreamDescription": "A tesztfájlt pontosan úgy közvetíti, mint a lejátszón belüli Atmos lejátszás. Szükséges a tesztfájl URL-je.", - "atmosTestRawFile": "Nyers EAC3 fájl", - "atmosTestRawFileDescription": "Ismert hosszúságú tesztfájlt játszik le. Szükséges a tesztfájl URL-je.", - "atmosTestAsbarNative": "Mintapuffer-megjelenítő (natív)", - "atmosTestAsbarNativeDescription": "A fájl érintetlen tömörített hangját közvetlenül a rendszer megjelenítőjének adja. Szükséges a tesztfájl URL-je.", - "atmosTestAsbarGenerated": "Mintapuffer-megjelenítő (újraépített)", - "atmosTestAsbarGeneratedDescription": "Ugyanaz, de a lejátszás módján felépített hangleírással. Szükséges a tesztfájl URL-je.", - "atmosTestSessionMode": "Filmlejátszási mód használata", - "atmosTestSessionModeDescription": "Kikapcsolva a Dolby által dokumentált módot használja. Bekapcsolva a korábbi módot.", - "atmosTestShowRoutePicker": "AirPlay kimenet választása", - "atmosTestHideRoutePicker": "AirPlay kimenetválasztó elrejtése", - "atmosTestRoutePickerDescription": "Elküldi a tesztet egy AirPlay vevőnek. Csak az AirPlay jelzi a feloldott hangmódot.", - "atmosTestStop": "Teszt leállítása", - "atmosTestUrl": "Tesztfájl URL-je", - "atmosTestUrlDescription": "Nyers .ec3 Dolby Atmos fájl HTTP URL-je (pl. ffmpeg-gel kinyerve)", - "atmosTestUrlMissing": "Először állítsd be a tesztfájl URL-jét", - "atmosTestStatus": "Állapot", "dvConversionMode": "Dolby Vision-átalakítás", "dvConversionModeDescription": "Válaszd ki, hogyan kezelje az ExoPlayer a Dolby Vision Profile 7 fájlokat.", "dvConversionAuto": "Automatikus", diff --git a/lib/i18n/it.i18n.json b/lib/i18n/it.i18n.json index d76d524d..4dbe9513 100644 --- a/lib/i18n/it.i18n.json +++ b/lib/i18n/it.i18n.json @@ -300,30 +300,6 @@ "downmixCenterBoostShort": "dB", "audioDownmixNormalize": "Normalizza il volume durante il downmix", "audioDownmixNormalizeDescription": "Riduce il volume del mix per evitare il clipping. Disattiva questa opzione per mantenere il volume originale (le scene più rumorose potrebbero risultare distorte).", - "atmosDiagnostics": "Test uscita Atmos", - "atmosDiagnosticsDescription": "Diagnostica l'uscita Dolby Atmos riproducendo segnali di prova con il lettore di sistema", - "atmosTestHlsAtmos": "Stream Atmos di Apple", - "atmosTestHlsAtmosDescription": "Stream Dolby Atmos di riferimento. Il ricevitore dovrebbe mostrare Dolby Atmos.", - "atmosTestHlsControl": "Stream surround di Apple", - "atmosTestHlsControlDescription": "Stream di controllo senza Atmos. Il ricevitore dovrebbe mostrare surround senza Atmos.", - "atmosTestRawStream": "Stream EAC3 grezzo", - "atmosTestRawStreamDescription": "Trasmette il file di prova esattamente come la riproduzione Atmos del lettore. Richiede l'URL del file di prova.", - "atmosTestRawFile": "File EAC3 grezzo", - "atmosTestRawFileDescription": "Riproduce il file di prova con lunghezza nota. Richiede l'URL del file di prova.", - "atmosTestAsbarNative": "Renderer con buffer di campioni (nativo)", - "atmosTestAsbarNativeDescription": "Invia l'audio compresso intatto del file direttamente al renderer di sistema. Richiede l'URL del file di test.", - "atmosTestAsbarGenerated": "Renderer con buffer di campioni (ricostruito)", - "atmosTestAsbarGeneratedDescription": "Come sopra, ma con la descrizione audio costruita come nella riproduzione. Richiede l'URL del file di test.", - "atmosTestSessionMode": "Usa la modalità riproduzione film", - "atmosTestSessionModeDescription": "Disattivato usa la modalità documentata da Dolby. Attivato usa la modalità precedente.", - "atmosTestShowRoutePicker": "Scegli uscita AirPlay", - "atmosTestHideRoutePicker": "Nascondi selettore uscita AirPlay", - "atmosTestRoutePickerDescription": "Invia il test a un ricevitore AirPlay. Solo AirPlay riporta la modalità audio risolta.", - "atmosTestStop": "Interrompi test", - "atmosTestUrl": "URL del file di prova", - "atmosTestUrlDescription": "URL HTTP di un file .ec3 Dolby Atmos grezzo (ad es. estratto con ffmpeg)", - "atmosTestUrlMissing": "Imposta prima l'URL del file di prova", - "atmosTestStatus": "Stato", "dvConversionMode": "Conversione Dolby Vision", "dvConversionModeDescription": "Scegli come ExoPlayer gestisce i file Dolby Vision con profilo 7.", "dvConversionAuto": "Auto", diff --git a/lib/i18n/ja.i18n.json b/lib/i18n/ja.i18n.json index 21bcef84..5f427482 100644 --- a/lib/i18n/ja.i18n.json +++ b/lib/i18n/ja.i18n.json @@ -300,30 +300,6 @@ "downmixCenterBoostShort": "dB", "audioDownmixNormalize": "ダウンミックス時の音量正規化", "audioDownmixNormalizeDescription": "クリッピングを防ぐためにミックス音量を下げます。オフにすると元の音量を維持します(大音量シーンで歪む場合があります)。", - "atmosDiagnostics": "Atmos出力テスト", - "atmosDiagnosticsDescription": "システムプレイヤーでテスト信号を再生してDolby Atmos出力を診断します", - "atmosTestHlsAtmos": "Apple Atmosストリーム", - "atmosTestHlsAtmosDescription": "動作確認済みのDolby Atmosストリーム。レシーバーにDolby Atmosと表示されるはずです。", - "atmosTestHlsControl": "Appleサラウンドストリーム", - "atmosTestHlsControlDescription": "Atmosなしの比較用ストリーム。レシーバーにAtmosなしのサラウンドが表示されるはずです。", - "atmosTestRawStream": "生EAC3ストリーム", - "atmosTestRawStreamDescription": "プレイヤー内のAtmos再生と同じ方式でテストファイルをストリーミングします。テストファイルのURLが必要です。", - "atmosTestRawFile": "生EAC3ファイル", - "atmosTestRawFileDescription": "長さが既知のテストファイルを再生します。テストファイルのURLが必要です。", - "atmosTestAsbarNative": "サンプルバッファレンダラー(ネイティブ)", - "atmosTestAsbarNativeDescription": "ファイルの圧縮音声をそのままシステムのレンダラーに渡します。テストファイルのURLが必要です。", - "atmosTestAsbarGenerated": "サンプルバッファレンダラー(再構築)", - "atmosTestAsbarGeneratedDescription": "同じですが、再生時と同じ方法で音声記述を再構築します。テストファイルのURLが必要です。", - "atmosTestSessionMode": "ムービー再生モードを使用", - "atmosTestSessionModeDescription": "オフはDolbyが文書化したモードを使用します。オンは以前のモードを使用します。", - "atmosTestShowRoutePicker": "AirPlay出力を選択", - "atmosTestHideRoutePicker": "AirPlay出力の選択を隠す", - "atmosTestRoutePickerDescription": "テストをAirPlayレシーバーに送信します。解決された音声モードを報告するのはAirPlayのみです。", - "atmosTestStop": "テストを停止", - "atmosTestUrl": "テストファイルのURL", - "atmosTestUrlDescription": "生の.ec3 Dolby AtmosファイルのHTTP URL(例: ffmpegで抽出)", - "atmosTestUrlMissing": "先にテストファイルのURLを設定してください", - "atmosTestStatus": "ステータス", "dvConversionMode": "Dolby Vision 変換", "dvConversionModeDescription": "ExoPlayer が Dolby Vision Profile 7 ファイルを処理する方法を選択します。", "dvConversionAuto": "自動", diff --git a/lib/i18n/kk.i18n.json b/lib/i18n/kk.i18n.json index 2712a099..cd71353f 100644 --- a/lib/i18n/kk.i18n.json +++ b/lib/i18n/kk.i18n.json @@ -300,30 +300,6 @@ "downmixCenterBoostShort": "дБ", "audioDownmixNormalize": "Түрлендіруде дыбысты нормалау", "audioDownmixNormalizeDescription": "Дыбыс бұзылуын болдырмау үшін деңгейді төмендету.", - "atmosDiagnostics": "Atmos шығысын тексеру", - "atmosDiagnosticsDescription": "Dolby Atmos шығысын тексеру", - "atmosTestHlsAtmos": "Apple Atmos ағыны", - "atmosTestHlsAtmosDescription": "Дұрыс жұмыс істейтін Dolby Atmos ағыны.", - "atmosTestHlsControl": "Apple көлемді дыбыс ағыны", - "atmosTestHlsControlDescription": "Atmos емес бақылау ағыны.", - "atmosTestRawStream": "Өңделмеген EAC3 ағыны", - "atmosTestRawStreamDescription": "Тест файлын ішкі Atmos ретінде тарату.", - "atmosTestRawFile": "Өңделмеген EAC3 файлы", - "atmosTestRawFileDescription": "Тест файлын ойнату.", - "atmosTestAsbarNative": "Сэмпл-буфер рендерері (нативті)", - "atmosTestAsbarNativeDescription": "Файлдың өзгертілмеген сығылған дыбысын тікелей жүйелік рендерерге береді. Тест файлының URL-і қажет.", - "atmosTestAsbarGenerated": "Сэмпл-буфер рендерері (қайта құрылған)", - "atmosTestAsbarGeneratedDescription": "Сол сияқты, бірақ дыбыс сипаттамасы ойнату кезіндегідей қайта құрылады. Тест файлының URL-і қажет.", - "atmosTestSessionMode": "Фильмді ойнату сеансы режимін пайдалану", - "atmosTestSessionModeDescription": "Өшірулі — Dolby құжаттаған режим. Қосулы — бұрын пайдаланылған режим.", - "atmosTestShowRoutePicker": "AirPlay шығысын таңдау", - "atmosTestHideRoutePicker": "AirPlay шығысын таңдау терезесін жасыру", - "atmosTestRoutePickerDescription": "Тестті AirPlay қабылдағышына жібереді. Анықталған дыбыс режимін тек AirPlay хабарлайды.", - "atmosTestStop": "Тестті тоқтату", - "atmosTestUrl": "Тест файлының URL-і", - "atmosTestUrlDescription": "Өңделмеген .ec3 файлының HTTP URL-і", - "atmosTestUrlMissing": "Алдымен тест файлының URL-ін орнатыңыз", - "atmosTestStatus": "Мәртебесі", "dvConversionMode": "Dolby Vision түрлендіруі", "dvConversionModeDescription": "ExoPlayer-дің Dolby Vision Profile 7 файлдарын өңдеу әдісін таңдаңыз.", "dvConversionAuto": "Автоматты", diff --git a/lib/i18n/ko.i18n.json b/lib/i18n/ko.i18n.json index 268b47d7..327b9734 100644 --- a/lib/i18n/ko.i18n.json +++ b/lib/i18n/ko.i18n.json @@ -300,30 +300,6 @@ "downmixCenterBoostShort": "dB", "audioDownmixNormalize": "다운믹스 시 음량 정규화", "audioDownmixNormalizeDescription": "클리핑을 방지하기 위해 믹스 음량을 낮춥니다. 원래 음량을 유지하려면 끄세요(큰 소리 장면에서 왜곡될 수 있음).", - "atmosDiagnostics": "Atmos 출력 테스트", - "atmosDiagnosticsDescription": "시스템 플레이어로 테스트 신호를 재생하여 Dolby Atmos 출력을 진단합니다", - "atmosTestHlsAtmos": "Apple Atmos 스트림", - "atmosTestHlsAtmosDescription": "검증된 Dolby Atmos 스트림입니다. 리시버에 Dolby Atmos가 표시되어야 합니다.", - "atmosTestHlsControl": "Apple 서라운드 스트림", - "atmosTestHlsControlDescription": "Atmos 없는 대조용 스트림입니다. 리시버에 Atmos 없는 서라운드가 표시되어야 합니다.", - "atmosTestRawStream": "원시 EAC3 스트림", - "atmosTestRawStreamDescription": "플레이어 내 Atmos 재생과 동일한 방식으로 테스트 파일을 스트리밍합니다. 테스트 파일 URL이 필요합니다.", - "atmosTestRawFile": "원시 EAC3 파일", - "atmosTestRawFileDescription": "길이가 알려진 테스트 파일을 재생합니다. 테스트 파일 URL이 필요합니다.", - "atmosTestAsbarNative": "샘플 버퍼 렌더러(네이티브)", - "atmosTestAsbarNativeDescription": "파일의 압축 오디오를 그대로 시스템 렌더러에 전달합니다. 테스트 파일 URL이 필요합니다.", - "atmosTestAsbarGenerated": "샘플 버퍼 렌더러(재구성)", - "atmosTestAsbarGeneratedDescription": "동일하지만 오디오 설명을 재생과 같은 방식으로 재구성합니다. 테스트 파일 URL이 필요합니다.", - "atmosTestSessionMode": "동영상 재생 세션 모드 사용", - "atmosTestSessionModeDescription": "끄면 Dolby가 문서화한 모드를 사용합니다. 켜면 이전 모드를 사용합니다.", - "atmosTestShowRoutePicker": "AirPlay 출력 선택", - "atmosTestHideRoutePicker": "AirPlay 출력 선택기 숨기기", - "atmosTestRoutePickerDescription": "테스트를 AirPlay 수신기로 보냅니다. 확인된 오디오 모드는 AirPlay에서만 보고됩니다.", - "atmosTestStop": "테스트 중지", - "atmosTestUrl": "테스트 파일 URL", - "atmosTestUrlDescription": "원시 .ec3 Dolby Atmos 파일의 HTTP URL(예: ffmpeg로 추출)", - "atmosTestUrlMissing": "먼저 테스트 파일 URL을 설정하세요", - "atmosTestStatus": "상태", "dvConversionMode": "Dolby Vision 변환", "dvConversionModeDescription": "ExoPlayer가 Dolby Vision Profile 7 파일을 처리하는 방식을 선택합니다.", "dvConversionAuto": "자동", diff --git a/lib/i18n/nb.i18n.json b/lib/i18n/nb.i18n.json index a20387f6..fda8aba3 100644 --- a/lib/i18n/nb.i18n.json +++ b/lib/i18n/nb.i18n.json @@ -300,30 +300,6 @@ "downmixCenterBoostShort": "dB", "audioDownmixNormalize": "Normaliser lydstyrke ved nedmiks", "audioDownmixNormalizeDescription": "Senker miksen for å unngå klipping. Slå av for å beholde originalvolumet (høye scener kan forvrenges).", - "atmosDiagnostics": "Atmos-utgangstest", - "atmosDiagnosticsDescription": "Diagnostiser Dolby Atmos-utgangen ved å spille testsignaler gjennom systemspilleren", - "atmosTestHlsAtmos": "Apple Atmos-strøm", - "atmosTestHlsAtmosDescription": "Verifisert Dolby Atmos-strøm. Mottakeren bør vise Dolby Atmos.", - "atmosTestHlsControl": "Apple surround-strøm", - "atmosTestHlsControlDescription": "Kontrollstrøm uten Atmos. Mottakeren bør vise surround uten Atmos.", - "atmosTestRawStream": "Rå EAC3-strøm", - "atmosTestRawStreamDescription": "Strømmer testfilen akkurat som Atmos-avspilling i spilleren. Krever testfilens URL.", - "atmosTestRawFile": "Rå EAC3-fil", - "atmosTestRawFileDescription": "Spiller av testfilen med kjent lengde. Krever testfilens URL.", - "atmosTestAsbarNative": "Sample-buffer-renderer (nativ)", - "atmosTestAsbarNativeDescription": "Sender filens urørte komprimerte lyd rett til systemets renderer. Krever URL til testfilen.", - "atmosTestAsbarGenerated": "Sample-buffer-renderer (gjenoppbygd)", - "atmosTestAsbarGeneratedDescription": "Det samme, men med lydbeskrivelsen bygd slik avspilling bygger den. Krever URL til testfilen.", - "atmosTestSessionMode": "Bruk filmavspillingsmodus", - "atmosTestSessionModeDescription": "Av bruker modusen Dolby dokumenterer. På bruker den tidligere modusen.", - "atmosTestShowRoutePicker": "Velg AirPlay-utgang", - "atmosTestHideRoutePicker": "Skjul AirPlay-utgangsvelger", - "atmosTestRoutePickerDescription": "Sender testen til en AirPlay-mottaker. Bare AirPlay rapporterer den valgte lydmodusen.", - "atmosTestStop": "Stopp test", - "atmosTestUrl": "Testfilens URL", - "atmosTestUrlDescription": "HTTP-URL til en rå .ec3 Dolby Atmos-fil (f.eks. hentet ut med ffmpeg)", - "atmosTestUrlMissing": "Angi testfilens URL først", - "atmosTestStatus": "Status", "dvConversionMode": "Dolby Vision-konvertering", "dvConversionModeDescription": "Velg hvordan ExoPlayer håndterer filer med Dolby Vision-profil 7.", "dvConversionAuto": "Automatisk", diff --git a/lib/i18n/nl.i18n.json b/lib/i18n/nl.i18n.json index 3e06f2a3..d3aee80c 100644 --- a/lib/i18n/nl.i18n.json +++ b/lib/i18n/nl.i18n.json @@ -300,30 +300,6 @@ "downmixCenterBoostShort": "dB", "audioDownmixNormalize": "Volume normaliseren bij downmix", "audioDownmixNormalizeDescription": "Verlaagt de mix om clipping te voorkomen. Zet uit om het originele volume te behouden (kan vervormen bij luide scènes).", - "atmosDiagnostics": "Atmos-uitvoertest", - "atmosDiagnosticsDescription": "Diagnosticeer de Dolby Atmos-uitvoer door testsignalen via de systeemspeler af te spelen", - "atmosTestHlsAtmos": "Apple Atmos-stream", - "atmosTestHlsAtmosDescription": "Bewezen werkende Dolby Atmos-stream. De receiver zou Dolby Atmos moeten tonen.", - "atmosTestHlsControl": "Apple surround-stream", - "atmosTestHlsControlDescription": "Controlestream zonder Atmos. De receiver zou surround zonder Atmos moeten tonen.", - "atmosTestRawStream": "Ruwe EAC3-stream", - "atmosTestRawStreamDescription": "Streamt het testbestand precies zoals Atmos-weergave in de speler. Vereist de URL van het testbestand.", - "atmosTestRawFile": "Ruw EAC3-bestand", - "atmosTestRawFileDescription": "Speelt het testbestand met bekende lengte af. Vereist de URL van het testbestand.", - "atmosTestAsbarNative": "Sample-bufferrenderer (native)", - "atmosTestAsbarNativeDescription": "Stuurt de ongewijzigde gecomprimeerde audio van het bestand rechtstreeks naar de systeemrenderer. Vereist de URL van het testbestand.", - "atmosTestAsbarGenerated": "Sample-bufferrenderer (opnieuw opgebouwd)", - "atmosTestAsbarGeneratedDescription": "Hetzelfde, maar met de audiobeschrijving opgebouwd zoals bij afspelen. Vereist de URL van het testbestand.", - "atmosTestSessionMode": "Filmafspeelmodus gebruiken", - "atmosTestSessionModeDescription": "Uit gebruikt de modus die Dolby documenteert. Aan gebruikt de vorige modus.", - "atmosTestShowRoutePicker": "AirPlay-uitvoer kiezen", - "atmosTestHideRoutePicker": "AirPlay-uitvoerkiezer verbergen", - "atmosTestRoutePickerDescription": "Stuurt de test naar een AirPlay-ontvanger. Alleen AirPlay meldt de bepaalde audiomodus.", - "atmosTestStop": "Test stoppen", - "atmosTestUrl": "URL van testbestand", - "atmosTestUrlDescription": "HTTP-URL van een ruw .ec3 Dolby Atmos-bestand (bijv. uitgepakt met ffmpeg)", - "atmosTestUrlMissing": "Stel eerst de URL van het testbestand in", - "atmosTestStatus": "Status", "dvConversionMode": "Dolby Vision-conversie", "dvConversionModeDescription": "Kies hoe ExoPlayer Dolby Vision Profile 7-bestanden verwerkt.", "dvConversionAuto": "Automatisch", diff --git a/lib/i18n/pl.i18n.json b/lib/i18n/pl.i18n.json index cc874e19..b9d28d14 100644 --- a/lib/i18n/pl.i18n.json +++ b/lib/i18n/pl.i18n.json @@ -300,30 +300,6 @@ "downmixCenterBoostShort": "dB", "audioDownmixNormalize": "Normalizacja głośności przy miksowaniu", "audioDownmixNormalizeDescription": "Obniża miks, aby zapobiec przesterowaniu. Wyłącz, aby zachować oryginalną głośność (głośne sceny mogą być zniekształcone).", - "atmosDiagnostics": "Test wyjścia Atmos", - "atmosDiagnosticsDescription": "Diagnozuj wyjście Dolby Atmos, odtwarzając sygnały testowe przez odtwarzacz systemowy", - "atmosTestHlsAtmos": "Strumień Atmos Apple", - "atmosTestHlsAtmosDescription": "Sprawdzony strumień Dolby Atmos. Amplituner powinien pokazać Dolby Atmos.", - "atmosTestHlsControl": "Strumień dźwięku przestrzennego Apple", - "atmosTestHlsControlDescription": "Strumień kontrolny bez Atmos. Amplituner powinien wskazywać dźwięk przestrzenny bez Atmos.", - "atmosTestRawStream": "Surowy strumień EAC3", - "atmosTestRawStreamDescription": "Przesyła strumieniowo plik testowy dokładnie tak jak podczas odtwarzania Atmos w odtwarzaczu. Wymaga adresu URL pliku testowego.", - "atmosTestRawFile": "Surowy plik EAC3", - "atmosTestRawFileDescription": "Odtwarza plik testowy o znanej długości. Wymaga URL pliku testowego.", - "atmosTestAsbarNative": "Renderer bufora próbek (natywny)", - "atmosTestAsbarNativeDescription": "Przekazuje nienaruszony skompresowany dźwięk pliku prosto do renderera systemu. Wymaga URL pliku testowego.", - "atmosTestAsbarGenerated": "Renderer bufora próbek (odtworzony)", - "atmosTestAsbarGeneratedDescription": "To samo, ale z opisem dźwięku budowanym tak jak przy odtwarzaniu. Wymaga URL pliku testowego.", - "atmosTestSessionMode": "Użyj trybu odtwarzania filmów", - "atmosTestSessionModeDescription": "Wyłączone używa trybu udokumentowanego przez Dolby. Włączone używa poprzedniego trybu.", - "atmosTestShowRoutePicker": "Wybierz wyjście AirPlay", - "atmosTestHideRoutePicker": "Ukryj wybór wyjścia AirPlay", - "atmosTestRoutePickerDescription": "Wysyła test do odbiornika AirPlay. Tylko AirPlay zgłasza ustalony tryb dźwięku.", - "atmosTestStop": "Zatrzymaj test", - "atmosTestUrl": "Adres URL pliku testowego", - "atmosTestUrlDescription": "Adres URL HTTP surowego pliku Dolby Atmos w formacie .ec3 (np. wyodrębnionego za pomocą ffmpeg)", - "atmosTestUrlMissing": "Najpierw ustaw adres URL pliku testowego", - "atmosTestStatus": "Stan", "dvConversionMode": "Konwersja Dolby Vision", "dvConversionModeDescription": "Wybierz, jak ExoPlayer obsługuje pliki Dolby Vision Profile 7.", "dvConversionAuto": "Automatycznie", diff --git a/lib/i18n/pt.i18n.json b/lib/i18n/pt.i18n.json index 3588ecf2..9e13a913 100644 --- a/lib/i18n/pt.i18n.json +++ b/lib/i18n/pt.i18n.json @@ -300,30 +300,6 @@ "downmixCenterBoostShort": "dB", "audioDownmixNormalize": "Normalizar volume na conversão para estéreo", "audioDownmixNormalizeDescription": "Reduzir o volume da mixagem para evitar saturação. Desative para manter o volume original, que pode distorcer em cenas muito altas.", - "atmosDiagnostics": "Teste de saída Atmos", - "atmosDiagnosticsDescription": "Diagnosticar a saída Dolby Atmos reproduzindo sinais de teste pelo reprodutor do sistema", - "atmosTestHlsAtmos": "Transmissão Atmos da Apple", - "atmosTestHlsAtmosDescription": "Transmissão Dolby Atmos comprovadamente compatível. O receptor deve indicar Dolby Atmos.", - "atmosTestHlsControl": "Transmissão surround da Apple", - "atmosTestHlsControlDescription": "Transmissão de controle sem Atmos. O receptor deve indicar surround sem Atmos.", - "atmosTestRawStream": "Transmissão EAC3 bruta", - "atmosTestRawStreamDescription": "Transmite o arquivo de teste exatamente como na reprodução Atmos pelo reprodutor. Requer a URL do arquivo de teste.", - "atmosTestRawFile": "Arquivo EAC3 bruto", - "atmosTestRawFileDescription": "Reproduz o arquivo de teste com duração conhecida. Requer a URL do arquivo de teste.", - "atmosTestAsbarNative": "Renderizador de buffer de amostras (nativo)", - "atmosTestAsbarNativeDescription": "Envia o áudio comprimido intacto do ficheiro diretamente para o renderizador do sistema. Requer o URL do ficheiro de teste.", - "atmosTestAsbarGenerated": "Renderizador de buffer de amostras (reconstruído)", - "atmosTestAsbarGeneratedDescription": "O mesmo, mas com a descrição de áudio construída como na reprodução. Requer o URL do ficheiro de teste.", - "atmosTestSessionMode": "Usar modo de reprodução de filmes", - "atmosTestSessionModeDescription": "Desativado usa o modo documentado pela Dolby. Ativado usa o modo anterior.", - "atmosTestShowRoutePicker": "Escolher saída AirPlay", - "atmosTestHideRoutePicker": "Ocultar seletor de saída AirPlay", - "atmosTestRoutePickerDescription": "Envia o teste para um recetor AirPlay. Só o AirPlay comunica o modo de áudio resolvido.", - "atmosTestStop": "Parar teste", - "atmosTestUrl": "URL do arquivo de teste", - "atmosTestUrlDescription": "URL HTTP de um arquivo .ec3 Dolby Atmos bruto (ex.: extraído com ffmpeg)", - "atmosTestUrlMissing": "Defina primeiro a URL do arquivo de teste", - "atmosTestStatus": "Status", "dvConversionMode": "Conversão Dolby Vision", "dvConversionModeDescription": "Escolha como o ExoPlayer lida com arquivos Dolby Vision Profile 7.", "dvConversionAuto": "Automático", diff --git a/lib/i18n/ru.i18n.json b/lib/i18n/ru.i18n.json index 6bafaacf..c0ec2f39 100644 --- a/lib/i18n/ru.i18n.json +++ b/lib/i18n/ru.i18n.json @@ -300,30 +300,6 @@ "downmixCenterBoostShort": "дБ", "audioDownmixNormalize": "Нормализация громкости при микшировании", "audioDownmixNormalizeDescription": "Снижает уровень микса во избежание клиппинга. Отключите, чтобы сохранить исходную громкость (возможны искажения в громких сценах).", - "atmosDiagnostics": "Тест вывода Atmos", - "atmosDiagnosticsDescription": "Диагностика вывода Dolby Atmos воспроизведением тестовых сигналов через системный проигрыватель", - "atmosTestHlsAtmos": "Atmos-поток Apple", - "atmosTestHlsAtmosDescription": "Заведомо рабочий поток Dolby Atmos. Ресивер должен показать Dolby Atmos.", - "atmosTestHlsControl": "Surround-поток Apple", - "atmosTestHlsControlDescription": "Контрольный поток без Atmos. Ресивер должен показать объёмный звук без Atmos.", - "atmosTestRawStream": "Сырой поток EAC3", - "atmosTestRawStreamDescription": "Транслирует тестовый файл точно так же, как Atmos-воспроизведение в проигрывателе. Требуется URL тестового файла.", - "atmosTestRawFile": "Сырой файл EAC3", - "atmosTestRawFileDescription": "Воспроизводит тестовый файл с известной длиной. Требуется URL тестового файла.", - "atmosTestAsbarNative": "Рендерер сэмпл-буфера (нативный)", - "atmosTestAsbarNativeDescription": "Передаёт неизменённый сжатый звук файла прямо в системный рендерер. Требуется URL тестового файла.", - "atmosTestAsbarGenerated": "Рендерер сэмпл-буфера (пересобранный)", - "atmosTestAsbarGeneratedDescription": "То же, но с описанием звука, собранным как при воспроизведении. Требуется URL тестового файла.", - "atmosTestSessionMode": "Использовать режим воспроизведения фильмов", - "atmosTestSessionModeDescription": "Выключено — режим, описанный Dolby. Включено — прежний режим.", - "atmosTestShowRoutePicker": "Выбрать выход AirPlay", - "atmosTestHideRoutePicker": "Скрыть выбор выхода AirPlay", - "atmosTestRoutePickerDescription": "Отправляет тест на приёмник AirPlay. Только AirPlay сообщает определённый режим звука.", - "atmosTestStop": "Остановить тест", - "atmosTestUrl": "URL тестового файла", - "atmosTestUrlDescription": "HTTP-URL сырого файла .ec3 Dolby Atmos (например, извлечённого через ffmpeg)", - "atmosTestUrlMissing": "Сначала укажите URL тестового файла", - "atmosTestStatus": "Статус", "dvConversionMode": "Преобразование Dolby Vision", "dvConversionModeDescription": "Выберите, как ExoPlayer обрабатывает файлы Dolby Vision Profile 7.", "dvConversionAuto": "Авто", diff --git a/lib/i18n/strings.g.dart b/lib/i18n/strings.g.dart index ce6a2720..6891ea51 100644 --- a/lib/i18n/strings.g.dart +++ b/lib/i18n/strings.g.dart @@ -4,7 +4,7 @@ /// To regenerate, run: `dart run slang` /// /// Locales: 22 -/// Strings: 38880 (1767 per locale) +/// Strings: 38352 (1743 per locale) // coverage:ignore-file // ignore_for_file: type=lint, unused_import diff --git a/lib/i18n/strings_az.g.dart b/lib/i18n/strings_az.g.dart index 779da56b..eacd3f7c 100644 --- a/lib/i18n/strings_az.g.dart +++ b/lib/i18n/strings_az.g.dart @@ -421,30 +421,6 @@ class _Translations$settings$az extends Translations$settings$en { @override String get downmixCenterBoostShort => 'dB'; @override String get audioDownmixNormalize => 'Çevirmədə səsi normallaşdır'; @override String get audioDownmixNormalizeDescription => 'Səs kəsilmələrinin qarşısını almaq üçün səviyyəni endirin.'; - @override String get atmosDiagnostics => 'Atmos çıxış testi'; - @override String get atmosDiagnosticsDescription => 'Sistem oynadıcısı vasitəsilə test siqnalları çalan Dolby Atmos çıxışını yoxlayın'; - @override String get atmosTestHlsAtmos => 'Apple Atmos axını'; - @override String get atmosTestHlsAtmosDescription => 'Düzgün işlədiyi məlum olan Dolby Atmos axını. Qəbuledici Dolby Atmos göstərməlidir.'; - @override String get atmosTestHlsControl => 'Apple əhatəli səs axını'; - @override String get atmosTestHlsControlDescription => 'Atmos olmayan idarəetmə axını.'; - @override String get atmosTestRawStream => 'Xam EAC3 axını'; - @override String get atmosTestRawStreamDescription => 'Test faylını eynilə oynadıcı daxili Atmos kimi yayımlayır.'; - @override String get atmosTestRawFile => 'Xam EAC3 faylı'; - @override String get atmosTestRawFileDescription => 'Məlum uzunluqda test faylını oynadır.'; - @override String get atmosTestAsbarNative => 'Nümunə bufer rendereri (daxili)'; - @override String get atmosTestAsbarNativeDescription => 'Faylın dəyişdirilməmiş sıxılmış səsini birbaşa sistem rendererinə ötürür. Test faylının URL-i tələb olunur.'; - @override String get atmosTestAsbarGenerated => 'Nümunə bufer rendereri (yenidən qurulmuş)'; - @override String get atmosTestAsbarGeneratedDescription => 'Eyni, lakin səs təsviri oynatmanın qurduğu kimi yenidən qurulur. Test faylının URL-i tələb olunur.'; - @override String get atmosTestSessionMode => 'Film oynatma seansı rejimindən istifadə et'; - @override String get atmosTestSessionModeDescription => 'Söndürüldükdə Dolby-nin sənədləşdirdiyi rejim işlədilir. Yandırıldıqda oynatmanın əvvəl istifadə etdiyi rejim işlədilir.'; - @override String get atmosTestShowRoutePicker => 'AirPlay çıxışını seç'; - @override String get atmosTestHideRoutePicker => 'AirPlay çıxış seçicisini gizlət'; - @override String get atmosTestRoutePickerDescription => 'Testi AirPlay qəbuledicisinə göndərir. Müəyyən edilmiş səs rejimini yalnız AirPlay bildirir.'; - @override String get atmosTestStop => 'Testi saxla'; - @override String get atmosTestUrl => 'Test faylı URL-i'; - @override String get atmosTestUrlDescription => 'Xam .ec3 Dolby Atmos faylının HTTP URL-i'; - @override String get atmosTestUrlMissing => 'Əvvəlcə test faylı URL-ini təyin edin'; - @override String get atmosTestStatus => 'Status'; @override String get dvConversionMode => 'Dolby Vision çevrilməsi'; @override String get dvConversionModeDescription => 'ExoPlayer-in Dolby Vision Profile 7 fayllarını necə emal edəcəyini seçin.'; @override String get dvConversionAuto => 'Avtomatik'; @@ -2882,30 +2858,6 @@ extension on TranslationsAz { 'settings.downmixCenterBoostShort' => 'dB', 'settings.audioDownmixNormalize' => 'Çevirmədə səsi normallaşdır', 'settings.audioDownmixNormalizeDescription' => 'Səs kəsilmələrinin qarşısını almaq üçün səviyyəni endirin.', - 'settings.atmosDiagnostics' => 'Atmos çıxış testi', - 'settings.atmosDiagnosticsDescription' => 'Sistem oynadıcısı vasitəsilə test siqnalları çalan Dolby Atmos çıxışını yoxlayın', - 'settings.atmosTestHlsAtmos' => 'Apple Atmos axını', - 'settings.atmosTestHlsAtmosDescription' => 'Düzgün işlədiyi məlum olan Dolby Atmos axını. Qəbuledici Dolby Atmos göstərməlidir.', - 'settings.atmosTestHlsControl' => 'Apple əhatəli səs axını', - 'settings.atmosTestHlsControlDescription' => 'Atmos olmayan idarəetmə axını.', - 'settings.atmosTestRawStream' => 'Xam EAC3 axını', - 'settings.atmosTestRawStreamDescription' => 'Test faylını eynilə oynadıcı daxili Atmos kimi yayımlayır.', - 'settings.atmosTestRawFile' => 'Xam EAC3 faylı', - 'settings.atmosTestRawFileDescription' => 'Məlum uzunluqda test faylını oynadır.', - 'settings.atmosTestAsbarNative' => 'Nümunə bufer rendereri (daxili)', - 'settings.atmosTestAsbarNativeDescription' => 'Faylın dəyişdirilməmiş sıxılmış səsini birbaşa sistem rendererinə ötürür. Test faylının URL-i tələb olunur.', - 'settings.atmosTestAsbarGenerated' => 'Nümunə bufer rendereri (yenidən qurulmuş)', - 'settings.atmosTestAsbarGeneratedDescription' => 'Eyni, lakin səs təsviri oynatmanın qurduğu kimi yenidən qurulur. Test faylının URL-i tələb olunur.', - 'settings.atmosTestSessionMode' => 'Film oynatma seansı rejimindən istifadə et', - 'settings.atmosTestSessionModeDescription' => 'Söndürüldükdə Dolby-nin sənədləşdirdiyi rejim işlədilir. Yandırıldıqda oynatmanın əvvəl istifadə etdiyi rejim işlədilir.', - 'settings.atmosTestShowRoutePicker' => 'AirPlay çıxışını seç', - 'settings.atmosTestHideRoutePicker' => 'AirPlay çıxış seçicisini gizlət', - 'settings.atmosTestRoutePickerDescription' => 'Testi AirPlay qəbuledicisinə göndərir. Müəyyən edilmiş səs rejimini yalnız AirPlay bildirir.', - 'settings.atmosTestStop' => 'Testi saxla', - 'settings.atmosTestUrl' => 'Test faylı URL-i', - 'settings.atmosTestUrlDescription' => 'Xam .ec3 Dolby Atmos faylının HTTP URL-i', - 'settings.atmosTestUrlMissing' => 'Əvvəlcə test faylı URL-ini təyin edin', - 'settings.atmosTestStatus' => 'Status', 'settings.dvConversionMode' => 'Dolby Vision çevrilməsi', 'settings.dvConversionModeDescription' => 'ExoPlayer-in Dolby Vision Profile 7 fayllarını necə emal edəcəyini seçin.', 'settings.dvConversionAuto' => 'Avtomatik', @@ -3106,8 +3058,6 @@ extension on TranslationsAz { 'mediaMenu.deleteMovieTitle' => 'Bu kino silinsin?', 'mediaMenu.deleteEpisodeConfirm' => 'Seriyanı sil', 'mediaMenu.deleteSeasonConfirm' => 'Mövsümü sil', - _ => null, - } ?? switch (path) { 'mediaMenu.deleteShowConfirm' => 'Serialı sil', 'mediaMenu.deleteMovieConfirm' => 'Kinonu sil', 'mediaMenu.deleteAnyway' => 'Yenə də sil', @@ -3132,6 +3082,8 @@ extension on TranslationsAz { 'rateSheet.noConnectedServices' => 'Orada qiymətləndirmək üçün Tənzimləmələrdən xidmət qoşun.', 'accessibility.mediaCardMovie' => ({required Object title}) => '${title}, kino', 'accessibility.mediaCardShow' => ({required Object title}) => '${title}, TV şou', + _ => null, + } ?? switch (path) { 'accessibility.mediaCardEpisode' => ({required Object title, required Object episodeInfo}) => '${title}, ${episodeInfo}', 'accessibility.mediaCardSeason' => ({required Object title, required Object seasonInfo}) => '${title}, ${seasonInfo}', 'accessibility.mediaCardWatched' => 'baxılıb', @@ -3620,8 +3572,6 @@ extension on TranslationsAz { 'explore.badge.requested' => 'Sorğu göndərildi', 'explore.badge.pendingApproval' => 'Təsdiq gözlənilir', 'explore.badge.processing' => 'Emal edilir', - _ => null, - } ?? switch (path) { 'explore.badge.declined' => 'Rədd edildi', 'explore.badge.requestFailed' => 'Sorğu uğursuz oldu', 'explore.badge.requested4k' => '4K sorğu göndərildi', @@ -3646,6 +3596,8 @@ extension on TranslationsAz { 'explore.stats.completed' => ({required Object n}) => '${n} tamamladı', 'explore.stats.onHold' => ({required Object n}) => '${n} fasilədə', 'explore.stats.dropped' => ({required Object n}) => '${n} izləməyi dayandırdı', + _ => null, + } ?? switch (path) { 'explore.season.winter' => 'Qış', 'explore.season.spring' => 'Yaz', 'explore.season.summer' => 'Yay', @@ -4134,8 +4086,6 @@ extension on TranslationsAz { 'performanceOverlay.dropped' => 'İtirilmiş kadrlar', 'performanceOverlay.dvRpus' => 'DV RPU-ları', 'performanceOverlay.dvRpuAverage' => 'DV RPU Ort.', - _ => null, - } ?? switch (path) { 'performanceOverlay.dvSampleAverage' => 'DV Nümunə Ort.', 'performanceOverlay.maxLuma' => 'Maks Luma', 'performanceOverlay.minLuma' => 'Min Luma', @@ -4160,6 +4110,8 @@ extension on TranslationsAz { 'externalPlayer.playerPackage' => 'Paket adı', 'externalPlayer.playerUrlScheme' => 'URL sxemi', 'externalPlayer.off' => 'Söndürülüb', + _ => null, + } ?? switch (path) { 'externalPlayer.launchFailed' => 'Xarici oynadıcı açıla bilmədi', 'externalPlayer.appNotInstalled' => ({required Object name}) => '${name} quraşdırılmayıb', 'externalPlayer.playInExternalPlayer' => 'Xarici oynadıcıda oynat', diff --git a/lib/i18n/strings_bg.g.dart b/lib/i18n/strings_bg.g.dart index 55128269..3b2d5766 100644 --- a/lib/i18n/strings_bg.g.dart +++ b/lib/i18n/strings_bg.g.dart @@ -421,30 +421,6 @@ class _Translations$settings$bg extends Translations$settings$en { @override String get downmixCenterBoostShort => 'дБ'; @override String get audioDownmixNormalize => 'Нормализиране на звука при смесване'; @override String get audioDownmixNormalizeDescription => 'Понижава микса, за да се предотврати клипинг. Изключете, за да запазите оригиналната сила на звука (възможни изкривявания при силни сцени).'; - @override String get atmosDiagnostics => 'Тест на Atmos изхода'; - @override String get atmosDiagnosticsDescription => 'Диагностика на Dolby Atmos изхода чрез възпроизвеждане на тестови сигнали през системния плейър'; - @override String get atmosTestHlsAtmos => 'Apple Atmos поток'; - @override String get atmosTestHlsAtmosDescription => 'Гарантирано работещ Dolby Atmos поток. Ресийвърът трябва да покаже Dolby Atmos.'; - @override String get atmosTestHlsControl => 'Apple съраунд поток'; - @override String get atmosTestHlsControlDescription => 'Контролен поток без Atmos. Ресийвърът трябва да покаже съраунд без Atmos.'; - @override String get atmosTestRawStream => 'Суров EAC3 поток'; - @override String get atmosTestRawStreamDescription => 'Стриймва тестовия файл точно както Atmos възпроизвеждането в плейъра. Изисква URL на тестовия файл.'; - @override String get atmosTestRawFile => 'Суров EAC3 файл'; - @override String get atmosTestRawFileDescription => 'Възпроизвежда тестовия файл с известна дължина. Изисква URL на тестовия файл.'; - @override String get atmosTestAsbarNative => 'Рендер със семпъл буфер (native)'; - @override String get atmosTestAsbarNativeDescription => 'Подава несменения компресиран звук от файла директно към системния рендер. Изисква URL на тестовия файл.'; - @override String get atmosTestAsbarGenerated => 'Рендер със семпъл буфер (възстановен)'; - @override String get atmosTestAsbarGeneratedDescription => 'Същото, но с аудиоописание, изградено както при възпроизвеждане. Изисква URL на тестовия файл.'; - @override String get atmosTestSessionMode => 'Използвай режим за възпроизвеждане на филми'; - @override String get atmosTestSessionModeDescription => 'Изключено използва режима, документиран от Dolby. Включено използва предишния режим.'; - @override String get atmosTestShowRoutePicker => 'Избери AirPlay изход'; - @override String get atmosTestHideRoutePicker => 'Скрий избора на AirPlay изход'; - @override String get atmosTestRoutePickerDescription => 'Изпраща теста към AirPlay приемник. Само AirPlay съобщава разрешения аудиорежим.'; - @override String get atmosTestStop => 'Спри теста'; - @override String get atmosTestUrl => 'URL на тестовия файл'; - @override String get atmosTestUrlDescription => 'HTTP URL на суров .ec3 Dolby Atmos файл (напр. извлечен с ffmpeg)'; - @override String get atmosTestUrlMissing => 'Първо задайте URL на тестовия файл'; - @override String get atmosTestStatus => 'Състояние'; @override String get dvConversionMode => 'Преобразуване на Dolby Vision'; @override String get dvConversionModeDescription => 'Изберете как ExoPlayer обработва файлове с Dolby Vision Profile 7.'; @override String get dvConversionAuto => 'Автоматично'; @@ -2882,30 +2858,6 @@ extension on TranslationsBg { 'settings.downmixCenterBoostShort' => 'дБ', 'settings.audioDownmixNormalize' => 'Нормализиране на звука при смесване', 'settings.audioDownmixNormalizeDescription' => 'Понижава микса, за да се предотврати клипинг. Изключете, за да запазите оригиналната сила на звука (възможни изкривявания при силни сцени).', - 'settings.atmosDiagnostics' => 'Тест на Atmos изхода', - 'settings.atmosDiagnosticsDescription' => 'Диагностика на Dolby Atmos изхода чрез възпроизвеждане на тестови сигнали през системния плейър', - 'settings.atmosTestHlsAtmos' => 'Apple Atmos поток', - 'settings.atmosTestHlsAtmosDescription' => 'Гарантирано работещ Dolby Atmos поток. Ресийвърът трябва да покаже Dolby Atmos.', - 'settings.atmosTestHlsControl' => 'Apple съраунд поток', - 'settings.atmosTestHlsControlDescription' => 'Контролен поток без Atmos. Ресийвърът трябва да покаже съраунд без Atmos.', - 'settings.atmosTestRawStream' => 'Суров EAC3 поток', - 'settings.atmosTestRawStreamDescription' => 'Стриймва тестовия файл точно както Atmos възпроизвеждането в плейъра. Изисква URL на тестовия файл.', - 'settings.atmosTestRawFile' => 'Суров EAC3 файл', - 'settings.atmosTestRawFileDescription' => 'Възпроизвежда тестовия файл с известна дължина. Изисква URL на тестовия файл.', - 'settings.atmosTestAsbarNative' => 'Рендер със семпъл буфер (native)', - 'settings.atmosTestAsbarNativeDescription' => 'Подава несменения компресиран звук от файла директно към системния рендер. Изисква URL на тестовия файл.', - 'settings.atmosTestAsbarGenerated' => 'Рендер със семпъл буфер (възстановен)', - 'settings.atmosTestAsbarGeneratedDescription' => 'Същото, но с аудиоописание, изградено както при възпроизвеждане. Изисква URL на тестовия файл.', - 'settings.atmosTestSessionMode' => 'Използвай режим за възпроизвеждане на филми', - 'settings.atmosTestSessionModeDescription' => 'Изключено използва режима, документиран от Dolby. Включено използва предишния режим.', - 'settings.atmosTestShowRoutePicker' => 'Избери AirPlay изход', - 'settings.atmosTestHideRoutePicker' => 'Скрий избора на AirPlay изход', - 'settings.atmosTestRoutePickerDescription' => 'Изпраща теста към AirPlay приемник. Само AirPlay съобщава разрешения аудиорежим.', - 'settings.atmosTestStop' => 'Спри теста', - 'settings.atmosTestUrl' => 'URL на тестовия файл', - 'settings.atmosTestUrlDescription' => 'HTTP URL на суров .ec3 Dolby Atmos файл (напр. извлечен с ffmpeg)', - 'settings.atmosTestUrlMissing' => 'Първо задайте URL на тестовия файл', - 'settings.atmosTestStatus' => 'Състояние', 'settings.dvConversionMode' => 'Преобразуване на Dolby Vision', 'settings.dvConversionModeDescription' => 'Изберете как ExoPlayer обработва файлове с Dolby Vision Profile 7.', 'settings.dvConversionAuto' => 'Автоматично', @@ -3106,8 +3058,6 @@ extension on TranslationsBg { 'mediaMenu.deleteMovieTitle' => 'Да изтрия ли този филм?', 'mediaMenu.deleteEpisodeConfirm' => 'Изтрий епизода', 'mediaMenu.deleteSeasonConfirm' => 'Изтрий сезона', - _ => null, - } ?? switch (path) { 'mediaMenu.deleteShowConfirm' => 'Изтрий сериала', 'mediaMenu.deleteMovieConfirm' => 'Изтрий филма', 'mediaMenu.deleteAnyway' => 'Изтрий въпреки това', @@ -3132,6 +3082,8 @@ extension on TranslationsBg { 'rateSheet.noConnectedServices' => 'Свържи услуга от настройките, за да оценяваш и в нея.', 'accessibility.mediaCardMovie' => ({required Object title}) => '${title}, филм', 'accessibility.mediaCardShow' => ({required Object title}) => '${title}, ТВ сериал', + _ => null, + } ?? switch (path) { 'accessibility.mediaCardEpisode' => ({required Object title, required Object episodeInfo}) => '${title}, ${episodeInfo}', 'accessibility.mediaCardSeason' => ({required Object title, required Object seasonInfo}) => '${title}, ${seasonInfo}', 'accessibility.mediaCardWatched' => 'гледано', @@ -3620,8 +3572,6 @@ extension on TranslationsBg { 'explore.badge.requested' => 'Заявен', 'explore.badge.pendingApproval' => 'В очакване на одобрение', 'explore.badge.processing' => 'Обработва се', - _ => null, - } ?? switch (path) { 'explore.badge.declined' => 'Отхвърлен', 'explore.badge.requestFailed' => 'Заявката се провали', 'explore.badge.requested4k' => 'Заявен в 4K', @@ -3646,6 +3596,8 @@ extension on TranslationsBg { 'explore.stats.completed' => ({required Object n}) => '${n} завършили', 'explore.stats.onHold' => ({required Object n}) => '${n} на пауза', 'explore.stats.dropped' => ({required Object n}) => '${n} изоставили', + _ => null, + } ?? switch (path) { 'explore.season.winter' => 'Зима', 'explore.season.spring' => 'Пролет', 'explore.season.summer' => 'Лято', @@ -4134,8 +4086,6 @@ extension on TranslationsBg { 'performanceOverlay.dropped' => 'Пропуснати кадри', 'performanceOverlay.dvRpus' => 'DV RPU', 'performanceOverlay.dvRpuAverage' => 'Средно DV RPU', - _ => null, - } ?? switch (path) { 'performanceOverlay.dvSampleAverage' => 'Средно DV семпл', 'performanceOverlay.maxLuma' => 'Макс. яркост', 'performanceOverlay.minLuma' => 'Мин. яркост', @@ -4160,6 +4110,8 @@ extension on TranslationsBg { 'externalPlayer.playerPackage' => 'Име на пакет', 'externalPlayer.playerUrlScheme' => 'URL схема', 'externalPlayer.off' => 'Изключено', + _ => null, + } ?? switch (path) { 'externalPlayer.launchFailed' => 'Неуспешно отваряне на външен плеър', 'externalPlayer.appNotInstalled' => ({required Object name}) => '${name} не е инсталиран', 'externalPlayer.playInExternalPlayer' => 'Пусни във външен плеър', diff --git a/lib/i18n/strings_da.g.dart b/lib/i18n/strings_da.g.dart index 77727aa5..ab2b2f5a 100644 --- a/lib/i18n/strings_da.g.dart +++ b/lib/i18n/strings_da.g.dart @@ -421,30 +421,6 @@ class _Translations$settings$da extends Translations$settings$en { @override String get downmixCenterBoostShort => 'dB'; @override String get audioDownmixNormalize => 'Normaliser lydstyrken ved downmix'; @override String get audioDownmixNormalizeDescription => 'Sænk mixets lydstyrke for at undgå clipping. Slå fra for at bevare den oprindelige lydstyrke (høje scener kan blive forvrænget).'; - @override String get atmosDiagnostics => 'Atmos-outputtest'; - @override String get atmosDiagnosticsDescription => 'Diagnosticér Dolby Atmos-output ved at afspille testsignaler gennem systemafspilleren'; - @override String get atmosTestHlsAtmos => 'Apple Atmos-stream'; - @override String get atmosTestHlsAtmosDescription => 'Kendt god Dolby Atmos-stream. Receiveren bør vise Dolby Atmos.'; - @override String get atmosTestHlsControl => 'Apple surround-stream'; - @override String get atmosTestHlsControlDescription => 'Kontrolstream uden Atmos. Receiveren bør vise surround uden Atmos.'; - @override String get atmosTestRawStream => 'Rå EAC3-stream'; - @override String get atmosTestRawStreamDescription => 'Streamer testfilen præcis som Atmos-afspilning i afspilleren. Kræver testfilens URL.'; - @override String get atmosTestRawFile => 'Rå EAC3-fil'; - @override String get atmosTestRawFileDescription => 'Afspiller testfilen med kendt længde. Kræver testfilens URL.'; - @override String get atmosTestAsbarNative => 'Sample-buffer-renderer (native)'; - @override String get atmosTestAsbarNativeDescription => 'Sender filens urørte komprimerede lyd direkte til systemets renderer. Kræver testfilens URL.'; - @override String get atmosTestAsbarGenerated => 'Sample-buffer-renderer (genopbygget)'; - @override String get atmosTestAsbarGeneratedDescription => 'Det samme, men med lydbeskrivelsen opbygget som ved afspilning. Kræver testfilens URL.'; - @override String get atmosTestSessionMode => 'Brug filmafspilningstilstand'; - @override String get atmosTestSessionModeDescription => 'Fra bruger den tilstand, Dolby dokumenterer. Til bruger den tidligere tilstand.'; - @override String get atmosTestShowRoutePicker => 'Vælg AirPlay-udgang'; - @override String get atmosTestHideRoutePicker => 'Skjul AirPlay-udgangsvælger'; - @override String get atmosTestRoutePickerDescription => 'Sender testen til en AirPlay-modtager. Kun AirPlay rapporterer den valgte lydtilstand.'; - @override String get atmosTestStop => 'Stop test'; - @override String get atmosTestUrl => 'Testfilens URL'; - @override String get atmosTestUrlDescription => 'HTTP-URL til en rå .ec3 Dolby Atmos-fil (f.eks. udtrukket med ffmpeg)'; - @override String get atmosTestUrlMissing => 'Angiv testfilens URL først'; - @override String get atmosTestStatus => 'Status'; @override String get dvConversionMode => 'Dolby Vision-konvertering'; @override String get dvConversionModeDescription => 'Vælg, hvordan ExoPlayer håndterer Dolby Vision Profile 7-filer.'; @override String get dvConversionAuto => 'Automatisk'; @@ -2882,30 +2858,6 @@ extension on TranslationsDa { 'settings.downmixCenterBoostShort' => 'dB', 'settings.audioDownmixNormalize' => 'Normaliser lydstyrken ved downmix', 'settings.audioDownmixNormalizeDescription' => 'Sænk mixets lydstyrke for at undgå clipping. Slå fra for at bevare den oprindelige lydstyrke (høje scener kan blive forvrænget).', - 'settings.atmosDiagnostics' => 'Atmos-outputtest', - 'settings.atmosDiagnosticsDescription' => 'Diagnosticér Dolby Atmos-output ved at afspille testsignaler gennem systemafspilleren', - 'settings.atmosTestHlsAtmos' => 'Apple Atmos-stream', - 'settings.atmosTestHlsAtmosDescription' => 'Kendt god Dolby Atmos-stream. Receiveren bør vise Dolby Atmos.', - 'settings.atmosTestHlsControl' => 'Apple surround-stream', - 'settings.atmosTestHlsControlDescription' => 'Kontrolstream uden Atmos. Receiveren bør vise surround uden Atmos.', - 'settings.atmosTestRawStream' => 'Rå EAC3-stream', - 'settings.atmosTestRawStreamDescription' => 'Streamer testfilen præcis som Atmos-afspilning i afspilleren. Kræver testfilens URL.', - 'settings.atmosTestRawFile' => 'Rå EAC3-fil', - 'settings.atmosTestRawFileDescription' => 'Afspiller testfilen med kendt længde. Kræver testfilens URL.', - 'settings.atmosTestAsbarNative' => 'Sample-buffer-renderer (native)', - 'settings.atmosTestAsbarNativeDescription' => 'Sender filens urørte komprimerede lyd direkte til systemets renderer. Kræver testfilens URL.', - 'settings.atmosTestAsbarGenerated' => 'Sample-buffer-renderer (genopbygget)', - 'settings.atmosTestAsbarGeneratedDescription' => 'Det samme, men med lydbeskrivelsen opbygget som ved afspilning. Kræver testfilens URL.', - 'settings.atmosTestSessionMode' => 'Brug filmafspilningstilstand', - 'settings.atmosTestSessionModeDescription' => 'Fra bruger den tilstand, Dolby dokumenterer. Til bruger den tidligere tilstand.', - 'settings.atmosTestShowRoutePicker' => 'Vælg AirPlay-udgang', - 'settings.atmosTestHideRoutePicker' => 'Skjul AirPlay-udgangsvælger', - 'settings.atmosTestRoutePickerDescription' => 'Sender testen til en AirPlay-modtager. Kun AirPlay rapporterer den valgte lydtilstand.', - 'settings.atmosTestStop' => 'Stop test', - 'settings.atmosTestUrl' => 'Testfilens URL', - 'settings.atmosTestUrlDescription' => 'HTTP-URL til en rå .ec3 Dolby Atmos-fil (f.eks. udtrukket med ffmpeg)', - 'settings.atmosTestUrlMissing' => 'Angiv testfilens URL først', - 'settings.atmosTestStatus' => 'Status', 'settings.dvConversionMode' => 'Dolby Vision-konvertering', 'settings.dvConversionModeDescription' => 'Vælg, hvordan ExoPlayer håndterer Dolby Vision Profile 7-filer.', 'settings.dvConversionAuto' => 'Automatisk', @@ -3106,8 +3058,6 @@ extension on TranslationsDa { 'mediaMenu.deleteMovieTitle' => 'Slet denne film?', 'mediaMenu.deleteEpisodeConfirm' => 'Slet episode', 'mediaMenu.deleteSeasonConfirm' => 'Slet sæson', - _ => null, - } ?? switch (path) { 'mediaMenu.deleteShowConfirm' => 'Slet TV-serie', 'mediaMenu.deleteMovieConfirm' => 'Slet film', 'mediaMenu.deleteAnyway' => 'Slet alligevel', @@ -3132,6 +3082,8 @@ extension on TranslationsDa { 'rateSheet.noConnectedServices' => 'Forbind en tjeneste under Indstillinger for at bedømme via den.', 'accessibility.mediaCardMovie' => ({required Object title}) => '${title}, film', 'accessibility.mediaCardShow' => ({required Object title}) => '${title}, TV-serie', + _ => null, + } ?? switch (path) { 'accessibility.mediaCardEpisode' => ({required Object title, required Object episodeInfo}) => '${title}, ${episodeInfo}', 'accessibility.mediaCardSeason' => ({required Object title, required Object seasonInfo}) => '${title}, ${seasonInfo}', 'accessibility.mediaCardWatched' => 'set', @@ -3620,8 +3572,6 @@ extension on TranslationsDa { 'explore.badge.requested' => 'Anmodet', 'explore.badge.pendingApproval' => 'Afventer godkendelse', 'explore.badge.processing' => 'Behandles', - _ => null, - } ?? switch (path) { 'explore.badge.declined' => 'Afvist', 'explore.badge.requestFailed' => 'Anmodningen mislykkedes', 'explore.badge.requested4k' => '4K anmodet', @@ -3646,6 +3596,8 @@ extension on TranslationsDa { 'explore.stats.completed' => ({required Object n}) => '${n} færdigset', 'explore.stats.onHold' => ({required Object n}) => '${n} på pause', 'explore.stats.dropped' => ({required Object n}) => '${n} droppede', + _ => null, + } ?? switch (path) { 'explore.season.winter' => 'Vinter', 'explore.season.spring' => 'Forår', 'explore.season.summer' => 'Sommer', @@ -4134,8 +4086,6 @@ extension on TranslationsDa { 'performanceOverlay.dropped' => 'Tabte', 'performanceOverlay.dvRpus' => 'DV RPU’er', 'performanceOverlay.dvRpuAverage' => 'DV RPU gns.', - _ => null, - } ?? switch (path) { 'performanceOverlay.dvSampleAverage' => 'DV-sample gns.', 'performanceOverlay.maxLuma' => 'Maks. luma', 'performanceOverlay.minLuma' => 'Min. luma', @@ -4160,6 +4110,8 @@ extension on TranslationsDa { 'externalPlayer.playerPackage' => 'Pakkenavn', 'externalPlayer.playerUrlScheme' => 'URL-skema', 'externalPlayer.off' => 'Fra', + _ => null, + } ?? switch (path) { 'externalPlayer.launchFailed' => 'Kunne ikke åbne ekstern afspiller', 'externalPlayer.appNotInstalled' => ({required Object name}) => '${name} er ikke installeret', 'externalPlayer.playInExternalPlayer' => 'Afspil i ekstern afspiller', diff --git a/lib/i18n/strings_de.g.dart b/lib/i18n/strings_de.g.dart index 96d51cf9..b33c99fe 100644 --- a/lib/i18n/strings_de.g.dart +++ b/lib/i18n/strings_de.g.dart @@ -421,30 +421,6 @@ class _Translations$settings$de extends Translations$settings$en { @override String get downmixCenterBoostShort => 'dB'; @override String get audioDownmixNormalize => 'Lautstärke beim Downmix normalisieren'; @override String get audioDownmixNormalizeDescription => 'Senkt den Mix ab, um Übersteuerung zu vermeiden. Deaktivieren, um die Originallautstärke zu behalten (laute Szenen können verzerren).'; - @override String get atmosDiagnostics => 'Atmos-Ausgabetest'; - @override String get atmosDiagnosticsDescription => 'Dolby-Atmos-Ausgabe diagnostizieren, indem Testsignale über den Systemplayer abgespielt werden'; - @override String get atmosTestHlsAtmos => 'Apple-Atmos-Stream'; - @override String get atmosTestHlsAtmosDescription => 'Garantiert funktionierender Dolby-Atmos-Stream. Der Receiver sollte Dolby Atmos anzeigen.'; - @override String get atmosTestHlsControl => 'Apple-Surround-Stream'; - @override String get atmosTestHlsControlDescription => 'Kontrollstream ohne Atmos. Der Receiver sollte Surround ohne Atmos anzeigen.'; - @override String get atmosTestRawStream => 'Roher EAC3-Stream'; - @override String get atmosTestRawStreamDescription => 'Streamt die Testdatei genau wie die Atmos-Wiedergabe im Player. Benötigt die URL der Testdatei.'; - @override String get atmosTestRawFile => 'Rohe EAC3-Datei'; - @override String get atmosTestRawFileDescription => 'Spielt die Testdatei mit bekannter Länge ab. Benötigt die URL der Testdatei.'; - @override String get atmosTestAsbarNative => 'Sample-Buffer-Renderer (nativ)'; - @override String get atmosTestAsbarNativeDescription => 'Übergibt die unveränderte komprimierte Audiospur direkt an den System-Renderer. Benötigt die URL der Testdatei.'; - @override String get atmosTestAsbarGenerated => 'Sample-Buffer-Renderer (neu erstellt)'; - @override String get atmosTestAsbarGeneratedDescription => 'Dasselbe, aber mit der Audiobeschreibung wie bei der Wiedergabe erstellt. Benötigt die URL der Testdatei.'; - @override String get atmosTestSessionMode => 'Filmwiedergabe-Modus verwenden'; - @override String get atmosTestSessionModeDescription => 'Aus verwendet den von Dolby dokumentierten Modus. Ein verwendet den bisherigen Modus.'; - @override String get atmosTestShowRoutePicker => 'AirPlay-Ausgabe wählen'; - @override String get atmosTestHideRoutePicker => 'AirPlay-Auswahl ausblenden'; - @override String get atmosTestRoutePickerDescription => 'Sendet den Test an einen AirPlay-Empfänger. Nur AirPlay meldet den ermittelten Audiomodus.'; - @override String get atmosTestStop => 'Test stoppen'; - @override String get atmosTestUrl => 'URL der Testdatei'; - @override String get atmosTestUrlDescription => 'HTTP-URL einer rohen .ec3-Dolby-Atmos-Datei (z. B. mit ffmpeg extrahiert)'; - @override String get atmosTestUrlMissing => 'Zuerst die URL der Testdatei festlegen'; - @override String get atmosTestStatus => 'Status'; @override String get dvConversionMode => 'Dolby-Vision-Konvertierung'; @override String get dvConversionModeDescription => 'Wähle, wie ExoPlayer Dateien mit Dolby-Vision-Profil 7 behandelt.'; @override String get dvConversionAuto => 'Automatisch'; @@ -2882,30 +2858,6 @@ extension on TranslationsDe { 'settings.downmixCenterBoostShort' => 'dB', 'settings.audioDownmixNormalize' => 'Lautstärke beim Downmix normalisieren', 'settings.audioDownmixNormalizeDescription' => 'Senkt den Mix ab, um Übersteuerung zu vermeiden. Deaktivieren, um die Originallautstärke zu behalten (laute Szenen können verzerren).', - 'settings.atmosDiagnostics' => 'Atmos-Ausgabetest', - 'settings.atmosDiagnosticsDescription' => 'Dolby-Atmos-Ausgabe diagnostizieren, indem Testsignale über den Systemplayer abgespielt werden', - 'settings.atmosTestHlsAtmos' => 'Apple-Atmos-Stream', - 'settings.atmosTestHlsAtmosDescription' => 'Garantiert funktionierender Dolby-Atmos-Stream. Der Receiver sollte Dolby Atmos anzeigen.', - 'settings.atmosTestHlsControl' => 'Apple-Surround-Stream', - 'settings.atmosTestHlsControlDescription' => 'Kontrollstream ohne Atmos. Der Receiver sollte Surround ohne Atmos anzeigen.', - 'settings.atmosTestRawStream' => 'Roher EAC3-Stream', - 'settings.atmosTestRawStreamDescription' => 'Streamt die Testdatei genau wie die Atmos-Wiedergabe im Player. Benötigt die URL der Testdatei.', - 'settings.atmosTestRawFile' => 'Rohe EAC3-Datei', - 'settings.atmosTestRawFileDescription' => 'Spielt die Testdatei mit bekannter Länge ab. Benötigt die URL der Testdatei.', - 'settings.atmosTestAsbarNative' => 'Sample-Buffer-Renderer (nativ)', - 'settings.atmosTestAsbarNativeDescription' => 'Übergibt die unveränderte komprimierte Audiospur direkt an den System-Renderer. Benötigt die URL der Testdatei.', - 'settings.atmosTestAsbarGenerated' => 'Sample-Buffer-Renderer (neu erstellt)', - 'settings.atmosTestAsbarGeneratedDescription' => 'Dasselbe, aber mit der Audiobeschreibung wie bei der Wiedergabe erstellt. Benötigt die URL der Testdatei.', - 'settings.atmosTestSessionMode' => 'Filmwiedergabe-Modus verwenden', - 'settings.atmosTestSessionModeDescription' => 'Aus verwendet den von Dolby dokumentierten Modus. Ein verwendet den bisherigen Modus.', - 'settings.atmosTestShowRoutePicker' => 'AirPlay-Ausgabe wählen', - 'settings.atmosTestHideRoutePicker' => 'AirPlay-Auswahl ausblenden', - 'settings.atmosTestRoutePickerDescription' => 'Sendet den Test an einen AirPlay-Empfänger. Nur AirPlay meldet den ermittelten Audiomodus.', - 'settings.atmosTestStop' => 'Test stoppen', - 'settings.atmosTestUrl' => 'URL der Testdatei', - 'settings.atmosTestUrlDescription' => 'HTTP-URL einer rohen .ec3-Dolby-Atmos-Datei (z. B. mit ffmpeg extrahiert)', - 'settings.atmosTestUrlMissing' => 'Zuerst die URL der Testdatei festlegen', - 'settings.atmosTestStatus' => 'Status', 'settings.dvConversionMode' => 'Dolby-Vision-Konvertierung', 'settings.dvConversionModeDescription' => 'Wähle, wie ExoPlayer Dateien mit Dolby-Vision-Profil 7 behandelt.', 'settings.dvConversionAuto' => 'Automatisch', @@ -3106,8 +3058,6 @@ extension on TranslationsDe { 'mediaMenu.deleteMovieTitle' => 'Diesen Film löschen?', 'mediaMenu.deleteEpisodeConfirm' => 'Folge löschen', 'mediaMenu.deleteSeasonConfirm' => 'Staffel löschen', - _ => null, - } ?? switch (path) { 'mediaMenu.deleteShowConfirm' => 'Serie löschen', 'mediaMenu.deleteMovieConfirm' => 'Film löschen', 'mediaMenu.deleteAnyway' => 'Trotzdem löschen', @@ -3132,6 +3082,8 @@ extension on TranslationsDe { 'rateSheet.noConnectedServices' => 'Verbinde einen Dienst in den Einstellungen, um dort zu bewerten.', 'accessibility.mediaCardMovie' => ({required Object title}) => '${title}, Film', 'accessibility.mediaCardShow' => ({required Object title}) => '${title}, Serie', + _ => null, + } ?? switch (path) { 'accessibility.mediaCardEpisode' => ({required Object title, required Object episodeInfo}) => '${title}, ${episodeInfo}', 'accessibility.mediaCardSeason' => ({required Object title, required Object seasonInfo}) => '${title}, ${seasonInfo}', 'accessibility.mediaCardWatched' => 'gesehen', @@ -3620,8 +3572,6 @@ extension on TranslationsDe { 'explore.badge.requested' => 'Angefragt', 'explore.badge.pendingApproval' => 'Genehmigung ausstehend', 'explore.badge.processing' => 'Wird verarbeitet', - _ => null, - } ?? switch (path) { 'explore.badge.declined' => 'Abgelehnt', 'explore.badge.requestFailed' => 'Anfrage fehlgeschlagen', 'explore.badge.requested4k' => '4K angefragt', @@ -3646,6 +3596,8 @@ extension on TranslationsDe { 'explore.stats.completed' => ({required Object n}) => '${n} abgeschlossen', 'explore.stats.onHold' => ({required Object n}) => '${n} pausiert', 'explore.stats.dropped' => ({required Object n}) => '${n} abgebrochen', + _ => null, + } ?? switch (path) { 'explore.season.winter' => 'Winter', 'explore.season.spring' => 'Frühling', 'explore.season.summer' => 'Sommer', @@ -4134,8 +4086,6 @@ extension on TranslationsDe { 'performanceOverlay.dropped' => 'Verworfen', 'performanceOverlay.dvRpus' => 'DV-RPUs', 'performanceOverlay.dvRpuAverage' => 'DV-RPU Ø', - _ => null, - } ?? switch (path) { 'performanceOverlay.dvSampleAverage' => 'DV-Sample Ø', 'performanceOverlay.maxLuma' => 'Max. Luma', 'performanceOverlay.minLuma' => 'Min. Luma', @@ -4160,6 +4110,8 @@ extension on TranslationsDe { 'externalPlayer.playerPackage' => 'Paketname', 'externalPlayer.playerUrlScheme' => 'URL-Schema', 'externalPlayer.off' => 'Aus', + _ => null, + } ?? switch (path) { 'externalPlayer.launchFailed' => 'Externer Player konnte nicht geöffnet werden', 'externalPlayer.appNotInstalled' => ({required Object name}) => '${name} ist nicht installiert', 'externalPlayer.playInExternalPlayer' => 'In externem Player abspielen', diff --git a/lib/i18n/strings_en.g.dart b/lib/i18n/strings_en.g.dart index 93c4ffd8..b73e359b 100644 --- a/lib/i18n/strings_en.g.dart +++ b/lib/i18n/strings_en.g.dart @@ -978,78 +978,6 @@ class Translations$settings$en { /// en: 'Lower the mix to prevent clipping. Turn off to keep the original volume (may distort loud scenes).' String get audioDownmixNormalizeDescription => 'Lower the mix to prevent clipping. Turn off to keep the original volume (may distort loud scenes).'; - /// en: 'Atmos Output Test' - String get atmosDiagnostics => 'Atmos Output Test'; - - /// en: 'Diagnose Dolby Atmos output by playing test signals through the system player' - String get atmosDiagnosticsDescription => 'Diagnose Dolby Atmos output by playing test signals through the system player'; - - /// en: 'Apple Atmos stream' - String get atmosTestHlsAtmos => 'Apple Atmos stream'; - - /// en: 'Known-good Dolby Atmos stream. The receiver should show Dolby Atmos.' - String get atmosTestHlsAtmosDescription => 'Known-good Dolby Atmos stream. The receiver should show Dolby Atmos.'; - - /// en: 'Apple surround stream' - String get atmosTestHlsControl => 'Apple surround stream'; - - /// en: 'Non-Atmos control stream. The receiver should show surround without Atmos.' - String get atmosTestHlsControlDescription => 'Non-Atmos control stream. The receiver should show surround without Atmos.'; - - /// en: 'Raw EAC3 stream' - String get atmosTestRawStream => 'Raw EAC3 stream'; - - /// en: 'Streams the test file exactly like in-player Atmos playback. Needs the test file URL.' - String get atmosTestRawStreamDescription => 'Streams the test file exactly like in-player Atmos playback. Needs the test file URL.'; - - /// en: 'Raw EAC3 file' - String get atmosTestRawFile => 'Raw EAC3 file'; - - /// en: 'Plays the test file with a known length. Needs the test file URL.' - String get atmosTestRawFileDescription => 'Plays the test file with a known length. Needs the test file URL.'; - - /// en: 'Sample-buffer renderer (native)' - String get atmosTestAsbarNative => 'Sample-buffer renderer (native)'; - - /// en: 'Feeds the file's untouched compressed audio straight to the system renderer. Needs the test file URL.' - String get atmosTestAsbarNativeDescription => 'Feeds the file\'s untouched compressed audio straight to the system renderer. Needs the test file URL.'; - - /// en: 'Sample-buffer renderer (rebuilt)' - String get atmosTestAsbarGenerated => 'Sample-buffer renderer (rebuilt)'; - - /// en: 'Same, but with the audio description rebuilt the way playback builds it. Needs the test file URL.' - String get atmosTestAsbarGeneratedDescription => 'Same, but with the audio description rebuilt the way playback builds it. Needs the test file URL.'; - - /// en: 'Use movie playback session mode' - String get atmosTestSessionMode => 'Use movie playback session mode'; - - /// en: 'Off uses the mode Dolby documents. On uses the mode playback used previously.' - String get atmosTestSessionModeDescription => 'Off uses the mode Dolby documents. On uses the mode playback used previously.'; - - /// en: 'Choose AirPlay output' - String get atmosTestShowRoutePicker => 'Choose AirPlay output'; - - /// en: 'Hide AirPlay output picker' - String get atmosTestHideRoutePicker => 'Hide AirPlay output picker'; - - /// en: 'Send the test to an AirPlay receiver. Only AirPlay reports the resolved audio mode.' - String get atmosTestRoutePickerDescription => 'Send the test to an AirPlay receiver. Only AirPlay reports the resolved audio mode.'; - - /// en: 'Stop test' - String get atmosTestStop => 'Stop test'; - - /// en: 'Test file URL' - String get atmosTestUrl => 'Test file URL'; - - /// en: 'HTTP URL of a raw .ec3 Dolby Atmos file (e.g. extracted with ffmpeg)' - String get atmosTestUrlDescription => 'HTTP URL of a raw .ec3 Dolby Atmos file (e.g. extracted with ffmpeg)'; - - /// en: 'Set the test file URL first' - String get atmosTestUrlMissing => 'Set the test file URL first'; - - /// en: 'Status' - String get atmosTestStatus => 'Status'; - /// en: 'Dolby Vision Conversion' String get dvConversionMode => 'Dolby Vision Conversion'; @@ -6427,30 +6355,6 @@ extension on Translations { 'settings.downmixCenterBoostShort' => 'dB', 'settings.audioDownmixNormalize' => 'Normalize Volume on Downmix', 'settings.audioDownmixNormalizeDescription' => 'Lower the mix to prevent clipping. Turn off to keep the original volume (may distort loud scenes).', - 'settings.atmosDiagnostics' => 'Atmos Output Test', - 'settings.atmosDiagnosticsDescription' => 'Diagnose Dolby Atmos output by playing test signals through the system player', - 'settings.atmosTestHlsAtmos' => 'Apple Atmos stream', - 'settings.atmosTestHlsAtmosDescription' => 'Known-good Dolby Atmos stream. The receiver should show Dolby Atmos.', - 'settings.atmosTestHlsControl' => 'Apple surround stream', - 'settings.atmosTestHlsControlDescription' => 'Non-Atmos control stream. The receiver should show surround without Atmos.', - 'settings.atmosTestRawStream' => 'Raw EAC3 stream', - 'settings.atmosTestRawStreamDescription' => 'Streams the test file exactly like in-player Atmos playback. Needs the test file URL.', - 'settings.atmosTestRawFile' => 'Raw EAC3 file', - 'settings.atmosTestRawFileDescription' => 'Plays the test file with a known length. Needs the test file URL.', - 'settings.atmosTestAsbarNative' => 'Sample-buffer renderer (native)', - 'settings.atmosTestAsbarNativeDescription' => 'Feeds the file\'s untouched compressed audio straight to the system renderer. Needs the test file URL.', - 'settings.atmosTestAsbarGenerated' => 'Sample-buffer renderer (rebuilt)', - 'settings.atmosTestAsbarGeneratedDescription' => 'Same, but with the audio description rebuilt the way playback builds it. Needs the test file URL.', - 'settings.atmosTestSessionMode' => 'Use movie playback session mode', - 'settings.atmosTestSessionModeDescription' => 'Off uses the mode Dolby documents. On uses the mode playback used previously.', - 'settings.atmosTestShowRoutePicker' => 'Choose AirPlay output', - 'settings.atmosTestHideRoutePicker' => 'Hide AirPlay output picker', - 'settings.atmosTestRoutePickerDescription' => 'Send the test to an AirPlay receiver. Only AirPlay reports the resolved audio mode.', - 'settings.atmosTestStop' => 'Stop test', - 'settings.atmosTestUrl' => 'Test file URL', - 'settings.atmosTestUrlDescription' => 'HTTP URL of a raw .ec3 Dolby Atmos file (e.g. extracted with ffmpeg)', - 'settings.atmosTestUrlMissing' => 'Set the test file URL first', - 'settings.atmosTestStatus' => 'Status', 'settings.dvConversionMode' => 'Dolby Vision Conversion', 'settings.dvConversionModeDescription' => 'Choose how ExoPlayer handles Dolby Vision Profile 7 files.', 'settings.dvConversionAuto' => 'Auto', @@ -6651,8 +6555,6 @@ extension on Translations { 'mediaMenu.deleteMovieTitle' => 'Delete this movie?', 'mediaMenu.deleteEpisodeConfirm' => 'Delete episode', 'mediaMenu.deleteSeasonConfirm' => 'Delete season', - _ => null, - } ?? switch (path) { 'mediaMenu.deleteShowConfirm' => 'Delete show', 'mediaMenu.deleteMovieConfirm' => 'Delete movie', 'mediaMenu.deleteAnyway' => 'Delete anyway', @@ -6677,6 +6579,8 @@ extension on Translations { 'rateSheet.noConnectedServices' => 'Connect a service in Settings to rate there.', 'accessibility.mediaCardMovie' => ({required Object title}) => '${title}, movie', 'accessibility.mediaCardShow' => ({required Object title}) => '${title}, TV show', + _ => null, + } ?? switch (path) { 'accessibility.mediaCardEpisode' => ({required Object title, required Object episodeInfo}) => '${title}, ${episodeInfo}', 'accessibility.mediaCardSeason' => ({required Object title, required Object seasonInfo}) => '${title}, ${seasonInfo}', 'accessibility.mediaCardWatched' => 'watched', @@ -7165,8 +7069,6 @@ extension on Translations { 'explore.badge.available' => 'Available', 'explore.badge.partiallyAvailable' => 'Partly available', 'explore.badge.availableIn4k' => '4K available', - _ => null, - } ?? switch (path) { 'explore.badge.requested' => 'Requested', 'explore.badge.pendingApproval' => 'Pending approval', 'explore.badge.processing' => 'Processing', @@ -7191,6 +7093,8 @@ extension on Translations { 'explore.stats.comments' => ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('en'))(n, one: '${n} comment', other: '${n} comments', ), 'explore.stats.votes' => ({required Object n}) => '${n} votes', 'explore.stats.watching' => ({required Object n}) => '${n} watching it', + _ => null, + } ?? switch (path) { 'explore.stats.completed' => ({required Object n}) => '${n} completed', 'explore.stats.onHold' => ({required Object n}) => '${n} on hold', 'explore.stats.dropped' => ({required Object n}) => '${n} dropped', @@ -7679,8 +7583,6 @@ extension on Translations { 'performanceOverlay.matrix' => 'Matrix', 'performanceOverlay.primaries' => 'Primaries', 'performanceOverlay.transfer' => 'Transfer', - _ => null, - } ?? switch (path) { 'performanceOverlay.renderFps' => 'Render FPS', 'performanceOverlay.displayFps' => 'Display FPS', 'performanceOverlay.avSync' => 'A/V Sync', @@ -7705,6 +7607,8 @@ extension on Translations { 'externalPlayer.customPlayers' => 'Custom Players', 'externalPlayer.systemDefault' => 'System Default', 'externalPlayer.addCustomPlayer' => 'Add Custom Player', + _ => null, + } ?? switch (path) { 'externalPlayer.playerName' => 'Player Name', 'externalPlayer.playerNameHint' => 'My Player', 'externalPlayer.playerCommand' => 'Command', diff --git a/lib/i18n/strings_es.g.dart b/lib/i18n/strings_es.g.dart index 68579956..b8631dc1 100644 --- a/lib/i18n/strings_es.g.dart +++ b/lib/i18n/strings_es.g.dart @@ -421,30 +421,6 @@ class _Translations$settings$es extends Translations$settings$en { @override String get downmixCenterBoostShort => 'dB'; @override String get audioDownmixNormalize => 'Normalizar volumen al mezclar'; @override String get audioDownmixNormalizeDescription => 'Reduce la mezcla para evitar saturación. Desactívalo para mantener el volumen original (puede distorsionar escenas fuertes).'; - @override String get atmosDiagnostics => 'Prueba de salida Atmos'; - @override String get atmosDiagnosticsDescription => 'Diagnostica la salida Dolby Atmos reproduciendo señales de prueba con el reproductor del sistema'; - @override String get atmosTestHlsAtmos => 'Flujo Atmos de Apple'; - @override String get atmosTestHlsAtmosDescription => 'Flujo Dolby Atmos de referencia. El receptor debería mostrar Dolby Atmos.'; - @override String get atmosTestHlsControl => 'Flujo envolvente de Apple'; - @override String get atmosTestHlsControlDescription => 'Flujo de control sin Atmos. El receptor debería indicar sonido envolvente sin Atmos.'; - @override String get atmosTestRawStream => 'Flujo EAC3 sin procesar'; - @override String get atmosTestRawStreamDescription => 'Transmite el archivo de prueba igual que durante la reproducción de Atmos. Requiere la URL del archivo de prueba.'; - @override String get atmosTestRawFile => 'Archivo EAC3 sin procesar'; - @override String get atmosTestRawFileDescription => 'Reproduce el archivo de prueba con longitud conocida. Necesita la URL del archivo de prueba.'; - @override String get atmosTestAsbarNative => 'Renderizador de búfer de muestras (nativo)'; - @override String get atmosTestAsbarNativeDescription => 'Envía el audio comprimido intacto del archivo directamente al renderizador del sistema. Necesita la URL del archivo de prueba.'; - @override String get atmosTestAsbarGenerated => 'Renderizador de búfer de muestras (reconstruido)'; - @override String get atmosTestAsbarGeneratedDescription => 'Igual, pero con la descripción de audio construida como en la reproducción. Necesita la URL del archivo de prueba.'; - @override String get atmosTestSessionMode => 'Usar modo de reproducción de películas'; - @override String get atmosTestSessionModeDescription => 'Desactivado usa el modo que documenta Dolby. Activado usa el modo anterior.'; - @override String get atmosTestShowRoutePicker => 'Elegir salida AirPlay'; - @override String get atmosTestHideRoutePicker => 'Ocultar selector de salida AirPlay'; - @override String get atmosTestRoutePickerDescription => 'Envía la prueba a un receptor AirPlay. Solo AirPlay informa del modo de audio resuelto.'; - @override String get atmosTestStop => 'Detener prueba'; - @override String get atmosTestUrl => 'URL del archivo de prueba'; - @override String get atmosTestUrlDescription => 'URL HTTP de un archivo .ec3 Dolby Atmos sin procesar (p. ej., extraído con ffmpeg)'; - @override String get atmosTestUrlMissing => 'Configura primero la URL del archivo de prueba'; - @override String get atmosTestStatus => 'Estado'; @override String get dvConversionMode => 'Conversión de Dolby Vision'; @override String get dvConversionModeDescription => 'Elige cómo gestiona ExoPlayer los archivos Dolby Vision de perfil 7.'; @override String get dvConversionAuto => 'Automático'; @@ -2882,30 +2858,6 @@ extension on TranslationsEs { 'settings.downmixCenterBoostShort' => 'dB', 'settings.audioDownmixNormalize' => 'Normalizar volumen al mezclar', 'settings.audioDownmixNormalizeDescription' => 'Reduce la mezcla para evitar saturación. Desactívalo para mantener el volumen original (puede distorsionar escenas fuertes).', - 'settings.atmosDiagnostics' => 'Prueba de salida Atmos', - 'settings.atmosDiagnosticsDescription' => 'Diagnostica la salida Dolby Atmos reproduciendo señales de prueba con el reproductor del sistema', - 'settings.atmosTestHlsAtmos' => 'Flujo Atmos de Apple', - 'settings.atmosTestHlsAtmosDescription' => 'Flujo Dolby Atmos de referencia. El receptor debería mostrar Dolby Atmos.', - 'settings.atmosTestHlsControl' => 'Flujo envolvente de Apple', - 'settings.atmosTestHlsControlDescription' => 'Flujo de control sin Atmos. El receptor debería indicar sonido envolvente sin Atmos.', - 'settings.atmosTestRawStream' => 'Flujo EAC3 sin procesar', - 'settings.atmosTestRawStreamDescription' => 'Transmite el archivo de prueba igual que durante la reproducción de Atmos. Requiere la URL del archivo de prueba.', - 'settings.atmosTestRawFile' => 'Archivo EAC3 sin procesar', - 'settings.atmosTestRawFileDescription' => 'Reproduce el archivo de prueba con longitud conocida. Necesita la URL del archivo de prueba.', - 'settings.atmosTestAsbarNative' => 'Renderizador de búfer de muestras (nativo)', - 'settings.atmosTestAsbarNativeDescription' => 'Envía el audio comprimido intacto del archivo directamente al renderizador del sistema. Necesita la URL del archivo de prueba.', - 'settings.atmosTestAsbarGenerated' => 'Renderizador de búfer de muestras (reconstruido)', - 'settings.atmosTestAsbarGeneratedDescription' => 'Igual, pero con la descripción de audio construida como en la reproducción. Necesita la URL del archivo de prueba.', - 'settings.atmosTestSessionMode' => 'Usar modo de reproducción de películas', - 'settings.atmosTestSessionModeDescription' => 'Desactivado usa el modo que documenta Dolby. Activado usa el modo anterior.', - 'settings.atmosTestShowRoutePicker' => 'Elegir salida AirPlay', - 'settings.atmosTestHideRoutePicker' => 'Ocultar selector de salida AirPlay', - 'settings.atmosTestRoutePickerDescription' => 'Envía la prueba a un receptor AirPlay. Solo AirPlay informa del modo de audio resuelto.', - 'settings.atmosTestStop' => 'Detener prueba', - 'settings.atmosTestUrl' => 'URL del archivo de prueba', - 'settings.atmosTestUrlDescription' => 'URL HTTP de un archivo .ec3 Dolby Atmos sin procesar (p. ej., extraído con ffmpeg)', - 'settings.atmosTestUrlMissing' => 'Configura primero la URL del archivo de prueba', - 'settings.atmosTestStatus' => 'Estado', 'settings.dvConversionMode' => 'Conversión de Dolby Vision', 'settings.dvConversionModeDescription' => 'Elige cómo gestiona ExoPlayer los archivos Dolby Vision de perfil 7.', 'settings.dvConversionAuto' => 'Automático', @@ -3106,8 +3058,6 @@ extension on TranslationsEs { 'mediaMenu.deleteMovieTitle' => '¿Eliminar esta película?', 'mediaMenu.deleteEpisodeConfirm' => 'Eliminar episodio', 'mediaMenu.deleteSeasonConfirm' => 'Eliminar temporada', - _ => null, - } ?? switch (path) { 'mediaMenu.deleteShowConfirm' => 'Eliminar serie', 'mediaMenu.deleteMovieConfirm' => 'Eliminar película', 'mediaMenu.deleteAnyway' => 'Eliminar de todos modos', @@ -3132,6 +3082,8 @@ extension on TranslationsEs { 'rateSheet.noConnectedServices' => 'Conecta un servicio en Configuración para valorar el contenido en él.', 'accessibility.mediaCardMovie' => ({required Object title}) => '${title}, película', 'accessibility.mediaCardShow' => ({required Object title}) => '${title}, serie de TV', + _ => null, + } ?? switch (path) { 'accessibility.mediaCardEpisode' => ({required Object title, required Object episodeInfo}) => '${title}, ${episodeInfo}', 'accessibility.mediaCardSeason' => ({required Object title, required Object seasonInfo}) => '${title}, ${seasonInfo}', 'accessibility.mediaCardWatched' => 'visto', @@ -3620,8 +3572,6 @@ extension on TranslationsEs { 'explore.badge.requested' => 'Solicitado', 'explore.badge.pendingApproval' => 'Pendiente de aprobación', 'explore.badge.processing' => 'Procesando', - _ => null, - } ?? switch (path) { 'explore.badge.declined' => 'Rechazado', 'explore.badge.requestFailed' => 'La solicitud falló', 'explore.badge.requested4k' => 'Solicitado en 4K', @@ -3646,6 +3596,8 @@ extension on TranslationsEs { 'explore.stats.completed' => ({required Object n}) => '${n} lo completaron', 'explore.stats.onHold' => ({required Object n}) => '${n} en pausa', 'explore.stats.dropped' => ({required Object n}) => '${n} lo abandonaron', + _ => null, + } ?? switch (path) { 'explore.season.winter' => 'Invierno', 'explore.season.spring' => 'Primavera', 'explore.season.summer' => 'Verano', @@ -4134,8 +4086,6 @@ extension on TranslationsEs { 'performanceOverlay.dropped' => 'Descartados', 'performanceOverlay.dvRpus' => 'DV RPUs', 'performanceOverlay.dvRpuAverage' => 'Prom. DV RPU', - _ => null, - } ?? switch (path) { 'performanceOverlay.dvSampleAverage' => 'Prom. muestra DV', 'performanceOverlay.maxLuma' => 'Luma máx.', 'performanceOverlay.minLuma' => 'Luma mín.', @@ -4160,6 +4110,8 @@ extension on TranslationsEs { 'externalPlayer.playerPackage' => 'Nombre del paquete', 'externalPlayer.playerUrlScheme' => 'Esquema URL', 'externalPlayer.off' => 'Desactivado', + _ => null, + } ?? switch (path) { 'externalPlayer.launchFailed' => 'No se pudo abrir el reproductor externo', 'externalPlayer.appNotInstalled' => ({required Object name}) => '${name} no está instalado', 'externalPlayer.playInExternalPlayer' => 'Reproducir en reproductor externo', diff --git a/lib/i18n/strings_fr.g.dart b/lib/i18n/strings_fr.g.dart index 41c1cb6f..c5eb31e4 100644 --- a/lib/i18n/strings_fr.g.dart +++ b/lib/i18n/strings_fr.g.dart @@ -421,30 +421,6 @@ class _Translations$settings$fr extends Translations$settings$en { @override String get downmixCenterBoostShort => 'dB'; @override String get audioDownmixNormalize => 'Normaliser le volume lors de la conversion en stéréo'; @override String get audioDownmixNormalizeDescription => 'Atténuer le mixage pour éviter la saturation. Désactivez cette option pour conserver le volume d’origine, au risque de déformer les scènes bruyantes.'; - @override String get atmosDiagnostics => 'Test de sortie Atmos'; - @override String get atmosDiagnosticsDescription => 'Diagnostiquer la sortie Dolby Atmos en lisant des signaux de test via le lecteur système'; - @override String get atmosTestHlsAtmos => 'Flux Atmos d\'Apple'; - @override String get atmosTestHlsAtmosDescription => 'Flux Dolby Atmos réputé fiable. L\'ampli devrait afficher Dolby Atmos.'; - @override String get atmosTestHlsControl => 'Flux surround d\'Apple'; - @override String get atmosTestHlsControlDescription => 'Flux témoin sans Atmos. L\'ampli devrait afficher du surround sans Atmos.'; - @override String get atmosTestRawStream => 'Flux EAC3 brut'; - @override String get atmosTestRawStreamDescription => 'Diffuse le fichier de test exactement comme la lecture Atmos du lecteur. Nécessite l\'URL du fichier de test.'; - @override String get atmosTestRawFile => 'Fichier EAC3 brut'; - @override String get atmosTestRawFileDescription => 'Lit le fichier de test avec une longueur connue. Nécessite l\'URL du fichier de test.'; - @override String get atmosTestAsbarNative => 'Moteur de rendu à tampon d\'échantillons (natif)'; - @override String get atmosTestAsbarNativeDescription => 'Transmet l\'audio compressé intact du fichier directement au moteur de rendu du système. Nécessite l\'URL du fichier de test.'; - @override String get atmosTestAsbarGenerated => 'Moteur de rendu à tampon d\'échantillons (reconstruit)'; - @override String get atmosTestAsbarGeneratedDescription => 'Identique, mais avec la description audio reconstruite comme à la lecture. Nécessite l\'URL du fichier de test.'; - @override String get atmosTestSessionMode => 'Utiliser le mode lecture de films'; - @override String get atmosTestSessionModeDescription => 'Désactivé utilise le mode documenté par Dolby. Activé utilise le mode précédent.'; - @override String get atmosTestShowRoutePicker => 'Choisir la sortie AirPlay'; - @override String get atmosTestHideRoutePicker => 'Masquer le sélecteur AirPlay'; - @override String get atmosTestRoutePickerDescription => 'Envoie le test vers un récepteur AirPlay. Seul AirPlay indique le mode audio retenu.'; - @override String get atmosTestStop => 'Arrêter le test'; - @override String get atmosTestUrl => 'URL du fichier de test'; - @override String get atmosTestUrlDescription => 'URL HTTP d\'un fichier .ec3 Dolby Atmos brut (extrait par ex. avec ffmpeg)'; - @override String get atmosTestUrlMissing => 'Définissez d\'abord l\'URL du fichier de test'; - @override String get atmosTestStatus => 'État'; @override String get dvConversionMode => 'Conversion Dolby Vision'; @override String get dvConversionModeDescription => 'Choisir comment ExoPlayer gère les fichiers Dolby Vision de profil 7.'; @override String get dvConversionAuto => 'Auto'; @@ -2882,30 +2858,6 @@ extension on TranslationsFr { 'settings.downmixCenterBoostShort' => 'dB', 'settings.audioDownmixNormalize' => 'Normaliser le volume lors de la conversion en stéréo', 'settings.audioDownmixNormalizeDescription' => 'Atténuer le mixage pour éviter la saturation. Désactivez cette option pour conserver le volume d’origine, au risque de déformer les scènes bruyantes.', - 'settings.atmosDiagnostics' => 'Test de sortie Atmos', - 'settings.atmosDiagnosticsDescription' => 'Diagnostiquer la sortie Dolby Atmos en lisant des signaux de test via le lecteur système', - 'settings.atmosTestHlsAtmos' => 'Flux Atmos d\'Apple', - 'settings.atmosTestHlsAtmosDescription' => 'Flux Dolby Atmos réputé fiable. L\'ampli devrait afficher Dolby Atmos.', - 'settings.atmosTestHlsControl' => 'Flux surround d\'Apple', - 'settings.atmosTestHlsControlDescription' => 'Flux témoin sans Atmos. L\'ampli devrait afficher du surround sans Atmos.', - 'settings.atmosTestRawStream' => 'Flux EAC3 brut', - 'settings.atmosTestRawStreamDescription' => 'Diffuse le fichier de test exactement comme la lecture Atmos du lecteur. Nécessite l\'URL du fichier de test.', - 'settings.atmosTestRawFile' => 'Fichier EAC3 brut', - 'settings.atmosTestRawFileDescription' => 'Lit le fichier de test avec une longueur connue. Nécessite l\'URL du fichier de test.', - 'settings.atmosTestAsbarNative' => 'Moteur de rendu à tampon d\'échantillons (natif)', - 'settings.atmosTestAsbarNativeDescription' => 'Transmet l\'audio compressé intact du fichier directement au moteur de rendu du système. Nécessite l\'URL du fichier de test.', - 'settings.atmosTestAsbarGenerated' => 'Moteur de rendu à tampon d\'échantillons (reconstruit)', - 'settings.atmosTestAsbarGeneratedDescription' => 'Identique, mais avec la description audio reconstruite comme à la lecture. Nécessite l\'URL du fichier de test.', - 'settings.atmosTestSessionMode' => 'Utiliser le mode lecture de films', - 'settings.atmosTestSessionModeDescription' => 'Désactivé utilise le mode documenté par Dolby. Activé utilise le mode précédent.', - 'settings.atmosTestShowRoutePicker' => 'Choisir la sortie AirPlay', - 'settings.atmosTestHideRoutePicker' => 'Masquer le sélecteur AirPlay', - 'settings.atmosTestRoutePickerDescription' => 'Envoie le test vers un récepteur AirPlay. Seul AirPlay indique le mode audio retenu.', - 'settings.atmosTestStop' => 'Arrêter le test', - 'settings.atmosTestUrl' => 'URL du fichier de test', - 'settings.atmosTestUrlDescription' => 'URL HTTP d\'un fichier .ec3 Dolby Atmos brut (extrait par ex. avec ffmpeg)', - 'settings.atmosTestUrlMissing' => 'Définissez d\'abord l\'URL du fichier de test', - 'settings.atmosTestStatus' => 'État', 'settings.dvConversionMode' => 'Conversion Dolby Vision', 'settings.dvConversionModeDescription' => 'Choisir comment ExoPlayer gère les fichiers Dolby Vision de profil 7.', 'settings.dvConversionAuto' => 'Auto', @@ -3106,8 +3058,6 @@ extension on TranslationsFr { 'mediaMenu.deleteMovieTitle' => 'Supprimer ce film ?', 'mediaMenu.deleteEpisodeConfirm' => 'Supprimer l\'épisode', 'mediaMenu.deleteSeasonConfirm' => 'Supprimer la saison', - _ => null, - } ?? switch (path) { 'mediaMenu.deleteShowConfirm' => 'Supprimer la série', 'mediaMenu.deleteMovieConfirm' => 'Supprimer le film', 'mediaMenu.deleteAnyway' => 'Supprimer quand même', @@ -3132,6 +3082,8 @@ extension on TranslationsFr { 'rateSheet.noConnectedServices' => 'Connectez un service dans les paramètres pour pouvoir y attribuer une note.', 'accessibility.mediaCardMovie' => ({required Object title}) => '${title}, film', 'accessibility.mediaCardShow' => ({required Object title}) => '${title}, série TV', + _ => null, + } ?? switch (path) { 'accessibility.mediaCardEpisode' => ({required Object title, required Object episodeInfo}) => '${title}, ${episodeInfo}', 'accessibility.mediaCardSeason' => ({required Object title, required Object seasonInfo}) => '${title}, ${seasonInfo}', 'accessibility.mediaCardWatched' => 'visionné', @@ -3620,8 +3572,6 @@ extension on TranslationsFr { 'explore.badge.requested' => 'Demandé', 'explore.badge.pendingApproval' => 'En attente d\'approbation', 'explore.badge.processing' => 'En cours de traitement', - _ => null, - } ?? switch (path) { 'explore.badge.declined' => 'Refusé', 'explore.badge.requestFailed' => 'Échec de la demande', 'explore.badge.requested4k' => '4K demandé', @@ -3646,6 +3596,8 @@ extension on TranslationsFr { 'explore.stats.completed' => ({required Object n}) => '${n} l\'ont terminé', 'explore.stats.onHold' => ({required Object n}) => '${n} en pause', 'explore.stats.dropped' => ({required Object n}) => '${n} ont abandonné', + _ => null, + } ?? switch (path) { 'explore.season.winter' => 'Hiver', 'explore.season.spring' => 'Printemps', 'explore.season.summer' => 'Été', @@ -4134,8 +4086,6 @@ extension on TranslationsFr { 'performanceOverlay.dropped' => 'Perdues', 'performanceOverlay.dvRpus' => 'DV RPU', 'performanceOverlay.dvRpuAverage' => 'Moy. DV RPU', - _ => null, - } ?? switch (path) { 'performanceOverlay.dvSampleAverage' => 'Moy. échant. DV', 'performanceOverlay.maxLuma' => 'Luma max.', 'performanceOverlay.minLuma' => 'Luma min.', @@ -4160,6 +4110,8 @@ extension on TranslationsFr { 'externalPlayer.playerPackage' => 'Nom du paquet', 'externalPlayer.playerUrlScheme' => 'Schéma URL', 'externalPlayer.off' => 'Désactivé', + _ => null, + } ?? switch (path) { 'externalPlayer.launchFailed' => 'Impossible d\'ouvrir le lecteur externe', 'externalPlayer.appNotInstalled' => ({required Object name}) => '${name} n\'est pas installé', 'externalPlayer.playInExternalPlayer' => 'Lire dans un lecteur externe', diff --git a/lib/i18n/strings_hu.g.dart b/lib/i18n/strings_hu.g.dart index a71aa7e8..c25b0192 100644 --- a/lib/i18n/strings_hu.g.dart +++ b/lib/i18n/strings_hu.g.dart @@ -421,30 +421,6 @@ class _Translations$settings$hu extends Translations$settings$en { @override String get downmixCenterBoostShort => 'dB'; @override String get audioDownmixNormalize => 'Hangerő normalizálása lekeveréskor'; @override String get audioDownmixNormalizeDescription => 'A keverés szintjének csökkentése a torzítás elkerülésére. Kapcsold ki az eredeti hangerő megőrzéséhez (a hangos jelenetek torzíthatnak).'; - @override String get atmosDiagnostics => 'Atmos kimeneti teszt'; - @override String get atmosDiagnosticsDescription => 'Dolby Atmos kimenet diagnosztizálása tesztjelek lejátszásával a rendszerlejátszón keresztül'; - @override String get atmosTestHlsAtmos => 'Apple Atmos folyam'; - @override String get atmosTestHlsAtmosDescription => 'Igazoltan működő Dolby Atmos-adatfolyam. Az erősítő kijelzőjén a Dolby Atmos formátumnak kell megjelennie.'; - @override String get atmosTestHlsControl => 'Apple térhangzású folyam'; - @override String get atmosTestHlsControlDescription => 'Atmos nélküli ellenőrző adatfolyam. Az erősítő kijelzőjén térhangzásnak kell megjelennie, Atmos nélkül.'; - @override String get atmosTestRawStream => 'Nyers EAC3 folyam'; - @override String get atmosTestRawStreamDescription => 'A tesztfájlt pontosan úgy közvetíti, mint a lejátszón belüli Atmos lejátszás. Szükséges a tesztfájl URL-je.'; - @override String get atmosTestRawFile => 'Nyers EAC3 fájl'; - @override String get atmosTestRawFileDescription => 'Ismert hosszúságú tesztfájlt játszik le. Szükséges a tesztfájl URL-je.'; - @override String get atmosTestAsbarNative => 'Mintapuffer-megjelenítő (natív)'; - @override String get atmosTestAsbarNativeDescription => 'A fájl érintetlen tömörített hangját közvetlenül a rendszer megjelenítőjének adja. Szükséges a tesztfájl URL-je.'; - @override String get atmosTestAsbarGenerated => 'Mintapuffer-megjelenítő (újraépített)'; - @override String get atmosTestAsbarGeneratedDescription => 'Ugyanaz, de a lejátszás módján felépített hangleírással. Szükséges a tesztfájl URL-je.'; - @override String get atmosTestSessionMode => 'Filmlejátszási mód használata'; - @override String get atmosTestSessionModeDescription => 'Kikapcsolva a Dolby által dokumentált módot használja. Bekapcsolva a korábbi módot.'; - @override String get atmosTestShowRoutePicker => 'AirPlay kimenet választása'; - @override String get atmosTestHideRoutePicker => 'AirPlay kimenetválasztó elrejtése'; - @override String get atmosTestRoutePickerDescription => 'Elküldi a tesztet egy AirPlay vevőnek. Csak az AirPlay jelzi a feloldott hangmódot.'; - @override String get atmosTestStop => 'Teszt leállítása'; - @override String get atmosTestUrl => 'Tesztfájl URL-je'; - @override String get atmosTestUrlDescription => 'Nyers .ec3 Dolby Atmos fájl HTTP URL-je (pl. ffmpeg-gel kinyerve)'; - @override String get atmosTestUrlMissing => 'Először állítsd be a tesztfájl URL-jét'; - @override String get atmosTestStatus => 'Állapot'; @override String get dvConversionMode => 'Dolby Vision-átalakítás'; @override String get dvConversionModeDescription => 'Válaszd ki, hogyan kezelje az ExoPlayer a Dolby Vision Profile 7 fájlokat.'; @override String get dvConversionAuto => 'Automatikus'; @@ -2882,30 +2858,6 @@ extension on TranslationsHu { 'settings.downmixCenterBoostShort' => 'dB', 'settings.audioDownmixNormalize' => 'Hangerő normalizálása lekeveréskor', 'settings.audioDownmixNormalizeDescription' => 'A keverés szintjének csökkentése a torzítás elkerülésére. Kapcsold ki az eredeti hangerő megőrzéséhez (a hangos jelenetek torzíthatnak).', - 'settings.atmosDiagnostics' => 'Atmos kimeneti teszt', - 'settings.atmosDiagnosticsDescription' => 'Dolby Atmos kimenet diagnosztizálása tesztjelek lejátszásával a rendszerlejátszón keresztül', - 'settings.atmosTestHlsAtmos' => 'Apple Atmos folyam', - 'settings.atmosTestHlsAtmosDescription' => 'Igazoltan működő Dolby Atmos-adatfolyam. Az erősítő kijelzőjén a Dolby Atmos formátumnak kell megjelennie.', - 'settings.atmosTestHlsControl' => 'Apple térhangzású folyam', - 'settings.atmosTestHlsControlDescription' => 'Atmos nélküli ellenőrző adatfolyam. Az erősítő kijelzőjén térhangzásnak kell megjelennie, Atmos nélkül.', - 'settings.atmosTestRawStream' => 'Nyers EAC3 folyam', - 'settings.atmosTestRawStreamDescription' => 'A tesztfájlt pontosan úgy közvetíti, mint a lejátszón belüli Atmos lejátszás. Szükséges a tesztfájl URL-je.', - 'settings.atmosTestRawFile' => 'Nyers EAC3 fájl', - 'settings.atmosTestRawFileDescription' => 'Ismert hosszúságú tesztfájlt játszik le. Szükséges a tesztfájl URL-je.', - 'settings.atmosTestAsbarNative' => 'Mintapuffer-megjelenítő (natív)', - 'settings.atmosTestAsbarNativeDescription' => 'A fájl érintetlen tömörített hangját közvetlenül a rendszer megjelenítőjének adja. Szükséges a tesztfájl URL-je.', - 'settings.atmosTestAsbarGenerated' => 'Mintapuffer-megjelenítő (újraépített)', - 'settings.atmosTestAsbarGeneratedDescription' => 'Ugyanaz, de a lejátszás módján felépített hangleírással. Szükséges a tesztfájl URL-je.', - 'settings.atmosTestSessionMode' => 'Filmlejátszási mód használata', - 'settings.atmosTestSessionModeDescription' => 'Kikapcsolva a Dolby által dokumentált módot használja. Bekapcsolva a korábbi módot.', - 'settings.atmosTestShowRoutePicker' => 'AirPlay kimenet választása', - 'settings.atmosTestHideRoutePicker' => 'AirPlay kimenetválasztó elrejtése', - 'settings.atmosTestRoutePickerDescription' => 'Elküldi a tesztet egy AirPlay vevőnek. Csak az AirPlay jelzi a feloldott hangmódot.', - 'settings.atmosTestStop' => 'Teszt leállítása', - 'settings.atmosTestUrl' => 'Tesztfájl URL-je', - 'settings.atmosTestUrlDescription' => 'Nyers .ec3 Dolby Atmos fájl HTTP URL-je (pl. ffmpeg-gel kinyerve)', - 'settings.atmosTestUrlMissing' => 'Először állítsd be a tesztfájl URL-jét', - 'settings.atmosTestStatus' => 'Állapot', 'settings.dvConversionMode' => 'Dolby Vision-átalakítás', 'settings.dvConversionModeDescription' => 'Válaszd ki, hogyan kezelje az ExoPlayer a Dolby Vision Profile 7 fájlokat.', 'settings.dvConversionAuto' => 'Automatikus', @@ -3106,8 +3058,6 @@ extension on TranslationsHu { 'mediaMenu.deleteMovieTitle' => 'Töröljük ezt a filmet?', 'mediaMenu.deleteEpisodeConfirm' => 'Epizód törlése', 'mediaMenu.deleteSeasonConfirm' => 'Évad törlése', - _ => null, - } ?? switch (path) { 'mediaMenu.deleteShowConfirm' => 'Sorozat törlése', 'mediaMenu.deleteMovieConfirm' => 'Film törlése', 'mediaMenu.deleteAnyway' => 'Törlés mindenképp', @@ -3132,6 +3082,8 @@ extension on TranslationsHu { 'rateSheet.noConnectedServices' => 'Az értékeléshez csatlakoztass egy szolgáltatást a Beállításokban.', 'accessibility.mediaCardMovie' => ({required Object title}) => '${title}, film', 'accessibility.mediaCardShow' => ({required Object title}) => '${title}, TV-sorozat', + _ => null, + } ?? switch (path) { 'accessibility.mediaCardEpisode' => ({required Object title, required Object episodeInfo}) => '${title}, ${episodeInfo}', 'accessibility.mediaCardSeason' => ({required Object title, required Object seasonInfo}) => '${title}, ${seasonInfo}', 'accessibility.mediaCardWatched' => 'megtekintve', @@ -3620,8 +3572,6 @@ extension on TranslationsHu { 'explore.badge.requested' => 'Kérve', 'explore.badge.pendingApproval' => 'Jóváhagyásra vár', 'explore.badge.processing' => 'Feldolgozás alatt', - _ => null, - } ?? switch (path) { 'explore.badge.declined' => 'Elutasítva', 'explore.badge.requestFailed' => 'A kérés nem sikerült', 'explore.badge.requested4k' => '4K kérve', @@ -3646,6 +3596,8 @@ extension on TranslationsHu { 'explore.stats.completed' => ({required Object n}) => '${n} befejezte', 'explore.stats.onHold' => ({required Object n}) => '${n} szünetelteti', 'explore.stats.dropped' => ({required Object n}) => '${n} felhagyott vele', + _ => null, + } ?? switch (path) { 'explore.season.winter' => 'Tél', 'explore.season.spring' => 'Tavasz', 'explore.season.summer' => 'Nyár', @@ -4134,8 +4086,6 @@ extension on TranslationsHu { 'performanceOverlay.dropped' => 'Eldobva', 'performanceOverlay.dvRpus' => 'DV RPU-k', 'performanceOverlay.dvRpuAverage' => 'DV RPU-átlag', - _ => null, - } ?? switch (path) { 'performanceOverlay.dvSampleAverage' => 'DV-mintaátlag', 'performanceOverlay.maxLuma' => 'Maximális luma', 'performanceOverlay.minLuma' => 'Minimális luma', @@ -4160,6 +4110,8 @@ extension on TranslationsHu { 'externalPlayer.playerPackage' => 'Csomagnév', 'externalPlayer.playerUrlScheme' => 'URL-séma', 'externalPlayer.off' => 'Ki', + _ => null, + } ?? switch (path) { 'externalPlayer.launchFailed' => 'Nem sikerült megnyitni a külső lejátszót', 'externalPlayer.appNotInstalled' => ({required Object name}) => 'A(z) ${name} nincs telepítve', 'externalPlayer.playInExternalPlayer' => 'Lejátszás külső lejátszóban', diff --git a/lib/i18n/strings_it.g.dart b/lib/i18n/strings_it.g.dart index 1d91396f..cf498cc0 100644 --- a/lib/i18n/strings_it.g.dart +++ b/lib/i18n/strings_it.g.dart @@ -421,30 +421,6 @@ class _Translations$settings$it extends Translations$settings$en { @override String get downmixCenterBoostShort => 'dB'; @override String get audioDownmixNormalize => 'Normalizza il volume durante il downmix'; @override String get audioDownmixNormalizeDescription => 'Riduce il volume del mix per evitare il clipping. Disattiva questa opzione per mantenere il volume originale (le scene più rumorose potrebbero risultare distorte).'; - @override String get atmosDiagnostics => 'Test uscita Atmos'; - @override String get atmosDiagnosticsDescription => 'Diagnostica l\'uscita Dolby Atmos riproducendo segnali di prova con il lettore di sistema'; - @override String get atmosTestHlsAtmos => 'Stream Atmos di Apple'; - @override String get atmosTestHlsAtmosDescription => 'Stream Dolby Atmos di riferimento. Il ricevitore dovrebbe mostrare Dolby Atmos.'; - @override String get atmosTestHlsControl => 'Stream surround di Apple'; - @override String get atmosTestHlsControlDescription => 'Stream di controllo senza Atmos. Il ricevitore dovrebbe mostrare surround senza Atmos.'; - @override String get atmosTestRawStream => 'Stream EAC3 grezzo'; - @override String get atmosTestRawStreamDescription => 'Trasmette il file di prova esattamente come la riproduzione Atmos del lettore. Richiede l\'URL del file di prova.'; - @override String get atmosTestRawFile => 'File EAC3 grezzo'; - @override String get atmosTestRawFileDescription => 'Riproduce il file di prova con lunghezza nota. Richiede l\'URL del file di prova.'; - @override String get atmosTestAsbarNative => 'Renderer con buffer di campioni (nativo)'; - @override String get atmosTestAsbarNativeDescription => 'Invia l\'audio compresso intatto del file direttamente al renderer di sistema. Richiede l\'URL del file di test.'; - @override String get atmosTestAsbarGenerated => 'Renderer con buffer di campioni (ricostruito)'; - @override String get atmosTestAsbarGeneratedDescription => 'Come sopra, ma con la descrizione audio costruita come nella riproduzione. Richiede l\'URL del file di test.'; - @override String get atmosTestSessionMode => 'Usa la modalità riproduzione film'; - @override String get atmosTestSessionModeDescription => 'Disattivato usa la modalità documentata da Dolby. Attivato usa la modalità precedente.'; - @override String get atmosTestShowRoutePicker => 'Scegli uscita AirPlay'; - @override String get atmosTestHideRoutePicker => 'Nascondi selettore uscita AirPlay'; - @override String get atmosTestRoutePickerDescription => 'Invia il test a un ricevitore AirPlay. Solo AirPlay riporta la modalità audio risolta.'; - @override String get atmosTestStop => 'Interrompi test'; - @override String get atmosTestUrl => 'URL del file di prova'; - @override String get atmosTestUrlDescription => 'URL HTTP di un file .ec3 Dolby Atmos grezzo (ad es. estratto con ffmpeg)'; - @override String get atmosTestUrlMissing => 'Imposta prima l\'URL del file di prova'; - @override String get atmosTestStatus => 'Stato'; @override String get dvConversionMode => 'Conversione Dolby Vision'; @override String get dvConversionModeDescription => 'Scegli come ExoPlayer gestisce i file Dolby Vision con profilo 7.'; @override String get dvConversionAuto => 'Auto'; @@ -2882,30 +2858,6 @@ extension on TranslationsIt { 'settings.downmixCenterBoostShort' => 'dB', 'settings.audioDownmixNormalize' => 'Normalizza il volume durante il downmix', 'settings.audioDownmixNormalizeDescription' => 'Riduce il volume del mix per evitare il clipping. Disattiva questa opzione per mantenere il volume originale (le scene più rumorose potrebbero risultare distorte).', - 'settings.atmosDiagnostics' => 'Test uscita Atmos', - 'settings.atmosDiagnosticsDescription' => 'Diagnostica l\'uscita Dolby Atmos riproducendo segnali di prova con il lettore di sistema', - 'settings.atmosTestHlsAtmos' => 'Stream Atmos di Apple', - 'settings.atmosTestHlsAtmosDescription' => 'Stream Dolby Atmos di riferimento. Il ricevitore dovrebbe mostrare Dolby Atmos.', - 'settings.atmosTestHlsControl' => 'Stream surround di Apple', - 'settings.atmosTestHlsControlDescription' => 'Stream di controllo senza Atmos. Il ricevitore dovrebbe mostrare surround senza Atmos.', - 'settings.atmosTestRawStream' => 'Stream EAC3 grezzo', - 'settings.atmosTestRawStreamDescription' => 'Trasmette il file di prova esattamente come la riproduzione Atmos del lettore. Richiede l\'URL del file di prova.', - 'settings.atmosTestRawFile' => 'File EAC3 grezzo', - 'settings.atmosTestRawFileDescription' => 'Riproduce il file di prova con lunghezza nota. Richiede l\'URL del file di prova.', - 'settings.atmosTestAsbarNative' => 'Renderer con buffer di campioni (nativo)', - 'settings.atmosTestAsbarNativeDescription' => 'Invia l\'audio compresso intatto del file direttamente al renderer di sistema. Richiede l\'URL del file di test.', - 'settings.atmosTestAsbarGenerated' => 'Renderer con buffer di campioni (ricostruito)', - 'settings.atmosTestAsbarGeneratedDescription' => 'Come sopra, ma con la descrizione audio costruita come nella riproduzione. Richiede l\'URL del file di test.', - 'settings.atmosTestSessionMode' => 'Usa la modalità riproduzione film', - 'settings.atmosTestSessionModeDescription' => 'Disattivato usa la modalità documentata da Dolby. Attivato usa la modalità precedente.', - 'settings.atmosTestShowRoutePicker' => 'Scegli uscita AirPlay', - 'settings.atmosTestHideRoutePicker' => 'Nascondi selettore uscita AirPlay', - 'settings.atmosTestRoutePickerDescription' => 'Invia il test a un ricevitore AirPlay. Solo AirPlay riporta la modalità audio risolta.', - 'settings.atmosTestStop' => 'Interrompi test', - 'settings.atmosTestUrl' => 'URL del file di prova', - 'settings.atmosTestUrlDescription' => 'URL HTTP di un file .ec3 Dolby Atmos grezzo (ad es. estratto con ffmpeg)', - 'settings.atmosTestUrlMissing' => 'Imposta prima l\'URL del file di prova', - 'settings.atmosTestStatus' => 'Stato', 'settings.dvConversionMode' => 'Conversione Dolby Vision', 'settings.dvConversionModeDescription' => 'Scegli come ExoPlayer gestisce i file Dolby Vision con profilo 7.', 'settings.dvConversionAuto' => 'Auto', @@ -3106,8 +3058,6 @@ extension on TranslationsIt { 'mediaMenu.deleteMovieTitle' => 'Eliminare questo film?', 'mediaMenu.deleteEpisodeConfirm' => 'Elimina episodio', 'mediaMenu.deleteSeasonConfirm' => 'Elimina stagione', - _ => null, - } ?? switch (path) { 'mediaMenu.deleteShowConfirm' => 'Elimina serie', 'mediaMenu.deleteMovieConfirm' => 'Elimina film', 'mediaMenu.deleteAnyway' => 'Elimina comunque', @@ -3132,6 +3082,8 @@ extension on TranslationsIt { 'rateSheet.noConnectedServices' => 'Collega un servizio nelle Impostazioni per assegnare valutazioni anche su quel servizio.', 'accessibility.mediaCardMovie' => ({required Object title}) => '${title}, film', 'accessibility.mediaCardShow' => ({required Object title}) => '${title}, serie TV', + _ => null, + } ?? switch (path) { 'accessibility.mediaCardEpisode' => ({required Object title, required Object episodeInfo}) => '${title}, ${episodeInfo}', 'accessibility.mediaCardSeason' => ({required Object title, required Object seasonInfo}) => '${title}, ${seasonInfo}', 'accessibility.mediaCardWatched' => 'visto', @@ -3620,8 +3572,6 @@ extension on TranslationsIt { 'explore.badge.requested' => 'Richiesto', 'explore.badge.pendingApproval' => 'In attesa di approvazione', 'explore.badge.processing' => 'In elaborazione', - _ => null, - } ?? switch (path) { 'explore.badge.declined' => 'Rifiutato', 'explore.badge.requestFailed' => 'Richiesta non riuscita', 'explore.badge.requested4k' => 'Richiesto in 4K', @@ -3646,6 +3596,8 @@ extension on TranslationsIt { 'explore.stats.completed' => ({required Object n}) => '${n} completati', 'explore.stats.onHold' => ({required Object n}) => '${n} in pausa', 'explore.stats.dropped' => ({required Object n}) => '${n} abbandonati', + _ => null, + } ?? switch (path) { 'explore.season.winter' => 'Inverno', 'explore.season.spring' => 'Primavera', 'explore.season.summer' => 'Estate', @@ -4134,8 +4086,6 @@ extension on TranslationsIt { 'performanceOverlay.dropped' => 'Scartati', 'performanceOverlay.dvRpus' => 'DV RPU', 'performanceOverlay.dvRpuAverage' => 'Media DV RPU', - _ => null, - } ?? switch (path) { 'performanceOverlay.dvSampleAverage' => 'Media camp. DV', 'performanceOverlay.maxLuma' => 'Luma max', 'performanceOverlay.minLuma' => 'Luma min', @@ -4160,6 +4110,8 @@ extension on TranslationsIt { 'externalPlayer.playerPackage' => 'Nome pacchetto', 'externalPlayer.playerUrlScheme' => 'Schema URL', 'externalPlayer.off' => 'Disattivato', + _ => null, + } ?? switch (path) { 'externalPlayer.launchFailed' => 'Impossibile aprire il lettore esterno', 'externalPlayer.appNotInstalled' => ({required Object name}) => '${name} non è installato', 'externalPlayer.playInExternalPlayer' => 'Riproduci nel lettore esterno', diff --git a/lib/i18n/strings_ja.g.dart b/lib/i18n/strings_ja.g.dart index fc755f8c..250115f9 100644 --- a/lib/i18n/strings_ja.g.dart +++ b/lib/i18n/strings_ja.g.dart @@ -421,30 +421,6 @@ class _Translations$settings$ja extends Translations$settings$en { @override String get downmixCenterBoostShort => 'dB'; @override String get audioDownmixNormalize => 'ダウンミックス時の音量正規化'; @override String get audioDownmixNormalizeDescription => 'クリッピングを防ぐためにミックス音量を下げます。オフにすると元の音量を維持します(大音量シーンで歪む場合があります)。'; - @override String get atmosDiagnostics => 'Atmos出力テスト'; - @override String get atmosDiagnosticsDescription => 'システムプレイヤーでテスト信号を再生してDolby Atmos出力を診断します'; - @override String get atmosTestHlsAtmos => 'Apple Atmosストリーム'; - @override String get atmosTestHlsAtmosDescription => '動作確認済みのDolby Atmosストリーム。レシーバーにDolby Atmosと表示されるはずです。'; - @override String get atmosTestHlsControl => 'Appleサラウンドストリーム'; - @override String get atmosTestHlsControlDescription => 'Atmosなしの比較用ストリーム。レシーバーにAtmosなしのサラウンドが表示されるはずです。'; - @override String get atmosTestRawStream => '生EAC3ストリーム'; - @override String get atmosTestRawStreamDescription => 'プレイヤー内のAtmos再生と同じ方式でテストファイルをストリーミングします。テストファイルのURLが必要です。'; - @override String get atmosTestRawFile => '生EAC3ファイル'; - @override String get atmosTestRawFileDescription => '長さが既知のテストファイルを再生します。テストファイルのURLが必要です。'; - @override String get atmosTestAsbarNative => 'サンプルバッファレンダラー(ネイティブ)'; - @override String get atmosTestAsbarNativeDescription => 'ファイルの圧縮音声をそのままシステムのレンダラーに渡します。テストファイルのURLが必要です。'; - @override String get atmosTestAsbarGenerated => 'サンプルバッファレンダラー(再構築)'; - @override String get atmosTestAsbarGeneratedDescription => '同じですが、再生時と同じ方法で音声記述を再構築します。テストファイルのURLが必要です。'; - @override String get atmosTestSessionMode => 'ムービー再生モードを使用'; - @override String get atmosTestSessionModeDescription => 'オフはDolbyが文書化したモードを使用します。オンは以前のモードを使用します。'; - @override String get atmosTestShowRoutePicker => 'AirPlay出力を選択'; - @override String get atmosTestHideRoutePicker => 'AirPlay出力の選択を隠す'; - @override String get atmosTestRoutePickerDescription => 'テストをAirPlayレシーバーに送信します。解決された音声モードを報告するのはAirPlayのみです。'; - @override String get atmosTestStop => 'テストを停止'; - @override String get atmosTestUrl => 'テストファイルのURL'; - @override String get atmosTestUrlDescription => '生の.ec3 Dolby AtmosファイルのHTTP URL(例: ffmpegで抽出)'; - @override String get atmosTestUrlMissing => '先にテストファイルのURLを設定してください'; - @override String get atmosTestStatus => 'ステータス'; @override String get dvConversionMode => 'Dolby Vision 変換'; @override String get dvConversionModeDescription => 'ExoPlayer が Dolby Vision Profile 7 ファイルを処理する方法を選択します。'; @override String get dvConversionAuto => '自動'; @@ -2873,30 +2849,6 @@ extension on TranslationsJa { 'settings.downmixCenterBoostShort' => 'dB', 'settings.audioDownmixNormalize' => 'ダウンミックス時の音量正規化', 'settings.audioDownmixNormalizeDescription' => 'クリッピングを防ぐためにミックス音量を下げます。オフにすると元の音量を維持します(大音量シーンで歪む場合があります)。', - 'settings.atmosDiagnostics' => 'Atmos出力テスト', - 'settings.atmosDiagnosticsDescription' => 'システムプレイヤーでテスト信号を再生してDolby Atmos出力を診断します', - 'settings.atmosTestHlsAtmos' => 'Apple Atmosストリーム', - 'settings.atmosTestHlsAtmosDescription' => '動作確認済みのDolby Atmosストリーム。レシーバーにDolby Atmosと表示されるはずです。', - 'settings.atmosTestHlsControl' => 'Appleサラウンドストリーム', - 'settings.atmosTestHlsControlDescription' => 'Atmosなしの比較用ストリーム。レシーバーにAtmosなしのサラウンドが表示されるはずです。', - 'settings.atmosTestRawStream' => '生EAC3ストリーム', - 'settings.atmosTestRawStreamDescription' => 'プレイヤー内のAtmos再生と同じ方式でテストファイルをストリーミングします。テストファイルのURLが必要です。', - 'settings.atmosTestRawFile' => '生EAC3ファイル', - 'settings.atmosTestRawFileDescription' => '長さが既知のテストファイルを再生します。テストファイルのURLが必要です。', - 'settings.atmosTestAsbarNative' => 'サンプルバッファレンダラー(ネイティブ)', - 'settings.atmosTestAsbarNativeDescription' => 'ファイルの圧縮音声をそのままシステムのレンダラーに渡します。テストファイルのURLが必要です。', - 'settings.atmosTestAsbarGenerated' => 'サンプルバッファレンダラー(再構築)', - 'settings.atmosTestAsbarGeneratedDescription' => '同じですが、再生時と同じ方法で音声記述を再構築します。テストファイルのURLが必要です。', - 'settings.atmosTestSessionMode' => 'ムービー再生モードを使用', - 'settings.atmosTestSessionModeDescription' => 'オフはDolbyが文書化したモードを使用します。オンは以前のモードを使用します。', - 'settings.atmosTestShowRoutePicker' => 'AirPlay出力を選択', - 'settings.atmosTestHideRoutePicker' => 'AirPlay出力の選択を隠す', - 'settings.atmosTestRoutePickerDescription' => 'テストをAirPlayレシーバーに送信します。解決された音声モードを報告するのはAirPlayのみです。', - 'settings.atmosTestStop' => 'テストを停止', - 'settings.atmosTestUrl' => 'テストファイルのURL', - 'settings.atmosTestUrlDescription' => '生の.ec3 Dolby AtmosファイルのHTTP URL(例: ffmpegで抽出)', - 'settings.atmosTestUrlMissing' => '先にテストファイルのURLを設定してください', - 'settings.atmosTestStatus' => 'ステータス', 'settings.dvConversionMode' => 'Dolby Vision 変換', 'settings.dvConversionModeDescription' => 'ExoPlayer が Dolby Vision Profile 7 ファイルを処理する方法を選択します。', 'settings.dvConversionAuto' => '自動', @@ -3097,8 +3049,6 @@ extension on TranslationsJa { 'mediaMenu.deleteMovieTitle' => 'この映画を削除しますか?', 'mediaMenu.deleteEpisodeConfirm' => 'エピソードを削除', 'mediaMenu.deleteSeasonConfirm' => 'シーズンを削除', - _ => null, - } ?? switch (path) { 'mediaMenu.deleteShowConfirm' => '番組を削除', 'mediaMenu.deleteMovieConfirm' => '映画を削除', 'mediaMenu.deleteAnyway' => 'それでも削除', @@ -3123,6 +3073,8 @@ extension on TranslationsJa { 'rateSheet.noConnectedServices' => '評価するには、設定でサービスを接続してください。', 'accessibility.mediaCardMovie' => ({required Object title}) => '${title}、映画', 'accessibility.mediaCardShow' => ({required Object title}) => '${title}、テレビ番組', + _ => null, + } ?? switch (path) { 'accessibility.mediaCardEpisode' => ({required Object title, required Object episodeInfo}) => '${title}、${episodeInfo}', 'accessibility.mediaCardSeason' => ({required Object title, required Object seasonInfo}) => '${title}、${seasonInfo}', 'accessibility.mediaCardWatched' => '視聴済み', @@ -3611,8 +3563,6 @@ extension on TranslationsJa { 'explore.badge.requested' => 'リクエスト済み', 'explore.badge.pendingApproval' => '承認待ち', 'explore.badge.processing' => '処理中', - _ => null, - } ?? switch (path) { 'explore.badge.declined' => '却下', 'explore.badge.requestFailed' => 'リクエスト失敗', 'explore.badge.requested4k' => '4Kリクエスト済み', @@ -3637,6 +3587,8 @@ extension on TranslationsJa { 'explore.stats.completed' => ({required Object n}) => '${n}人が視聴済み', 'explore.stats.onHold' => ({required Object n}) => '${n}人が保留中', 'explore.stats.dropped' => ({required Object n}) => '${n}人が視聴中止', + _ => null, + } ?? switch (path) { 'explore.season.winter' => '冬', 'explore.season.spring' => '春', 'explore.season.summer' => '夏', @@ -4125,8 +4077,6 @@ extension on TranslationsJa { 'performanceOverlay.dropped' => 'ドロップ', 'performanceOverlay.dvRpus' => 'DV RPU', 'performanceOverlay.dvRpuAverage' => 'DV RPU 平均', - _ => null, - } ?? switch (path) { 'performanceOverlay.dvSampleAverage' => 'DV サンプル平均', 'performanceOverlay.maxLuma' => '最大輝度', 'performanceOverlay.minLuma' => '最小輝度', @@ -4151,6 +4101,8 @@ extension on TranslationsJa { 'externalPlayer.playerPackage' => 'パッケージ名', 'externalPlayer.playerUrlScheme' => 'URLスキーム', 'externalPlayer.off' => 'オフ', + _ => null, + } ?? switch (path) { 'externalPlayer.launchFailed' => '外部プレーヤーの起動に失敗しました', 'externalPlayer.appNotInstalled' => ({required Object name}) => '${name}がインストールされていません', 'externalPlayer.playInExternalPlayer' => '外部プレーヤーで再生', diff --git a/lib/i18n/strings_kk.g.dart b/lib/i18n/strings_kk.g.dart index eebc2ae8..79e76da3 100644 --- a/lib/i18n/strings_kk.g.dart +++ b/lib/i18n/strings_kk.g.dart @@ -421,30 +421,6 @@ class _Translations$settings$kk extends Translations$settings$en { @override String get downmixCenterBoostShort => 'дБ'; @override String get audioDownmixNormalize => 'Түрлендіруде дыбысты нормалау'; @override String get audioDownmixNormalizeDescription => 'Дыбыс бұзылуын болдырмау үшін деңгейді төмендету.'; - @override String get atmosDiagnostics => 'Atmos шығысын тексеру'; - @override String get atmosDiagnosticsDescription => 'Dolby Atmos шығысын тексеру'; - @override String get atmosTestHlsAtmos => 'Apple Atmos ағыны'; - @override String get atmosTestHlsAtmosDescription => 'Дұрыс жұмыс істейтін Dolby Atmos ағыны.'; - @override String get atmosTestHlsControl => 'Apple көлемді дыбыс ағыны'; - @override String get atmosTestHlsControlDescription => 'Atmos емес бақылау ағыны.'; - @override String get atmosTestRawStream => 'Өңделмеген EAC3 ағыны'; - @override String get atmosTestRawStreamDescription => 'Тест файлын ішкі Atmos ретінде тарату.'; - @override String get atmosTestRawFile => 'Өңделмеген EAC3 файлы'; - @override String get atmosTestRawFileDescription => 'Тест файлын ойнату.'; - @override String get atmosTestAsbarNative => 'Сэмпл-буфер рендерері (нативті)'; - @override String get atmosTestAsbarNativeDescription => 'Файлдың өзгертілмеген сығылған дыбысын тікелей жүйелік рендерерге береді. Тест файлының URL-і қажет.'; - @override String get atmosTestAsbarGenerated => 'Сэмпл-буфер рендерері (қайта құрылған)'; - @override String get atmosTestAsbarGeneratedDescription => 'Сол сияқты, бірақ дыбыс сипаттамасы ойнату кезіндегідей қайта құрылады. Тест файлының URL-і қажет.'; - @override String get atmosTestSessionMode => 'Фильмді ойнату сеансы режимін пайдалану'; - @override String get atmosTestSessionModeDescription => 'Өшірулі — Dolby құжаттаған режим. Қосулы — бұрын пайдаланылған режим.'; - @override String get atmosTestShowRoutePicker => 'AirPlay шығысын таңдау'; - @override String get atmosTestHideRoutePicker => 'AirPlay шығысын таңдау терезесін жасыру'; - @override String get atmosTestRoutePickerDescription => 'Тестті AirPlay қабылдағышына жібереді. Анықталған дыбыс режимін тек AirPlay хабарлайды.'; - @override String get atmosTestStop => 'Тестті тоқтату'; - @override String get atmosTestUrl => 'Тест файлының URL-і'; - @override String get atmosTestUrlDescription => 'Өңделмеген .ec3 файлының HTTP URL-і'; - @override String get atmosTestUrlMissing => 'Алдымен тест файлының URL-ін орнатыңыз'; - @override String get atmosTestStatus => 'Мәртебесі'; @override String get dvConversionMode => 'Dolby Vision түрлендіруі'; @override String get dvConversionModeDescription => 'ExoPlayer-дің Dolby Vision Profile 7 файлдарын өңдеу әдісін таңдаңыз.'; @override String get dvConversionAuto => 'Автоматты'; @@ -2882,30 +2858,6 @@ extension on TranslationsKk { 'settings.downmixCenterBoostShort' => 'дБ', 'settings.audioDownmixNormalize' => 'Түрлендіруде дыбысты нормалау', 'settings.audioDownmixNormalizeDescription' => 'Дыбыс бұзылуын болдырмау үшін деңгейді төмендету.', - 'settings.atmosDiagnostics' => 'Atmos шығысын тексеру', - 'settings.atmosDiagnosticsDescription' => 'Dolby Atmos шығысын тексеру', - 'settings.atmosTestHlsAtmos' => 'Apple Atmos ағыны', - 'settings.atmosTestHlsAtmosDescription' => 'Дұрыс жұмыс істейтін Dolby Atmos ағыны.', - 'settings.atmosTestHlsControl' => 'Apple көлемді дыбыс ағыны', - 'settings.atmosTestHlsControlDescription' => 'Atmos емес бақылау ағыны.', - 'settings.atmosTestRawStream' => 'Өңделмеген EAC3 ағыны', - 'settings.atmosTestRawStreamDescription' => 'Тест файлын ішкі Atmos ретінде тарату.', - 'settings.atmosTestRawFile' => 'Өңделмеген EAC3 файлы', - 'settings.atmosTestRawFileDescription' => 'Тест файлын ойнату.', - 'settings.atmosTestAsbarNative' => 'Сэмпл-буфер рендерері (нативті)', - 'settings.atmosTestAsbarNativeDescription' => 'Файлдың өзгертілмеген сығылған дыбысын тікелей жүйелік рендерерге береді. Тест файлының URL-і қажет.', - 'settings.atmosTestAsbarGenerated' => 'Сэмпл-буфер рендерері (қайта құрылған)', - 'settings.atmosTestAsbarGeneratedDescription' => 'Сол сияқты, бірақ дыбыс сипаттамасы ойнату кезіндегідей қайта құрылады. Тест файлының URL-і қажет.', - 'settings.atmosTestSessionMode' => 'Фильмді ойнату сеансы режимін пайдалану', - 'settings.atmosTestSessionModeDescription' => 'Өшірулі — Dolby құжаттаған режим. Қосулы — бұрын пайдаланылған режим.', - 'settings.atmosTestShowRoutePicker' => 'AirPlay шығысын таңдау', - 'settings.atmosTestHideRoutePicker' => 'AirPlay шығысын таңдау терезесін жасыру', - 'settings.atmosTestRoutePickerDescription' => 'Тестті AirPlay қабылдағышына жібереді. Анықталған дыбыс режимін тек AirPlay хабарлайды.', - 'settings.atmosTestStop' => 'Тестті тоқтату', - 'settings.atmosTestUrl' => 'Тест файлының URL-і', - 'settings.atmosTestUrlDescription' => 'Өңделмеген .ec3 файлының HTTP URL-і', - 'settings.atmosTestUrlMissing' => 'Алдымен тест файлының URL-ін орнатыңыз', - 'settings.atmosTestStatus' => 'Мәртебесі', 'settings.dvConversionMode' => 'Dolby Vision түрлендіруі', 'settings.dvConversionModeDescription' => 'ExoPlayer-дің Dolby Vision Profile 7 файлдарын өңдеу әдісін таңдаңыз.', 'settings.dvConversionAuto' => 'Автоматты', @@ -3106,8 +3058,6 @@ extension on TranslationsKk { 'mediaMenu.deleteMovieTitle' => 'Осы фильм өшірілсін бе?', 'mediaMenu.deleteEpisodeConfirm' => 'Бөлімді өшіру', 'mediaMenu.deleteSeasonConfirm' => 'Маусымды өшіру', - _ => null, - } ?? switch (path) { 'mediaMenu.deleteShowConfirm' => 'Сериалды өшіру', 'mediaMenu.deleteMovieConfirm' => 'Фильмді өшіру', 'mediaMenu.deleteAnyway' => 'Бәрібір өшіру', @@ -3132,6 +3082,8 @@ extension on TranslationsKk { 'rateSheet.noConnectedServices' => 'Бағалау үшін Баптаулардан қызметті қосыңыз.', 'accessibility.mediaCardMovie' => ({required Object title}) => '${title}, фильм', 'accessibility.mediaCardShow' => ({required Object title}) => '${title}, TV шоу', + _ => null, + } ?? switch (path) { 'accessibility.mediaCardEpisode' => ({required Object title, required Object episodeInfo}) => '${title}, ${episodeInfo}', 'accessibility.mediaCardSeason' => ({required Object title, required Object seasonInfo}) => '${title}, ${seasonInfo}', 'accessibility.mediaCardWatched' => 'көрілген', @@ -3620,8 +3572,6 @@ extension on TranslationsKk { 'explore.badge.requested' => 'Сұралған', 'explore.badge.pendingApproval' => 'Растау күтілуде', 'explore.badge.processing' => 'Өңделуде', - _ => null, - } ?? switch (path) { 'explore.badge.declined' => 'Қабылданбады', 'explore.badge.requestFailed' => 'Сұрау сәтсіз аяқталды', 'explore.badge.requested4k' => '4K сұралған', @@ -3646,6 +3596,8 @@ extension on TranslationsKk { 'explore.stats.completed' => ({required Object n}) => '${n} аяқтады', 'explore.stats.onHold' => ({required Object n}) => '${n} кейінге қалдырды', 'explore.stats.dropped' => ({required Object n}) => '${n} тастады', + _ => null, + } ?? switch (path) { 'explore.season.winter' => 'Қыс', 'explore.season.spring' => 'Көктем', 'explore.season.summer' => 'Жаз', @@ -4134,8 +4086,6 @@ extension on TranslationsKk { 'performanceOverlay.dropped' => 'Өткізілген кадрлар', 'performanceOverlay.dvRpus' => 'DV RPU-лар', 'performanceOverlay.dvRpuAverage' => 'DV RPU Орт.', - _ => null, - } ?? switch (path) { 'performanceOverlay.dvSampleAverage' => 'DV Үлгі Орт.', 'performanceOverlay.maxLuma' => 'Макс Luma', 'performanceOverlay.minLuma' => 'Мин Luma', @@ -4160,6 +4110,8 @@ extension on TranslationsKk { 'externalPlayer.playerPackage' => 'Пакет атауы', 'externalPlayer.playerUrlScheme' => 'URL схемасы', 'externalPlayer.off' => 'Өшірулі', + _ => null, + } ?? switch (path) { 'externalPlayer.launchFailed' => 'Сыртқы ойнатқышты іске қосу мүмкін болмады', 'externalPlayer.appNotInstalled' => ({required Object name}) => '${name} орнатылмаған', 'externalPlayer.playInExternalPlayer' => 'Сыртқы ойнатқышта ойнату', diff --git a/lib/i18n/strings_ko.g.dart b/lib/i18n/strings_ko.g.dart index 0bb111ed..50441595 100644 --- a/lib/i18n/strings_ko.g.dart +++ b/lib/i18n/strings_ko.g.dart @@ -421,30 +421,6 @@ class _Translations$settings$ko extends Translations$settings$en { @override String get downmixCenterBoostShort => 'dB'; @override String get audioDownmixNormalize => '다운믹스 시 음량 정규화'; @override String get audioDownmixNormalizeDescription => '클리핑을 방지하기 위해 믹스 음량을 낮춥니다. 원래 음량을 유지하려면 끄세요(큰 소리 장면에서 왜곡될 수 있음).'; - @override String get atmosDiagnostics => 'Atmos 출력 테스트'; - @override String get atmosDiagnosticsDescription => '시스템 플레이어로 테스트 신호를 재생하여 Dolby Atmos 출력을 진단합니다'; - @override String get atmosTestHlsAtmos => 'Apple Atmos 스트림'; - @override String get atmosTestHlsAtmosDescription => '검증된 Dolby Atmos 스트림입니다. 리시버에 Dolby Atmos가 표시되어야 합니다.'; - @override String get atmosTestHlsControl => 'Apple 서라운드 스트림'; - @override String get atmosTestHlsControlDescription => 'Atmos 없는 대조용 스트림입니다. 리시버에 Atmos 없는 서라운드가 표시되어야 합니다.'; - @override String get atmosTestRawStream => '원시 EAC3 스트림'; - @override String get atmosTestRawStreamDescription => '플레이어 내 Atmos 재생과 동일한 방식으로 테스트 파일을 스트리밍합니다. 테스트 파일 URL이 필요합니다.'; - @override String get atmosTestRawFile => '원시 EAC3 파일'; - @override String get atmosTestRawFileDescription => '길이가 알려진 테스트 파일을 재생합니다. 테스트 파일 URL이 필요합니다.'; - @override String get atmosTestAsbarNative => '샘플 버퍼 렌더러(네이티브)'; - @override String get atmosTestAsbarNativeDescription => '파일의 압축 오디오를 그대로 시스템 렌더러에 전달합니다. 테스트 파일 URL이 필요합니다.'; - @override String get atmosTestAsbarGenerated => '샘플 버퍼 렌더러(재구성)'; - @override String get atmosTestAsbarGeneratedDescription => '동일하지만 오디오 설명을 재생과 같은 방식으로 재구성합니다. 테스트 파일 URL이 필요합니다.'; - @override String get atmosTestSessionMode => '동영상 재생 세션 모드 사용'; - @override String get atmosTestSessionModeDescription => '끄면 Dolby가 문서화한 모드를 사용합니다. 켜면 이전 모드를 사용합니다.'; - @override String get atmosTestShowRoutePicker => 'AirPlay 출력 선택'; - @override String get atmosTestHideRoutePicker => 'AirPlay 출력 선택기 숨기기'; - @override String get atmosTestRoutePickerDescription => '테스트를 AirPlay 수신기로 보냅니다. 확인된 오디오 모드는 AirPlay에서만 보고됩니다.'; - @override String get atmosTestStop => '테스트 중지'; - @override String get atmosTestUrl => '테스트 파일 URL'; - @override String get atmosTestUrlDescription => '원시 .ec3 Dolby Atmos 파일의 HTTP URL(예: ffmpeg로 추출)'; - @override String get atmosTestUrlMissing => '먼저 테스트 파일 URL을 설정하세요'; - @override String get atmosTestStatus => '상태'; @override String get dvConversionMode => 'Dolby Vision 변환'; @override String get dvConversionModeDescription => 'ExoPlayer가 Dolby Vision Profile 7 파일을 처리하는 방식을 선택합니다.'; @override String get dvConversionAuto => '자동'; @@ -2873,30 +2849,6 @@ extension on TranslationsKo { 'settings.downmixCenterBoostShort' => 'dB', 'settings.audioDownmixNormalize' => '다운믹스 시 음량 정규화', 'settings.audioDownmixNormalizeDescription' => '클리핑을 방지하기 위해 믹스 음량을 낮춥니다. 원래 음량을 유지하려면 끄세요(큰 소리 장면에서 왜곡될 수 있음).', - 'settings.atmosDiagnostics' => 'Atmos 출력 테스트', - 'settings.atmosDiagnosticsDescription' => '시스템 플레이어로 테스트 신호를 재생하여 Dolby Atmos 출력을 진단합니다', - 'settings.atmosTestHlsAtmos' => 'Apple Atmos 스트림', - 'settings.atmosTestHlsAtmosDescription' => '검증된 Dolby Atmos 스트림입니다. 리시버에 Dolby Atmos가 표시되어야 합니다.', - 'settings.atmosTestHlsControl' => 'Apple 서라운드 스트림', - 'settings.atmosTestHlsControlDescription' => 'Atmos 없는 대조용 스트림입니다. 리시버에 Atmos 없는 서라운드가 표시되어야 합니다.', - 'settings.atmosTestRawStream' => '원시 EAC3 스트림', - 'settings.atmosTestRawStreamDescription' => '플레이어 내 Atmos 재생과 동일한 방식으로 테스트 파일을 스트리밍합니다. 테스트 파일 URL이 필요합니다.', - 'settings.atmosTestRawFile' => '원시 EAC3 파일', - 'settings.atmosTestRawFileDescription' => '길이가 알려진 테스트 파일을 재생합니다. 테스트 파일 URL이 필요합니다.', - 'settings.atmosTestAsbarNative' => '샘플 버퍼 렌더러(네이티브)', - 'settings.atmosTestAsbarNativeDescription' => '파일의 압축 오디오를 그대로 시스템 렌더러에 전달합니다. 테스트 파일 URL이 필요합니다.', - 'settings.atmosTestAsbarGenerated' => '샘플 버퍼 렌더러(재구성)', - 'settings.atmosTestAsbarGeneratedDescription' => '동일하지만 오디오 설명을 재생과 같은 방식으로 재구성합니다. 테스트 파일 URL이 필요합니다.', - 'settings.atmosTestSessionMode' => '동영상 재생 세션 모드 사용', - 'settings.atmosTestSessionModeDescription' => '끄면 Dolby가 문서화한 모드를 사용합니다. 켜면 이전 모드를 사용합니다.', - 'settings.atmosTestShowRoutePicker' => 'AirPlay 출력 선택', - 'settings.atmosTestHideRoutePicker' => 'AirPlay 출력 선택기 숨기기', - 'settings.atmosTestRoutePickerDescription' => '테스트를 AirPlay 수신기로 보냅니다. 확인된 오디오 모드는 AirPlay에서만 보고됩니다.', - 'settings.atmosTestStop' => '테스트 중지', - 'settings.atmosTestUrl' => '테스트 파일 URL', - 'settings.atmosTestUrlDescription' => '원시 .ec3 Dolby Atmos 파일의 HTTP URL(예: ffmpeg로 추출)', - 'settings.atmosTestUrlMissing' => '먼저 테스트 파일 URL을 설정하세요', - 'settings.atmosTestStatus' => '상태', 'settings.dvConversionMode' => 'Dolby Vision 변환', 'settings.dvConversionModeDescription' => 'ExoPlayer가 Dolby Vision Profile 7 파일을 처리하는 방식을 선택합니다.', 'settings.dvConversionAuto' => '자동', @@ -3097,8 +3049,6 @@ extension on TranslationsKo { 'mediaMenu.deleteMovieTitle' => '이 영화를 삭제할까요?', 'mediaMenu.deleteEpisodeConfirm' => '에피소드 삭제', 'mediaMenu.deleteSeasonConfirm' => '시즌 삭제', - _ => null, - } ?? switch (path) { 'mediaMenu.deleteShowConfirm' => '프로그램 삭제', 'mediaMenu.deleteMovieConfirm' => '영화 삭제', 'mediaMenu.deleteAnyway' => '그래도 삭제', @@ -3123,6 +3073,8 @@ extension on TranslationsKo { 'rateSheet.noConnectedServices' => '평가하려면 설정에서 서비스를 연결하세요.', 'accessibility.mediaCardMovie' => ({required Object title}) => '${title}, 영화', 'accessibility.mediaCardShow' => ({required Object title}) => '${title}, TV 프로그램', + _ => null, + } ?? switch (path) { 'accessibility.mediaCardEpisode' => ({required Object title, required Object episodeInfo}) => '${title}, ${episodeInfo}', 'accessibility.mediaCardSeason' => ({required Object title, required Object seasonInfo}) => '${title}, ${seasonInfo}', 'accessibility.mediaCardWatched' => '시청 완료', @@ -3611,8 +3563,6 @@ extension on TranslationsKo { 'explore.badge.requested' => '요청됨', 'explore.badge.pendingApproval' => '승인 대기 중', 'explore.badge.processing' => '처리 중', - _ => null, - } ?? switch (path) { 'explore.badge.declined' => '거절됨', 'explore.badge.requestFailed' => '요청 실패', 'explore.badge.requested4k' => '4K 요청됨', @@ -3637,6 +3587,8 @@ extension on TranslationsKo { 'explore.stats.completed' => ({required Object n}) => '완료 ${n}명', 'explore.stats.onHold' => ({required Object n}) => '보류 ${n}명', 'explore.stats.dropped' => ({required Object n}) => '하차 ${n}명', + _ => null, + } ?? switch (path) { 'explore.season.winter' => '겨울', 'explore.season.spring' => '봄', 'explore.season.summer' => '여름', @@ -4125,8 +4077,6 @@ extension on TranslationsKo { 'performanceOverlay.dropped' => '드롭됨', 'performanceOverlay.dvRpus' => 'DV RPU', 'performanceOverlay.dvRpuAverage' => 'DV RPU 평균', - _ => null, - } ?? switch (path) { 'performanceOverlay.dvSampleAverage' => 'DV 샘플 평균', 'performanceOverlay.maxLuma' => '최대 휘도', 'performanceOverlay.minLuma' => '최소 휘도', @@ -4151,6 +4101,8 @@ extension on TranslationsKo { 'externalPlayer.playerPackage' => '패키지 이름', 'externalPlayer.playerUrlScheme' => 'URL 스킴', 'externalPlayer.off' => '꺼짐', + _ => null, + } ?? switch (path) { 'externalPlayer.launchFailed' => '외부 플레이어를 열 수 없습니다', 'externalPlayer.appNotInstalled' => ({required Object name}) => '${name}이(가) 설치되어 있지 않습니다', 'externalPlayer.playInExternalPlayer' => '외부 플레이어에서 재생', diff --git a/lib/i18n/strings_nb.g.dart b/lib/i18n/strings_nb.g.dart index 56548403..719bd91e 100644 --- a/lib/i18n/strings_nb.g.dart +++ b/lib/i18n/strings_nb.g.dart @@ -421,30 +421,6 @@ class _Translations$settings$nb extends Translations$settings$en { @override String get downmixCenterBoostShort => 'dB'; @override String get audioDownmixNormalize => 'Normaliser lydstyrke ved nedmiks'; @override String get audioDownmixNormalizeDescription => 'Senker miksen for å unngå klipping. Slå av for å beholde originalvolumet (høye scener kan forvrenges).'; - @override String get atmosDiagnostics => 'Atmos-utgangstest'; - @override String get atmosDiagnosticsDescription => 'Diagnostiser Dolby Atmos-utgangen ved å spille testsignaler gjennom systemspilleren'; - @override String get atmosTestHlsAtmos => 'Apple Atmos-strøm'; - @override String get atmosTestHlsAtmosDescription => 'Verifisert Dolby Atmos-strøm. Mottakeren bør vise Dolby Atmos.'; - @override String get atmosTestHlsControl => 'Apple surround-strøm'; - @override String get atmosTestHlsControlDescription => 'Kontrollstrøm uten Atmos. Mottakeren bør vise surround uten Atmos.'; - @override String get atmosTestRawStream => 'Rå EAC3-strøm'; - @override String get atmosTestRawStreamDescription => 'Strømmer testfilen akkurat som Atmos-avspilling i spilleren. Krever testfilens URL.'; - @override String get atmosTestRawFile => 'Rå EAC3-fil'; - @override String get atmosTestRawFileDescription => 'Spiller av testfilen med kjent lengde. Krever testfilens URL.'; - @override String get atmosTestAsbarNative => 'Sample-buffer-renderer (nativ)'; - @override String get atmosTestAsbarNativeDescription => 'Sender filens urørte komprimerte lyd rett til systemets renderer. Krever URL til testfilen.'; - @override String get atmosTestAsbarGenerated => 'Sample-buffer-renderer (gjenoppbygd)'; - @override String get atmosTestAsbarGeneratedDescription => 'Det samme, men med lydbeskrivelsen bygd slik avspilling bygger den. Krever URL til testfilen.'; - @override String get atmosTestSessionMode => 'Bruk filmavspillingsmodus'; - @override String get atmosTestSessionModeDescription => 'Av bruker modusen Dolby dokumenterer. På bruker den tidligere modusen.'; - @override String get atmosTestShowRoutePicker => 'Velg AirPlay-utgang'; - @override String get atmosTestHideRoutePicker => 'Skjul AirPlay-utgangsvelger'; - @override String get atmosTestRoutePickerDescription => 'Sender testen til en AirPlay-mottaker. Bare AirPlay rapporterer den valgte lydmodusen.'; - @override String get atmosTestStop => 'Stopp test'; - @override String get atmosTestUrl => 'Testfilens URL'; - @override String get atmosTestUrlDescription => 'HTTP-URL til en rå .ec3 Dolby Atmos-fil (f.eks. hentet ut med ffmpeg)'; - @override String get atmosTestUrlMissing => 'Angi testfilens URL først'; - @override String get atmosTestStatus => 'Status'; @override String get dvConversionMode => 'Dolby Vision-konvertering'; @override String get dvConversionModeDescription => 'Velg hvordan ExoPlayer håndterer filer med Dolby Vision-profil 7.'; @override String get dvConversionAuto => 'Automatisk'; @@ -2882,30 +2858,6 @@ extension on TranslationsNb { 'settings.downmixCenterBoostShort' => 'dB', 'settings.audioDownmixNormalize' => 'Normaliser lydstyrke ved nedmiks', 'settings.audioDownmixNormalizeDescription' => 'Senker miksen for å unngå klipping. Slå av for å beholde originalvolumet (høye scener kan forvrenges).', - 'settings.atmosDiagnostics' => 'Atmos-utgangstest', - 'settings.atmosDiagnosticsDescription' => 'Diagnostiser Dolby Atmos-utgangen ved å spille testsignaler gjennom systemspilleren', - 'settings.atmosTestHlsAtmos' => 'Apple Atmos-strøm', - 'settings.atmosTestHlsAtmosDescription' => 'Verifisert Dolby Atmos-strøm. Mottakeren bør vise Dolby Atmos.', - 'settings.atmosTestHlsControl' => 'Apple surround-strøm', - 'settings.atmosTestHlsControlDescription' => 'Kontrollstrøm uten Atmos. Mottakeren bør vise surround uten Atmos.', - 'settings.atmosTestRawStream' => 'Rå EAC3-strøm', - 'settings.atmosTestRawStreamDescription' => 'Strømmer testfilen akkurat som Atmos-avspilling i spilleren. Krever testfilens URL.', - 'settings.atmosTestRawFile' => 'Rå EAC3-fil', - 'settings.atmosTestRawFileDescription' => 'Spiller av testfilen med kjent lengde. Krever testfilens URL.', - 'settings.atmosTestAsbarNative' => 'Sample-buffer-renderer (nativ)', - 'settings.atmosTestAsbarNativeDescription' => 'Sender filens urørte komprimerte lyd rett til systemets renderer. Krever URL til testfilen.', - 'settings.atmosTestAsbarGenerated' => 'Sample-buffer-renderer (gjenoppbygd)', - 'settings.atmosTestAsbarGeneratedDescription' => 'Det samme, men med lydbeskrivelsen bygd slik avspilling bygger den. Krever URL til testfilen.', - 'settings.atmosTestSessionMode' => 'Bruk filmavspillingsmodus', - 'settings.atmosTestSessionModeDescription' => 'Av bruker modusen Dolby dokumenterer. På bruker den tidligere modusen.', - 'settings.atmosTestShowRoutePicker' => 'Velg AirPlay-utgang', - 'settings.atmosTestHideRoutePicker' => 'Skjul AirPlay-utgangsvelger', - 'settings.atmosTestRoutePickerDescription' => 'Sender testen til en AirPlay-mottaker. Bare AirPlay rapporterer den valgte lydmodusen.', - 'settings.atmosTestStop' => 'Stopp test', - 'settings.atmosTestUrl' => 'Testfilens URL', - 'settings.atmosTestUrlDescription' => 'HTTP-URL til en rå .ec3 Dolby Atmos-fil (f.eks. hentet ut med ffmpeg)', - 'settings.atmosTestUrlMissing' => 'Angi testfilens URL først', - 'settings.atmosTestStatus' => 'Status', 'settings.dvConversionMode' => 'Dolby Vision-konvertering', 'settings.dvConversionModeDescription' => 'Velg hvordan ExoPlayer håndterer filer med Dolby Vision-profil 7.', 'settings.dvConversionAuto' => 'Automatisk', @@ -3106,8 +3058,6 @@ extension on TranslationsNb { 'mediaMenu.deleteMovieTitle' => 'Slette denne filmen?', 'mediaMenu.deleteEpisodeConfirm' => 'Slett episode', 'mediaMenu.deleteSeasonConfirm' => 'Slett sesong', - _ => null, - } ?? switch (path) { 'mediaMenu.deleteShowConfirm' => 'Slett serie', 'mediaMenu.deleteMovieConfirm' => 'Slett film', 'mediaMenu.deleteAnyway' => 'Slett likevel', @@ -3132,6 +3082,8 @@ extension on TranslationsNb { 'rateSheet.noConnectedServices' => 'Koble til en tjeneste i Innstillinger for å vurdere her.', 'accessibility.mediaCardMovie' => ({required Object title}) => '${title}, film', 'accessibility.mediaCardShow' => ({required Object title}) => '${title}, TV-serie', + _ => null, + } ?? switch (path) { 'accessibility.mediaCardEpisode' => ({required Object title, required Object episodeInfo}) => '${title}, ${episodeInfo}', 'accessibility.mediaCardSeason' => ({required Object title, required Object seasonInfo}) => '${title}, ${seasonInfo}', 'accessibility.mediaCardWatched' => 'sett', @@ -3620,8 +3572,6 @@ extension on TranslationsNb { 'explore.badge.requested' => 'Forespurt', 'explore.badge.pendingApproval' => 'Venter på godkjenning', 'explore.badge.processing' => 'Behandler', - _ => null, - } ?? switch (path) { 'explore.badge.declined' => 'Avslått', 'explore.badge.requestFailed' => 'Forespørsel mislyktes', 'explore.badge.requested4k' => '4K forespurt', @@ -3646,6 +3596,8 @@ extension on TranslationsNb { 'explore.stats.completed' => ({required Object n}) => '${n} fullførte', 'explore.stats.onHold' => ({required Object n}) => '${n} på pause', 'explore.stats.dropped' => ({required Object n}) => '${n} droppet', + _ => null, + } ?? switch (path) { 'explore.season.winter' => 'Vinter', 'explore.season.spring' => 'Vår', 'explore.season.summer' => 'Sommer', @@ -4134,8 +4086,6 @@ extension on TranslationsNb { 'performanceOverlay.dropped' => 'Tapte', 'performanceOverlay.dvRpus' => 'DV RPU-er', 'performanceOverlay.dvRpuAverage' => 'DV RPU snitt', - _ => null, - } ?? switch (path) { 'performanceOverlay.dvSampleAverage' => 'DV-sample snitt', 'performanceOverlay.maxLuma' => 'Maks luma', 'performanceOverlay.minLuma' => 'Min luma', @@ -4160,6 +4110,8 @@ extension on TranslationsNb { 'externalPlayer.playerPackage' => 'Pakkenavn', 'externalPlayer.playerUrlScheme' => 'URL-skjema', 'externalPlayer.off' => 'Av', + _ => null, + } ?? switch (path) { 'externalPlayer.launchFailed' => 'Kunne ikke åpne ekstern spiller', 'externalPlayer.appNotInstalled' => ({required Object name}) => '${name} er ikke installert', 'externalPlayer.playInExternalPlayer' => 'Spill av i ekstern spiller', diff --git a/lib/i18n/strings_nl.g.dart b/lib/i18n/strings_nl.g.dart index 6089ce02..da4acb06 100644 --- a/lib/i18n/strings_nl.g.dart +++ b/lib/i18n/strings_nl.g.dart @@ -421,30 +421,6 @@ class _Translations$settings$nl extends Translations$settings$en { @override String get downmixCenterBoostShort => 'dB'; @override String get audioDownmixNormalize => 'Volume normaliseren bij downmix'; @override String get audioDownmixNormalizeDescription => 'Verlaagt de mix om clipping te voorkomen. Zet uit om het originele volume te behouden (kan vervormen bij luide scènes).'; - @override String get atmosDiagnostics => 'Atmos-uitvoertest'; - @override String get atmosDiagnosticsDescription => 'Diagnosticeer de Dolby Atmos-uitvoer door testsignalen via de systeemspeler af te spelen'; - @override String get atmosTestHlsAtmos => 'Apple Atmos-stream'; - @override String get atmosTestHlsAtmosDescription => 'Bewezen werkende Dolby Atmos-stream. De receiver zou Dolby Atmos moeten tonen.'; - @override String get atmosTestHlsControl => 'Apple surround-stream'; - @override String get atmosTestHlsControlDescription => 'Controlestream zonder Atmos. De receiver zou surround zonder Atmos moeten tonen.'; - @override String get atmosTestRawStream => 'Ruwe EAC3-stream'; - @override String get atmosTestRawStreamDescription => 'Streamt het testbestand precies zoals Atmos-weergave in de speler. Vereist de URL van het testbestand.'; - @override String get atmosTestRawFile => 'Ruw EAC3-bestand'; - @override String get atmosTestRawFileDescription => 'Speelt het testbestand met bekende lengte af. Vereist de URL van het testbestand.'; - @override String get atmosTestAsbarNative => 'Sample-bufferrenderer (native)'; - @override String get atmosTestAsbarNativeDescription => 'Stuurt de ongewijzigde gecomprimeerde audio van het bestand rechtstreeks naar de systeemrenderer. Vereist de URL van het testbestand.'; - @override String get atmosTestAsbarGenerated => 'Sample-bufferrenderer (opnieuw opgebouwd)'; - @override String get atmosTestAsbarGeneratedDescription => 'Hetzelfde, maar met de audiobeschrijving opgebouwd zoals bij afspelen. Vereist de URL van het testbestand.'; - @override String get atmosTestSessionMode => 'Filmafspeelmodus gebruiken'; - @override String get atmosTestSessionModeDescription => 'Uit gebruikt de modus die Dolby documenteert. Aan gebruikt de vorige modus.'; - @override String get atmosTestShowRoutePicker => 'AirPlay-uitvoer kiezen'; - @override String get atmosTestHideRoutePicker => 'AirPlay-uitvoerkiezer verbergen'; - @override String get atmosTestRoutePickerDescription => 'Stuurt de test naar een AirPlay-ontvanger. Alleen AirPlay meldt de bepaalde audiomodus.'; - @override String get atmosTestStop => 'Test stoppen'; - @override String get atmosTestUrl => 'URL van testbestand'; - @override String get atmosTestUrlDescription => 'HTTP-URL van een ruw .ec3 Dolby Atmos-bestand (bijv. uitgepakt met ffmpeg)'; - @override String get atmosTestUrlMissing => 'Stel eerst de URL van het testbestand in'; - @override String get atmosTestStatus => 'Status'; @override String get dvConversionMode => 'Dolby Vision-conversie'; @override String get dvConversionModeDescription => 'Kies hoe ExoPlayer Dolby Vision Profile 7-bestanden verwerkt.'; @override String get dvConversionAuto => 'Automatisch'; @@ -2882,30 +2858,6 @@ extension on TranslationsNl { 'settings.downmixCenterBoostShort' => 'dB', 'settings.audioDownmixNormalize' => 'Volume normaliseren bij downmix', 'settings.audioDownmixNormalizeDescription' => 'Verlaagt de mix om clipping te voorkomen. Zet uit om het originele volume te behouden (kan vervormen bij luide scènes).', - 'settings.atmosDiagnostics' => 'Atmos-uitvoertest', - 'settings.atmosDiagnosticsDescription' => 'Diagnosticeer de Dolby Atmos-uitvoer door testsignalen via de systeemspeler af te spelen', - 'settings.atmosTestHlsAtmos' => 'Apple Atmos-stream', - 'settings.atmosTestHlsAtmosDescription' => 'Bewezen werkende Dolby Atmos-stream. De receiver zou Dolby Atmos moeten tonen.', - 'settings.atmosTestHlsControl' => 'Apple surround-stream', - 'settings.atmosTestHlsControlDescription' => 'Controlestream zonder Atmos. De receiver zou surround zonder Atmos moeten tonen.', - 'settings.atmosTestRawStream' => 'Ruwe EAC3-stream', - 'settings.atmosTestRawStreamDescription' => 'Streamt het testbestand precies zoals Atmos-weergave in de speler. Vereist de URL van het testbestand.', - 'settings.atmosTestRawFile' => 'Ruw EAC3-bestand', - 'settings.atmosTestRawFileDescription' => 'Speelt het testbestand met bekende lengte af. Vereist de URL van het testbestand.', - 'settings.atmosTestAsbarNative' => 'Sample-bufferrenderer (native)', - 'settings.atmosTestAsbarNativeDescription' => 'Stuurt de ongewijzigde gecomprimeerde audio van het bestand rechtstreeks naar de systeemrenderer. Vereist de URL van het testbestand.', - 'settings.atmosTestAsbarGenerated' => 'Sample-bufferrenderer (opnieuw opgebouwd)', - 'settings.atmosTestAsbarGeneratedDescription' => 'Hetzelfde, maar met de audiobeschrijving opgebouwd zoals bij afspelen. Vereist de URL van het testbestand.', - 'settings.atmosTestSessionMode' => 'Filmafspeelmodus gebruiken', - 'settings.atmosTestSessionModeDescription' => 'Uit gebruikt de modus die Dolby documenteert. Aan gebruikt de vorige modus.', - 'settings.atmosTestShowRoutePicker' => 'AirPlay-uitvoer kiezen', - 'settings.atmosTestHideRoutePicker' => 'AirPlay-uitvoerkiezer verbergen', - 'settings.atmosTestRoutePickerDescription' => 'Stuurt de test naar een AirPlay-ontvanger. Alleen AirPlay meldt de bepaalde audiomodus.', - 'settings.atmosTestStop' => 'Test stoppen', - 'settings.atmosTestUrl' => 'URL van testbestand', - 'settings.atmosTestUrlDescription' => 'HTTP-URL van een ruw .ec3 Dolby Atmos-bestand (bijv. uitgepakt met ffmpeg)', - 'settings.atmosTestUrlMissing' => 'Stel eerst de URL van het testbestand in', - 'settings.atmosTestStatus' => 'Status', 'settings.dvConversionMode' => 'Dolby Vision-conversie', 'settings.dvConversionModeDescription' => 'Kies hoe ExoPlayer Dolby Vision Profile 7-bestanden verwerkt.', 'settings.dvConversionAuto' => 'Automatisch', @@ -3106,8 +3058,6 @@ extension on TranslationsNl { 'mediaMenu.deleteMovieTitle' => 'Deze film verwijderen?', 'mediaMenu.deleteEpisodeConfirm' => 'Aflevering verwijderen', 'mediaMenu.deleteSeasonConfirm' => 'Seizoen verwijderen', - _ => null, - } ?? switch (path) { 'mediaMenu.deleteShowConfirm' => 'Serie verwijderen', 'mediaMenu.deleteMovieConfirm' => 'Film verwijderen', 'mediaMenu.deleteAnyway' => 'Toch verwijderen', @@ -3132,6 +3082,8 @@ extension on TranslationsNl { 'rateSheet.noConnectedServices' => 'Koppel een dienst in Instellingen om daar een beoordeling te geven.', 'accessibility.mediaCardMovie' => ({required Object title}) => '${title}, film', 'accessibility.mediaCardShow' => ({required Object title}) => '${title}, tv-serie', + _ => null, + } ?? switch (path) { 'accessibility.mediaCardEpisode' => ({required Object title, required Object episodeInfo}) => '${title}, ${episodeInfo}', 'accessibility.mediaCardSeason' => ({required Object title, required Object seasonInfo}) => '${title}, ${seasonInfo}', 'accessibility.mediaCardWatched' => 'bekeken', @@ -3620,8 +3572,6 @@ extension on TranslationsNl { 'explore.badge.requested' => 'Aangevraagd', 'explore.badge.pendingApproval' => 'In afwachting van goedkeuring', 'explore.badge.processing' => 'Wordt verwerkt', - _ => null, - } ?? switch (path) { 'explore.badge.declined' => 'Afgewezen', 'explore.badge.requestFailed' => 'Aanvraag mislukt', 'explore.badge.requested4k' => '4K aangevraagd', @@ -3646,6 +3596,8 @@ extension on TranslationsNl { 'explore.stats.completed' => ({required Object n}) => '${n} afgerond', 'explore.stats.onHold' => ({required Object n}) => '${n} op pauze', 'explore.stats.dropped' => ({required Object n}) => '${n} gestopt', + _ => null, + } ?? switch (path) { 'explore.season.winter' => 'Winter', 'explore.season.spring' => 'Lente', 'explore.season.summer' => 'Zomer', @@ -4134,8 +4086,6 @@ extension on TranslationsNl { 'performanceOverlay.dropped' => 'Gedropt', 'performanceOverlay.dvRpus' => 'DV RPU’s', 'performanceOverlay.dvRpuAverage' => 'DV RPU gem.', - _ => null, - } ?? switch (path) { 'performanceOverlay.dvSampleAverage' => 'DV-sample gem.', 'performanceOverlay.maxLuma' => 'Max luma', 'performanceOverlay.minLuma' => 'Min luma', @@ -4160,6 +4110,8 @@ extension on TranslationsNl { 'externalPlayer.playerPackage' => 'Pakketnaam', 'externalPlayer.playerUrlScheme' => 'URL-schema', 'externalPlayer.off' => 'Uit', + _ => null, + } ?? switch (path) { 'externalPlayer.launchFailed' => 'Kan externe speler niet openen', 'externalPlayer.appNotInstalled' => ({required Object name}) => '${name} is niet geïnstalleerd', 'externalPlayer.playInExternalPlayer' => 'Afspelen in externe speler', diff --git a/lib/i18n/strings_pl.g.dart b/lib/i18n/strings_pl.g.dart index 049388ab..990e7a48 100644 --- a/lib/i18n/strings_pl.g.dart +++ b/lib/i18n/strings_pl.g.dart @@ -421,30 +421,6 @@ class _Translations$settings$pl extends Translations$settings$en { @override String get downmixCenterBoostShort => 'dB'; @override String get audioDownmixNormalize => 'Normalizacja głośności przy miksowaniu'; @override String get audioDownmixNormalizeDescription => 'Obniża miks, aby zapobiec przesterowaniu. Wyłącz, aby zachować oryginalną głośność (głośne sceny mogą być zniekształcone).'; - @override String get atmosDiagnostics => 'Test wyjścia Atmos'; - @override String get atmosDiagnosticsDescription => 'Diagnozuj wyjście Dolby Atmos, odtwarzając sygnały testowe przez odtwarzacz systemowy'; - @override String get atmosTestHlsAtmos => 'Strumień Atmos Apple'; - @override String get atmosTestHlsAtmosDescription => 'Sprawdzony strumień Dolby Atmos. Amplituner powinien pokazać Dolby Atmos.'; - @override String get atmosTestHlsControl => 'Strumień dźwięku przestrzennego Apple'; - @override String get atmosTestHlsControlDescription => 'Strumień kontrolny bez Atmos. Amplituner powinien wskazywać dźwięk przestrzenny bez Atmos.'; - @override String get atmosTestRawStream => 'Surowy strumień EAC3'; - @override String get atmosTestRawStreamDescription => 'Przesyła strumieniowo plik testowy dokładnie tak jak podczas odtwarzania Atmos w odtwarzaczu. Wymaga adresu URL pliku testowego.'; - @override String get atmosTestRawFile => 'Surowy plik EAC3'; - @override String get atmosTestRawFileDescription => 'Odtwarza plik testowy o znanej długości. Wymaga URL pliku testowego.'; - @override String get atmosTestAsbarNative => 'Renderer bufora próbek (natywny)'; - @override String get atmosTestAsbarNativeDescription => 'Przekazuje nienaruszony skompresowany dźwięk pliku prosto do renderera systemu. Wymaga URL pliku testowego.'; - @override String get atmosTestAsbarGenerated => 'Renderer bufora próbek (odtworzony)'; - @override String get atmosTestAsbarGeneratedDescription => 'To samo, ale z opisem dźwięku budowanym tak jak przy odtwarzaniu. Wymaga URL pliku testowego.'; - @override String get atmosTestSessionMode => 'Użyj trybu odtwarzania filmów'; - @override String get atmosTestSessionModeDescription => 'Wyłączone używa trybu udokumentowanego przez Dolby. Włączone używa poprzedniego trybu.'; - @override String get atmosTestShowRoutePicker => 'Wybierz wyjście AirPlay'; - @override String get atmosTestHideRoutePicker => 'Ukryj wybór wyjścia AirPlay'; - @override String get atmosTestRoutePickerDescription => 'Wysyła test do odbiornika AirPlay. Tylko AirPlay zgłasza ustalony tryb dźwięku.'; - @override String get atmosTestStop => 'Zatrzymaj test'; - @override String get atmosTestUrl => 'Adres URL pliku testowego'; - @override String get atmosTestUrlDescription => 'Adres URL HTTP surowego pliku Dolby Atmos w formacie .ec3 (np. wyodrębnionego za pomocą ffmpeg)'; - @override String get atmosTestUrlMissing => 'Najpierw ustaw adres URL pliku testowego'; - @override String get atmosTestStatus => 'Stan'; @override String get dvConversionMode => 'Konwersja Dolby Vision'; @override String get dvConversionModeDescription => 'Wybierz, jak ExoPlayer obsługuje pliki Dolby Vision Profile 7.'; @override String get dvConversionAuto => 'Automatycznie'; @@ -2900,30 +2876,6 @@ extension on TranslationsPl { 'settings.downmixCenterBoostShort' => 'dB', 'settings.audioDownmixNormalize' => 'Normalizacja głośności przy miksowaniu', 'settings.audioDownmixNormalizeDescription' => 'Obniża miks, aby zapobiec przesterowaniu. Wyłącz, aby zachować oryginalną głośność (głośne sceny mogą być zniekształcone).', - 'settings.atmosDiagnostics' => 'Test wyjścia Atmos', - 'settings.atmosDiagnosticsDescription' => 'Diagnozuj wyjście Dolby Atmos, odtwarzając sygnały testowe przez odtwarzacz systemowy', - 'settings.atmosTestHlsAtmos' => 'Strumień Atmos Apple', - 'settings.atmosTestHlsAtmosDescription' => 'Sprawdzony strumień Dolby Atmos. Amplituner powinien pokazać Dolby Atmos.', - 'settings.atmosTestHlsControl' => 'Strumień dźwięku przestrzennego Apple', - 'settings.atmosTestHlsControlDescription' => 'Strumień kontrolny bez Atmos. Amplituner powinien wskazywać dźwięk przestrzenny bez Atmos.', - 'settings.atmosTestRawStream' => 'Surowy strumień EAC3', - 'settings.atmosTestRawStreamDescription' => 'Przesyła strumieniowo plik testowy dokładnie tak jak podczas odtwarzania Atmos w odtwarzaczu. Wymaga adresu URL pliku testowego.', - 'settings.atmosTestRawFile' => 'Surowy plik EAC3', - 'settings.atmosTestRawFileDescription' => 'Odtwarza plik testowy o znanej długości. Wymaga URL pliku testowego.', - 'settings.atmosTestAsbarNative' => 'Renderer bufora próbek (natywny)', - 'settings.atmosTestAsbarNativeDescription' => 'Przekazuje nienaruszony skompresowany dźwięk pliku prosto do renderera systemu. Wymaga URL pliku testowego.', - 'settings.atmosTestAsbarGenerated' => 'Renderer bufora próbek (odtworzony)', - 'settings.atmosTestAsbarGeneratedDescription' => 'To samo, ale z opisem dźwięku budowanym tak jak przy odtwarzaniu. Wymaga URL pliku testowego.', - 'settings.atmosTestSessionMode' => 'Użyj trybu odtwarzania filmów', - 'settings.atmosTestSessionModeDescription' => 'Wyłączone używa trybu udokumentowanego przez Dolby. Włączone używa poprzedniego trybu.', - 'settings.atmosTestShowRoutePicker' => 'Wybierz wyjście AirPlay', - 'settings.atmosTestHideRoutePicker' => 'Ukryj wybór wyjścia AirPlay', - 'settings.atmosTestRoutePickerDescription' => 'Wysyła test do odbiornika AirPlay. Tylko AirPlay zgłasza ustalony tryb dźwięku.', - 'settings.atmosTestStop' => 'Zatrzymaj test', - 'settings.atmosTestUrl' => 'Adres URL pliku testowego', - 'settings.atmosTestUrlDescription' => 'Adres URL HTTP surowego pliku Dolby Atmos w formacie .ec3 (np. wyodrębnionego za pomocą ffmpeg)', - 'settings.atmosTestUrlMissing' => 'Najpierw ustaw adres URL pliku testowego', - 'settings.atmosTestStatus' => 'Stan', 'settings.dvConversionMode' => 'Konwersja Dolby Vision', 'settings.dvConversionModeDescription' => 'Wybierz, jak ExoPlayer obsługuje pliki Dolby Vision Profile 7.', 'settings.dvConversionAuto' => 'Automatycznie', @@ -3124,8 +3076,6 @@ extension on TranslationsPl { 'mediaMenu.deleteMovieTitle' => 'Usunąć ten film?', 'mediaMenu.deleteEpisodeConfirm' => 'Usuń odcinek', 'mediaMenu.deleteSeasonConfirm' => 'Usuń sezon', - _ => null, - } ?? switch (path) { 'mediaMenu.deleteShowConfirm' => 'Usuń serial', 'mediaMenu.deleteMovieConfirm' => 'Usuń film', 'mediaMenu.deleteAnyway' => 'Usuń mimo to', @@ -3150,6 +3100,8 @@ extension on TranslationsPl { 'rateSheet.noConnectedServices' => 'Połącz usługę w Ustawieniach, aby tam oceniać.', 'accessibility.mediaCardMovie' => ({required Object title}) => '${title}, film', 'accessibility.mediaCardShow' => ({required Object title}) => '${title}, serial TV', + _ => null, + } ?? switch (path) { 'accessibility.mediaCardEpisode' => ({required Object title, required Object episodeInfo}) => '${title}, ${episodeInfo}', 'accessibility.mediaCardSeason' => ({required Object title, required Object seasonInfo}) => '${title}, ${seasonInfo}', 'accessibility.mediaCardWatched' => 'obejrzane', @@ -3638,8 +3590,6 @@ extension on TranslationsPl { 'explore.badge.requested' => 'Zamówiono', 'explore.badge.pendingApproval' => 'Oczekuje na zatwierdzenie', 'explore.badge.processing' => 'Przetwarzanie', - _ => null, - } ?? switch (path) { 'explore.badge.declined' => 'Odrzucono', 'explore.badge.requestFailed' => 'Żądanie nie powiodło się', 'explore.badge.requested4k' => 'Zamówiono w 4K', @@ -3664,6 +3614,8 @@ extension on TranslationsPl { 'explore.stats.completed' => ({required Object n}) => '${n} ukończyło', 'explore.stats.onHold' => ({required Object n}) => '${n} wstrzymało', 'explore.stats.dropped' => ({required Object n}) => '${n} porzuciło', + _ => null, + } ?? switch (path) { 'explore.season.winter' => 'Zima', 'explore.season.spring' => 'Wiosna', 'explore.season.summer' => 'Lato', @@ -4152,8 +4104,6 @@ extension on TranslationsPl { 'performanceOverlay.dropped' => 'Pominięte', 'performanceOverlay.dvRpus' => 'DV RPU', 'performanceOverlay.dvRpuAverage' => 'Śr. DV RPU', - _ => null, - } ?? switch (path) { 'performanceOverlay.dvSampleAverage' => 'Śr. próbki DV', 'performanceOverlay.maxLuma' => 'Maks. luma', 'performanceOverlay.minLuma' => 'Min. luma', @@ -4178,6 +4128,8 @@ extension on TranslationsPl { 'externalPlayer.playerPackage' => 'Nazwa pakietu', 'externalPlayer.playerUrlScheme' => 'Schemat URL', 'externalPlayer.off' => 'Wyłączony', + _ => null, + } ?? switch (path) { 'externalPlayer.launchFailed' => 'Nie udało się otworzyć zewnętrznego odtwarzacza', 'externalPlayer.appNotInstalled' => ({required Object name}) => '${name} nie jest zainstalowany', 'externalPlayer.playInExternalPlayer' => 'Odtwórz w zewnętrznym odtwarzaczu', diff --git a/lib/i18n/strings_pt.g.dart b/lib/i18n/strings_pt.g.dart index dc6cc283..32369b54 100644 --- a/lib/i18n/strings_pt.g.dart +++ b/lib/i18n/strings_pt.g.dart @@ -421,30 +421,6 @@ class _Translations$settings$pt extends Translations$settings$en { @override String get downmixCenterBoostShort => 'dB'; @override String get audioDownmixNormalize => 'Normalizar volume na conversão para estéreo'; @override String get audioDownmixNormalizeDescription => 'Reduzir o volume da mixagem para evitar saturação. Desative para manter o volume original, que pode distorcer em cenas muito altas.'; - @override String get atmosDiagnostics => 'Teste de saída Atmos'; - @override String get atmosDiagnosticsDescription => 'Diagnosticar a saída Dolby Atmos reproduzindo sinais de teste pelo reprodutor do sistema'; - @override String get atmosTestHlsAtmos => 'Transmissão Atmos da Apple'; - @override String get atmosTestHlsAtmosDescription => 'Transmissão Dolby Atmos comprovadamente compatível. O receptor deve indicar Dolby Atmos.'; - @override String get atmosTestHlsControl => 'Transmissão surround da Apple'; - @override String get atmosTestHlsControlDescription => 'Transmissão de controle sem Atmos. O receptor deve indicar surround sem Atmos.'; - @override String get atmosTestRawStream => 'Transmissão EAC3 bruta'; - @override String get atmosTestRawStreamDescription => 'Transmite o arquivo de teste exatamente como na reprodução Atmos pelo reprodutor. Requer a URL do arquivo de teste.'; - @override String get atmosTestRawFile => 'Arquivo EAC3 bruto'; - @override String get atmosTestRawFileDescription => 'Reproduz o arquivo de teste com duração conhecida. Requer a URL do arquivo de teste.'; - @override String get atmosTestAsbarNative => 'Renderizador de buffer de amostras (nativo)'; - @override String get atmosTestAsbarNativeDescription => 'Envia o áudio comprimido intacto do ficheiro diretamente para o renderizador do sistema. Requer o URL do ficheiro de teste.'; - @override String get atmosTestAsbarGenerated => 'Renderizador de buffer de amostras (reconstruído)'; - @override String get atmosTestAsbarGeneratedDescription => 'O mesmo, mas com a descrição de áudio construída como na reprodução. Requer o URL do ficheiro de teste.'; - @override String get atmosTestSessionMode => 'Usar modo de reprodução de filmes'; - @override String get atmosTestSessionModeDescription => 'Desativado usa o modo documentado pela Dolby. Ativado usa o modo anterior.'; - @override String get atmosTestShowRoutePicker => 'Escolher saída AirPlay'; - @override String get atmosTestHideRoutePicker => 'Ocultar seletor de saída AirPlay'; - @override String get atmosTestRoutePickerDescription => 'Envia o teste para um recetor AirPlay. Só o AirPlay comunica o modo de áudio resolvido.'; - @override String get atmosTestStop => 'Parar teste'; - @override String get atmosTestUrl => 'URL do arquivo de teste'; - @override String get atmosTestUrlDescription => 'URL HTTP de um arquivo .ec3 Dolby Atmos bruto (ex.: extraído com ffmpeg)'; - @override String get atmosTestUrlMissing => 'Defina primeiro a URL do arquivo de teste'; - @override String get atmosTestStatus => 'Status'; @override String get dvConversionMode => 'Conversão Dolby Vision'; @override String get dvConversionModeDescription => 'Escolha como o ExoPlayer lida com arquivos Dolby Vision Profile 7.'; @override String get dvConversionAuto => 'Automático'; @@ -2882,30 +2858,6 @@ extension on TranslationsPt { 'settings.downmixCenterBoostShort' => 'dB', 'settings.audioDownmixNormalize' => 'Normalizar volume na conversão para estéreo', 'settings.audioDownmixNormalizeDescription' => 'Reduzir o volume da mixagem para evitar saturação. Desative para manter o volume original, que pode distorcer em cenas muito altas.', - 'settings.atmosDiagnostics' => 'Teste de saída Atmos', - 'settings.atmosDiagnosticsDescription' => 'Diagnosticar a saída Dolby Atmos reproduzindo sinais de teste pelo reprodutor do sistema', - 'settings.atmosTestHlsAtmos' => 'Transmissão Atmos da Apple', - 'settings.atmosTestHlsAtmosDescription' => 'Transmissão Dolby Atmos comprovadamente compatível. O receptor deve indicar Dolby Atmos.', - 'settings.atmosTestHlsControl' => 'Transmissão surround da Apple', - 'settings.atmosTestHlsControlDescription' => 'Transmissão de controle sem Atmos. O receptor deve indicar surround sem Atmos.', - 'settings.atmosTestRawStream' => 'Transmissão EAC3 bruta', - 'settings.atmosTestRawStreamDescription' => 'Transmite o arquivo de teste exatamente como na reprodução Atmos pelo reprodutor. Requer a URL do arquivo de teste.', - 'settings.atmosTestRawFile' => 'Arquivo EAC3 bruto', - 'settings.atmosTestRawFileDescription' => 'Reproduz o arquivo de teste com duração conhecida. Requer a URL do arquivo de teste.', - 'settings.atmosTestAsbarNative' => 'Renderizador de buffer de amostras (nativo)', - 'settings.atmosTestAsbarNativeDescription' => 'Envia o áudio comprimido intacto do ficheiro diretamente para o renderizador do sistema. Requer o URL do ficheiro de teste.', - 'settings.atmosTestAsbarGenerated' => 'Renderizador de buffer de amostras (reconstruído)', - 'settings.atmosTestAsbarGeneratedDescription' => 'O mesmo, mas com a descrição de áudio construída como na reprodução. Requer o URL do ficheiro de teste.', - 'settings.atmosTestSessionMode' => 'Usar modo de reprodução de filmes', - 'settings.atmosTestSessionModeDescription' => 'Desativado usa o modo documentado pela Dolby. Ativado usa o modo anterior.', - 'settings.atmosTestShowRoutePicker' => 'Escolher saída AirPlay', - 'settings.atmosTestHideRoutePicker' => 'Ocultar seletor de saída AirPlay', - 'settings.atmosTestRoutePickerDescription' => 'Envia o teste para um recetor AirPlay. Só o AirPlay comunica o modo de áudio resolvido.', - 'settings.atmosTestStop' => 'Parar teste', - 'settings.atmosTestUrl' => 'URL do arquivo de teste', - 'settings.atmosTestUrlDescription' => 'URL HTTP de um arquivo .ec3 Dolby Atmos bruto (ex.: extraído com ffmpeg)', - 'settings.atmosTestUrlMissing' => 'Defina primeiro a URL do arquivo de teste', - 'settings.atmosTestStatus' => 'Status', 'settings.dvConversionMode' => 'Conversão Dolby Vision', 'settings.dvConversionModeDescription' => 'Escolha como o ExoPlayer lida com arquivos Dolby Vision Profile 7.', 'settings.dvConversionAuto' => 'Automático', @@ -3106,8 +3058,6 @@ extension on TranslationsPt { 'mediaMenu.deleteMovieTitle' => 'Excluir este filme?', 'mediaMenu.deleteEpisodeConfirm' => 'Excluir episódio', 'mediaMenu.deleteSeasonConfirm' => 'Excluir temporada', - _ => null, - } ?? switch (path) { 'mediaMenu.deleteShowConfirm' => 'Excluir série', 'mediaMenu.deleteMovieConfirm' => 'Excluir filme', 'mediaMenu.deleteAnyway' => 'Excluir mesmo assim', @@ -3132,6 +3082,8 @@ extension on TranslationsPt { 'rateSheet.noConnectedServices' => 'Conecte um serviço nas Configurações para avaliar por lá.', 'accessibility.mediaCardMovie' => ({required Object title}) => '${title}, filme', 'accessibility.mediaCardShow' => ({required Object title}) => '${title}, série de TV', + _ => null, + } ?? switch (path) { 'accessibility.mediaCardEpisode' => ({required Object title, required Object episodeInfo}) => '${title}, ${episodeInfo}', 'accessibility.mediaCardSeason' => ({required Object title, required Object seasonInfo}) => '${title}, ${seasonInfo}', 'accessibility.mediaCardWatched' => 'assistido', @@ -3620,8 +3572,6 @@ extension on TranslationsPt { 'explore.badge.requested' => 'Solicitado', 'explore.badge.pendingApproval' => 'Aguardando aprovação', 'explore.badge.processing' => 'Processando', - _ => null, - } ?? switch (path) { 'explore.badge.declined' => 'Recusado', 'explore.badge.requestFailed' => 'Falha na solicitação', 'explore.badge.requested4k' => '4K solicitado', @@ -3646,6 +3596,8 @@ extension on TranslationsPt { 'explore.stats.completed' => ({required Object n}) => '${n} concluíram', 'explore.stats.onHold' => ({required Object n}) => '${n} em pausa', 'explore.stats.dropped' => ({required Object n}) => '${n} abandonaram', + _ => null, + } ?? switch (path) { 'explore.season.winter' => 'Inverno', 'explore.season.spring' => 'Primavera', 'explore.season.summer' => 'Verão', @@ -4134,8 +4086,6 @@ extension on TranslationsPt { 'performanceOverlay.dropped' => 'Descartados', 'performanceOverlay.dvRpus' => 'DV RPUs', 'performanceOverlay.dvRpuAverage' => 'Média DV RPU', - _ => null, - } ?? switch (path) { 'performanceOverlay.dvSampleAverage' => 'Média amostra DV', 'performanceOverlay.maxLuma' => 'Luma máx.', 'performanceOverlay.minLuma' => 'Luma mín.', @@ -4160,6 +4110,8 @@ extension on TranslationsPt { 'externalPlayer.playerPackage' => 'Nome do pacote', 'externalPlayer.playerUrlScheme' => 'Esquema de URL', 'externalPlayer.off' => 'Desativado', + _ => null, + } ?? switch (path) { 'externalPlayer.launchFailed' => 'Falha ao abrir o reprodutor externo', 'externalPlayer.appNotInstalled' => ({required Object name}) => '${name} não está instalado', 'externalPlayer.playInExternalPlayer' => 'Reproduzir no reprodutor externo', diff --git a/lib/i18n/strings_ru.g.dart b/lib/i18n/strings_ru.g.dart index 047e35e2..bac6d16c 100644 --- a/lib/i18n/strings_ru.g.dart +++ b/lib/i18n/strings_ru.g.dart @@ -421,30 +421,6 @@ class _Translations$settings$ru extends Translations$settings$en { @override String get downmixCenterBoostShort => 'дБ'; @override String get audioDownmixNormalize => 'Нормализация громкости при микшировании'; @override String get audioDownmixNormalizeDescription => 'Снижает уровень микса во избежание клиппинга. Отключите, чтобы сохранить исходную громкость (возможны искажения в громких сценах).'; - @override String get atmosDiagnostics => 'Тест вывода Atmos'; - @override String get atmosDiagnosticsDescription => 'Диагностика вывода Dolby Atmos воспроизведением тестовых сигналов через системный проигрыватель'; - @override String get atmosTestHlsAtmos => 'Atmos-поток Apple'; - @override String get atmosTestHlsAtmosDescription => 'Заведомо рабочий поток Dolby Atmos. Ресивер должен показать Dolby Atmos.'; - @override String get atmosTestHlsControl => 'Surround-поток Apple'; - @override String get atmosTestHlsControlDescription => 'Контрольный поток без Atmos. Ресивер должен показать объёмный звук без Atmos.'; - @override String get atmosTestRawStream => 'Сырой поток EAC3'; - @override String get atmosTestRawStreamDescription => 'Транслирует тестовый файл точно так же, как Atmos-воспроизведение в проигрывателе. Требуется URL тестового файла.'; - @override String get atmosTestRawFile => 'Сырой файл EAC3'; - @override String get atmosTestRawFileDescription => 'Воспроизводит тестовый файл с известной длиной. Требуется URL тестового файла.'; - @override String get atmosTestAsbarNative => 'Рендерер сэмпл-буфера (нативный)'; - @override String get atmosTestAsbarNativeDescription => 'Передаёт неизменённый сжатый звук файла прямо в системный рендерер. Требуется URL тестового файла.'; - @override String get atmosTestAsbarGenerated => 'Рендерер сэмпл-буфера (пересобранный)'; - @override String get atmosTestAsbarGeneratedDescription => 'То же, но с описанием звука, собранным как при воспроизведении. Требуется URL тестового файла.'; - @override String get atmosTestSessionMode => 'Использовать режим воспроизведения фильмов'; - @override String get atmosTestSessionModeDescription => 'Выключено — режим, описанный Dolby. Включено — прежний режим.'; - @override String get atmosTestShowRoutePicker => 'Выбрать выход AirPlay'; - @override String get atmosTestHideRoutePicker => 'Скрыть выбор выхода AirPlay'; - @override String get atmosTestRoutePickerDescription => 'Отправляет тест на приёмник AirPlay. Только AirPlay сообщает определённый режим звука.'; - @override String get atmosTestStop => 'Остановить тест'; - @override String get atmosTestUrl => 'URL тестового файла'; - @override String get atmosTestUrlDescription => 'HTTP-URL сырого файла .ec3 Dolby Atmos (например, извлечённого через ffmpeg)'; - @override String get atmosTestUrlMissing => 'Сначала укажите URL тестового файла'; - @override String get atmosTestStatus => 'Статус'; @override String get dvConversionMode => 'Преобразование Dolby Vision'; @override String get dvConversionModeDescription => 'Выберите, как ExoPlayer обрабатывает файлы Dolby Vision Profile 7.'; @override String get dvConversionAuto => 'Авто'; @@ -2900,30 +2876,6 @@ extension on TranslationsRu { 'settings.downmixCenterBoostShort' => 'дБ', 'settings.audioDownmixNormalize' => 'Нормализация громкости при микшировании', 'settings.audioDownmixNormalizeDescription' => 'Снижает уровень микса во избежание клиппинга. Отключите, чтобы сохранить исходную громкость (возможны искажения в громких сценах).', - 'settings.atmosDiagnostics' => 'Тест вывода Atmos', - 'settings.atmosDiagnosticsDescription' => 'Диагностика вывода Dolby Atmos воспроизведением тестовых сигналов через системный проигрыватель', - 'settings.atmosTestHlsAtmos' => 'Atmos-поток Apple', - 'settings.atmosTestHlsAtmosDescription' => 'Заведомо рабочий поток Dolby Atmos. Ресивер должен показать Dolby Atmos.', - 'settings.atmosTestHlsControl' => 'Surround-поток Apple', - 'settings.atmosTestHlsControlDescription' => 'Контрольный поток без Atmos. Ресивер должен показать объёмный звук без Atmos.', - 'settings.atmosTestRawStream' => 'Сырой поток EAC3', - 'settings.atmosTestRawStreamDescription' => 'Транслирует тестовый файл точно так же, как Atmos-воспроизведение в проигрывателе. Требуется URL тестового файла.', - 'settings.atmosTestRawFile' => 'Сырой файл EAC3', - 'settings.atmosTestRawFileDescription' => 'Воспроизводит тестовый файл с известной длиной. Требуется URL тестового файла.', - 'settings.atmosTestAsbarNative' => 'Рендерер сэмпл-буфера (нативный)', - 'settings.atmosTestAsbarNativeDescription' => 'Передаёт неизменённый сжатый звук файла прямо в системный рендерер. Требуется URL тестового файла.', - 'settings.atmosTestAsbarGenerated' => 'Рендерер сэмпл-буфера (пересобранный)', - 'settings.atmosTestAsbarGeneratedDescription' => 'То же, но с описанием звука, собранным как при воспроизведении. Требуется URL тестового файла.', - 'settings.atmosTestSessionMode' => 'Использовать режим воспроизведения фильмов', - 'settings.atmosTestSessionModeDescription' => 'Выключено — режим, описанный Dolby. Включено — прежний режим.', - 'settings.atmosTestShowRoutePicker' => 'Выбрать выход AirPlay', - 'settings.atmosTestHideRoutePicker' => 'Скрыть выбор выхода AirPlay', - 'settings.atmosTestRoutePickerDescription' => 'Отправляет тест на приёмник AirPlay. Только AirPlay сообщает определённый режим звука.', - 'settings.atmosTestStop' => 'Остановить тест', - 'settings.atmosTestUrl' => 'URL тестового файла', - 'settings.atmosTestUrlDescription' => 'HTTP-URL сырого файла .ec3 Dolby Atmos (например, извлечённого через ffmpeg)', - 'settings.atmosTestUrlMissing' => 'Сначала укажите URL тестового файла', - 'settings.atmosTestStatus' => 'Статус', 'settings.dvConversionMode' => 'Преобразование Dolby Vision', 'settings.dvConversionModeDescription' => 'Выберите, как ExoPlayer обрабатывает файлы Dolby Vision Profile 7.', 'settings.dvConversionAuto' => 'Авто', @@ -3124,8 +3076,6 @@ extension on TranslationsRu { 'mediaMenu.deleteMovieTitle' => 'Удалить этот фильм?', 'mediaMenu.deleteEpisodeConfirm' => 'Удалить эпизод', 'mediaMenu.deleteSeasonConfirm' => 'Удалить сезон', - _ => null, - } ?? switch (path) { 'mediaMenu.deleteShowConfirm' => 'Удалить сериал', 'mediaMenu.deleteMovieConfirm' => 'Удалить фильм', 'mediaMenu.deleteAnyway' => 'Всё равно удалить', @@ -3150,6 +3100,8 @@ extension on TranslationsRu { 'rateSheet.noConnectedServices' => 'Подключите сервис в настройках, чтобы выставлять оценки в нём.', 'accessibility.mediaCardMovie' => ({required Object title}) => '${title}, фильм', 'accessibility.mediaCardShow' => ({required Object title}) => '${title}, сериал', + _ => null, + } ?? switch (path) { 'accessibility.mediaCardEpisode' => ({required Object title, required Object episodeInfo}) => '${title}, ${episodeInfo}', 'accessibility.mediaCardSeason' => ({required Object title, required Object seasonInfo}) => '${title}, ${seasonInfo}', 'accessibility.mediaCardWatched' => 'просмотрено', @@ -3638,8 +3590,6 @@ extension on TranslationsRu { 'explore.badge.requested' => 'Запрошено', 'explore.badge.pendingApproval' => 'Ожидает одобрения', 'explore.badge.processing' => 'В обработке', - _ => null, - } ?? switch (path) { 'explore.badge.declined' => 'Отклонено', 'explore.badge.requestFailed' => 'Запрос не удался', 'explore.badge.requested4k' => 'Запрошено в 4K', @@ -3664,6 +3614,8 @@ extension on TranslationsRu { 'explore.stats.completed' => ({required Object n}) => '${n} завершили', 'explore.stats.onHold' => ({required Object n}) => '${n} отложили', 'explore.stats.dropped' => ({required Object n}) => '${n} бросили', + _ => null, + } ?? switch (path) { 'explore.season.winter' => 'Зима', 'explore.season.spring' => 'Весна', 'explore.season.summer' => 'Лето', @@ -4152,8 +4104,6 @@ extension on TranslationsRu { 'performanceOverlay.dropped' => 'Пропущено', 'performanceOverlay.dvRpus' => 'DV RPU', 'performanceOverlay.dvRpuAverage' => 'Сред. DV RPU', - _ => null, - } ?? switch (path) { 'performanceOverlay.dvSampleAverage' => 'Сред. сэмпл DV', 'performanceOverlay.maxLuma' => 'Макс. яркость', 'performanceOverlay.minLuma' => 'Мин. яркость', @@ -4178,6 +4128,8 @@ extension on TranslationsRu { 'externalPlayer.playerPackage' => 'Имя пакета', 'externalPlayer.playerUrlScheme' => 'URL-схема', 'externalPlayer.off' => 'Выкл.', + _ => null, + } ?? switch (path) { 'externalPlayer.launchFailed' => 'Не удалось открыть внешний плеер', 'externalPlayer.appNotInstalled' => ({required Object name}) => '${name} не установлен', 'externalPlayer.playInExternalPlayer' => 'Воспроизвести во внешнем плеере', diff --git a/lib/i18n/strings_sv.g.dart b/lib/i18n/strings_sv.g.dart index f4cf48e3..7f116da5 100644 --- a/lib/i18n/strings_sv.g.dart +++ b/lib/i18n/strings_sv.g.dart @@ -421,30 +421,6 @@ class _Translations$settings$sv extends Translations$settings$en { @override String get downmixCenterBoostShort => 'dB'; @override String get audioDownmixNormalize => 'Normalisera ljudstyrka vid nedmixning'; @override String get audioDownmixNormalizeDescription => 'Sänk ljudnivån för att förhindra klippning. Stäng av för att behålla originalvolymen (starka ljud kan då bli förvrängda).'; - @override String get atmosDiagnostics => 'Atmos-utgångstest'; - @override String get atmosDiagnosticsDescription => 'Diagnostisera Dolby Atmos-utgången genom att spela testsignaler via systemspelaren'; - @override String get atmosTestHlsAtmos => 'Apple Atmos-ström'; - @override String get atmosTestHlsAtmosDescription => 'Känd fungerande Dolby Atmos-ström. Receivern bör visa Dolby Atmos.'; - @override String get atmosTestHlsControl => 'Apple surround-ström'; - @override String get atmosTestHlsControlDescription => 'Kontrollström utan Atmos. Receivern bör visa surround utan Atmos.'; - @override String get atmosTestRawStream => 'Rå EAC3-ström'; - @override String get atmosTestRawStreamDescription => 'Strömmar testfilen precis som Atmos-uppspelning i spelaren. Kräver testfilens URL.'; - @override String get atmosTestRawFile => 'Rå EAC3-fil'; - @override String get atmosTestRawFileDescription => 'Spelar upp testfilen med känd längd. Kräver testfilens URL.'; - @override String get atmosTestAsbarNative => 'Sample-buffer-renderare (nativ)'; - @override String get atmosTestAsbarNativeDescription => 'Skickar filens orörda komprimerade ljud direkt till systemets renderare. Kräver testfilens URL.'; - @override String get atmosTestAsbarGenerated => 'Sample-buffer-renderare (ombyggd)'; - @override String get atmosTestAsbarGeneratedDescription => 'Samma sak, men med ljudbeskrivningen byggd som vid uppspelning. Kräver testfilens URL.'; - @override String get atmosTestSessionMode => 'Använd filmuppspelningsläge'; - @override String get atmosTestSessionModeDescription => 'Av använder läget som Dolby dokumenterar. På använder det tidigare läget.'; - @override String get atmosTestShowRoutePicker => 'Välj AirPlay-utgång'; - @override String get atmosTestHideRoutePicker => 'Dölj AirPlay-utgångsväljare'; - @override String get atmosTestRoutePickerDescription => 'Skickar testet till en AirPlay-mottagare. Endast AirPlay rapporterar det valda ljudläget.'; - @override String get atmosTestStop => 'Stoppa test'; - @override String get atmosTestUrl => 'Testfilens URL'; - @override String get atmosTestUrlDescription => 'HTTP-URL till en rå .ec3 Dolby Atmos-fil (t.ex. extraherad med ffmpeg)'; - @override String get atmosTestUrlMissing => 'Ange testfilens URL först'; - @override String get atmosTestStatus => 'Status'; @override String get dvConversionMode => 'Dolby Vision-konvertering'; @override String get dvConversionModeDescription => 'Välj hur ExoPlayer hanterar Dolby Vision Profile 7-filer.'; @override String get dvConversionAuto => 'Auto'; @@ -2882,30 +2858,6 @@ extension on TranslationsSv { 'settings.downmixCenterBoostShort' => 'dB', 'settings.audioDownmixNormalize' => 'Normalisera ljudstyrka vid nedmixning', 'settings.audioDownmixNormalizeDescription' => 'Sänk ljudnivån för att förhindra klippning. Stäng av för att behålla originalvolymen (starka ljud kan då bli förvrängda).', - 'settings.atmosDiagnostics' => 'Atmos-utgångstest', - 'settings.atmosDiagnosticsDescription' => 'Diagnostisera Dolby Atmos-utgången genom att spela testsignaler via systemspelaren', - 'settings.atmosTestHlsAtmos' => 'Apple Atmos-ström', - 'settings.atmosTestHlsAtmosDescription' => 'Känd fungerande Dolby Atmos-ström. Receivern bör visa Dolby Atmos.', - 'settings.atmosTestHlsControl' => 'Apple surround-ström', - 'settings.atmosTestHlsControlDescription' => 'Kontrollström utan Atmos. Receivern bör visa surround utan Atmos.', - 'settings.atmosTestRawStream' => 'Rå EAC3-ström', - 'settings.atmosTestRawStreamDescription' => 'Strömmar testfilen precis som Atmos-uppspelning i spelaren. Kräver testfilens URL.', - 'settings.atmosTestRawFile' => 'Rå EAC3-fil', - 'settings.atmosTestRawFileDescription' => 'Spelar upp testfilen med känd längd. Kräver testfilens URL.', - 'settings.atmosTestAsbarNative' => 'Sample-buffer-renderare (nativ)', - 'settings.atmosTestAsbarNativeDescription' => 'Skickar filens orörda komprimerade ljud direkt till systemets renderare. Kräver testfilens URL.', - 'settings.atmosTestAsbarGenerated' => 'Sample-buffer-renderare (ombyggd)', - 'settings.atmosTestAsbarGeneratedDescription' => 'Samma sak, men med ljudbeskrivningen byggd som vid uppspelning. Kräver testfilens URL.', - 'settings.atmosTestSessionMode' => 'Använd filmuppspelningsläge', - 'settings.atmosTestSessionModeDescription' => 'Av använder läget som Dolby dokumenterar. På använder det tidigare läget.', - 'settings.atmosTestShowRoutePicker' => 'Välj AirPlay-utgång', - 'settings.atmosTestHideRoutePicker' => 'Dölj AirPlay-utgångsväljare', - 'settings.atmosTestRoutePickerDescription' => 'Skickar testet till en AirPlay-mottagare. Endast AirPlay rapporterar det valda ljudläget.', - 'settings.atmosTestStop' => 'Stoppa test', - 'settings.atmosTestUrl' => 'Testfilens URL', - 'settings.atmosTestUrlDescription' => 'HTTP-URL till en rå .ec3 Dolby Atmos-fil (t.ex. extraherad med ffmpeg)', - 'settings.atmosTestUrlMissing' => 'Ange testfilens URL först', - 'settings.atmosTestStatus' => 'Status', 'settings.dvConversionMode' => 'Dolby Vision-konvertering', 'settings.dvConversionModeDescription' => 'Välj hur ExoPlayer hanterar Dolby Vision Profile 7-filer.', 'settings.dvConversionAuto' => 'Auto', @@ -3106,8 +3058,6 @@ extension on TranslationsSv { 'mediaMenu.deleteMovieTitle' => 'Ta bort den här filmen?', 'mediaMenu.deleteEpisodeConfirm' => 'Ta bort avsnitt', 'mediaMenu.deleteSeasonConfirm' => 'Ta bort säsong', - _ => null, - } ?? switch (path) { 'mediaMenu.deleteShowConfirm' => 'Ta bort serie', 'mediaMenu.deleteMovieConfirm' => 'Ta bort film', 'mediaMenu.deleteAnyway' => 'Ta bort ändå', @@ -3132,6 +3082,8 @@ extension on TranslationsSv { 'rateSheet.noConnectedServices' => 'Anslut en tjänst i Inställningar för att betygsätta där.', 'accessibility.mediaCardMovie' => ({required Object title}) => '${title}, film', 'accessibility.mediaCardShow' => ({required Object title}) => '${title}, TV-serie', + _ => null, + } ?? switch (path) { 'accessibility.mediaCardEpisode' => ({required Object title, required Object episodeInfo}) => '${title}, ${episodeInfo}', 'accessibility.mediaCardSeason' => ({required Object title, required Object seasonInfo}) => '${title}, ${seasonInfo}', 'accessibility.mediaCardWatched' => 'sedd', @@ -3620,8 +3572,6 @@ extension on TranslationsSv { 'explore.badge.requested' => 'Begärd', 'explore.badge.pendingApproval' => 'Väntar på godkännande', 'explore.badge.processing' => 'Bearbetas', - _ => null, - } ?? switch (path) { 'explore.badge.declined' => 'Avvisad', 'explore.badge.requestFailed' => 'Begäran misslyckades', 'explore.badge.requested4k' => '4K begärd', @@ -3646,6 +3596,8 @@ extension on TranslationsSv { 'explore.stats.completed' => ({required Object n}) => '${n} avslutade', 'explore.stats.onHold' => ({required Object n}) => '${n} på paus', 'explore.stats.dropped' => ({required Object n}) => '${n} hoppade av', + _ => null, + } ?? switch (path) { 'explore.season.winter' => 'Vinter', 'explore.season.spring' => 'Vår', 'explore.season.summer' => 'Sommar', @@ -4134,8 +4086,6 @@ extension on TranslationsSv { 'performanceOverlay.dropped' => 'Tappade bildrutor', 'performanceOverlay.dvRpus' => 'DV-RPU:er', 'performanceOverlay.dvRpuAverage' => 'DV-RPU, genomsnitt', - _ => null, - } ?? switch (path) { 'performanceOverlay.dvSampleAverage' => 'DV-sampling, genomsnitt', 'performanceOverlay.maxLuma' => 'Max luma', 'performanceOverlay.minLuma' => 'Min luma', @@ -4160,6 +4110,8 @@ extension on TranslationsSv { 'externalPlayer.playerPackage' => 'Paketnamn', 'externalPlayer.playerUrlScheme' => 'URL-schema', 'externalPlayer.off' => 'Av', + _ => null, + } ?? switch (path) { 'externalPlayer.launchFailed' => 'Kunde inte öppna extern spelare', 'externalPlayer.appNotInstalled' => ({required Object name}) => '${name} är inte installerad', 'externalPlayer.playInExternalPlayer' => 'Spela i extern spelare', diff --git a/lib/i18n/strings_tr.g.dart b/lib/i18n/strings_tr.g.dart index 49dbc4cf..b2e485d5 100644 --- a/lib/i18n/strings_tr.g.dart +++ b/lib/i18n/strings_tr.g.dart @@ -421,30 +421,6 @@ class _Translations$settings$tr extends Translations$settings$en { @override String get downmixCenterBoostShort => 'dB'; @override String get audioDownmixNormalize => 'Dönüştürmede Sesi Normalleştir'; @override String get audioDownmixNormalizeDescription => 'Ses patlamalarını önlemek için karışımı düşürün. Orijinal sesi korumak için kapatın (yüksek sesli sahnelerde bozulma yapabilir).'; - @override String get atmosDiagnostics => 'Atmos Çıkış Testi'; - @override String get atmosDiagnosticsDescription => 'Sistem oynatıcısı üzerinden test sinyalleri çalarak Dolby Atmos çıkışını teşhis edin'; - @override String get atmosTestHlsAtmos => 'Apple Atmos akışı'; - @override String get atmosTestHlsAtmosDescription => 'Düzgün çalıştığı bilinen Dolby Atmos akışı. Alıcıda Dolby Atmos görünmelidir.'; - @override String get atmosTestHlsControl => 'Apple çevreleyen ses akışı'; - @override String get atmosTestHlsControlDescription => 'Atmos olmayan kontrol akışı. Alıcıda Atmos olmadan çevreleyen ses görünmelidir.'; - @override String get atmosTestRawStream => 'Ham EAC3 akışı'; - @override String get atmosTestRawStreamDescription => 'Test dosyasını aynen oynatıcı içi Atmos oynatımı gibi akış yapar. Test dosyası URL\'si gerektirir.'; - @override String get atmosTestRawFile => 'Ham EAC3 dosyası'; - @override String get atmosTestRawFileDescription => 'Test dosyasını bilinen bir uzunlukta oynatır. Test dosyası URL\'si gerektirir.'; - @override String get atmosTestAsbarNative => 'Örnek arabellek işleyicisi (yerel)'; - @override String get atmosTestAsbarNativeDescription => 'Dosyanın değiştirilmemiş sıkıştırılmış sesini doğrudan sistem işleyicisine iletir. Test dosyası URL\'si gerektirir.'; - @override String get atmosTestAsbarGenerated => 'Örnek arabellek işleyicisi (yeniden oluşturulmuş)'; - @override String get atmosTestAsbarGeneratedDescription => 'Aynısı, ancak ses tanımı oynatmanın oluşturduğu biçimde yeniden oluşturulur. Test dosyası URL\'si gerektirir.'; - @override String get atmosTestSessionMode => 'Film oynatma oturumu modunu kullan'; - @override String get atmosTestSessionModeDescription => 'Kapalı, Dolby\'nin belgelediği modu kullanır. Açık, oynatmanın daha önce kullandığı modu kullanır.'; - @override String get atmosTestShowRoutePicker => 'AirPlay çıkışını seç'; - @override String get atmosTestHideRoutePicker => 'AirPlay çıkış seçicisini gizle'; - @override String get atmosTestRoutePickerDescription => 'Testi bir AirPlay alıcısına gönderir. Çözümlenen ses modunu yalnızca AirPlay bildirir.'; - @override String get atmosTestStop => 'Testi durdur'; - @override String get atmosTestUrl => 'Test dosyası URL\'si'; - @override String get atmosTestUrlDescription => 'Ham bir .ec3 Dolby Atmos dosyasının HTTP URL\'si (ör. ffmpeg ile ayıklanmış)'; - @override String get atmosTestUrlMissing => 'Önce test dosyası URL\'sini ayarlayın'; - @override String get atmosTestStatus => 'Durum'; @override String get dvConversionMode => 'Dolby Vision Dönüştürme'; @override String get dvConversionModeDescription => 'ExoPlayer\'ın Dolby Vision Profile 7 dosyalarını nasıl işleyeceğini seçin.'; @override String get dvConversionAuto => 'Otomatik'; @@ -2882,30 +2858,6 @@ extension on TranslationsTr { 'settings.downmixCenterBoostShort' => 'dB', 'settings.audioDownmixNormalize' => 'Dönüştürmede Sesi Normalleştir', 'settings.audioDownmixNormalizeDescription' => 'Ses patlamalarını önlemek için karışımı düşürün. Orijinal sesi korumak için kapatın (yüksek sesli sahnelerde bozulma yapabilir).', - 'settings.atmosDiagnostics' => 'Atmos Çıkış Testi', - 'settings.atmosDiagnosticsDescription' => 'Sistem oynatıcısı üzerinden test sinyalleri çalarak Dolby Atmos çıkışını teşhis edin', - 'settings.atmosTestHlsAtmos' => 'Apple Atmos akışı', - 'settings.atmosTestHlsAtmosDescription' => 'Düzgün çalıştığı bilinen Dolby Atmos akışı. Alıcıda Dolby Atmos görünmelidir.', - 'settings.atmosTestHlsControl' => 'Apple çevreleyen ses akışı', - 'settings.atmosTestHlsControlDescription' => 'Atmos olmayan kontrol akışı. Alıcıda Atmos olmadan çevreleyen ses görünmelidir.', - 'settings.atmosTestRawStream' => 'Ham EAC3 akışı', - 'settings.atmosTestRawStreamDescription' => 'Test dosyasını aynen oynatıcı içi Atmos oynatımı gibi akış yapar. Test dosyası URL\'si gerektirir.', - 'settings.atmosTestRawFile' => 'Ham EAC3 dosyası', - 'settings.atmosTestRawFileDescription' => 'Test dosyasını bilinen bir uzunlukta oynatır. Test dosyası URL\'si gerektirir.', - 'settings.atmosTestAsbarNative' => 'Örnek arabellek işleyicisi (yerel)', - 'settings.atmosTestAsbarNativeDescription' => 'Dosyanın değiştirilmemiş sıkıştırılmış sesini doğrudan sistem işleyicisine iletir. Test dosyası URL\'si gerektirir.', - 'settings.atmosTestAsbarGenerated' => 'Örnek arabellek işleyicisi (yeniden oluşturulmuş)', - 'settings.atmosTestAsbarGeneratedDescription' => 'Aynısı, ancak ses tanımı oynatmanın oluşturduğu biçimde yeniden oluşturulur. Test dosyası URL\'si gerektirir.', - 'settings.atmosTestSessionMode' => 'Film oynatma oturumu modunu kullan', - 'settings.atmosTestSessionModeDescription' => 'Kapalı, Dolby\'nin belgelediği modu kullanır. Açık, oynatmanın daha önce kullandığı modu kullanır.', - 'settings.atmosTestShowRoutePicker' => 'AirPlay çıkışını seç', - 'settings.atmosTestHideRoutePicker' => 'AirPlay çıkış seçicisini gizle', - 'settings.atmosTestRoutePickerDescription' => 'Testi bir AirPlay alıcısına gönderir. Çözümlenen ses modunu yalnızca AirPlay bildirir.', - 'settings.atmosTestStop' => 'Testi durdur', - 'settings.atmosTestUrl' => 'Test dosyası URL\'si', - 'settings.atmosTestUrlDescription' => 'Ham bir .ec3 Dolby Atmos dosyasının HTTP URL\'si (ör. ffmpeg ile ayıklanmış)', - 'settings.atmosTestUrlMissing' => 'Önce test dosyası URL\'sini ayarlayın', - 'settings.atmosTestStatus' => 'Durum', 'settings.dvConversionMode' => 'Dolby Vision Dönüştürme', 'settings.dvConversionModeDescription' => 'ExoPlayer\'ın Dolby Vision Profile 7 dosyalarını nasıl işleyeceğini seçin.', 'settings.dvConversionAuto' => 'Otomatik', @@ -3106,8 +3058,6 @@ extension on TranslationsTr { 'mediaMenu.deleteMovieTitle' => 'Bu film silinsin mi?', 'mediaMenu.deleteEpisodeConfirm' => 'Bölümü Sil', 'mediaMenu.deleteSeasonConfirm' => 'Sezonu Sil', - _ => null, - } ?? switch (path) { 'mediaMenu.deleteShowConfirm' => 'Diziyi Sil', 'mediaMenu.deleteMovieConfirm' => 'Filmi Sil', 'mediaMenu.deleteAnyway' => 'Yine de Sil', @@ -3132,6 +3082,8 @@ extension on TranslationsTr { 'rateSheet.noConnectedServices' => 'Orada oylamak için Ayarlar\'dan bir servis bağlayın.', 'accessibility.mediaCardMovie' => ({required Object title}) => '${title}, film', 'accessibility.mediaCardShow' => ({required Object title}) => '${title}, TV dizisi', + _ => null, + } ?? switch (path) { 'accessibility.mediaCardEpisode' => ({required Object title, required Object episodeInfo}) => '${title}, ${episodeInfo}', 'accessibility.mediaCardSeason' => ({required Object title, required Object seasonInfo}) => '${title}, ${seasonInfo}', 'accessibility.mediaCardWatched' => 'izlendi', @@ -3620,8 +3572,6 @@ extension on TranslationsTr { 'explore.badge.requested' => 'İstendi', 'explore.badge.pendingApproval' => 'Onay bekliyor', 'explore.badge.processing' => 'İşleniyor', - _ => null, - } ?? switch (path) { 'explore.badge.declined' => 'Reddedildi', 'explore.badge.requestFailed' => 'İstek başarısız oldu', 'explore.badge.requested4k' => '4K istendi', @@ -3646,6 +3596,8 @@ extension on TranslationsTr { 'explore.stats.completed' => ({required Object n}) => '${n} tamamladı', 'explore.stats.onHold' => ({required Object n}) => '${n} bekletiyor', 'explore.stats.dropped' => ({required Object n}) => '${n} bıraktı', + _ => null, + } ?? switch (path) { 'explore.season.winter' => 'Kış', 'explore.season.spring' => 'İlkbahar', 'explore.season.summer' => 'Yaz', @@ -4134,8 +4086,6 @@ extension on TranslationsTr { 'performanceOverlay.dropped' => 'Kare Kaybı', 'performanceOverlay.dvRpus' => 'DV RPU\'ları', 'performanceOverlay.dvRpuAverage' => 'DV RPU Ort.', - _ => null, - } ?? switch (path) { 'performanceOverlay.dvSampleAverage' => 'DV Örnek Ort.', 'performanceOverlay.maxLuma' => 'Maks Luma', 'performanceOverlay.minLuma' => 'Min Luma', @@ -4160,6 +4110,8 @@ extension on TranslationsTr { 'externalPlayer.playerPackage' => 'Paket Adı', 'externalPlayer.playerUrlScheme' => 'URL Şeması', 'externalPlayer.off' => 'Kapalı', + _ => null, + } ?? switch (path) { 'externalPlayer.launchFailed' => 'Harici oynatıcı açılamadı', 'externalPlayer.appNotInstalled' => ({required Object name}) => '${name} yüklü değil', 'externalPlayer.playInExternalPlayer' => 'Harici Oynatıcıda Oynat', diff --git a/lib/i18n/strings_uz.g.dart b/lib/i18n/strings_uz.g.dart index de890034..d8075846 100644 --- a/lib/i18n/strings_uz.g.dart +++ b/lib/i18n/strings_uz.g.dart @@ -421,30 +421,6 @@ class _Translations$settings$uz extends Translations$settings$en { @override String get downmixCenterBoostShort => 'dB'; @override String get audioDownmixNormalize => 'Oʻtkazishda ovozni meʼyorlashtirish'; @override String get audioDownmixNormalizeDescription => 'Ovoz buzilishining oldini olish uchun darajani tushirish.'; - @override String get atmosDiagnostics => 'Atmos chiqishini tekshirish'; - @override String get atmosDiagnosticsDescription => 'Dolby Atmos chiqishini tekshirish'; - @override String get atmosTestHlsAtmos => 'Apple Atmos oqimi'; - @override String get atmosTestHlsAtmosDescription => 'Toʻgʻri ishlaydigan Dolby Atmos oqimi.'; - @override String get atmosTestHlsControl => 'Apple atroflicha ovoz oqimi'; - @override String get atmosTestHlsControlDescription => 'Atmos boʻlmagan nazorat oqimi.'; - @override String get atmosTestRawStream => 'Ishlov berilmagan EAC3 oqimi'; - @override String get atmosTestRawStreamDescription => 'Test faylini ichki Atmos sifatida uzatish.'; - @override String get atmosTestRawFile => 'Ishlov berilmagan EAC3 fayli'; - @override String get atmosTestRawFileDescription => 'Test faylini ijro etish.'; - @override String get atmosTestAsbarNative => 'Sempl-bufer renderer (nativ)'; - @override String get atmosTestAsbarNativeDescription => 'Faylning oʻzgartirilmagan siqilgan audiosini toʻgʻridan-toʻgʻri tizim rendereriga uzatadi. Test fayli URL-manzili kerak.'; - @override String get atmosTestAsbarGenerated => 'Sempl-bufer renderer (qayta qurilgan)'; - @override String get atmosTestAsbarGeneratedDescription => 'Xuddi shu, lekin audio tavsifi ijro paytida qanday qurilsa, shunday qayta quriladi. Test fayli URL-manzili kerak.'; - @override String get atmosTestSessionMode => 'Film ijrosi seansi rejimidan foydalanish'; - @override String get atmosTestSessionModeDescription => 'Oʻchirilgan holatda Dolby hujjatlashtirgan rejim qoʻllanadi. Yoqilgan holatda avval ishlatilgan rejim qoʻllanadi.'; - @override String get atmosTestShowRoutePicker => 'AirPlay chiqishini tanlash'; - @override String get atmosTestHideRoutePicker => 'AirPlay chiqishi tanlagichini yashirish'; - @override String get atmosTestRoutePickerDescription => 'Testni AirPlay qabul qilgichiga yuboradi. Aniqlangan audio rejimi haqida faqat AirPlay xabar beradi.'; - @override String get atmosTestStop => 'Testni toʻxtatish'; - @override String get atmosTestUrl => 'Test fayli URL-manzili'; - @override String get atmosTestUrlDescription => 'Ishlov berilmagan .ec3 faylining HTTP URL-manzili'; - @override String get atmosTestUrlMissing => 'Avval test fayli URL-manzilini oʻrnating'; - @override String get atmosTestStatus => 'Holati'; @override String get dvConversionMode => 'Dolby Vision oʻtkazmasi'; @override String get dvConversionModeDescription => 'ExoPlayer-ning Dolby Vision Profile 7 fayllarini qayta ishlash rejimini tanlang.'; @override String get dvConversionAuto => 'Avtomatik'; @@ -2882,30 +2858,6 @@ extension on TranslationsUz { 'settings.downmixCenterBoostShort' => 'dB', 'settings.audioDownmixNormalize' => 'Oʻtkazishda ovozni meʼyorlashtirish', 'settings.audioDownmixNormalizeDescription' => 'Ovoz buzilishining oldini olish uchun darajani tushirish.', - 'settings.atmosDiagnostics' => 'Atmos chiqishini tekshirish', - 'settings.atmosDiagnosticsDescription' => 'Dolby Atmos chiqishini tekshirish', - 'settings.atmosTestHlsAtmos' => 'Apple Atmos oqimi', - 'settings.atmosTestHlsAtmosDescription' => 'Toʻgʻri ishlaydigan Dolby Atmos oqimi.', - 'settings.atmosTestHlsControl' => 'Apple atroflicha ovoz oqimi', - 'settings.atmosTestHlsControlDescription' => 'Atmos boʻlmagan nazorat oqimi.', - 'settings.atmosTestRawStream' => 'Ishlov berilmagan EAC3 oqimi', - 'settings.atmosTestRawStreamDescription' => 'Test faylini ichki Atmos sifatida uzatish.', - 'settings.atmosTestRawFile' => 'Ishlov berilmagan EAC3 fayli', - 'settings.atmosTestRawFileDescription' => 'Test faylini ijro etish.', - 'settings.atmosTestAsbarNative' => 'Sempl-bufer renderer (nativ)', - 'settings.atmosTestAsbarNativeDescription' => 'Faylning oʻzgartirilmagan siqilgan audiosini toʻgʻridan-toʻgʻri tizim rendereriga uzatadi. Test fayli URL-manzili kerak.', - 'settings.atmosTestAsbarGenerated' => 'Sempl-bufer renderer (qayta qurilgan)', - 'settings.atmosTestAsbarGeneratedDescription' => 'Xuddi shu, lekin audio tavsifi ijro paytida qanday qurilsa, shunday qayta quriladi. Test fayli URL-manzili kerak.', - 'settings.atmosTestSessionMode' => 'Film ijrosi seansi rejimidan foydalanish', - 'settings.atmosTestSessionModeDescription' => 'Oʻchirilgan holatda Dolby hujjatlashtirgan rejim qoʻllanadi. Yoqilgan holatda avval ishlatilgan rejim qoʻllanadi.', - 'settings.atmosTestShowRoutePicker' => 'AirPlay chiqishini tanlash', - 'settings.atmosTestHideRoutePicker' => 'AirPlay chiqishi tanlagichini yashirish', - 'settings.atmosTestRoutePickerDescription' => 'Testni AirPlay qabul qilgichiga yuboradi. Aniqlangan audio rejimi haqida faqat AirPlay xabar beradi.', - 'settings.atmosTestStop' => 'Testni toʻxtatish', - 'settings.atmosTestUrl' => 'Test fayli URL-manzili', - 'settings.atmosTestUrlDescription' => 'Ishlov berilmagan .ec3 faylining HTTP URL-manzili', - 'settings.atmosTestUrlMissing' => 'Avval test fayli URL-manzilini oʻrnating', - 'settings.atmosTestStatus' => 'Holati', 'settings.dvConversionMode' => 'Dolby Vision oʻtkazmasi', 'settings.dvConversionModeDescription' => 'ExoPlayer-ning Dolby Vision Profile 7 fayllarini qayta ishlash rejimini tanlang.', 'settings.dvConversionAuto' => 'Avtomatik', @@ -3106,8 +3058,6 @@ extension on TranslationsUz { 'mediaMenu.deleteMovieTitle' => 'Ushbu film oʻchirilsinmi?', 'mediaMenu.deleteEpisodeConfirm' => 'Qismni oʻchirish', 'mediaMenu.deleteSeasonConfirm' => 'Mavsumni oʻchirish', - _ => null, - } ?? switch (path) { 'mediaMenu.deleteShowConfirm' => 'Shouni oʻchirish', 'mediaMenu.deleteMovieConfirm' => 'Filmni oʻchirish', 'mediaMenu.deleteAnyway' => 'Baribir oʻchirish', @@ -3132,6 +3082,8 @@ extension on TranslationsUz { 'rateSheet.noConnectedServices' => 'Baho berish uchun Sozlamalardan xizmatni ulang.', 'accessibility.mediaCardMovie' => ({required Object title}) => '${title}, film', 'accessibility.mediaCardShow' => ({required Object title}) => '${title}, TV shou', + _ => null, + } ?? switch (path) { 'accessibility.mediaCardEpisode' => ({required Object title, required Object episodeInfo}) => '${title}, ${episodeInfo}', 'accessibility.mediaCardSeason' => ({required Object title, required Object seasonInfo}) => '${title}, ${seasonInfo}', 'accessibility.mediaCardWatched' => 'koʻrilgan', @@ -3620,8 +3572,6 @@ extension on TranslationsUz { 'explore.badge.requested' => 'Soʻralgan', 'explore.badge.pendingApproval' => 'Tasdiq kutilmoqda', 'explore.badge.processing' => 'Ishlanmoqda', - _ => null, - } ?? switch (path) { 'explore.badge.declined' => 'Rad etilgan', 'explore.badge.requestFailed' => 'Soʻrov amalga oshmadi', 'explore.badge.requested4k' => '4K soʻralgan', @@ -3646,6 +3596,8 @@ extension on TranslationsUz { 'explore.stats.completed' => ({required Object n}) => '${n} kishi yakunlagan', 'explore.stats.onHold' => ({required Object n}) => '${n} kishi toʻxtatib turibdi', 'explore.stats.dropped' => ({required Object n}) => '${n} kishi toʻxtatgan', + _ => null, + } ?? switch (path) { 'explore.season.winter' => 'Qish', 'explore.season.spring' => 'Bahor', 'explore.season.summer' => 'Yoz', @@ -4134,8 +4086,6 @@ extension on TranslationsUz { 'performanceOverlay.dropped' => 'Tushirib qoldirilgan kadrlar', 'performanceOverlay.dvRpus' => 'DV RPU-lar', 'performanceOverlay.dvRpuAverage' => 'DV RPU Oʻrt.', - _ => null, - } ?? switch (path) { 'performanceOverlay.dvSampleAverage' => 'DV Namuna Oʻrt.', 'performanceOverlay.maxLuma' => 'Maks Luma', 'performanceOverlay.minLuma' => 'Min Luma', @@ -4160,6 +4110,8 @@ extension on TranslationsUz { 'externalPlayer.playerPackage' => 'Paket nomi', 'externalPlayer.playerUrlScheme' => 'URL sxemasi', 'externalPlayer.off' => 'Oʻchirilgan', + _ => null, + } ?? switch (path) { 'externalPlayer.launchFailed' => 'Tashqi pleyerni ishga tushirib boʻlmadi', 'externalPlayer.appNotInstalled' => ({required Object name}) => '${name} oʻrnatilmagan', 'externalPlayer.playInExternalPlayer' => 'Tashqi pleyerda ijro etish', diff --git a/lib/i18n/strings_zh.g.dart b/lib/i18n/strings_zh.g.dart index fc64e301..19aadbb0 100644 --- a/lib/i18n/strings_zh.g.dart +++ b/lib/i18n/strings_zh.g.dart @@ -421,30 +421,6 @@ class Translations$settings$zh extends Translations$settings$en { @override String get downmixCenterBoostShort => 'dB'; @override String get audioDownmixNormalize => '下混时音量标准化'; @override String get audioDownmixNormalizeDescription => '降低混音电平以防止削波。关闭可保持原始音量(大音量场景可能失真)。'; - @override String get atmosDiagnostics => 'Atmos 输出测试'; - @override String get atmosDiagnosticsDescription => '通过系统播放器播放测试信号,诊断 Dolby Atmos 输出'; - @override String get atmosTestHlsAtmos => 'Apple Atmos 流'; - @override String get atmosTestHlsAtmosDescription => '已知正常的 Dolby Atmos 流。功放应显示 Dolby Atmos。'; - @override String get atmosTestHlsControl => 'Apple 环绕声流'; - @override String get atmosTestHlsControlDescription => '不含 Atmos 的对照流。功放应显示不带 Atmos 的环绕声。'; - @override String get atmosTestRawStream => '原始 EAC3 流'; - @override String get atmosTestRawStreamDescription => '以与播放器内 Atmos 播放完全相同的方式流式传输测试文件。需要测试文件 URL。'; - @override String get atmosTestRawFile => '原始 EAC3 文件'; - @override String get atmosTestRawFileDescription => '以已知长度播放测试文件。需要测试文件 URL。'; - @override String get atmosTestAsbarNative => '采样缓冲渲染器(原生)'; - @override String get atmosTestAsbarNativeDescription => '将文件未经改动的压缩音频直接交给系统渲染器。需要测试文件 URL。'; - @override String get atmosTestAsbarGenerated => '采样缓冲渲染器(重建)'; - @override String get atmosTestAsbarGeneratedDescription => '相同,但音频描述按播放时的方式重建。需要测试文件 URL。'; - @override String get atmosTestSessionMode => '使用影片播放会话模式'; - @override String get atmosTestSessionModeDescription => '关闭时使用 Dolby 文档所述的模式。开启时使用先前的模式。'; - @override String get atmosTestShowRoutePicker => '选择 AirPlay 输出'; - @override String get atmosTestHideRoutePicker => '隐藏 AirPlay 输出选择器'; - @override String get atmosTestRoutePickerDescription => '将测试发送到 AirPlay 接收器。只有 AirPlay 会报告已确定的音频模式。'; - @override String get atmosTestStop => '停止测试'; - @override String get atmosTestUrl => '测试文件 URL'; - @override String get atmosTestUrlDescription => '原始 .ec3 Dolby Atmos 文件的 HTTP URL(例如用 ffmpeg 提取)'; - @override String get atmosTestUrlMissing => '请先设置测试文件 URL'; - @override String get atmosTestStatus => '状态'; @override String get dvConversionMode => 'Dolby Vision 转换'; @override String get dvConversionModeDescription => '选择 ExoPlayer 如何处理 Dolby Vision Profile 7 文件。'; @override String get dvConversionAuto => '自动'; @@ -2873,30 +2849,6 @@ extension on TranslationsZh { 'settings.downmixCenterBoostShort' => 'dB', 'settings.audioDownmixNormalize' => '下混时音量标准化', 'settings.audioDownmixNormalizeDescription' => '降低混音电平以防止削波。关闭可保持原始音量(大音量场景可能失真)。', - 'settings.atmosDiagnostics' => 'Atmos 输出测试', - 'settings.atmosDiagnosticsDescription' => '通过系统播放器播放测试信号,诊断 Dolby Atmos 输出', - 'settings.atmosTestHlsAtmos' => 'Apple Atmos 流', - 'settings.atmosTestHlsAtmosDescription' => '已知正常的 Dolby Atmos 流。功放应显示 Dolby Atmos。', - 'settings.atmosTestHlsControl' => 'Apple 环绕声流', - 'settings.atmosTestHlsControlDescription' => '不含 Atmos 的对照流。功放应显示不带 Atmos 的环绕声。', - 'settings.atmosTestRawStream' => '原始 EAC3 流', - 'settings.atmosTestRawStreamDescription' => '以与播放器内 Atmos 播放完全相同的方式流式传输测试文件。需要测试文件 URL。', - 'settings.atmosTestRawFile' => '原始 EAC3 文件', - 'settings.atmosTestRawFileDescription' => '以已知长度播放测试文件。需要测试文件 URL。', - 'settings.atmosTestAsbarNative' => '采样缓冲渲染器(原生)', - 'settings.atmosTestAsbarNativeDescription' => '将文件未经改动的压缩音频直接交给系统渲染器。需要测试文件 URL。', - 'settings.atmosTestAsbarGenerated' => '采样缓冲渲染器(重建)', - 'settings.atmosTestAsbarGeneratedDescription' => '相同,但音频描述按播放时的方式重建。需要测试文件 URL。', - 'settings.atmosTestSessionMode' => '使用影片播放会话模式', - 'settings.atmosTestSessionModeDescription' => '关闭时使用 Dolby 文档所述的模式。开启时使用先前的模式。', - 'settings.atmosTestShowRoutePicker' => '选择 AirPlay 输出', - 'settings.atmosTestHideRoutePicker' => '隐藏 AirPlay 输出选择器', - 'settings.atmosTestRoutePickerDescription' => '将测试发送到 AirPlay 接收器。只有 AirPlay 会报告已确定的音频模式。', - 'settings.atmosTestStop' => '停止测试', - 'settings.atmosTestUrl' => '测试文件 URL', - 'settings.atmosTestUrlDescription' => '原始 .ec3 Dolby Atmos 文件的 HTTP URL(例如用 ffmpeg 提取)', - 'settings.atmosTestUrlMissing' => '请先设置测试文件 URL', - 'settings.atmosTestStatus' => '状态', 'settings.dvConversionMode' => 'Dolby Vision 转换', 'settings.dvConversionModeDescription' => '选择 ExoPlayer 如何处理 Dolby Vision Profile 7 文件。', 'settings.dvConversionAuto' => '自动', @@ -3097,8 +3049,6 @@ extension on TranslationsZh { 'mediaMenu.deleteMovieTitle' => '删除这部电影?', 'mediaMenu.deleteEpisodeConfirm' => '删除单集', 'mediaMenu.deleteSeasonConfirm' => '删除季度', - _ => null, - } ?? switch (path) { 'mediaMenu.deleteShowConfirm' => '删除剧集', 'mediaMenu.deleteMovieConfirm' => '删除电影', 'mediaMenu.deleteAnyway' => '仍然删除', @@ -3123,6 +3073,8 @@ extension on TranslationsZh { 'rateSheet.noConnectedServices' => '在设置中连接服务,即可在此评分。', 'accessibility.mediaCardMovie' => ({required Object title}) => '${title}, 电影', 'accessibility.mediaCardShow' => ({required Object title}) => '${title}, 电视剧', + _ => null, + } ?? switch (path) { 'accessibility.mediaCardEpisode' => ({required Object title, required Object episodeInfo}) => '${title}, ${episodeInfo}', 'accessibility.mediaCardSeason' => ({required Object title, required Object seasonInfo}) => '${title}, ${seasonInfo}', 'accessibility.mediaCardWatched' => '已观看', @@ -3611,8 +3563,6 @@ extension on TranslationsZh { 'explore.badge.requested' => '已请求', 'explore.badge.pendingApproval' => '待批准', 'explore.badge.processing' => '处理中', - _ => null, - } ?? switch (path) { 'explore.badge.declined' => '已拒绝', 'explore.badge.requestFailed' => '请求失败', 'explore.badge.requested4k' => '已请求 4K', @@ -3637,6 +3587,8 @@ extension on TranslationsZh { 'explore.stats.completed' => ({required Object n}) => '${n} 人已看完', 'explore.stats.onHold' => ({required Object n}) => '${n} 人搁置', 'explore.stats.dropped' => ({required Object n}) => '${n} 人弃番', + _ => null, + } ?? switch (path) { 'explore.season.winter' => '冬季', 'explore.season.spring' => '春季', 'explore.season.summer' => '夏季', @@ -4125,8 +4077,6 @@ extension on TranslationsZh { 'performanceOverlay.dropped' => '丢帧', 'performanceOverlay.dvRpus' => 'DV RPU', 'performanceOverlay.dvRpuAverage' => 'DV RPU 平均', - _ => null, - } ?? switch (path) { 'performanceOverlay.dvSampleAverage' => 'DV 采样平均', 'performanceOverlay.maxLuma' => '最大亮度', 'performanceOverlay.minLuma' => '最小亮度', @@ -4151,6 +4101,8 @@ extension on TranslationsZh { 'externalPlayer.playerPackage' => '包名', 'externalPlayer.playerUrlScheme' => 'URL 方案', 'externalPlayer.off' => '关闭', + _ => null, + } ?? switch (path) { 'externalPlayer.launchFailed' => '无法打开外部播放器', 'externalPlayer.appNotInstalled' => ({required Object name}) => '${name} 未安装', 'externalPlayer.playInExternalPlayer' => '在外部播放器中播放', diff --git a/lib/i18n/strings_zh_Hant.g.dart b/lib/i18n/strings_zh_Hant.g.dart index 24b1ab41..0d121e3e 100644 --- a/lib/i18n/strings_zh_Hant.g.dart +++ b/lib/i18n/strings_zh_Hant.g.dart @@ -422,30 +422,6 @@ class _Translations$settings$zh_Hant extends Translations$settings$zh { @override String get downmixCenterBoostShort => 'dB'; @override String get audioDownmixNormalize => '下混時音量標準化'; @override String get audioDownmixNormalizeDescription => '降低混音電平以防止破音。關閉以保持原始音量(大音量場景可能會失真)。'; - @override String get atmosDiagnostics => 'Atmos 輸出測試'; - @override String get atmosDiagnosticsDescription => '透過系統播放器播放測試訊號,診斷 Dolby Atmos 輸出狀態'; - @override String get atmosTestHlsAtmos => 'Apple Atmos 串流'; - @override String get atmosTestHlsAtmosDescription => '已知正常的 Dolby Atmos 串流。擴大機應顯示 Dolby Atmos。'; - @override String get atmosTestHlsControl => 'Apple 環繞音效串流'; - @override String get atmosTestHlsControlDescription => '不含 Atmos 的對照組串流。擴大機應顯示一般環繞音效(非 Atmos)。'; - @override String get atmosTestRawStream => '原始 EAC3 串流'; - @override String get atmosTestRawStreamDescription => '以與播放器播放 Atmos 完全相同的方式串流測試檔案。需要測試檔案的 URL。'; - @override String get atmosTestRawFile => '原始 EAC3 檔案'; - @override String get atmosTestRawFileDescription => '以已知長度播放測試檔案。需要測試檔案的 URL。'; - @override String get atmosTestAsbarNative => '取樣緩衝渲染器(原生)'; - @override String get atmosTestAsbarNativeDescription => '將檔案未經更動的壓縮音訊直接交給系統渲染器。需要測試檔案 URL。'; - @override String get atmosTestAsbarGenerated => '取樣緩衝渲染器(重建)'; - @override String get atmosTestAsbarGeneratedDescription => '相同,但音訊描述以播放時的方式重建。需要測試檔案 URL。'; - @override String get atmosTestSessionMode => '使用影片播放工作階段模式'; - @override String get atmosTestSessionModeDescription => '關閉時使用 Dolby 文件所述的模式。開啟時使用先前的模式。'; - @override String get atmosTestShowRoutePicker => '選擇 AirPlay 輸出'; - @override String get atmosTestHideRoutePicker => '隱藏 AirPlay 輸出選擇器'; - @override String get atmosTestRoutePickerDescription => '將測試傳送到 AirPlay 接收器。只有 AirPlay 會回報已確定的音訊模式。'; - @override String get atmosTestStop => '停止測試'; - @override String get atmosTestUrl => '測試檔案 URL'; - @override String get atmosTestUrlDescription => '原始 .ec3 Dolby Atmos 檔案的 HTTP URL(例如使用 ffmpeg 提取的檔案)'; - @override String get atmosTestUrlMissing => '請先設定測試檔案的 URL'; - @override String get atmosTestStatus => '狀態'; @override String get dvConversionMode => 'Dolby Vision 轉換模式'; @override String get dvConversionModeDescription => '選擇 ExoPlayer 如何處理 Dolby Vision Profile 7 檔案。'; @override String get dvConversionAuto => '自動'; @@ -2874,30 +2850,6 @@ extension on TranslationsZhHant { 'settings.downmixCenterBoostShort' => 'dB', 'settings.audioDownmixNormalize' => '下混時音量標準化', 'settings.audioDownmixNormalizeDescription' => '降低混音電平以防止破音。關閉以保持原始音量(大音量場景可能會失真)。', - 'settings.atmosDiagnostics' => 'Atmos 輸出測試', - 'settings.atmosDiagnosticsDescription' => '透過系統播放器播放測試訊號,診斷 Dolby Atmos 輸出狀態', - 'settings.atmosTestHlsAtmos' => 'Apple Atmos 串流', - 'settings.atmosTestHlsAtmosDescription' => '已知正常的 Dolby Atmos 串流。擴大機應顯示 Dolby Atmos。', - 'settings.atmosTestHlsControl' => 'Apple 環繞音效串流', - 'settings.atmosTestHlsControlDescription' => '不含 Atmos 的對照組串流。擴大機應顯示一般環繞音效(非 Atmos)。', - 'settings.atmosTestRawStream' => '原始 EAC3 串流', - 'settings.atmosTestRawStreamDescription' => '以與播放器播放 Atmos 完全相同的方式串流測試檔案。需要測試檔案的 URL。', - 'settings.atmosTestRawFile' => '原始 EAC3 檔案', - 'settings.atmosTestRawFileDescription' => '以已知長度播放測試檔案。需要測試檔案的 URL。', - 'settings.atmosTestAsbarNative' => '取樣緩衝渲染器(原生)', - 'settings.atmosTestAsbarNativeDescription' => '將檔案未經更動的壓縮音訊直接交給系統渲染器。需要測試檔案 URL。', - 'settings.atmosTestAsbarGenerated' => '取樣緩衝渲染器(重建)', - 'settings.atmosTestAsbarGeneratedDescription' => '相同,但音訊描述以播放時的方式重建。需要測試檔案 URL。', - 'settings.atmosTestSessionMode' => '使用影片播放工作階段模式', - 'settings.atmosTestSessionModeDescription' => '關閉時使用 Dolby 文件所述的模式。開啟時使用先前的模式。', - 'settings.atmosTestShowRoutePicker' => '選擇 AirPlay 輸出', - 'settings.atmosTestHideRoutePicker' => '隱藏 AirPlay 輸出選擇器', - 'settings.atmosTestRoutePickerDescription' => '將測試傳送到 AirPlay 接收器。只有 AirPlay 會回報已確定的音訊模式。', - 'settings.atmosTestStop' => '停止測試', - 'settings.atmosTestUrl' => '測試檔案 URL', - 'settings.atmosTestUrlDescription' => '原始 .ec3 Dolby Atmos 檔案的 HTTP URL(例如使用 ffmpeg 提取的檔案)', - 'settings.atmosTestUrlMissing' => '請先設定測試檔案的 URL', - 'settings.atmosTestStatus' => '狀態', 'settings.dvConversionMode' => 'Dolby Vision 轉換模式', 'settings.dvConversionModeDescription' => '選擇 ExoPlayer 如何處理 Dolby Vision Profile 7 檔案。', 'settings.dvConversionAuto' => '自動', @@ -3098,8 +3050,6 @@ extension on TranslationsZhHant { 'mediaMenu.deleteMovieTitle' => '刪除此電影?', 'mediaMenu.deleteEpisodeConfirm' => '刪除單集', 'mediaMenu.deleteSeasonConfirm' => '刪除季', - _ => null, - } ?? switch (path) { 'mediaMenu.deleteShowConfirm' => '刪除影集', 'mediaMenu.deleteMovieConfirm' => '刪除電影', 'mediaMenu.deleteAnyway' => '仍要刪除', @@ -3124,6 +3074,8 @@ extension on TranslationsZhHant { 'rateSheet.noConnectedServices' => '在設定中連結外部服務後,即可在此評分。', 'accessibility.mediaCardMovie' => ({required Object title}) => '${title}, 電影', 'accessibility.mediaCardShow' => ({required Object title}) => '${title}, 影集', + _ => null, + } ?? switch (path) { 'accessibility.mediaCardEpisode' => ({required Object title, required Object episodeInfo}) => '${title}, ${episodeInfo}', 'accessibility.mediaCardSeason' => ({required Object title, required Object seasonInfo}) => '${title}, ${seasonInfo}', 'accessibility.mediaCardWatched' => '已觀看', @@ -3612,8 +3564,6 @@ extension on TranslationsZhHant { 'explore.badge.requested' => '已提出請求', 'explore.badge.pendingApproval' => '等待核准', 'explore.badge.processing' => '處理中', - _ => null, - } ?? switch (path) { 'explore.badge.declined' => '已拒絕', 'explore.badge.requestFailed' => '請求失敗', 'explore.badge.requested4k' => '已請求 4K', @@ -3638,6 +3588,8 @@ extension on TranslationsZhHant { 'explore.stats.completed' => ({required Object n}) => '${n} 人已看完', 'explore.stats.onHold' => ({required Object n}) => '${n} 人擱置中', 'explore.stats.dropped' => ({required Object n}) => '${n} 人棄番', + _ => null, + } ?? switch (path) { 'explore.season.winter' => '冬季', 'explore.season.spring' => '春季', 'explore.season.summer' => '夏季', @@ -4126,8 +4078,6 @@ extension on TranslationsZhHant { 'performanceOverlay.dropped' => '丟格數(Dropped)', 'performanceOverlay.dvRpus' => 'DV RPU 數', 'performanceOverlay.dvRpuAverage' => 'DV RPU 平均', - _ => null, - } ?? switch (path) { 'performanceOverlay.dvSampleAverage' => 'DV 取樣平均', 'performanceOverlay.maxLuma' => '最大亮度', 'performanceOverlay.minLuma' => '最小亮度', @@ -4152,6 +4102,8 @@ extension on TranslationsZhHant { 'externalPlayer.playerPackage' => '套件名稱', 'externalPlayer.playerUrlScheme' => 'URL 協定架構(Scheme)', 'externalPlayer.off' => '關閉', + _ => null, + } ?? switch (path) { 'externalPlayer.launchFailed' => '無法啟動外部播放器', 'externalPlayer.appNotInstalled' => ({required Object name}) => '${name} 未安裝', 'externalPlayer.playInExternalPlayer' => '在外部播放器播放', diff --git a/lib/i18n/sv.i18n.json b/lib/i18n/sv.i18n.json index 32c25bab..56e53251 100644 --- a/lib/i18n/sv.i18n.json +++ b/lib/i18n/sv.i18n.json @@ -300,30 +300,6 @@ "downmixCenterBoostShort": "dB", "audioDownmixNormalize": "Normalisera ljudstyrka vid nedmixning", "audioDownmixNormalizeDescription": "Sänk ljudnivån för att förhindra klippning. Stäng av för att behålla originalvolymen (starka ljud kan då bli förvrängda).", - "atmosDiagnostics": "Atmos-utgångstest", - "atmosDiagnosticsDescription": "Diagnostisera Dolby Atmos-utgången genom att spela testsignaler via systemspelaren", - "atmosTestHlsAtmos": "Apple Atmos-ström", - "atmosTestHlsAtmosDescription": "Känd fungerande Dolby Atmos-ström. Receivern bör visa Dolby Atmos.", - "atmosTestHlsControl": "Apple surround-ström", - "atmosTestHlsControlDescription": "Kontrollström utan Atmos. Receivern bör visa surround utan Atmos.", - "atmosTestRawStream": "Rå EAC3-ström", - "atmosTestRawStreamDescription": "Strömmar testfilen precis som Atmos-uppspelning i spelaren. Kräver testfilens URL.", - "atmosTestRawFile": "Rå EAC3-fil", - "atmosTestRawFileDescription": "Spelar upp testfilen med känd längd. Kräver testfilens URL.", - "atmosTestAsbarNative": "Sample-buffer-renderare (nativ)", - "atmosTestAsbarNativeDescription": "Skickar filens orörda komprimerade ljud direkt till systemets renderare. Kräver testfilens URL.", - "atmosTestAsbarGenerated": "Sample-buffer-renderare (ombyggd)", - "atmosTestAsbarGeneratedDescription": "Samma sak, men med ljudbeskrivningen byggd som vid uppspelning. Kräver testfilens URL.", - "atmosTestSessionMode": "Använd filmuppspelningsläge", - "atmosTestSessionModeDescription": "Av använder läget som Dolby dokumenterar. På använder det tidigare läget.", - "atmosTestShowRoutePicker": "Välj AirPlay-utgång", - "atmosTestHideRoutePicker": "Dölj AirPlay-utgångsväljare", - "atmosTestRoutePickerDescription": "Skickar testet till en AirPlay-mottagare. Endast AirPlay rapporterar det valda ljudläget.", - "atmosTestStop": "Stoppa test", - "atmosTestUrl": "Testfilens URL", - "atmosTestUrlDescription": "HTTP-URL till en rå .ec3 Dolby Atmos-fil (t.ex. extraherad med ffmpeg)", - "atmosTestUrlMissing": "Ange testfilens URL först", - "atmosTestStatus": "Status", "dvConversionMode": "Dolby Vision-konvertering", "dvConversionModeDescription": "Välj hur ExoPlayer hanterar Dolby Vision Profile 7-filer.", "dvConversionAuto": "Auto", diff --git a/lib/i18n/tr.i18n.json b/lib/i18n/tr.i18n.json index b980cf61..a1189f05 100644 --- a/lib/i18n/tr.i18n.json +++ b/lib/i18n/tr.i18n.json @@ -300,30 +300,6 @@ "downmixCenterBoostShort": "dB", "audioDownmixNormalize": "Dönüştürmede Sesi Normalleştir", "audioDownmixNormalizeDescription": "Ses patlamalarını önlemek için karışımı düşürün. Orijinal sesi korumak için kapatın (yüksek sesli sahnelerde bozulma yapabilir).", - "atmosDiagnostics": "Atmos Çıkış Testi", - "atmosDiagnosticsDescription": "Sistem oynatıcısı üzerinden test sinyalleri çalarak Dolby Atmos çıkışını teşhis edin", - "atmosTestHlsAtmos": "Apple Atmos akışı", - "atmosTestHlsAtmosDescription": "Düzgün çalıştığı bilinen Dolby Atmos akışı. Alıcıda Dolby Atmos görünmelidir.", - "atmosTestHlsControl": "Apple çevreleyen ses akışı", - "atmosTestHlsControlDescription": "Atmos olmayan kontrol akışı. Alıcıda Atmos olmadan çevreleyen ses görünmelidir.", - "atmosTestRawStream": "Ham EAC3 akışı", - "atmosTestRawStreamDescription": "Test dosyasını aynen oynatıcı içi Atmos oynatımı gibi akış yapar. Test dosyası URL'si gerektirir.", - "atmosTestRawFile": "Ham EAC3 dosyası", - "atmosTestRawFileDescription": "Test dosyasını bilinen bir uzunlukta oynatır. Test dosyası URL'si gerektirir.", - "atmosTestAsbarNative": "Örnek arabellek işleyicisi (yerel)", - "atmosTestAsbarNativeDescription": "Dosyanın değiştirilmemiş sıkıştırılmış sesini doğrudan sistem işleyicisine iletir. Test dosyası URL'si gerektirir.", - "atmosTestAsbarGenerated": "Örnek arabellek işleyicisi (yeniden oluşturulmuş)", - "atmosTestAsbarGeneratedDescription": "Aynısı, ancak ses tanımı oynatmanın oluşturduğu biçimde yeniden oluşturulur. Test dosyası URL'si gerektirir.", - "atmosTestSessionMode": "Film oynatma oturumu modunu kullan", - "atmosTestSessionModeDescription": "Kapalı, Dolby'nin belgelediği modu kullanır. Açık, oynatmanın daha önce kullandığı modu kullanır.", - "atmosTestShowRoutePicker": "AirPlay çıkışını seç", - "atmosTestHideRoutePicker": "AirPlay çıkış seçicisini gizle", - "atmosTestRoutePickerDescription": "Testi bir AirPlay alıcısına gönderir. Çözümlenen ses modunu yalnızca AirPlay bildirir.", - "atmosTestStop": "Testi durdur", - "atmosTestUrl": "Test dosyası URL'si", - "atmosTestUrlDescription": "Ham bir .ec3 Dolby Atmos dosyasının HTTP URL'si (ör. ffmpeg ile ayıklanmış)", - "atmosTestUrlMissing": "Önce test dosyası URL'sini ayarlayın", - "atmosTestStatus": "Durum", "dvConversionMode": "Dolby Vision Dönüştürme", "dvConversionModeDescription": "ExoPlayer'ın Dolby Vision Profile 7 dosyalarını nasıl işleyeceğini seçin.", "dvConversionAuto": "Otomatik", diff --git a/lib/i18n/uz.i18n.json b/lib/i18n/uz.i18n.json index 2ef5e778..2c417c75 100644 --- a/lib/i18n/uz.i18n.json +++ b/lib/i18n/uz.i18n.json @@ -300,30 +300,6 @@ "downmixCenterBoostShort": "dB", "audioDownmixNormalize": "Oʻtkazishda ovozni meʼyorlashtirish", "audioDownmixNormalizeDescription": "Ovoz buzilishining oldini olish uchun darajani tushirish.", - "atmosDiagnostics": "Atmos chiqishini tekshirish", - "atmosDiagnosticsDescription": "Dolby Atmos chiqishini tekshirish", - "atmosTestHlsAtmos": "Apple Atmos oqimi", - "atmosTestHlsAtmosDescription": "Toʻgʻri ishlaydigan Dolby Atmos oqimi.", - "atmosTestHlsControl": "Apple atroflicha ovoz oqimi", - "atmosTestHlsControlDescription": "Atmos boʻlmagan nazorat oqimi.", - "atmosTestRawStream": "Ishlov berilmagan EAC3 oqimi", - "atmosTestRawStreamDescription": "Test faylini ichki Atmos sifatida uzatish.", - "atmosTestRawFile": "Ishlov berilmagan EAC3 fayli", - "atmosTestRawFileDescription": "Test faylini ijro etish.", - "atmosTestAsbarNative": "Sempl-bufer renderer (nativ)", - "atmosTestAsbarNativeDescription": "Faylning oʻzgartirilmagan siqilgan audiosini toʻgʻridan-toʻgʻri tizim rendereriga uzatadi. Test fayli URL-manzili kerak.", - "atmosTestAsbarGenerated": "Sempl-bufer renderer (qayta qurilgan)", - "atmosTestAsbarGeneratedDescription": "Xuddi shu, lekin audio tavsifi ijro paytida qanday qurilsa, shunday qayta quriladi. Test fayli URL-manzili kerak.", - "atmosTestSessionMode": "Film ijrosi seansi rejimidan foydalanish", - "atmosTestSessionModeDescription": "Oʻchirilgan holatda Dolby hujjatlashtirgan rejim qoʻllanadi. Yoqilgan holatda avval ishlatilgan rejim qoʻllanadi.", - "atmosTestShowRoutePicker": "AirPlay chiqishini tanlash", - "atmosTestHideRoutePicker": "AirPlay chiqishi tanlagichini yashirish", - "atmosTestRoutePickerDescription": "Testni AirPlay qabul qilgichiga yuboradi. Aniqlangan audio rejimi haqida faqat AirPlay xabar beradi.", - "atmosTestStop": "Testni toʻxtatish", - "atmosTestUrl": "Test fayli URL-manzili", - "atmosTestUrlDescription": "Ishlov berilmagan .ec3 faylining HTTP URL-manzili", - "atmosTestUrlMissing": "Avval test fayli URL-manzilini oʻrnating", - "atmosTestStatus": "Holati", "dvConversionMode": "Dolby Vision oʻtkazmasi", "dvConversionModeDescription": "ExoPlayer-ning Dolby Vision Profile 7 fayllarini qayta ishlash rejimini tanlang.", "dvConversionAuto": "Avtomatik", diff --git a/lib/i18n/zh-Hant.i18n.json b/lib/i18n/zh-Hant.i18n.json index 9895b172..2d7feaa0 100644 --- a/lib/i18n/zh-Hant.i18n.json +++ b/lib/i18n/zh-Hant.i18n.json @@ -300,30 +300,6 @@ "downmixCenterBoostShort": "dB", "audioDownmixNormalize": "下混時音量標準化", "audioDownmixNormalizeDescription": "降低混音電平以防止破音。關閉以保持原始音量(大音量場景可能會失真)。", - "atmosDiagnostics": "Atmos 輸出測試", - "atmosDiagnosticsDescription": "透過系統播放器播放測試訊號,診斷 Dolby Atmos 輸出狀態", - "atmosTestHlsAtmos": "Apple Atmos 串流", - "atmosTestHlsAtmosDescription": "已知正常的 Dolby Atmos 串流。擴大機應顯示 Dolby Atmos。", - "atmosTestHlsControl": "Apple 環繞音效串流", - "atmosTestHlsControlDescription": "不含 Atmos 的對照組串流。擴大機應顯示一般環繞音效(非 Atmos)。", - "atmosTestRawStream": "原始 EAC3 串流", - "atmosTestRawStreamDescription": "以與播放器播放 Atmos 完全相同的方式串流測試檔案。需要測試檔案的 URL。", - "atmosTestRawFile": "原始 EAC3 檔案", - "atmosTestRawFileDescription": "以已知長度播放測試檔案。需要測試檔案的 URL。", - "atmosTestAsbarNative": "取樣緩衝渲染器(原生)", - "atmosTestAsbarNativeDescription": "將檔案未經更動的壓縮音訊直接交給系統渲染器。需要測試檔案 URL。", - "atmosTestAsbarGenerated": "取樣緩衝渲染器(重建)", - "atmosTestAsbarGeneratedDescription": "相同,但音訊描述以播放時的方式重建。需要測試檔案 URL。", - "atmosTestSessionMode": "使用影片播放工作階段模式", - "atmosTestSessionModeDescription": "關閉時使用 Dolby 文件所述的模式。開啟時使用先前的模式。", - "atmosTestShowRoutePicker": "選擇 AirPlay 輸出", - "atmosTestHideRoutePicker": "隱藏 AirPlay 輸出選擇器", - "atmosTestRoutePickerDescription": "將測試傳送到 AirPlay 接收器。只有 AirPlay 會回報已確定的音訊模式。", - "atmosTestStop": "停止測試", - "atmosTestUrl": "測試檔案 URL", - "atmosTestUrlDescription": "原始 .ec3 Dolby Atmos 檔案的 HTTP URL(例如使用 ffmpeg 提取的檔案)", - "atmosTestUrlMissing": "請先設定測試檔案的 URL", - "atmosTestStatus": "狀態", "dvConversionMode": "Dolby Vision 轉換模式", "dvConversionModeDescription": "選擇 ExoPlayer 如何處理 Dolby Vision Profile 7 檔案。", "dvConversionAuto": "自動", diff --git a/lib/i18n/zh.i18n.json b/lib/i18n/zh.i18n.json index 7afebd1b..89960b3a 100644 --- a/lib/i18n/zh.i18n.json +++ b/lib/i18n/zh.i18n.json @@ -300,30 +300,6 @@ "downmixCenterBoostShort": "dB", "audioDownmixNormalize": "下混时音量标准化", "audioDownmixNormalizeDescription": "降低混音电平以防止削波。关闭可保持原始音量(大音量场景可能失真)。", - "atmosDiagnostics": "Atmos 输出测试", - "atmosDiagnosticsDescription": "通过系统播放器播放测试信号,诊断 Dolby Atmos 输出", - "atmosTestHlsAtmos": "Apple Atmos 流", - "atmosTestHlsAtmosDescription": "已知正常的 Dolby Atmos 流。功放应显示 Dolby Atmos。", - "atmosTestHlsControl": "Apple 环绕声流", - "atmosTestHlsControlDescription": "不含 Atmos 的对照流。功放应显示不带 Atmos 的环绕声。", - "atmosTestRawStream": "原始 EAC3 流", - "atmosTestRawStreamDescription": "以与播放器内 Atmos 播放完全相同的方式流式传输测试文件。需要测试文件 URL。", - "atmosTestRawFile": "原始 EAC3 文件", - "atmosTestRawFileDescription": "以已知长度播放测试文件。需要测试文件 URL。", - "atmosTestAsbarNative": "采样缓冲渲染器(原生)", - "atmosTestAsbarNativeDescription": "将文件未经改动的压缩音频直接交给系统渲染器。需要测试文件 URL。", - "atmosTestAsbarGenerated": "采样缓冲渲染器(重建)", - "atmosTestAsbarGeneratedDescription": "相同,但音频描述按播放时的方式重建。需要测试文件 URL。", - "atmosTestSessionMode": "使用影片播放会话模式", - "atmosTestSessionModeDescription": "关闭时使用 Dolby 文档所述的模式。开启时使用先前的模式。", - "atmosTestShowRoutePicker": "选择 AirPlay 输出", - "atmosTestHideRoutePicker": "隐藏 AirPlay 输出选择器", - "atmosTestRoutePickerDescription": "将测试发送到 AirPlay 接收器。只有 AirPlay 会报告已确定的音频模式。", - "atmosTestStop": "停止测试", - "atmosTestUrl": "测试文件 URL", - "atmosTestUrlDescription": "原始 .ec3 Dolby Atmos 文件的 HTTP URL(例如用 ffmpeg 提取)", - "atmosTestUrlMissing": "请先设置测试文件 URL", - "atmosTestStatus": "状态", "dvConversionMode": "Dolby Vision 转换", "dvConversionModeDescription": "选择 ExoPlayer 如何处理 Dolby Vision Profile 7 文件。", "dvConversionAuto": "自动", diff --git a/lib/screens/settings/atmos_diagnostics_screen.dart b/lib/screens/settings/atmos_diagnostics_screen.dart deleted file mode 100644 index 2c3c2d17..00000000 --- a/lib/screens/settings/atmos_diagnostics_screen.dart +++ /dev/null @@ -1,230 +0,0 @@ -import 'dart:async'; - -import 'package:flutter/material.dart'; -import 'package:flutter/services.dart'; -import 'package:material_symbols_icons/symbols.dart'; - -import '../../i18n/strings.g.dart'; -import '../../services/settings_service.dart'; -import '../../utils/dialogs.dart'; -import '../../utils/snackbar_helper.dart'; -import '../../widgets/setting_tile.dart'; -import '../../widgets/settings_builder.dart'; -import '../../widgets/settings_page.dart'; -import '../../widgets/settings_section.dart'; - -/// #1300 diagnostics: plays known test signals through a bare AVPlayer (via -/// the native AtmosProbe plugin) so a tester can read the receiver's format -/// display per test and isolate where Atmos output breaks. -class AtmosDiagnosticsScreen extends StatefulWidget { - const AtmosDiagnosticsScreen({super.key}); - - @override - State createState() => _AtmosDiagnosticsScreenState(); -} - -class _AtmosDiagnosticsScreenState extends State { - static const _channel = MethodChannel('plezy/atmos_probe'); - - Timer? _poll; - Map _status = const {}; - String? _activeMode; - bool _stopping = false; - bool _routePickerVisible = false; - - @override - void initState() { - super.initState(); - _poll = Timer.periodic(const Duration(seconds: 1), (_) => _refreshStatus()); - _refreshStatus(); - } - - @override - void dispose() { - _poll?.cancel(); - if (!_stopping) _channel.invokeMethod('stop').ignore(); - super.dispose(); - } - - Future _refreshStatus() async { - try { - final status = await _channel.invokeMethod>('getStatus'); - if (mounted && status != null) setState(() => _status = status); - } on PlatformException { - // native side unavailable (non-Apple build); leave the status empty - } - } - - /// AirPlay is the only route where the system resolves `renderingMode` and - /// `supportedOutputChannelLayouts`, so the picker is what makes those arms of - /// the matrix testable. - Future _toggleRoutePicker() async { - final next = !_routePickerVisible; - try { - await _channel.invokeMethod(next ? 'showRoutePicker' : 'hideRoutePicker'); - if (!mounted) return; - setState(() => _routePickerVisible = next); - } on PlatformException catch (e) { - if (mounted) showErrorSnackBar(context, e.message ?? e.code); - } - } - - Future _start(String mode) async { - const urlModes = {'rawEc3', 'rawEc3Finite', 'asbarNative', 'asbarGenerated'}; - final needsUrl = urlModes.contains(mode); - final url = SettingsService.instance.read(SettingsService.atmosProbeUrl); - if (needsUrl && url.isEmpty) { - showAppSnackBar(context, t.settings.atmosTestUrlMissing); - return; - } - try { - await _channel.invokeMethod('start', { - 'mode': mode, - if (needsUrl) 'url': url, - 'sessionMode': SettingsService.instance.read(SettingsService.atmosProbeMoviePlaybackMode) - ? 'moviePlayback' - : 'default', - }); - if (!mounted) return; - setState(() => _activeMode = mode); - } on PlatformException catch (e) { - if (mounted) showErrorSnackBar(context, e.message ?? e.code); - } - await _refreshStatus(); - } - - Future _stop() async { - if (_stopping) return; - _stopping = true; - try { - await _channel.invokeMethod('stop'); - if (!mounted) return; - setState(() => _activeMode = null); - await _refreshStatus(); - } on PlatformException catch (e) { - if (mounted) showErrorSnackBar(context, e.message ?? e.code); - } finally { - _stopping = false; - } - } - - Widget _testTile({required String mode, required IconData icon, required String title, required String subtitle}) { - final active = _activeMode == mode; - return SettingNavigationTile( - icon: icon, - title: title, - subtitle: subtitle, - trailingIcon: active ? Symbols.graphic_eq_rounded : Symbols.play_arrow_rounded, - onTap: () => _start(mode), - ); - } - - @override - Widget build(BuildContext context) { - final statusText = _status.entries.map((e) => '${e.key}: ${e.value}').join('\n'); - - return SettingsPage( - title: Text(t.settings.atmosDiagnostics), - children: [ - SettingsGroup( - children: [ - _testTile( - mode: 'hlsAtmos', - icon: Symbols.spatial_audio_rounded, - title: t.settings.atmosTestHlsAtmos, - subtitle: t.settings.atmosTestHlsAtmosDescription, - ), - _testTile( - mode: 'hlsControl', - icon: Symbols.surround_sound_rounded, - title: t.settings.atmosTestHlsControl, - subtitle: t.settings.atmosTestHlsControlDescription, - ), - _testTile( - mode: 'rawEc3', - icon: Symbols.stream_rounded, - title: t.settings.atmosTestRawStream, - subtitle: t.settings.atmosTestRawStreamDescription, - ), - _testTile( - mode: 'rawEc3Finite', - icon: Symbols.audio_file_rounded, - title: t.settings.atmosTestRawFile, - subtitle: t.settings.atmosTestRawFileDescription, - ), - _testTile( - mode: 'asbarNative', - icon: Symbols.graphic_eq_rounded, - title: t.settings.atmosTestAsbarNative, - subtitle: t.settings.atmosTestAsbarNativeDescription, - ), - _testTile( - mode: 'asbarGenerated', - icon: Symbols.tune_rounded, - title: t.settings.atmosTestAsbarGenerated, - subtitle: t.settings.atmosTestAsbarGeneratedDescription, - ), - SettingNavigationTile( - icon: Symbols.airplay_rounded, - title: _routePickerVisible ? t.settings.atmosTestHideRoutePicker : t.settings.atmosTestShowRoutePicker, - subtitle: t.settings.atmosTestRoutePickerDescription, - onTap: _toggleRoutePicker, - ), - SettingSwitchTile( - pref: SettingsService.atmosProbeMoviePlaybackMode, - icon: Symbols.tv_options_input_settings_rounded, - title: t.settings.atmosTestSessionMode, - subtitle: t.settings.atmosTestSessionModeDescription, - ), - SettingNavigationTile( - icon: Symbols.stop_circle_rounded, - title: t.settings.atmosTestStop, - trailingIcon: Symbols.stop_rounded, - onTap: _stop, - ), - ], - ), - SettingsGroup( - children: [ - SettingValueBuilder( - pref: SettingsService.atmosProbeUrl, - builder: (context, value, _) => SettingNavigationTile( - icon: Symbols.link_rounded, - title: t.settings.atmosTestUrl, - subtitle: value.isEmpty ? t.settings.atmosTestUrlDescription : value, - onTap: () async { - final result = await showTextInputDialog( - context, - title: t.settings.atmosTestUrl, - labelText: 'URL', - initialValue: value, - allowEmpty: true, - ); - if (result != null) { - await SettingsService.instance.write(SettingsService.atmosProbeUrl, result.trim()); - } - }, - ), - ), - ], - ), - SettingsGroup( - title: t.settings.atmosTestStatus, - children: [ - Padding( - padding: const EdgeInsets.all(16), - child: SizedBox( - width: double.infinity, - child: Text( - statusText.isEmpty ? '—' : statusText, - style: Theme.of(context).textTheme.bodySmall?.copyWith(fontFamily: 'monospace'), - ), - ), - ), - ], - ), - const SizedBox(height: 24), - ], - ); - } -} diff --git a/lib/screens/settings/playback_settings_screen.dart b/lib/screens/settings/playback_settings_screen.dart index b7f59f47..e0a7d377 100644 --- a/lib/screens/settings/playback_settings_screen.dart +++ b/lib/screens/settings/playback_settings_screen.dart @@ -18,7 +18,6 @@ import '../../widgets/setting_tile.dart'; import '../../widgets/settings_builder.dart'; import '../../widgets/settings_page.dart'; import '../../widgets/settings_section.dart'; -import 'atmos_diagnostics_screen.dart'; import 'external_player_screen.dart'; import 'mpv_config_screen.dart'; import 'settings_utils.dart'; @@ -88,7 +87,6 @@ class _PlaybackSettingsScreenState extends State { _audioDownmixTile(), if (downmixOn) _downmixCenterBoostTile(), if (downmixOn) _downmixNormalizeTile(), - if (PlatformDetector.isAppleTV()) _atmosDiagnosticsTile(), if (exoActive) _dvConversionModeTile(), _bufferSizeTile(), if (exoActive) _playbackBufferTile(), @@ -369,13 +367,6 @@ class _PlaybackSettingsScreenState extends State { subtitle: t.settings.audioDownmixNormalizeDescription, ); - Widget _atmosDiagnosticsTile() => SettingNavigationTile( - icon: Symbols.spatial_audio_rounded, - title: t.settings.atmosDiagnostics, - subtitle: t.settings.atmosDiagnosticsDescription, - destinationBuilder: (_) => const AtmosDiagnosticsScreen(), - ); - // Visibility for this and the three tiles below is decided by the hoisted // SettingsBuilder in build(). Widget _displaySwitchDelayTile() => SettingNumberTile( diff --git a/lib/services/settings_service.dart b/lib/services/settings_service.dart index 3feec81a..c045dfd6 100644 --- a/lib/services/settings_service.dart +++ b/lib/services/settings_service.dart @@ -338,13 +338,6 @@ class SettingsService extends BaseSharedPreferencesService { static const String defaultCreditsPattern = r'(?:^|\b)(?:outro|closing|credits?|ending)(?:\b|$)|^ed(?:\s?\d+)?$'; static const enableDebugLogging = BoolPref('enable_debug_logging', onWrite: setLoggerLevel); - // Source URL for the Apple TV Atmos diagnostics screen; deliberately not - // resettable so a tester keeps it across "Reset All Settings". - static const atmosProbeUrl = StringPref('atmos_probe_url', defaultValue: ''); - // Session-mode A/B for the Atmos diagnostics screen. Off = the mode Dolby's - // application guide prescribes; on = the mode the audio output used before. - // Not resettable, for the same reason as the URL above. - static const atmosProbeMoviePlaybackMode = BoolPref('atmos_probe_movie_playback_mode'); static const crashReporting = BoolPref('crash_reporting', defaultValue: true); static const enableHardwareDecoding = BoolPref('enable_hardware_decoding', defaultValue: true); static const enableHDR = BoolPref('enable_hdr', defaultValue: true); diff --git a/shared/apple/AtmosProbe/AtmosProbePlugin.swift b/shared/apple/AtmosProbe/AtmosProbePlugin.swift deleted file mode 100644 index 967904c2..00000000 --- a/shared/apple/AtmosProbe/AtmosProbePlugin.swift +++ /dev/null @@ -1,1097 +0,0 @@ -import AVFoundation -import Flutter -import Foundation -#if os(iOS) || os(tvOS) - import AVKit - import UIKit -#endif - -/// Diagnostics harness for #1300: plays known assets through a bare AVPlayer -/// or through a bare AVSampleBufferAudioRenderer so a tester can read the -/// receiver's format display per test. -/// -/// Modes: -/// - hlsAtmos: Apple's public fMP4 Atmos example stream (device+AVR+MAT baseline) -/// - hlsControl: Apple's public EC3 5.1 (non-JOC) example stream (control) -/// - rawEc3: raw .ec3 elementary stream via AVAssetResourceLoader with an -/// unbounded content length — a faithful rehearsal of the mpv -/// AVPlayer audio sink's feeding model -/// - rawEc3Finite: same loader but passing through the real content length, -/// isolating "loader trick" failures from "raw ES" failures -/// - asbarNative: the decisive arm. Reads the asset with AVAssetReader at -/// `outputSettings: nil` and hands the resulting *native* -/// compressed CMSampleBuffers and *native* CMFormatDescription -/// straight to AVSampleBufferAudioRenderer, following Apple's -/// flexible enhanced buffering sequence. No mpv, no FFmpeg -/// spdif muxer, no generated ASBD, no hand-built dec3. If this -/// reaches Atmos, the production sink has a construction bug; -/// if it does not, AVSampleBufferAudioRenderer cannot carry -/// JOC on this route and the architecture must change. -/// - asbarGenerated: same feed, but the format description is rebuilt the way -/// the mpv AO builds it (generated ASBD + dec3 magic cookie + -/// MPEG_5_1_C layout). A/B against asbarNative isolates -/// descriptor construction from everything else. -public class AtmosProbePlugin: NSObject, FlutterPlugin { - private static let hlsAtmosUrl = - "https://devstreaming-cdn.apple.com/videos/streaming/examples/adv_dv_atmos/main.m3u8" - private static let hlsControlUrl = - "https://devstreaming-cdn.apple.com/videos/streaming/examples/bipbop_adv_example_hevc/master.m3u8" - - private var player: AVPlayer? - private var loader: RawEc3Loader? - private var asbar: AsbarProbe? - #if os(iOS) || os(tvOS) - private var routePicker: AVRoutePickerView? - #endif - - public static func register(with registrar: FlutterPluginRegistrar) { - let channel = FlutterMethodChannel( - name: "plezy/atmos_probe", binaryMessenger: registrar.messenger()) - let instance = AtmosProbePlugin() - registrar.addMethodCallDelegate(instance, channel: channel) - } - - public func handle(_ call: FlutterMethodCall, result: @escaping FlutterResult) { - switch call.method { - case "start": - guard let args = call.arguments as? [String: Any], - let mode = args["mode"] as? String - else { - result(FlutterError(code: "bad_args", message: "mode required", details: nil)) - return - } - start( - mode: mode, url: args["url"] as? String, - sessionMode: args["sessionMode"] as? String, result: result) - case "stop": - stopPlayback() - result(nil) - case "showRoutePicker": - result(setRoutePickerVisible(true)) - case "hideRoutePicker": - result(setRoutePickerVisible(false)) - case "getStatus": - result(status()) - default: - result(FlutterMethodNotImplemented) - } - } - - private func start( - mode: String, url: String?, sessionMode: String?, - result: @escaping FlutterResult - ) { - stopPlayback() - - let item: AVPlayerItem - switch mode { - case "hlsAtmos", "hlsControl": - let raw = mode == "hlsAtmos" ? Self.hlsAtmosUrl : Self.hlsControlUrl - guard let streamUrl = URL(string: raw) else { - result(FlutterError(code: "bad_url", message: raw, details: nil)) - return - } - item = AVPlayerItem(url: streamUrl) - case "rawEc3", "rawEc3Finite": - guard let source = url.flatMap(URL.init(string:)) else { - result(FlutterError(code: "bad_url", message: "rawEc3 needs a source url", details: nil)) - return - } - let loader = RawEc3Loader(source: source, finiteLength: mode == "rawEc3Finite") - self.loader = loader - item = AVPlayerItem(asset: loader.asset) - item.preferredForwardBufferDuration = 1.0 - loader.begin() - case "asbarNative", "asbarGenerated": - guard let source = url.flatMap(URL.init(string:)) else { - result( - FlutterError(code: "bad_url", message: "\(mode) needs a source url", details: nil)) - return - } - let probe = AsbarProbe( - source: source, - regenerateFormatDescription: mode == "asbarGenerated", - // Dolby's Figure 1 prescribes mode .default; .moviePlayback is what - // the shipping AO used. Selectable so the tester can A/B it. - sessionMode: sessionMode == "moviePlayback" ? .moviePlayback : .default) - asbar = probe - probe.start { error in - if let error { - result(FlutterError(code: "asbar_failed", message: error, details: nil)) - } else { - result(nil) - } - } - return - default: - result(FlutterError(code: "bad_mode", message: mode, details: nil)) - return - } - - let player = AVPlayer(playerItem: item) - player.automaticallyWaitsToMinimizeStalling = false - // Must stay true: the route picker exists so these arms can be compared - // against the sample-buffer arms on an AirPlay destination, and AirPlay is - // the only route where the system resolves renderingMode and - // supportedOutputChannelLayouts. Pinning playback local would leave the - // AVPlayer controls on HDMI while the picker moved everything else. - player.allowsExternalPlayback = true - self.player = player - player.play() - result(nil) - } - - /// Dolby's flow opens with an AVRoutePickerView so the tester can move - /// playback to an AirPlay destination. That matters here beyond conformance: - /// AVRoutePickerView.h states media from an AVSampleBufferAudioRenderer can - /// be routed to AirPlay on tvOS, and AirPlay is the only route where - /// `renderingMode` and `supportedOutputChannelLayouts` actually resolve — so - /// this is what makes the AirPlay arm of the test matrix reachable from the - /// device. - private func setRoutePickerVisible(_ visible: Bool) -> Bool { - #if os(iOS) || os(tvOS) - guard visible else { - routePicker?.removeFromSuperview() - routePicker = nil - return true - } - if routePicker != nil { return true } - guard let window = Self.keyWindow() else { return false } - let picker = AVRoutePickerView() - picker.translatesAutoresizingMaskIntoConstraints = false - window.addSubview(picker) - NSLayoutConstraint.activate([ - picker.centerXAnchor.constraint(equalTo: window.centerXAnchor), - picker.bottomAnchor.constraint(equalTo: window.centerYAnchor, constant: -40), - picker.widthAnchor.constraint(equalToConstant: 120), - picker.heightAnchor.constraint(equalToConstant: 80), - ]) - routePicker = picker - window.setNeedsFocusUpdate() - window.updateFocusIfNeeded() - return true - #else - return false - #endif - } - - #if os(iOS) || os(tvOS) - private static func keyWindow() -> UIWindow? { - UIApplication.shared.connectedScenes - .compactMap { $0 as? UIWindowScene } - .flatMap(\.windows) - .first { $0.isKeyWindow } - ?? UIApplication.shared.connectedScenes - .compactMap { $0 as? UIWindowScene } - .flatMap(\.windows) - .first - } - #endif - - private func stopPlayback() { - player?.pause() - player?.replaceCurrentItem(with: nil) - player = nil - loader?.cancel() - loader = nil - asbar?.cancel() - asbar = nil - _ = setRoutePickerVisible(false) - // Run isolation: never let a failed compressed route leak into the next - // variant or into other apps. - try? AVAudioSession.sharedInstance().setActive( - false, options: .notifyOthersOnDeactivation) - } - - private func status() -> [String: Any] { - var out: [String: Any] = [:] - - let session = AVAudioSession.sharedInstance() - out["maxOutputChannels"] = session.maximumOutputNumberOfChannels - out["outputLatencyMs"] = Int(session.outputLatency * 1000) - out["route"] = session.currentRoute.outputs.map { port in - "\(port.portType.rawValue)/\(port.portName)/\(port.channels?.count ?? 0)ch" - }.joined(separator: ", ") - out["sessionCategory"] = session.category.rawValue - out["sessionMode"] = session.mode.rawValue - out["routeSharingPolicy"] = session.routeSharingPolicy.rawValue - out["categoryOptions"] = session.categoryOptions.rawValue - if #available(iOS 17.2, tvOS 17.2, *) { - out["renderingMode"] = String(describing: session.renderingMode) - out["renderingModeRawValue"] = session.renderingMode.rawValue - // Empty on HDMI by design (CarPlay/AirPlay only). Reported so a tester - // can tell "empty because HDMI" from "empty because inactive". - out["supportedOutputChannelLayouts"] = session.supportedOutputChannelLayouts.map { - String(format: "0x%08x/%uch", $0.layoutTag, $0.channelCount) - }.joined(separator: ", ") - } - - if let asbar { - out.merge(asbar.statusSnapshot()) { _, new in new } - return out - } - - guard let player = player else { - out["state"] = "idle" - return out - } - - let item = player.currentItem - out["state"] = - switch player.timeControlStatus { - case .paused: "paused" - case .waitingToPlayAtSpecifiedRate: - "waiting(\(player.reasonForWaitingToPlay?.rawValue ?? "-"))" - case .playing: "playing" - @unknown default: "unknown" - } - out["itemStatus"] = - switch item?.status { - case .readyToPlay: "readyToPlay" - case .failed: "failed" - default: "unknown" - } - if let error = item?.error as NSError? { - out["error"] = "\(error.domain):\(error.code) \(error.localizedDescription)" - } - if let item = item { - out["currentTime"] = CMTimeGetSeconds(item.currentTime()) - out["tracks"] = item.tracks.compactMap { track -> String? in - guard let assetTrack = track.assetTrack else { return nil } - let formats = (assetTrack.formatDescriptions as! [CMFormatDescription]).map { desc in - fourCC(CMFormatDescriptionGetMediaSubType(desc)) - }.joined(separator: "+") - return "\(assetTrack.mediaType.rawValue):\(formats)" - }.joined(separator: ", ") - } - if let loader = loader { - let snapshot = loader.statusSnapshot() - out["fedBytes"] = snapshot.bytesReceived - out["loaderRequests"] = snapshot.requestLog - out["loaderRetainedBytes"] = snapshot.retainedBytes - out["loaderPendingRequests"] = snapshot.pendingRequestCount - out["loaderMaximumBytes"] = snapshot.maximumBufferedBytes - if let errorCode = snapshot.errorCode { - out["loaderError"] = errorCode - } - } - return out - } - - private func fourCC(_ code: FourCharCode) -> String { - let bytes = [ - UInt8((code >> 24) & 0xFF), UInt8((code >> 16) & 0xFF), - UInt8((code >> 8) & 0xFF), UInt8(code & 0xFF), - ] - return String(bytes: bytes, encoding: .ascii) ?? String(code) - } -} - -/// Streams an HTTP source into memory and serves it to AVPlayer through an -/// AVAssetResourceLoader on a custom scheme, mirroring the mpv sink's model. -final class RawEc3Loader: NSObject, AVAssetResourceLoaderDelegate, URLSessionDataDelegate { - static let defaultMaximumBufferedBytes = 64 * 1_024 * 1_024 - private static let maximumPendingRequests = 256 - - struct StatusSnapshot { - let bytesReceived: Int - let requestLog: String - let retainedBytes: Int - let pendingRequestCount: Int - let maximumBufferedBytes: Int - let errorCode: String? - let isFinished: Bool - } - - private enum State { - case active - case finished - case failed(code: String, error: Error) - case cancelled - - var terminalError: Error? { - switch self { - case .failed(_, let error): - return error - case .cancelled: - return URLError(.cancelled) - case .active, .finished: - return nil - } - } - - var errorCode: String? { - if case .failed(let code, _) = self { return code } - return nil - } - - var isFinished: Bool { - if case .finished = self { return true } - return false - } - } - - let asset: AVURLAsset - let maximumBufferedBytes: Int - private let source: URL - private let finiteLength: Bool - private let sessionConfiguration: URLSessionConfiguration - private let queue = DispatchQueue(label: "plezy.atmos.probe.loader") - private var terminalHandlerForTesting: (() -> Void)? - private let queueKey = DispatchSpecificKey() - private var session: URLSession? - private var buffer = Data() - private var contentLength: Int64 = -1 - private var state: State = .active - private var pending: [AVAssetResourceLoadingRequest] = [] - private var bytesReceived = 0 - private var requestLog = "" - private var hasBegun = false - - init( - source: URL, - finiteLength: Bool, - maximumBufferedBytes: Int = RawEc3Loader.defaultMaximumBufferedBytes, - sessionConfiguration: URLSessionConfiguration = .default, - terminalHandlerForTesting: (() -> Void)? = nil - ) { - precondition(maximumBufferedBytes > 0) - self.source = source - self.finiteLength = finiteLength - self.maximumBufferedBytes = maximumBufferedBytes - self.sessionConfiguration = sessionConfiguration - self.terminalHandlerForTesting = terminalHandlerForTesting - self.asset = AVURLAsset(url: URL(string: "plezy-ec3-probe://stream/audio.ec3")!) - super.init() - queue.setSpecific(key: queueKey, value: ()) - asset.resourceLoader.setDelegate(self, queue: queue) - } - - func begin() { - queue.async { [weak self] in - guard let self, !self.hasBegun else { return } - guard case .active = self.state else { return } - self.hasBegun = true - let session = URLSession( - configuration: self.sessionConfiguration, - delegate: self, - delegateQueue: nil - ) - self.session = session - session.dataTask(with: self.source).resume() - } - } - - func cancel() { - queue.async { [weak self] in - self?.cancelOnQueue() - } - } - - /// Called only from the method-channel/main path, never from the loader queue. - func statusSnapshot() -> StatusSnapshot { - syncOnQueue { - StatusSnapshot( - bytesReceived: bytesReceived, - requestLog: requestLog, - retainedBytes: buffer.count, - pendingRequestCount: pending.count, - maximumBufferedBytes: maximumBufferedBytes, - errorCode: state.errorCode, - isFinished: state.isFinished - ) - } - } - - private func syncOnQueue(_ body: () -> T) -> T { - if DispatchQueue.getSpecific(key: queueKey) != nil { - return body() - } - return queue.sync(execute: body) - } - - private func notifyTerminalForTesting() { - let handler = terminalHandlerForTesting - terminalHandlerForTesting = nil - handler?() - } - - private func cancelOnQueue() { - guard case .active = state else { - if case .finished = state { - state = .cancelled - finishPending(with: URLError(.cancelled)) - releaseRetainedBytes() - } - return - } - state = .cancelled - session?.invalidateAndCancel() - session = nil - finishPending(with: URLError(.cancelled)) - releaseRetainedBytes() - notifyTerminalForTesting() - } - - private func failOnQueue(code: String, error: Error) { - guard case .active = state else { return } - state = .failed(code: code, error: error) - session?.invalidateAndCancel() - session = nil - finishPending(with: error) - releaseRetainedBytes() - notifyTerminalForTesting() - } - - private func finishPending(with error: Error) { - let requests = pending - pending.removeAll(keepingCapacity: false) - for request in requests where !request.isFinished { - request.finishLoading(with: error) - } - } - - private func releaseRetainedBytes() { - buffer.removeAll(keepingCapacity: false) - } - - // MARK: URLSessionDataDelegate (background queue -> hop to `queue`) - - func urlSession( - _ session: URLSession, - dataTask: URLSessionDataTask, - didReceive response: URLResponse, - completionHandler: @escaping (URLSession.ResponseDisposition) -> Void - ) { - queue.async { [weak self] in - guard let self, case .active = self.state else { return } - self.contentLength = response.expectedContentLength - if response.expectedContentLength > Int64(self.maximumBufferedBytes) { - self.failOnQueue( - code: "response_too_large", - error: URLError(.dataLengthExceedsMaximum) - ) - } else { - self.serve() - } - } - completionHandler(.allow) - } - - func urlSession(_ session: URLSession, dataTask: URLSessionDataTask, didReceive data: Data) { - queue.async { [weak self] in - guard let self, case .active = self.state else { return } - guard data.count <= self.maximumBufferedBytes - self.buffer.count else { - self.failOnQueue( - code: "response_too_large", - error: URLError(.dataLengthExceedsMaximum) - ) - return - } - self.buffer.append(data) - self.bytesReceived += data.count - self.serve() - } - } - - func urlSession(_ session: URLSession, task: URLSessionTask, didCompleteWithError error: Error?) { - queue.async { [weak self] in - guard let self, case .active = self.state else { return } - self.session = nil - if let error { - self.state = .failed(code: "network_error", error: error) - self.finishPending(with: error) - self.releaseRetainedBytes() - } else { - self.state = .finished - self.serve() - } - self.notifyTerminalForTesting() - session.finishTasksAndInvalidate() - } - } - - // MARK: AVAssetResourceLoaderDelegate (on `queue`) - - func resourceLoader( - _ resourceLoader: AVAssetResourceLoader, - shouldWaitForLoadingOfRequestedResource loadingRequest: AVAssetResourceLoadingRequest - ) -> Bool { - if let terminalError = state.terminalError { - loadingRequest.finishLoading(with: terminalError) - return true - } - guard pending.count < Self.maximumPendingRequests else { - loadingRequest.finishLoading(with: URLError(.resourceUnavailable)) - return true - } - if let dataRequest = loadingRequest.dataRequest { - requestLog += "[\(dataRequest.requestedOffset)+\(dataRequest.requestedLength)]" - if requestLog.count > 300 { requestLog = String(requestLog.suffix(300)) } - } - pending.append(loadingRequest) - serve() - return true - } - - func resourceLoader( - _ resourceLoader: AVAssetResourceLoader, - didCancel loadingRequest: AVAssetResourceLoadingRequest - ) { - pending.removeAll { $0 === loadingRequest } - } - - private func serve() { - let isFinished: Bool - switch state { - case .active: - isFinished = false - case .finished: - isFinished = true - case .failed, .cancelled: - return - } - - // The logical 1-TiB length remains the raw probe contract. Retained bytes - // are independently bounded by maximumBufferedBytes. - let knownLength: Int64? = - finiteLength - ? (contentLength >= 0 ? contentLength : (isFinished ? Int64(buffer.count) : nil)) - : Int64(1) << 40 - - var index = 0 - while index < pending.count { - let request = pending[index] - if let info = request.contentInformationRequest { - guard let length = knownLength else { - index += 1 - continue - } - info.contentType = "public.enhanced-ac3-audio" - info.contentLength = length - info.isByteRangeAccessSupported = true - if request.dataRequest == nil { - request.finishLoading() - pending.remove(at: index) - continue - } - } - guard let dataRequest = request.dataRequest else { - index += 1 - continue - } - - let requestedOffset = dataRequest.requestedOffset - let currentOffset = dataRequest.currentOffset - let requestedLength = Int64(dataRequest.requestedLength) - let (end, overflow) = requestedOffset.addingReportingOverflow(requestedLength) - guard requestedOffset >= 0, currentOffset >= requestedOffset, requestedLength >= 0, !overflow else { - request.finishLoading(with: URLError(.badServerResponse)) - pending.remove(at: index) - continue - } - - let bufferedCount = Int64(buffer.count) - if currentOffset < bufferedCount { - let chunkEnd = min(bufferedCount, end) - guard currentOffset <= chunkEnd, - let start = Int(exactly: currentOffset), - let finish = Int(exactly: chunkEnd) - else { - request.finishLoading(with: URLError(.badServerResponse)) - pending.remove(at: index) - continue - } - dataRequest.respond(with: buffer.subdata(in: start..= end - || (isFinished && dataRequest.currentOffset >= bufferedCount) - { - request.finishLoading() - pending.remove(at: index) - continue - } - index += 1 - } - } -} - -/// Feeds compressed E-AC-3 access units to a bare `AVSampleBufferAudioRenderer` -/// using Apple's flexible enhanced buffering sequence. -/// -/// This is deliberately the shortest possible path from file bytes to the -/// system decoder: `AVAssetReader` at `outputSettings: nil` yields the native -/// compressed sample buffers and the native `CMFormatDescription` that -/// AVFoundation itself would use. Nothing else touches the data, so a failure -/// here is a property of the renderer, not of our packetization. -final class AsbarProbe: NSObject { - private static var statusContext = 0 - - private let source: URL - private let regenerateFormatDescription: Bool - private let sessionMode: AVAudioSession.Mode - private let queue = DispatchQueue( - label: "plezy.atmos.probe.asbar", qos: .userInitiated) - private let lock = NSLock() - - private var renderer: AVSampleBufferAudioRenderer? - private var synchronizer: AVSampleBufferRenderSynchronizer? - private var reader: AVAssetReader? - private var output: AVAssetReaderTrackOutput? - private var temporaryFile: URL? - private var download: URLSessionDownloadTask? - private var statusObserved = false - private var cancelled = false - // Guarded by `lock`. Consumed exactly once — by the start path that reaches a - // verdict, by `cancel()`, or by `deinit`, whichever happens first. - private var startCompletion: ((String?) -> Void)? - - // Guarded by `lock`; read from the method-channel thread. - private var enqueuedSamples = 0 - private var nativeDescription = "unknown" - private var usedDescription = "unknown" - private var magicCookieHex = "none" - private var layoutTagText = "none" - private var phase = "starting" - private var failure: String? - - init( - source: URL, regenerateFormatDescription: Bool, sessionMode: AVAudioSession.Mode - ) { - self.source = source - self.regenerateFormatDescription = regenerateFormatDescription - self.sessionMode = sessionMode - super.init() - } - - /// `completion` reports only whether the run could be started. - func start(completion: @escaping (String?) -> Void) { - lock.lock() - startCompletion = completion - let aborted = cancelled - lock.unlock() - if aborted { - finishStart("cancelled") - return - } - - if source.isFileURL { - queue.async { [weak self] in - guard let self else { return } - self.finishStart(self.beginReading(from: self.source)) - } - return - } - - // AVAssetReader needs a seekable local asset; stage the source first. - setPhase("downloading") - let task = URLSession.shared.downloadTask(with: source) { [weak self] url, _, error in - guard let self else { return } // covered by `deinit` - guard let url else { - let message = error?.localizedDescription ?? "download failed" - self.fail(message) - self.finishStart(message) - return - } - // The temporary file is removed as soon as this handler returns. - let staged = FileManager.default.temporaryDirectory - .appendingPathComponent("plezy-asbar-\(UUID().uuidString)") - .appendingPathExtension(self.source.pathExtension.isEmpty ? "eac3" : self.source.pathExtension) - do { - try FileManager.default.moveItem(at: url, to: staged) - } catch { - let message = "failed to stage asset: \(error.localizedDescription)" - self.fail(message) - self.finishStart(message) - return - } - self.lock.lock() - self.temporaryFile = staged - let aborted = self.cancelled - self.lock.unlock() - if aborted { - try? FileManager.default.removeItem(at: staged) - self.finishStart("cancelled") // no-op if `cancel()` already fired - return - } - self.queue.async { - self.finishStart(self.beginReading(from: staged)) - } - } - lock.lock() - download = task - lock.unlock() - task.resume() - } - - func cancel() { - lock.lock() - cancelled = true - let task = download - let staged = temporaryFile - download = nil - temporaryFile = nil - lock.unlock() - task?.cancel() - finishStart("cancelled") - - queue.sync { - if statusObserved, let renderer { - renderer.removeObserver( - self, forKeyPath: "status", context: &AsbarProbe.statusContext) - statusObserved = false - } - renderer?.stopRequestingMediaData() - renderer?.flush() - synchronizer?.rate = 0 - if let renderer, let synchronizer { - synchronizer.removeRenderer(renderer, at: .zero, completionHandler: nil) - } - reader?.cancelReading() - reader = nil - output = nil - renderer = nil - synchronizer = nil - } - if let staged { try? FileManager.default.removeItem(at: staged) } - setPhase("cancelled") - } - - deinit { - // `stopPlayback()` drops the only strong reference (`asbar = nil`), so the - // probe can die with a download still in flight; the handler's - // `guard let self` would then swallow the verdict for good. - finishStart("cancelled") - } - - /// Runs on `queue`. Returns a message on failure. - private func beginReading(from url: URL) -> String? { - lock.lock() - let aborted = cancelled - lock.unlock() - if aborted { return nil } - - let asset = AVURLAsset(url: url) - guard let track = asset.tracks(withMediaType: .audio).first else { - let message = "no audio track in \(url.lastPathComponent)" - fail(message) - return message - } - guard - let nativeFormat = (track.formatDescriptions as? [CMFormatDescription])?.first - else { - let message = "audio track has no format description" - fail(message) - return message - } - describe(nativeFormat) - - let assetReader: AVAssetReader - do { - assetReader = try AVAssetReader(asset: asset) - } catch { - let message = "AVAssetReader init failed: \(error.localizedDescription)" - fail(message) - return message - } - // `nil` output settings is what keeps the samples compressed. - let trackOutput = AVAssetReaderTrackOutput(track: track, outputSettings: nil) - trackOutput.alwaysCopiesSampleData = false - guard assetReader.canAdd(trackOutput) else { - let message = "AVAssetReader rejected a compressed output" - fail(message) - return message - } - assetReader.add(trackOutput) - guard assetReader.startReading() else { - let message = - "AVAssetReader.startReading failed: \(assetReader.error?.localizedDescription ?? "unknown")" - fail(message) - return message - } - - var substituteFormat: CMFormatDescription? - if regenerateFormatDescription { - let rebuilt = Self.regenerate(from: nativeFormat) - guard let format = rebuilt.format else { - let message = rebuilt.error ?? "format regeneration failed" - fail(message) - return message - } - substituteFormat = format - describeUsed(format) - } else { - describeUsed(nativeFormat) - } - - if let message = configureSession() { return message } - - let renderer = AVSampleBufferAudioRenderer() - let synchronizer = AVSampleBufferRenderSynchronizer() - synchronizer.addRenderer(renderer) - // Deliberately NOT disabling delaysRateChangeUntilHasSufficientMediaData: - // the reliable-start preroll is part of the sequence under test. - renderer.addObserver( - self, forKeyPath: "status", options: [.new], context: &AsbarProbe.statusContext) - - self.renderer = renderer - self.synchronizer = synchronizer - self.reader = assetReader - self.output = trackOutput - statusObserved = true - - setPhase("feeding") - // Apple's order: request media first, start the clock after. - renderer.requestMediaDataWhenReady(on: queue) { [weak self] in - self?.pump(substituteFormat: substituteFormat) - } - synchronizer.rate = 1 - return nil - } - - /// Runs on `queue`. - private func pump(substituteFormat: CMFormatDescription?) { - guard let renderer, let output, let reader else { return } - while renderer.isReadyForMoreMediaData { - guard reader.status == .reading, let sample = output.copyNextSampleBuffer() else { - renderer.stopRequestingMediaData() - setPhase(reader.status == .completed ? "finished" : "stopped(\(reader.status.rawValue))") - return - } - let enqueued: CMSampleBuffer - if let substituteFormat { - guard let rewrapped = Self.rewrap(sample, with: substituteFormat) else { - fail("failed to rewrap a sample with the generated description") - renderer.stopRequestingMediaData() - return - } - enqueued = rewrapped - } else { - enqueued = sample - } - renderer.enqueue(enqueued) - lock.lock() - enqueuedSamples += 1 - lock.unlock() - } - } - - private func configureSession() -> String? { - #if os(iOS) || os(tvOS) - let session = AVAudioSession.sharedInstance() - do { - try session.setCategory( - .playback, mode: sessionMode, policy: .longFormAudio, options: []) - } catch { - let message = "long-form session profile rejected: \(error.localizedDescription)" - fail(message) - return message - } - if #available(iOS 15.0, tvOS 15.0, *) { - try? session.setSupportsMultichannelContent(true) - } - do { - try session.setActive(true) - } catch { - let message = "session activation failed: \(error.localizedDescription)" - fail(message) - return message - } - #endif - return nil - } - - override func observeValue( - forKeyPath keyPath: String?, of object: Any?, - change: [NSKeyValueChangeKey: Any]?, context: UnsafeMutableRawPointer? - ) { - guard context == &AsbarProbe.statusContext else { - super.observeValue(forKeyPath: keyPath, of: object, change: change, context: context) - return - } - guard let renderer = object as? AVSampleBufferAudioRenderer, - renderer.status == .failed - else { return } - let error = renderer.error as NSError? - fail( - "renderer failed: \(error?.domain ?? "-"):\(error?.code ?? 0) " - + (error?.localizedDescription ?? "unknown")) - } - - func statusSnapshot() -> [String: Any] { - lock.lock() - defer { lock.unlock() } - var out: [String: Any] = [ - "state": phase, - "asbarEnqueuedSamples": enqueuedSamples, - "asbarNativeFormat": nativeDescription, - "asbarUsedFormat": usedDescription, - "asbarMagicCookie": magicCookieHex, - "asbarChannelLayout": layoutTagText, - ] - if let failure { out["error"] = failure } - if let renderer { - out["asbarRendererStatus"] = - switch renderer.status { - case .unknown: "unknown" - case .rendering: "rendering" - case .failed: "failed" - @unknown default: "unrecognized" - } - } - if let synchronizer { - out["currentTime"] = CMTimeGetSeconds(synchronizer.currentTime()) - } - return out - } - - // MARK: - Format description helpers - - private func describe(_ format: CMFormatDescription) { - let text = Self.summarize(format) - lock.lock() - nativeDescription = text.summary - magicCookieHex = text.cookie - layoutTagText = text.layout - lock.unlock() - } - - private func describeUsed(_ format: CMFormatDescription) { - let text = Self.summarize(format) - lock.lock() - usedDescription = text.summary - lock.unlock() - } - - private static func summarize( - _ format: CMFormatDescription - ) -> (summary: String, cookie: String, layout: String) { - var summary = "subType=\(fourCCText(CMFormatDescriptionGetMediaSubType(format)))" - if let asbd = CMAudioFormatDescriptionGetStreamBasicDescription(format)?.pointee { - summary += - String( - format: " rate=%.0f ch=%u framesPerPacket=%u", asbd.mSampleRate, - asbd.mChannelsPerFrame, asbd.mFramesPerPacket) - } - var cookieSize = 0 - var cookie = "none" - if let bytes = CMAudioFormatDescriptionGetMagicCookie(format, sizeOut: &cookieSize), - cookieSize > 0 - { - cookie = Data(bytes: bytes, count: cookieSize).map { String(format: "%02x", $0) } - .joined() - } - var layoutSize = 0 - var layout = "none" - if let acl = CMAudioFormatDescriptionGetChannelLayout(format, sizeOut: &layoutSize) { - layout = String(format: "0x%08x", acl.pointee.mChannelLayoutTag) - } - return (summary, cookie, layout) - } - - private static func fourCCText(_ code: FourCharCode) -> String { - let bytes = [ - UInt8((code >> 24) & 0xFF), UInt8((code >> 16) & 0xFF), - UInt8((code >> 8) & 0xFF), UInt8(code & 0xFF), - ] - return String(bytes: bytes, encoding: .ascii) ?? String(code) - } - - /// Rebuild the description the way the mpv AO does: same ASBD and magic - /// cookie, but constructed by us rather than parsed out of the container, - /// with the Dolby-order 5.1 layout attached. - private static func regenerate( - from native: CMFormatDescription - ) -> (format: CMFormatDescription?, error: String?) { - guard var asbd = CMAudioFormatDescriptionGetStreamBasicDescription(native)?.pointee else { - return (nil, "native description has no ASBD") - } - var cookieSize = 0 - var cookieBytes: [UInt8] = [] - if let bytes = CMAudioFormatDescriptionGetMagicCookie(native, sizeOut: &cookieSize), - cookieSize > 0 - { - cookieBytes = Array(UnsafeRawBufferPointer(start: bytes, count: cookieSize)) - } - var layout = AudioChannelLayout() - layout.mChannelLayoutTag = - asbd.mChannelsPerFrame == 8 - ? kAudioChannelLayoutTag_MPEG_7_1_C : kAudioChannelLayoutTag_MPEG_5_1_C - - var rebuilt: CMFormatDescription? - let status = cookieBytes.withUnsafeBytes { cookie -> OSStatus in - CMAudioFormatDescriptionCreate( - allocator: kCFAllocatorDefault, - asbd: &asbd, - layoutSize: MemoryLayout.size, - layout: &layout, - magicCookieSize: cookie.count, - magicCookie: cookie.baseAddress, - extensions: nil, - formatDescriptionOut: &rebuilt) - } - guard status == noErr, let rebuilt else { - return (nil, "CMAudioFormatDescriptionCreate failed (\(status))") - } - return (rebuilt, nil) - } - - private static func rewrap( - _ sample: CMSampleBuffer, with format: CMFormatDescription - ) -> CMSampleBuffer? { - guard let blockBuffer = CMSampleBufferGetDataBuffer(sample) else { return nil } - var timing = CMSampleTimingInfo() - guard CMSampleBufferGetSampleTimingInfo(sample, at: 0, timingInfoOut: &timing) == noErr - else { return nil } - var sizeOut = 0 - let sizeStatus = CMSampleBufferGetSampleSizeArray( - sample, entryCount: 0, arrayToFill: nil, entriesNeededOut: &sizeOut) - var sizes = [Int](repeating: 0, count: max(sizeOut, 1)) - if sizeStatus == noErr, sizeOut > 0 { - _ = CMSampleBufferGetSampleSizeArray( - sample, entryCount: sizeOut, arrayToFill: &sizes, entriesNeededOut: nil) - } else { - sizes[0] = CMBlockBufferGetDataLength(blockBuffer) - } - var rewrapped: CMSampleBuffer? - let status = CMSampleBufferCreateReady( - allocator: kCFAllocatorDefault, - dataBuffer: blockBuffer, - formatDescription: format, - sampleCount: CMSampleBufferGetNumSamples(sample), - sampleTimingEntryCount: 1, - sampleTimingArray: &timing, - sampleSizeEntryCount: sizes.count, - sampleSizeArray: &sizes, - sampleBufferOut: &rewrapped) - return status == noErr ? rewrapped : nil - } - - // MARK: - State - - /// Delivers the start verdict at most once, always on the main queue. - /// Never call while holding `lock` (NSLock is not recursive). - private func finishStart(_ message: String?) { - lock.lock() - let completion = startCompletion - startCompletion = nil - lock.unlock() - guard let completion else { return } - // Captures only `completion` and `message` — never `self`, so this is safe - // to call from `deinit`. - DispatchQueue.main.async { completion(message) } - } - - private func setPhase(_ value: String) { - lock.lock() - phase = value - lock.unlock() - } - - private func fail(_ message: String) { - lock.lock() - if failure == nil { failure = message } - phase = "failed" - lock.unlock() - } -} diff --git a/test/screens/settings/atmos_diagnostics_screen_test.dart b/test/screens/settings/atmos_diagnostics_screen_test.dart deleted file mode 100644 index 93ed8d41..00000000 --- a/test/screens/settings/atmos_diagnostics_screen_test.dart +++ /dev/null @@ -1,83 +0,0 @@ -import 'dart:async'; - -import 'package:flutter/material.dart'; -import 'package:flutter/services.dart'; -import 'package:flutter_test/flutter_test.dart'; -import 'package:plezy/i18n/strings.g.dart'; -import 'package:plezy/screens/settings/atmos_diagnostics_screen.dart'; -import 'package:plezy/services/settings_service.dart'; -import 'package:plezy/theme/mono_theme.dart'; - -import '../../test_helpers/prefs.dart'; - -void main() { - TestWidgetsFlutterBinding.ensureInitialized(); - - const channel = MethodChannel('plezy/atmos_probe'); - final messenger = TestDefaultBinaryMessengerBinding.instance.defaultBinaryMessenger; - - setUp(() async { - resetSharedPreferencesForTest(); - SettingsService.resetForTesting(); - await SettingsService.getInstance(); - LocaleSettings.setLocaleSync(AppLocale.en); - }); - - tearDown(() { - messenger.setMockMethodCallHandler(channel, null); - }); - - Future pumpScreen(WidgetTester tester) async { - await tester.pumpWidget(MaterialApp(theme: monoTheme(dark: true), home: const AtmosDiagnosticsScreen())); - await tester.pump(); - // The screen is taller than the test viewport, so the scroll has to settle - // before the stop tile is hit-testable. - await tester.ensureVisible(find.text(t.settings.atmosTestStop)); - await tester.pumpAndSettle(); - } - - testWidgets('unmounting during stop does not set state or stop twice', (tester) async { - final stopCompleter = Completer(); - var stopCalls = 0; - messenger.setMockMethodCallHandler(channel, (call) async { - if (call.method == 'stop') { - stopCalls++; - await stopCompleter.future; - } - return call.method == 'getStatus' ? {} : null; - }); - - await pumpScreen(tester); - await tester.tap(find.text(t.settings.atmosTestStop)); - await tester.pump(); - expect(stopCalls, 1); - - await tester.pumpWidget(const MaterialApp(home: SizedBox())); - expect(stopCalls, 1); - - stopCompleter.complete(); - await tester.pump(); - - expect(tester.takeException(), isNull); - expect(stopCalls, 1); - }); - - testWidgets('native stop failure is shown without escaping', (tester) async { - var stopCalls = 0; - messenger.setMockMethodCallHandler(channel, (call) async { - if (call.method == 'stop') { - stopCalls++; - throw PlatformException(code: 'stop_failed', message: 'Native stop failed'); - } - return call.method == 'getStatus' ? {} : null; - }); - - await pumpScreen(tester); - await tester.tap(find.text(t.settings.atmosTestStop)); - await tester.pump(); - - expect(stopCalls, 1); - expect(find.text('Native stop failed'), findsOneWidget); - expect(tester.takeException(), isNull); - }); -} diff --git a/tvos/Runner.xcodeproj/project.pbxproj b/tvos/Runner.xcodeproj/project.pbxproj index c53695a5..bbb68a2c 100644 --- a/tvos/Runner.xcodeproj/project.pbxproj +++ b/tvos/Runner.xcodeproj/project.pbxproj @@ -26,7 +26,6 @@ 6F3C0DD6F2F8DA14E7E2F386 /* MpvPlayerCore.swift in Sources */ = {isa = PBXBuildFile; fileRef = A12B8610AE5D580077264851 /* MpvPlayerCore.swift */; }; 72B802AB7864268C4439E8FA /* ShelfSources.swift in Sources */ = {isa = PBXBuildFile; fileRef = DC4FE4CC3847E57D0552B366 /* ShelfSources.swift */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; - 7A11A7C50113007825B00A01 /* AtmosProbePlugin.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7A11A7C50113007825B00A02 /* AtmosProbePlugin.swift */; }; 7CE4D37BDCAD02C28DFAF38A /* ShelfItemMapper.swift in Sources */ = {isa = PBXBuildFile; fileRef = C339C20E52A6F6F6725EF31F /* ShelfItemMapper.swift */; }; 81325C1CD13794375A81AC02 /* messages.g.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34CD411CCD84E381C4BF4C1B /* messages.g.swift */; }; 81F08E404EBEB19B00FF148D /* ConnectivityPlusPlugin.swift in Sources */ = {isa = PBXBuildFile; fileRef = 67C3193A50DFDECE2B92D075 /* ConnectivityPlusPlugin.swift */; }; @@ -39,7 +38,6 @@ A2D30F4B4B0761675401921F /* ShelfSources.swift in Sources */ = {isa = PBXBuildFile; fileRef = DC4FE4CC3847E57D0552B366 /* ShelfSources.swift */; }; A5E1F001234567890ABCDE02 /* SystemShelfPluginTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = A5E1F001234567890ABCDE01 /* SystemShelfPluginTests.swift */; }; A7596F780E93AF0BE3838A26 /* ConnectivityProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3CCA7E80F3A99D8759F2E59F /* ConnectivityProvider.swift */; }; - A7A0C001A7A0C001A7A0C002 /* AtmosProbeContractTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = A7A0C001A7A0C001A7A0C001 /* AtmosProbeContractTests.swift */; }; AA34E3E5872B3792D6959EAA /* MpvPipController.swift in Sources */ = {isa = PBXBuildFile; fileRef = A2635E12EB9322B151EE5127 /* MpvPipController.swift */; }; B1D51A6A2F00110000000014 /* MpvAudioPlayerCore.swift in Sources */ = {isa = PBXBuildFile; fileRef = B1D51A6A2F00110000000015 /* MpvAudioPlayerCore.swift */; }; B1D51A6A2F00110000000016 /* MpvAudioPlayerPlugin.swift in Sources */ = {isa = PBXBuildFile; fileRef = B1D51A6A2F00110000000017 /* MpvAudioPlayerPlugin.swift */; }; @@ -118,7 +116,6 @@ 73645904F226A24585A092CE /* MpvPlayerPluginShared.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MpvPlayerPluginShared.swift; path = ../shared/apple/MpvPlayer/MpvPlayerPluginShared.swift; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; - 7A11A7C50113007825B00A02 /* AtmosProbePlugin.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AtmosProbePlugin.swift; path = ../shared/apple/AtmosProbe/AtmosProbePlugin.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; 824D2C68D1F1206932E118C2 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 9165AF55B967D8845D042FE7 /* TopShelfExtension.entitlements */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.entitlements; path = TopShelfExtension.entitlements; sourceTree = ""; }; @@ -137,7 +134,6 @@ A2484B9C94406BF0A99EB64A /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; A2635E12EB9322B151EE5127 /* MpvPipController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MpvPipController.swift; path = ../ios/Runner/MpvPlayer/MpvPipController.swift; sourceTree = ""; }; A5E1F001234567890ABCDE01 /* SystemShelfPluginTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = SystemShelfPluginTests.swift; sourceTree = ""; }; - A7A0C001A7A0C001A7A0C001 /* AtmosProbeContractTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AtmosProbeContractTests.swift; sourceTree = ""; }; B1D51A6A2F00110000000015 /* MpvAudioPlayerCore.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MpvAudioPlayerCore.swift; path = ../shared/apple/MpvPlayer/MpvAudioPlayerCore.swift; sourceTree = ""; }; B1D51A6A2F00110000000017 /* MpvAudioPlayerPlugin.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MpvAudioPlayerPlugin.swift; path = ../shared/apple/MpvPlayer/MpvAudioPlayerPlugin.swift; sourceTree = ""; }; BBCB49C8AE9E90DEF97A87CA /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; @@ -324,7 +320,6 @@ 73645904F226A24585A092CE /* MpvPlayerPluginShared.swift */, B1D51A6A2F00110000000015 /* MpvAudioPlayerCore.swift */, B1D51A6A2F00110000000017 /* MpvAudioPlayerPlugin.swift */, - 7A11A7C50113007825B00A02 /* AtmosProbePlugin.swift */, A12B8610AE5D580077264851 /* MpvPlayerCore.swift */, 9D7A998830EDC8F77BF521D1 /* MpvPlayerPlugin.swift */, A2635E12EB9322B151EE5127 /* MpvPipController.swift */, @@ -360,7 +355,6 @@ children = ( 4F1000014F1000014F100001 /* FlutterNativeTextInputTests.mm */, 2A7C0B1D9E5F4A6381027C11 /* MpvPlayerContractTests.swift */, - A7A0C001A7A0C001A7A0C001 /* AtmosProbeContractTests.swift */, FE6C8125B201A8BC3261AE2B /* TvosEventDeliveryCoordinatorTests.swift */, 934BC4E316D2AC788C954766 /* ConnectivityPlusPluginTests.swift */, A5E1F001234567890ABCDE01 /* SystemShelfPluginTests.swift */, @@ -616,7 +610,6 @@ files = ( 4F1000024F1000024F100002 /* FlutterNativeTextInputTests.mm in Sources */, 2A7C0B1D9E5F4A6381027C12 /* MpvPlayerContractTests.swift in Sources */, - A7A0C001A7A0C001A7A0C002 /* AtmosProbeContractTests.swift in Sources */, D2004D7BB4A40340AB7A01E0 /* TvosEventDeliveryCoordinatorTests.swift in Sources */, 65AC2C222043B3E6723E2076 /* ConnectivityPlusPluginTests.swift in Sources */, A5E1F001234567890ABCDE02 /* SystemShelfPluginTests.swift in Sources */, @@ -633,7 +626,6 @@ 5C71F5F7B33075F2B007825B /* MpvPlayerPluginShared.swift in Sources */, B1D51A6A2F00110000000014 /* MpvAudioPlayerCore.swift in Sources */, B1D51A6A2F00110000000016 /* MpvAudioPlayerPlugin.swift in Sources */, - 7A11A7C50113007825B00A01 /* AtmosProbePlugin.swift in Sources */, 6F3C0DD6F2F8DA14E7E2F386 /* MpvPlayerCore.swift in Sources */, 8E5EED3DDAC9455D4DAA9776 /* MpvPlayerPlugin.swift in Sources */, AA34E3E5872B3792D6959EAA /* MpvPipController.swift in Sources */, diff --git a/tvos/Runner/AppDelegate.swift b/tvos/Runner/AppDelegate.swift index 18ec5676..541c2c03 100644 --- a/tvos/Runner/AppDelegate.swift +++ b/tvos/Runner/AppDelegate.swift @@ -153,9 +153,6 @@ import wakelock_plus if let r = self.registrar(forPlugin: "MpvAudioPlayerPlugin") { MpvAudioPlayerPlugin.register(with: r) } - if let r = self.registrar(forPlugin: "AtmosProbePlugin") { - AtmosProbePlugin.register(with: r) - } if let r = self.registrar(forPlugin: "PackageInfoPlusPlugin") { PackageInfoPlusPlugin.register(with: r) } diff --git a/tvos/RunnerTests/AtmosProbeContractTests.swift b/tvos/RunnerTests/AtmosProbeContractTests.swift deleted file mode 100644 index a455723b..00000000 --- a/tvos/RunnerTests/AtmosProbeContractTests.swift +++ /dev/null @@ -1,61 +0,0 @@ -import Foundation -import XCTest - -@testable import Runner - -final class AtmosProbeContractTests: XCTestCase { - func testCancelCompletesStartExactlyOnce() { - let completionDelivered = expectation(description: "start completion delivered") - let duplicateCompletion = expectation(description: "start completion delivered twice") - duplicateCompletion.isInverted = true - var invocationCount = 0 - var probe: AsbarProbe? = makeProbe() - - probe?.start { message in - invocationCount += 1 - if invocationCount == 1 { - XCTAssertEqual(message, "cancelled") - completionDelivered.fulfill() - } else { - duplicateCompletion.fulfill() - } - } - probe?.cancel() - probe = nil - - wait(for: [completionDelivered], timeout: 1) - wait(for: [duplicateCompletion], timeout: 1) - XCTAssertEqual(invocationCount, 1) - } - - func testDeinitCompletesStartExactlyOnce() { - let completionDelivered = expectation(description: "start completion delivered") - let duplicateCompletion = expectation(description: "start completion delivered twice") - duplicateCompletion.isInverted = true - var invocationCount = 0 - var probe: AsbarProbe? = makeProbe() - - probe?.start { message in - invocationCount += 1 - if invocationCount == 1 { - XCTAssertEqual(message, "cancelled") - completionDelivered.fulfill() - } else { - duplicateCompletion.fulfill() - } - } - probe = nil - - wait(for: [completionDelivered], timeout: 1) - wait(for: [duplicateCompletion], timeout: 1) - XCTAssertEqual(invocationCount, 1) - } - - private func makeProbe() -> AsbarProbe { - AsbarProbe( - source: URL(string: "http://127.0.0.1:1/probe.eac3")!, - regenerateFormatDescription: false, - sessionMode: .moviePlayback - ) - } -} diff --git a/tvos/scripts/test_wire_mpv.rb b/tvos/scripts/test_wire_mpv.rb index 4913f6ae..6593964e 100755 --- a/tvos/scripts/test_wire_mpv.rb +++ b/tvos/scripts/test_wire_mpv.rb @@ -17,12 +17,10 @@ class WireMpvTest < Minitest::Test MpvPipController.swift MpvAudioPlayerCore.swift MpvAudioPlayerPlugin.swift - AtmosProbePlugin.swift ].freeze AFFECTED_NAMES = %w[ MpvAudioPlayerCore.swift MpvAudioPlayerPlugin.swift - AtmosProbePlugin.swift ].freeze MPVKIT_PIN = { 'location' => 'https://github.com/edde746/MPVKit', diff --git a/tvos/scripts/wire_mpv.rb b/tvos/scripts/wire_mpv.rb index 355bb130..22b063a9 100755 --- a/tvos/scripts/wire_mpv.rb +++ b/tvos/scripts/wire_mpv.rb @@ -26,7 +26,6 @@ sources = [ { name: 'MpvPipController.swift', path: '../ios/Runner/MpvPlayer/MpvPipController.swift', tree: '' }, { name: 'MpvAudioPlayerCore.swift', path: '../shared/apple/MpvPlayer/MpvAudioPlayerCore.swift', tree: '' }, { name: 'MpvAudioPlayerPlugin.swift', path: '../shared/apple/MpvPlayer/MpvAudioPlayerPlugin.swift', tree: '' }, - { name: 'AtmosProbePlugin.swift', path: '../shared/apple/AtmosProbe/AtmosProbePlugin.swift', tree: '' }, ] sources_phase = runner_target.source_build_phase