feat(tvos): AVPlayer Atmos sink wiring + Atmos output diagnostics
Re-enables Audio Passthrough on Apple TV against the MPVKit EAC3-JOC AVPlayer sink (pin bump to v1.0.8 follows), adds an AVPlayer test harness + diagnostics screen for #1300, and makes loudnorm yield while passthrough is active (fixes a latent spdif conflict on desktop too).
This commit is contained in:
@@ -22,6 +22,7 @@
|
|||||||
97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; };
|
97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; };
|
||||||
B1D51A6A2F00110000000001 /* MpvPlayerCoreBase.swift in Sources */ = {isa = PBXBuildFile; fileRef = B1D51A6A2F00110000000002 /* MpvPlayerCoreBase.swift */; };
|
B1D51A6A2F00110000000001 /* MpvPlayerCoreBase.swift in Sources */ = {isa = PBXBuildFile; fileRef = B1D51A6A2F00110000000002 /* MpvPlayerCoreBase.swift */; };
|
||||||
B1D51A6A2F00110000000005 /* MpvPlayerPluginShared.swift in Sources */ = {isa = PBXBuildFile; fileRef = B1D51A6A2F00110000000006 /* MpvPlayerPluginShared.swift */; };
|
B1D51A6A2F00110000000005 /* MpvPlayerPluginShared.swift in Sources */ = {isa = PBXBuildFile; fileRef = B1D51A6A2F00110000000006 /* MpvPlayerPluginShared.swift */; };
|
||||||
|
B1D51A6A2F0011000000000A /* AtmosProbePlugin.swift in Sources */ = {isa = PBXBuildFile; fileRef = B1D51A6A2F0011000000000B /* AtmosProbePlugin.swift */; };
|
||||||
B1D51A6A2F00110000000008 /* ExternalDisplayManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = B1D51A6A2F00110000000007 /* ExternalDisplayManager.swift */; };
|
B1D51A6A2F00110000000008 /* ExternalDisplayManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = B1D51A6A2F00110000000007 /* ExternalDisplayManager.swift */; };
|
||||||
78A318202AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage in Frameworks */ = {isa = PBXBuildFile; productRef = 78A3181F2AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage */; };
|
78A318202AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage in Frameworks */ = {isa = PBXBuildFile; productRef = 78A3181F2AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage */; };
|
||||||
/* End PBXBuildFile section */
|
/* End PBXBuildFile section */
|
||||||
@@ -75,6 +76,7 @@
|
|||||||
97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
|
97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
|
||||||
B1D51A6A2F00110000000002 /* MpvPlayerCoreBase.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = MpvPlayerCoreBase.swift; path = ../shared/apple/MpvPlayer/MpvPlayerCoreBase.swift; sourceTree = SOURCE_ROOT; };
|
B1D51A6A2F00110000000002 /* MpvPlayerCoreBase.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = MpvPlayerCoreBase.swift; path = ../shared/apple/MpvPlayer/MpvPlayerCoreBase.swift; sourceTree = SOURCE_ROOT; };
|
||||||
B1D51A6A2F00110000000006 /* MpvPlayerPluginShared.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = MpvPlayerPluginShared.swift; path = ../shared/apple/MpvPlayer/MpvPlayerPluginShared.swift; sourceTree = SOURCE_ROOT; };
|
B1D51A6A2F00110000000006 /* MpvPlayerPluginShared.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = MpvPlayerPluginShared.swift; path = ../shared/apple/MpvPlayer/MpvPlayerPluginShared.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 = "<group>"; };
|
B1D51A6A2F00110000000007 /* ExternalDisplayManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ExternalDisplayManager.swift; sourceTree = "<group>"; };
|
||||||
BB346A1D0705AB171F80B11B /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; };
|
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 = "<group>"; };
|
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 = "<group>"; };
|
||||||
@@ -126,6 +128,7 @@
|
|||||||
children = (
|
children = (
|
||||||
B1D51A6A2F00110000000002 /* MpvPlayerCoreBase.swift */,
|
B1D51A6A2F00110000000002 /* MpvPlayerCoreBase.swift */,
|
||||||
B1D51A6A2F00110000000006 /* MpvPlayerPluginShared.swift */,
|
B1D51A6A2F00110000000006 /* MpvPlayerPluginShared.swift */,
|
||||||
|
B1D51A6A2F0011000000000B /* AtmosProbePlugin.swift */,
|
||||||
B1D51A6A2F00110000000007 /* ExternalDisplayManager.swift */,
|
B1D51A6A2F00110000000007 /* ExternalDisplayManager.swift */,
|
||||||
6A8A46222EDB370C0057B88C /* MpvPlayerCore.swift */,
|
6A8A46222EDB370C0057B88C /* MpvPlayerCore.swift */,
|
||||||
6A8A46232EDB370C0057B88C /* MpvPlayerPlugin.swift */,
|
6A8A46232EDB370C0057B88C /* MpvPlayerPlugin.swift */,
|
||||||
@@ -417,6 +420,7 @@
|
|||||||
files = (
|
files = (
|
||||||
B1D51A6A2F00110000000001 /* MpvPlayerCoreBase.swift in Sources */,
|
B1D51A6A2F00110000000001 /* MpvPlayerCoreBase.swift in Sources */,
|
||||||
B1D51A6A2F00110000000005 /* MpvPlayerPluginShared.swift in Sources */,
|
B1D51A6A2F00110000000005 /* MpvPlayerPluginShared.swift in Sources */,
|
||||||
|
B1D51A6A2F0011000000000A /* AtmosProbePlugin.swift in Sources */,
|
||||||
B1D51A6A2F00110000000008 /* ExternalDisplayManager.swift in Sources */,
|
B1D51A6A2F00110000000008 /* ExternalDisplayManager.swift in Sources */,
|
||||||
6A8A46252EDB370C0057B88C /* MpvPlayerPlugin.swift in Sources */,
|
6A8A46252EDB370C0057B88C /* MpvPlayerPlugin.swift in Sources */,
|
||||||
6A8A46262EDB370C0057B88C /* MpvPlayerCore.swift in Sources */,
|
6A8A46262EDB370C0057B88C /* MpvPlayerCore.swift in Sources */,
|
||||||
|
|||||||
@@ -36,6 +36,10 @@ import MediaPlayer
|
|||||||
MpvPlayerPlugin.register(with: registrar)
|
MpvPlayerPlugin.register(with: registrar)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if let registrar = engineBridge.pluginRegistry.registrar(forPlugin: "AtmosProbePlugin") {
|
||||||
|
AtmosProbePlugin.register(with: registrar)
|
||||||
|
}
|
||||||
|
|
||||||
if let registrar = engineBridge.pluginRegistry.registrar(forPlugin: "DeviceAdjustmentChannel") {
|
if let registrar = engineBridge.pluginRegistry.registrar(forPlugin: "DeviceAdjustmentChannel") {
|
||||||
registerDeviceAdjustmentChannel(messenger: registrar.messenger())
|
registerDeviceAdjustmentChannel(messenger: registrar.messenger())
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -264,6 +264,22 @@
|
|||||||
"tunneledPlaybackDescription": "Използвай видео тунелиране. Изключете, ако HDR възпроизвеждането показва черен екран.",
|
"tunneledPlaybackDescription": "Използвай видео тунелиране. Изключете, ако HDR възпроизвеждането показва черен екран.",
|
||||||
"audioPassthrough": "Аудио passthrough",
|
"audioPassthrough": "Аудио passthrough",
|
||||||
"audioPassthroughDescription": "Изпращай Dolby/DTS звук към ресийвъра или телевизора без прекодиране, запазвайки съраунд звука. Изключете, ако няма звук.",
|
"audioPassthroughDescription": "Изпращай Dolby/DTS звук към ресийвъра или телевизора без прекодиране, запазвайки съраунд звука. Изключете, ако няма звук.",
|
||||||
|
"audioPassthroughDescriptionAppleTv": "Предава Dolby Digital Plus (вкл. Atmos) на системата като битов поток. DTS и TrueHD продължават да се възпроизвеждат като многоканален PCM. При превъртане може да има кратки прекъсвания на звука.",
|
||||||
|
"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 на тестовия файл.",
|
||||||
|
"atmosTestStop": "Спри теста",
|
||||||
|
"atmosTestUrl": "URL на тестовия файл",
|
||||||
|
"atmosTestUrlDescription": "HTTP URL на суров .ec3 Dolby Atmos файл (напр. извлечен с ffmpeg)",
|
||||||
|
"atmosTestUrlMissing": "Първо задайте URL на тестовия файл",
|
||||||
|
"atmosTestStatus": "Състояние",
|
||||||
"dvConversionMode": "Dolby Vision конвертиране",
|
"dvConversionMode": "Dolby Vision конвертиране",
|
||||||
"dvConversionModeDescription": "Изберете как ExoPlayer обработва Dolby Vision Profile 7 файлове.",
|
"dvConversionModeDescription": "Изберете как ExoPlayer обработва Dolby Vision Profile 7 файлове.",
|
||||||
"dvConversionAuto": "Автоматично",
|
"dvConversionAuto": "Автоматично",
|
||||||
|
|||||||
@@ -264,6 +264,22 @@
|
|||||||
"tunneledPlaybackDescription": "Brug videotunneling. Slå fra, hvis HDR-afspilning viser sort video.",
|
"tunneledPlaybackDescription": "Brug videotunneling. Slå fra, hvis HDR-afspilning viser sort video.",
|
||||||
"audioPassthrough": "Lyd-passthrough",
|
"audioPassthrough": "Lyd-passthrough",
|
||||||
"audioPassthroughDescription": "Send Dolby/DTS-lyd til din receiver eller dit TV uden genkodning, så surroundlyd bevares. Slå fra, hvis du ikke har lyd.",
|
"audioPassthroughDescription": "Send Dolby/DTS-lyd til din receiver eller dit TV uden genkodning, så surroundlyd bevares. Slå fra, hvis du ikke har lyd.",
|
||||||
|
"audioPassthroughDescriptionAppleTv": "Overlad Dolby Digital Plus (inkl. Atmos) til systemet som bitstream. DTS og TrueHD afspilles stadig som flerkanals PCM. Korte lydhuller kan forekomme ved søgning.",
|
||||||
|
"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.",
|
||||||
|
"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",
|
"dvConversionMode": "Dolby Vision-konvertering",
|
||||||
"dvConversionModeDescription": "Vælg, hvordan ExoPlayer håndterer Dolby Vision Profile 7-filer.",
|
"dvConversionModeDescription": "Vælg, hvordan ExoPlayer håndterer Dolby Vision Profile 7-filer.",
|
||||||
"dvConversionAuto": "Auto",
|
"dvConversionAuto": "Auto",
|
||||||
|
|||||||
@@ -264,6 +264,22 @@
|
|||||||
"tunneledPlaybackDescription": "Video-Tunneling verwenden. Deaktivieren, wenn HDR-Wiedergabe schwarzes Video zeigt.",
|
"tunneledPlaybackDescription": "Video-Tunneling verwenden. Deaktivieren, wenn HDR-Wiedergabe schwarzes Video zeigt.",
|
||||||
"audioPassthrough": "Audio-Durchleitung",
|
"audioPassthrough": "Audio-Durchleitung",
|
||||||
"audioPassthroughDescription": "Dolby/DTS-Audio ohne Neukodierung an deinen Receiver oder Fernseher senden und Surround-Sound erhalten. Deaktivieren, wenn kein Ton zu hören ist.",
|
"audioPassthroughDescription": "Dolby/DTS-Audio ohne Neukodierung an deinen Receiver oder Fernseher senden und Surround-Sound erhalten. Deaktivieren, wenn kein Ton zu hören ist.",
|
||||||
|
"audioPassthroughDescriptionAppleTv": "Übergibt Dolby Digital Plus (inkl. Atmos) als Bitstream an das System. DTS und TrueHD werden weiterhin als Mehrkanal-PCM wiedergegeben. Beim Spulen können kurze Tonaussetzer auftreten.",
|
||||||
|
"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.",
|
||||||
|
"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",
|
"dvConversionMode": "Dolby-Vision-Konvertierung",
|
||||||
"dvConversionModeDescription": "Wähle, wie ExoPlayer Dolby-Vision-Profil-7-Dateien behandelt.",
|
"dvConversionModeDescription": "Wähle, wie ExoPlayer Dolby-Vision-Profil-7-Dateien behandelt.",
|
||||||
"dvConversionAuto": "Automatisch",
|
"dvConversionAuto": "Automatisch",
|
||||||
|
|||||||
@@ -270,6 +270,22 @@
|
|||||||
"tunneledPlaybackDescription": "Use video tunneling. Disable if HDR playback shows black video.",
|
"tunneledPlaybackDescription": "Use video tunneling. Disable if HDR playback shows black video.",
|
||||||
"audioPassthrough": "Audio Passthrough",
|
"audioPassthrough": "Audio Passthrough",
|
||||||
"audioPassthroughDescription": "Send Dolby/DTS audio to your receiver or TV without re-encoding, preserving surround sound. Turn off if you have no sound.",
|
"audioPassthroughDescription": "Send Dolby/DTS audio to your receiver or TV without re-encoding, preserving surround sound. Turn off if you have no sound.",
|
||||||
|
"audioPassthroughDescriptionAppleTv": "Hand Dolby Digital Plus (including Atmos) to the system for bitstream output. DTS and TrueHD still play as multichannel PCM. Brief audio gaps can occur when seeking.",
|
||||||
|
"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.",
|
||||||
|
"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",
|
"dvConversionMode": "Dolby Vision Conversion",
|
||||||
"dvConversionModeDescription": "Choose how ExoPlayer handles Dolby Vision Profile 7 files.",
|
"dvConversionModeDescription": "Choose how ExoPlayer handles Dolby Vision Profile 7 files.",
|
||||||
"dvConversionAuto": "Auto",
|
"dvConversionAuto": "Auto",
|
||||||
|
|||||||
@@ -264,6 +264,22 @@
|
|||||||
"tunneledPlaybackDescription": "Usar tunelización de video. Desactívala si HDR muestra video negro.",
|
"tunneledPlaybackDescription": "Usar tunelización de video. Desactívala si HDR muestra video negro.",
|
||||||
"audioPassthrough": "Audio Passthrough",
|
"audioPassthrough": "Audio Passthrough",
|
||||||
"audioPassthroughDescription": "Envía el audio Dolby/DTS a tu receptor o TV sin recodificar, conservando el sonido envolvente. Desactívalo si no tienes sonido.",
|
"audioPassthroughDescription": "Envía el audio Dolby/DTS a tu receptor o TV sin recodificar, conservando el sonido envolvente. Desactívalo si no tienes sonido.",
|
||||||
|
"audioPassthroughDescriptionAppleTv": "Entrega Dolby Digital Plus (incluido Atmos) al sistema como bitstream. DTS y TrueHD se siguen reproduciendo como PCM multicanal. Pueden producirse breves cortes de audio al buscar.",
|
||||||
|
"atmosDiagnostics": "Prueba de salida Atmos",
|
||||||
|
"atmosDiagnosticsDescription": "Diagnostica la salida Dolby Atmos reproduciendo señales de prueba con el reproductor del sistema",
|
||||||
|
"atmosTestHlsAtmos": "Stream Atmos de Apple",
|
||||||
|
"atmosTestHlsAtmosDescription": "Stream Dolby Atmos de referencia. El receptor debería mostrar Dolby Atmos.",
|
||||||
|
"atmosTestHlsControl": "Stream surround de Apple",
|
||||||
|
"atmosTestHlsControlDescription": "Stream de control sin Atmos. El receptor debería mostrar surround sin Atmos.",
|
||||||
|
"atmosTestRawStream": "Stream EAC3 sin procesar",
|
||||||
|
"atmosTestRawStreamDescription": "Transmite el archivo de prueba igual que la reproducción Atmos del reproductor. Necesita 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.",
|
||||||
|
"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",
|
"dvConversionMode": "Conversión de Dolby Vision",
|
||||||
"dvConversionModeDescription": "Elige cómo ExoPlayer gestiona archivos Dolby Vision Profile 7.",
|
"dvConversionModeDescription": "Elige cómo ExoPlayer gestiona archivos Dolby Vision Profile 7.",
|
||||||
"dvConversionAuto": "Automático",
|
"dvConversionAuto": "Automático",
|
||||||
|
|||||||
@@ -264,6 +264,22 @@
|
|||||||
"tunneledPlaybackDescription": "Utiliser le tunneling vidéo. Désactivez si la lecture HDR affiche un écran noir.",
|
"tunneledPlaybackDescription": "Utiliser le tunneling vidéo. Désactivez si la lecture HDR affiche un écran noir.",
|
||||||
"audioPassthrough": "Audio Pass-Through",
|
"audioPassthrough": "Audio Pass-Through",
|
||||||
"audioPassthroughDescription": "Envoyez l'audio Dolby/DTS vers votre ampli ou téléviseur sans réencodage, en conservant le son surround. Désactivez si vous n'avez aucun son.",
|
"audioPassthroughDescription": "Envoyez l'audio Dolby/DTS vers votre ampli ou téléviseur sans réencodage, en conservant le son surround. Désactivez si vous n'avez aucun son.",
|
||||||
|
"audioPassthroughDescriptionAppleTv": "Transmet le Dolby Digital Plus (y compris Atmos) au système en bitstream. Le DTS et le TrueHD restent lus en PCM multicanal. De brèves coupures audio peuvent survenir lors des sauts.",
|
||||||
|
"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.",
|
||||||
|
"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",
|
"dvConversionMode": "Conversion Dolby Vision",
|
||||||
"dvConversionModeDescription": "Choisissez comment ExoPlayer gère les fichiers Dolby Vision Profile 7.",
|
"dvConversionModeDescription": "Choisissez comment ExoPlayer gère les fichiers Dolby Vision Profile 7.",
|
||||||
"dvConversionAuto": "Auto",
|
"dvConversionAuto": "Auto",
|
||||||
|
|||||||
@@ -264,6 +264,22 @@
|
|||||||
"tunneledPlaybackDescription": "Usa tunneling video. Disattiva se la riproduzione HDR mostra video nero.",
|
"tunneledPlaybackDescription": "Usa tunneling video. Disattiva se la riproduzione HDR mostra video nero.",
|
||||||
"audioPassthrough": "Audio Passthrough",
|
"audioPassthrough": "Audio Passthrough",
|
||||||
"audioPassthroughDescription": "Invia l'audio Dolby/DTS al ricevitore o alla TV senza ricodifica, mantenendo il suono surround. Disattiva se non senti audio.",
|
"audioPassthroughDescription": "Invia l'audio Dolby/DTS al ricevitore o alla TV senza ricodifica, mantenendo il suono surround. Disattiva se non senti audio.",
|
||||||
|
"audioPassthroughDescriptionAppleTv": "Consegna Dolby Digital Plus (incluso Atmos) al sistema come bitstream. DTS e TrueHD vengono comunque riprodotti come PCM multicanale. Durante i salti possono verificarsi brevi interruzioni audio.",
|
||||||
|
"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.",
|
||||||
|
"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",
|
"dvConversionMode": "Conversione Dolby Vision",
|
||||||
"dvConversionModeDescription": "Scegli come ExoPlayer gestisce i file Dolby Vision Profile 7.",
|
"dvConversionModeDescription": "Scegli come ExoPlayer gestisce i file Dolby Vision Profile 7.",
|
||||||
"dvConversionAuto": "Auto",
|
"dvConversionAuto": "Auto",
|
||||||
|
|||||||
@@ -264,6 +264,22 @@
|
|||||||
"tunneledPlaybackDescription": "動画トンネリングを使用します。HDR再生で画面が黒くなる場合は無効にしてください。",
|
"tunneledPlaybackDescription": "動画トンネリングを使用します。HDR再生で画面が黒くなる場合は無効にしてください。",
|
||||||
"audioPassthrough": "オーディオパススルー",
|
"audioPassthrough": "オーディオパススルー",
|
||||||
"audioPassthroughDescription": "Dolby/DTS音声を再エンコードせずにレシーバーやテレビに送り、サラウンドを維持します。音が出ない場合は無効にしてください。",
|
"audioPassthroughDescription": "Dolby/DTS音声を再エンコードせずにレシーバーやテレビに送り、サラウンドを維持します。音が出ない場合は無効にしてください。",
|
||||||
|
"audioPassthroughDescriptionAppleTv": "Dolby Digital Plus(Atmos含む)をビットストリームとしてシステムに渡します。DTSとTrueHDは引き続きマルチチャンネルPCMで再生されます。シーク時に短い音切れが発生することがあります。",
|
||||||
|
"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が必要です。",
|
||||||
|
"atmosTestStop": "テストを停止",
|
||||||
|
"atmosTestUrl": "テストファイルのURL",
|
||||||
|
"atmosTestUrlDescription": "生の.ec3 Dolby AtmosファイルのHTTP URL(例: ffmpegで抽出)",
|
||||||
|
"atmosTestUrlMissing": "先にテストファイルのURLを設定してください",
|
||||||
|
"atmosTestStatus": "ステータス",
|
||||||
"dvConversionMode": "Dolby Vision 変換",
|
"dvConversionMode": "Dolby Vision 変換",
|
||||||
"dvConversionModeDescription": "ExoPlayer が Dolby Vision Profile 7 ファイルを処理する方法を選択します。",
|
"dvConversionModeDescription": "ExoPlayer が Dolby Vision Profile 7 ファイルを処理する方法を選択します。",
|
||||||
"dvConversionAuto": "自動",
|
"dvConversionAuto": "自動",
|
||||||
|
|||||||
@@ -264,6 +264,22 @@
|
|||||||
"tunneledPlaybackDescription": "비디오 터널링을 사용합니다. HDR 재생 시 검은 화면이 보이면 비활성화하세요.",
|
"tunneledPlaybackDescription": "비디오 터널링을 사용합니다. HDR 재생 시 검은 화면이 보이면 비활성화하세요.",
|
||||||
"audioPassthrough": "오디오 패스스루",
|
"audioPassthrough": "오디오 패스스루",
|
||||||
"audioPassthroughDescription": "Dolby/DTS 오디오를 재인코딩 없이 리시버나 TV로 전송하여 서라운드 사운드를 유지합니다. 소리가 나지 않으면 비활성화하세요.",
|
"audioPassthroughDescription": "Dolby/DTS 오디오를 재인코딩 없이 리시버나 TV로 전송하여 서라운드 사운드를 유지합니다. 소리가 나지 않으면 비활성화하세요.",
|
||||||
|
"audioPassthroughDescriptionAppleTv": "Dolby Digital Plus(Atmos 포함)를 비트스트림으로 시스템에 전달합니다. DTS와 TrueHD는 계속 멀티채널 PCM으로 재생됩니다. 탐색 시 짧은 소리 끊김이 발생할 수 있습니다.",
|
||||||
|
"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이 필요합니다.",
|
||||||
|
"atmosTestStop": "테스트 중지",
|
||||||
|
"atmosTestUrl": "테스트 파일 URL",
|
||||||
|
"atmosTestUrlDescription": "원시 .ec3 Dolby Atmos 파일의 HTTP URL(예: ffmpeg로 추출)",
|
||||||
|
"atmosTestUrlMissing": "먼저 테스트 파일 URL을 설정하세요",
|
||||||
|
"atmosTestStatus": "상태",
|
||||||
"dvConversionMode": "Dolby Vision 변환",
|
"dvConversionMode": "Dolby Vision 변환",
|
||||||
"dvConversionModeDescription": "ExoPlayer가 Dolby Vision Profile 7 파일을 처리하는 방식을 선택합니다.",
|
"dvConversionModeDescription": "ExoPlayer가 Dolby Vision Profile 7 파일을 처리하는 방식을 선택합니다.",
|
||||||
"dvConversionAuto": "자동",
|
"dvConversionAuto": "자동",
|
||||||
|
|||||||
@@ -264,6 +264,22 @@
|
|||||||
"tunneledPlaybackDescription": "Bruk videotunneling. Slå av hvis HDR-avspilling viser svart video.",
|
"tunneledPlaybackDescription": "Bruk videotunneling. Slå av hvis HDR-avspilling viser svart video.",
|
||||||
"audioPassthrough": "Lydgjennomgang",
|
"audioPassthrough": "Lydgjennomgang",
|
||||||
"audioPassthroughDescription": "Send Dolby/DTS-lyd til mottakeren eller TV-en uten omkoding, slik at surroundlyd bevares. Slå av hvis du ikke har lyd.",
|
"audioPassthroughDescription": "Send Dolby/DTS-lyd til mottakeren eller TV-en uten omkoding, slik at surroundlyd bevares. Slå av hvis du ikke har lyd.",
|
||||||
|
"audioPassthroughDescriptionAppleTv": "Overlater Dolby Digital Plus (inkl. Atmos) til systemet som bitstream. DTS og TrueHD spilles fortsatt av som flerkanals PCM. Korte lydbrudd kan forekomme ved søking.",
|
||||||
|
"atmosDiagnostics": "Atmos-utgangstest",
|
||||||
|
"atmosDiagnosticsDescription": "Diagnostiser Dolby Atmos-utgangen ved å spille testsignaler gjennom systemspilleren",
|
||||||
|
"atmosTestHlsAtmos": "Apple Atmos-strøm",
|
||||||
|
"atmosTestHlsAtmosDescription": "Kjent god 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.",
|
||||||
|
"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",
|
"dvConversionMode": "Dolby Vision-konvertering",
|
||||||
"dvConversionModeDescription": "Velg hvordan ExoPlayer håndterer Dolby Vision Profile 7-filer.",
|
"dvConversionModeDescription": "Velg hvordan ExoPlayer håndterer Dolby Vision Profile 7-filer.",
|
||||||
"dvConversionAuto": "Auto",
|
"dvConversionAuto": "Auto",
|
||||||
|
|||||||
@@ -264,6 +264,22 @@
|
|||||||
"tunneledPlaybackDescription": "Gebruik videotunneling. Schakel uit als HDR-afspelen zwart beeld geeft.",
|
"tunneledPlaybackDescription": "Gebruik videotunneling. Schakel uit als HDR-afspelen zwart beeld geeft.",
|
||||||
"audioPassthrough": "Audio-doorvoer",
|
"audioPassthrough": "Audio-doorvoer",
|
||||||
"audioPassthroughDescription": "Stuur Dolby/DTS-audio zonder hercodering naar je receiver of tv en behoud surroundgeluid. Schakel uit als je geen geluid hebt.",
|
"audioPassthroughDescription": "Stuur Dolby/DTS-audio zonder hercodering naar je receiver of tv en behoud surroundgeluid. Schakel uit als je geen geluid hebt.",
|
||||||
|
"audioPassthroughDescriptionAppleTv": "Geeft Dolby Digital Plus (incl. Atmos) als bitstream aan het systeem door. DTS en TrueHD worden nog steeds als meerkanaals PCM afgespeeld. Bij zoeken kunnen korte geluidsonderbrekingen optreden.",
|
||||||
|
"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.",
|
||||||
|
"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",
|
"dvConversionMode": "Dolby Vision-conversie",
|
||||||
"dvConversionModeDescription": "Kies hoe ExoPlayer Dolby Vision Profile 7-bestanden verwerkt.",
|
"dvConversionModeDescription": "Kies hoe ExoPlayer Dolby Vision Profile 7-bestanden verwerkt.",
|
||||||
"dvConversionAuto": "Auto",
|
"dvConversionAuto": "Auto",
|
||||||
|
|||||||
@@ -264,6 +264,22 @@
|
|||||||
"tunneledPlaybackDescription": "Użyj tunelowania wideo. Wyłącz, jeśli HDR pokazuje czarny obraz.",
|
"tunneledPlaybackDescription": "Użyj tunelowania wideo. Wyłącz, jeśli HDR pokazuje czarny obraz.",
|
||||||
"audioPassthrough": "Bezpośrednie audio",
|
"audioPassthrough": "Bezpośrednie audio",
|
||||||
"audioPassthroughDescription": "Wysyłaj dźwięk Dolby/DTS do amplitunera lub telewizora bez ponownego kodowania, zachowując dźwięk przestrzenny. Wyłącz, jeśli nie ma dźwięku.",
|
"audioPassthroughDescription": "Wysyłaj dźwięk Dolby/DTS do amplitunera lub telewizora bez ponownego kodowania, zachowując dźwięk przestrzenny. Wyłącz, jeśli nie ma dźwięku.",
|
||||||
|
"audioPassthroughDescriptionAppleTv": "Przekazuje Dolby Digital Plus (w tym Atmos) do systemu jako bitstream. DTS i TrueHD nadal odtwarzane są jako wielokanałowe PCM. Podczas przewijania mogą wystąpić krótkie przerwy w dźwięku.",
|
||||||
|
"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ń surround Apple",
|
||||||
|
"atmosTestHlsControlDescription": "Strumień kontrolny bez Atmos. Amplituner powinien pokazać surround bez Atmos.",
|
||||||
|
"atmosTestRawStream": "Surowy strumień EAC3",
|
||||||
|
"atmosTestRawStreamDescription": "Strumieniuje plik testowy dokładnie jak odtwarzanie Atmos w odtwarzaczu. Wymaga URL pliku testowego.",
|
||||||
|
"atmosTestRawFile": "Surowy plik EAC3",
|
||||||
|
"atmosTestRawFileDescription": "Odtwarza plik testowy o znanej długości. Wymaga URL pliku testowego.",
|
||||||
|
"atmosTestStop": "Zatrzymaj test",
|
||||||
|
"atmosTestUrl": "URL pliku testowego",
|
||||||
|
"atmosTestUrlDescription": "HTTP URL surowego pliku .ec3 Dolby Atmos (np. wyodrębnionego przez ffmpeg)",
|
||||||
|
"atmosTestUrlMissing": "Najpierw ustaw URL pliku testowego",
|
||||||
|
"atmosTestStatus": "Stan",
|
||||||
"dvConversionMode": "Konwersja Dolby Vision",
|
"dvConversionMode": "Konwersja Dolby Vision",
|
||||||
"dvConversionModeDescription": "Wybierz, jak ExoPlayer obsługuje pliki Dolby Vision Profile 7.",
|
"dvConversionModeDescription": "Wybierz, jak ExoPlayer obsługuje pliki Dolby Vision Profile 7.",
|
||||||
"dvConversionAuto": "Automatycznie",
|
"dvConversionAuto": "Automatycznie",
|
||||||
|
|||||||
@@ -264,6 +264,22 @@
|
|||||||
"tunneledPlaybackDescription": "Usar tunelamento de vídeo. Desative se HDR mostrar vídeo preto.",
|
"tunneledPlaybackDescription": "Usar tunelamento de vídeo. Desative se HDR mostrar vídeo preto.",
|
||||||
"audioPassthrough": "Passagem de Áudio",
|
"audioPassthrough": "Passagem de Áudio",
|
||||||
"audioPassthroughDescription": "Envie áudio Dolby/DTS para o seu receptor ou TV sem recodificar, preservando o som surround. Desative se não tiver som.",
|
"audioPassthroughDescription": "Envie áudio Dolby/DTS para o seu receptor ou TV sem recodificar, preservando o som surround. Desative se não tiver som.",
|
||||||
|
"audioPassthroughDescriptionAppleTv": "Entrega Dolby Digital Plus (incluindo Atmos) ao sistema como bitstream. DTS e TrueHD continuam sendo reproduzidos como PCM multicanal. Podem ocorrer breves cortes de áudio ao buscar.",
|
||||||
|
"atmosDiagnostics": "Teste de saída Atmos",
|
||||||
|
"atmosDiagnosticsDescription": "Diagnostique a saída Dolby Atmos reproduzindo sinais de teste pelo player do sistema",
|
||||||
|
"atmosTestHlsAtmos": "Stream Atmos da Apple",
|
||||||
|
"atmosTestHlsAtmosDescription": "Stream Dolby Atmos comprovadamente bom. O receptor deve mostrar Dolby Atmos.",
|
||||||
|
"atmosTestHlsControl": "Stream surround da Apple",
|
||||||
|
"atmosTestHlsControlDescription": "Stream de controle sem Atmos. O receptor deve mostrar surround sem Atmos.",
|
||||||
|
"atmosTestRawStream": "Stream EAC3 bruto",
|
||||||
|
"atmosTestRawStreamDescription": "Transmite o arquivo de teste exatamente como a reprodução Atmos no player. 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.",
|
||||||
|
"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",
|
"dvConversionMode": "Conversão Dolby Vision",
|
||||||
"dvConversionModeDescription": "Escolha como o ExoPlayer lida com arquivos Dolby Vision Profile 7.",
|
"dvConversionModeDescription": "Escolha como o ExoPlayer lida com arquivos Dolby Vision Profile 7.",
|
||||||
"dvConversionAuto": "Automático",
|
"dvConversionAuto": "Automático",
|
||||||
|
|||||||
@@ -264,6 +264,22 @@
|
|||||||
"tunneledPlaybackDescription": "Использовать видеотуннелирование. Отключите, если HDR показывает черный экран.",
|
"tunneledPlaybackDescription": "Использовать видеотуннелирование. Отключите, если HDR показывает черный экран.",
|
||||||
"audioPassthrough": "Сквозной вывод аудио",
|
"audioPassthrough": "Сквозной вывод аудио",
|
||||||
"audioPassthroughDescription": "Передавать звук Dolby/DTS на ресивер или телевизор без перекодирования, сохраняя объёмный звук. Отключите, если нет звука.",
|
"audioPassthroughDescription": "Передавать звук Dolby/DTS на ресивер или телевизор без перекодирования, сохраняя объёмный звук. Отключите, если нет звука.",
|
||||||
|
"audioPassthroughDescriptionAppleTv": "Передаёт Dolby Digital Plus (включая Atmos) системе в виде битового потока. DTS и TrueHD по-прежнему воспроизводятся как многоканальный PCM. При перемотке возможны короткие пропадания звука.",
|
||||||
|
"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 тестового файла.",
|
||||||
|
"atmosTestStop": "Остановить тест",
|
||||||
|
"atmosTestUrl": "URL тестового файла",
|
||||||
|
"atmosTestUrlDescription": "HTTP-URL сырого файла .ec3 Dolby Atmos (например, извлечённого через ffmpeg)",
|
||||||
|
"atmosTestUrlMissing": "Сначала укажите URL тестового файла",
|
||||||
|
"atmosTestStatus": "Статус",
|
||||||
"dvConversionMode": "Преобразование Dolby Vision",
|
"dvConversionMode": "Преобразование Dolby Vision",
|
||||||
"dvConversionModeDescription": "Выберите, как ExoPlayer обрабатывает файлы Dolby Vision Profile 7.",
|
"dvConversionModeDescription": "Выберите, как ExoPlayer обрабатывает файлы Dolby Vision Profile 7.",
|
||||||
"dvConversionAuto": "Авто",
|
"dvConversionAuto": "Авто",
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
/// To regenerate, run: `dart run slang`
|
/// To regenerate, run: `dart run slang`
|
||||||
///
|
///
|
||||||
/// Locales: 16
|
/// Locales: 16
|
||||||
/// Strings: 20505 (1281 per locale)
|
/// Strings: 20761 (1297 per locale)
|
||||||
|
|
||||||
// coverage:ignore-file
|
// coverage:ignore-file
|
||||||
// ignore_for_file: type=lint, unused_import
|
// ignore_for_file: type=lint, unused_import
|
||||||
|
|||||||
@@ -393,6 +393,22 @@ class _TranslationsSettingsBg extends TranslationsSettingsEn {
|
|||||||
@override String get tunneledPlaybackDescription => 'Използвай видео тунелиране. Изключете, ако HDR възпроизвеждането показва черен екран.';
|
@override String get tunneledPlaybackDescription => 'Използвай видео тунелиране. Изключете, ако HDR възпроизвеждането показва черен екран.';
|
||||||
@override String get audioPassthrough => 'Аудио passthrough';
|
@override String get audioPassthrough => 'Аудио passthrough';
|
||||||
@override String get audioPassthroughDescription => 'Изпращай Dolby/DTS звук към ресийвъра или телевизора без прекодиране, запазвайки съраунд звука. Изключете, ако няма звук.';
|
@override String get audioPassthroughDescription => 'Изпращай Dolby/DTS звук към ресийвъра или телевизора без прекодиране, запазвайки съраунд звука. Изключете, ако няма звук.';
|
||||||
|
@override String get audioPassthroughDescriptionAppleTv => 'Предава Dolby Digital Plus (вкл. Atmos) на системата като битов поток. DTS и TrueHD продължават да се възпроизвеждат като многоканален PCM. При превъртане може да има кратки прекъсвания на звука.';
|
||||||
|
@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 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 dvConversionMode => 'Dolby Vision конвертиране';
|
||||||
@override String get dvConversionModeDescription => 'Изберете как ExoPlayer обработва Dolby Vision Profile 7 файлове.';
|
@override String get dvConversionModeDescription => 'Изберете как ExoPlayer обработва Dolby Vision Profile 7 файлове.';
|
||||||
@override String get dvConversionAuto => 'Автоматично';
|
@override String get dvConversionAuto => 'Автоматично';
|
||||||
@@ -2184,6 +2200,22 @@ extension on TranslationsBg {
|
|||||||
'settings.tunneledPlaybackDescription' => 'Използвай видео тунелиране. Изключете, ако HDR възпроизвеждането показва черен екран.',
|
'settings.tunneledPlaybackDescription' => 'Използвай видео тунелиране. Изключете, ако HDR възпроизвеждането показва черен екран.',
|
||||||
'settings.audioPassthrough' => 'Аудио passthrough',
|
'settings.audioPassthrough' => 'Аудио passthrough',
|
||||||
'settings.audioPassthroughDescription' => 'Изпращай Dolby/DTS звук към ресийвъра или телевизора без прекодиране, запазвайки съраунд звука. Изключете, ако няма звук.',
|
'settings.audioPassthroughDescription' => 'Изпращай Dolby/DTS звук към ресийвъра или телевизора без прекодиране, запазвайки съраунд звука. Изключете, ако няма звук.',
|
||||||
|
'settings.audioPassthroughDescriptionAppleTv' => 'Предава Dolby Digital Plus (вкл. Atmos) на системата като битов поток. DTS и TrueHD продължават да се възпроизвеждат като многоканален PCM. При превъртане може да има кратки прекъсвания на звука.',
|
||||||
|
'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.atmosTestStop' => 'Спри теста',
|
||||||
|
'settings.atmosTestUrl' => 'URL на тестовия файл',
|
||||||
|
'settings.atmosTestUrlDescription' => 'HTTP URL на суров .ec3 Dolby Atmos файл (напр. извлечен с ffmpeg)',
|
||||||
|
'settings.atmosTestUrlMissing' => 'Първо задайте URL на тестовия файл',
|
||||||
|
'settings.atmosTestStatus' => 'Състояние',
|
||||||
'settings.dvConversionMode' => 'Dolby Vision конвертиране',
|
'settings.dvConversionMode' => 'Dolby Vision конвертиране',
|
||||||
'settings.dvConversionModeDescription' => 'Изберете как ExoPlayer обработва Dolby Vision Profile 7 файлове.',
|
'settings.dvConversionModeDescription' => 'Изберете как ExoPlayer обработва Dolby Vision Profile 7 файлове.',
|
||||||
'settings.dvConversionAuto' => 'Автоматично',
|
'settings.dvConversionAuto' => 'Автоматично',
|
||||||
@@ -2426,6 +2458,8 @@ extension on TranslationsBg {
|
|||||||
'messages.libraryScanFailed' => ({required Object error}) => 'Неуспешно сканиране на библиотеката: ${error}',
|
'messages.libraryScanFailed' => ({required Object error}) => 'Неуспешно сканиране на библиотеката: ${error}',
|
||||||
'messages.metadataRefreshing' => ({required Object title}) => 'Опресняване на метаданни за "${title}"...',
|
'messages.metadataRefreshing' => ({required Object title}) => 'Опресняване на метаданни за "${title}"...',
|
||||||
'messages.metadataRefreshStarted' => ({required Object title}) => 'Опресняването на метаданни е стартирано за "${title}"',
|
'messages.metadataRefreshStarted' => ({required Object title}) => 'Опресняването на метаданни е стартирано за "${title}"',
|
||||||
|
_ => null,
|
||||||
|
} ?? switch (path) {
|
||||||
'messages.metadataRefreshFailed' => ({required Object error}) => 'Неуспешно опресняване на метаданни: ${error}',
|
'messages.metadataRefreshFailed' => ({required Object error}) => 'Неуспешно опресняване на метаданни: ${error}',
|
||||||
'messages.logoutConfirm' => 'Сигурни ли сте, че искате да излезете?',
|
'messages.logoutConfirm' => 'Сигурни ли сте, че искате да излезете?',
|
||||||
'messages.noSeasonsFound' => 'Не са намерени сезони',
|
'messages.noSeasonsFound' => 'Не са намерени сезони',
|
||||||
@@ -2442,8 +2476,6 @@ extension on TranslationsBg {
|
|||||||
'messages.serverLimitTitle' => 'Възпроизвеждането е неуспешно',
|
'messages.serverLimitTitle' => 'Възпроизвеждането е неуспешно',
|
||||||
'messages.serverLimitBody' => 'Грешка на сървъра (HTTP 500). Вероятно лимит за пропускателна способност/транскодиране е отхвърлил тази сесия. Помолете собственика да го коригира.',
|
'messages.serverLimitBody' => 'Грешка на сървъра (HTTP 500). Вероятно лимит за пропускателна способност/транскодиране е отхвърлил тази сесия. Помолете собственика да го коригира.',
|
||||||
'messages.logsUploaded' => 'Логовете са качени',
|
'messages.logsUploaded' => 'Логовете са качени',
|
||||||
_ => null,
|
|
||||||
} ?? switch (path) {
|
|
||||||
'messages.logsUploadFailed' => 'Неуспешно качване на логовете',
|
'messages.logsUploadFailed' => 'Неуспешно качване на логовете',
|
||||||
'messages.logId' => 'ID на лога',
|
'messages.logId' => 'ID на лога',
|
||||||
'subtitlingStyling.text' => 'Текст',
|
'subtitlingStyling.text' => 'Текст',
|
||||||
@@ -2940,6 +2972,8 @@ extension on TranslationsBg {
|
|||||||
'companionRemote.session.serverStopped' => 'Сървърът за дистанционно управление е спрян',
|
'companionRemote.session.serverStopped' => 'Сървърът за дистанционно управление е спрян',
|
||||||
'companionRemote.session.serverRunningDescription' => 'Мобилни устройства във вашата мрежа могат да се свързват с това приложение',
|
'companionRemote.session.serverRunningDescription' => 'Мобилни устройства във вашата мрежа могат да се свързват с това приложение',
|
||||||
'companionRemote.session.serverStoppedDescription' => 'Стартирайте сървъра, за да позволите на мобилни устройства да се свързват',
|
'companionRemote.session.serverStoppedDescription' => 'Стартирайте сървъра, за да позволите на мобилни устройства да се свързват',
|
||||||
|
_ => null,
|
||||||
|
} ?? switch (path) {
|
||||||
'companionRemote.session.usePhoneToControl' => 'Използвайте мобилното си устройство, за да управлявате това приложение',
|
'companionRemote.session.usePhoneToControl' => 'Използвайте мобилното си устройство, за да управлявате това приложение',
|
||||||
'companionRemote.session.startServer' => 'Стартирай сървър',
|
'companionRemote.session.startServer' => 'Стартирай сървър',
|
||||||
'companionRemote.session.stopServer' => 'Спри сървър',
|
'companionRemote.session.stopServer' => 'Спри сървър',
|
||||||
@@ -2956,8 +2990,6 @@ extension on TranslationsBg {
|
|||||||
'companionRemote.pairing.validationHostRequired' => 'Моля, въведете адрес на хоста',
|
'companionRemote.pairing.validationHostRequired' => 'Моля, въведете адрес на хоста',
|
||||||
'companionRemote.pairing.validationHostFormat' => 'Форматът трябва да е IP:port (напр. 192.168.1.100:48632)',
|
'companionRemote.pairing.validationHostFormat' => 'Форматът трябва да е IP:port (напр. 192.168.1.100:48632)',
|
||||||
'companionRemote.pairing.connectionTimedOut' => 'Връзката изтече. Използвайте една и съща мрежа на двете устройства.',
|
'companionRemote.pairing.connectionTimedOut' => 'Връзката изтече. Използвайте една и съща мрежа на двете устройства.',
|
||||||
_ => null,
|
|
||||||
} ?? switch (path) {
|
|
||||||
'companionRemote.pairing.sessionNotFound' => 'Устройството не е намерено. Уверете се, че Plezy работи на хоста.',
|
'companionRemote.pairing.sessionNotFound' => 'Устройството не е намерено. Уверете се, че Plezy работи на хоста.',
|
||||||
'companionRemote.pairing.authFailed' => 'Удостоверяването е неуспешно. Двете устройства трябва да използват същия Plex акаунт.',
|
'companionRemote.pairing.authFailed' => 'Удостоверяването е неуспешно. Двете устройства трябва да използват същия Plex акаунт.',
|
||||||
'companionRemote.pairing.failedToConnect' => ({required Object error}) => 'Неуспешно свързване: ${error}',
|
'companionRemote.pairing.failedToConnect' => ({required Object error}) => 'Неуспешно свързване: ${error}',
|
||||||
|
|||||||
@@ -393,6 +393,22 @@ class _TranslationsSettingsDa extends TranslationsSettingsEn {
|
|||||||
@override String get tunneledPlaybackDescription => 'Brug videotunneling. Slå fra, hvis HDR-afspilning viser sort video.';
|
@override String get tunneledPlaybackDescription => 'Brug videotunneling. Slå fra, hvis HDR-afspilning viser sort video.';
|
||||||
@override String get audioPassthrough => 'Lyd-passthrough';
|
@override String get audioPassthrough => 'Lyd-passthrough';
|
||||||
@override String get audioPassthroughDescription => 'Send Dolby/DTS-lyd til din receiver eller dit TV uden genkodning, så surroundlyd bevares. Slå fra, hvis du ikke har lyd.';
|
@override String get audioPassthroughDescription => 'Send Dolby/DTS-lyd til din receiver eller dit TV uden genkodning, så surroundlyd bevares. Slå fra, hvis du ikke har lyd.';
|
||||||
|
@override String get audioPassthroughDescriptionAppleTv => 'Overlad Dolby Digital Plus (inkl. Atmos) til systemet som bitstream. DTS og TrueHD afspilles stadig som flerkanals PCM. Korte lydhuller kan forekomme ved søgning.';
|
||||||
|
@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 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 dvConversionMode => 'Dolby Vision-konvertering';
|
||||||
@override String get dvConversionModeDescription => 'Vælg, hvordan ExoPlayer håndterer Dolby Vision Profile 7-filer.';
|
@override String get dvConversionModeDescription => 'Vælg, hvordan ExoPlayer håndterer Dolby Vision Profile 7-filer.';
|
||||||
@override String get dvConversionAuto => 'Auto';
|
@override String get dvConversionAuto => 'Auto';
|
||||||
@@ -2184,6 +2200,22 @@ extension on TranslationsDa {
|
|||||||
'settings.tunneledPlaybackDescription' => 'Brug videotunneling. Slå fra, hvis HDR-afspilning viser sort video.',
|
'settings.tunneledPlaybackDescription' => 'Brug videotunneling. Slå fra, hvis HDR-afspilning viser sort video.',
|
||||||
'settings.audioPassthrough' => 'Lyd-passthrough',
|
'settings.audioPassthrough' => 'Lyd-passthrough',
|
||||||
'settings.audioPassthroughDescription' => 'Send Dolby/DTS-lyd til din receiver eller dit TV uden genkodning, så surroundlyd bevares. Slå fra, hvis du ikke har lyd.',
|
'settings.audioPassthroughDescription' => 'Send Dolby/DTS-lyd til din receiver eller dit TV uden genkodning, så surroundlyd bevares. Slå fra, hvis du ikke har lyd.',
|
||||||
|
'settings.audioPassthroughDescriptionAppleTv' => 'Overlad Dolby Digital Plus (inkl. Atmos) til systemet som bitstream. DTS og TrueHD afspilles stadig som flerkanals PCM. Korte lydhuller kan forekomme ved søgning.',
|
||||||
|
'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.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.dvConversionMode' => 'Dolby Vision-konvertering',
|
||||||
'settings.dvConversionModeDescription' => 'Vælg, hvordan ExoPlayer håndterer Dolby Vision Profile 7-filer.',
|
'settings.dvConversionModeDescription' => 'Vælg, hvordan ExoPlayer håndterer Dolby Vision Profile 7-filer.',
|
||||||
'settings.dvConversionAuto' => 'Auto',
|
'settings.dvConversionAuto' => 'Auto',
|
||||||
@@ -2426,6 +2458,8 @@ extension on TranslationsDa {
|
|||||||
'messages.libraryScanFailed' => ({required Object error}) => 'Kunne ikke scanne bibliotek: ${error}',
|
'messages.libraryScanFailed' => ({required Object error}) => 'Kunne ikke scanne bibliotek: ${error}',
|
||||||
'messages.metadataRefreshing' => ({required Object title}) => 'Opdaterer metadata for "${title}"...',
|
'messages.metadataRefreshing' => ({required Object title}) => 'Opdaterer metadata for "${title}"...',
|
||||||
'messages.metadataRefreshStarted' => ({required Object title}) => 'Metadataopdatering startet for "${title}"',
|
'messages.metadataRefreshStarted' => ({required Object title}) => 'Metadataopdatering startet for "${title}"',
|
||||||
|
_ => null,
|
||||||
|
} ?? switch (path) {
|
||||||
'messages.metadataRefreshFailed' => ({required Object error}) => 'Kunne ikke opdatere metadata: ${error}',
|
'messages.metadataRefreshFailed' => ({required Object error}) => 'Kunne ikke opdatere metadata: ${error}',
|
||||||
'messages.logoutConfirm' => 'Er du sikker på, at du vil logge ud?',
|
'messages.logoutConfirm' => 'Er du sikker på, at du vil logge ud?',
|
||||||
'messages.noSeasonsFound' => 'Ingen sæsoner fundet',
|
'messages.noSeasonsFound' => 'Ingen sæsoner fundet',
|
||||||
@@ -2442,8 +2476,6 @@ extension on TranslationsDa {
|
|||||||
'messages.serverLimitTitle' => 'Afspilning mislykkedes',
|
'messages.serverLimitTitle' => 'Afspilning mislykkedes',
|
||||||
'messages.serverLimitBody' => 'Serverfejl (HTTP 500). En båndbredde-/transkodningsgrænse afviste nok sessionen. Bed ejeren om at justere den.',
|
'messages.serverLimitBody' => 'Serverfejl (HTTP 500). En båndbredde-/transkodningsgrænse afviste nok sessionen. Bed ejeren om at justere den.',
|
||||||
'messages.logsUploaded' => 'Logs uploadet',
|
'messages.logsUploaded' => 'Logs uploadet',
|
||||||
_ => null,
|
|
||||||
} ?? switch (path) {
|
|
||||||
'messages.logsUploadFailed' => 'Kunne ikke uploade logs',
|
'messages.logsUploadFailed' => 'Kunne ikke uploade logs',
|
||||||
'messages.logId' => 'Log-ID',
|
'messages.logId' => 'Log-ID',
|
||||||
'subtitlingStyling.text' => 'Tekst',
|
'subtitlingStyling.text' => 'Tekst',
|
||||||
@@ -2940,6 +2972,8 @@ extension on TranslationsDa {
|
|||||||
'companionRemote.session.serverStopped' => 'Fjernserver stoppet',
|
'companionRemote.session.serverStopped' => 'Fjernserver stoppet',
|
||||||
'companionRemote.session.serverRunningDescription' => 'Mobile enheder på dit netværk kan oprette forbindelse til denne app',
|
'companionRemote.session.serverRunningDescription' => 'Mobile enheder på dit netværk kan oprette forbindelse til denne app',
|
||||||
'companionRemote.session.serverStoppedDescription' => 'Start serveren for at tillade mobilenheder at oprette forbindelse',
|
'companionRemote.session.serverStoppedDescription' => 'Start serveren for at tillade mobilenheder at oprette forbindelse',
|
||||||
|
_ => null,
|
||||||
|
} ?? switch (path) {
|
||||||
'companionRemote.session.usePhoneToControl' => 'Brug din mobilenhed til at styre denne app',
|
'companionRemote.session.usePhoneToControl' => 'Brug din mobilenhed til at styre denne app',
|
||||||
'companionRemote.session.startServer' => 'Start server',
|
'companionRemote.session.startServer' => 'Start server',
|
||||||
'companionRemote.session.stopServer' => 'Stop server',
|
'companionRemote.session.stopServer' => 'Stop server',
|
||||||
@@ -2956,8 +2990,6 @@ extension on TranslationsDa {
|
|||||||
'companionRemote.pairing.validationHostRequired' => 'Angiv venligst værtsadresse',
|
'companionRemote.pairing.validationHostRequired' => 'Angiv venligst værtsadresse',
|
||||||
'companionRemote.pairing.validationHostFormat' => 'Format skal være IP:port (f.eks. 192.168.1.100:48632)',
|
'companionRemote.pairing.validationHostFormat' => 'Format skal være IP:port (f.eks. 192.168.1.100:48632)',
|
||||||
'companionRemote.pairing.connectionTimedOut' => 'Forbindelsen fik timeout. Brug samme netværk på begge enheder.',
|
'companionRemote.pairing.connectionTimedOut' => 'Forbindelsen fik timeout. Brug samme netværk på begge enheder.',
|
||||||
_ => null,
|
|
||||||
} ?? switch (path) {
|
|
||||||
'companionRemote.pairing.sessionNotFound' => 'Enhed ikke fundet. Sørg for, at Plezy kører på værten.',
|
'companionRemote.pairing.sessionNotFound' => 'Enhed ikke fundet. Sørg for, at Plezy kører på værten.',
|
||||||
'companionRemote.pairing.authFailed' => 'Godkendelse mislykkedes. Begge enheder skal bruge samme Plex-konto.',
|
'companionRemote.pairing.authFailed' => 'Godkendelse mislykkedes. Begge enheder skal bruge samme Plex-konto.',
|
||||||
'companionRemote.pairing.failedToConnect' => ({required Object error}) => 'Kunne ikke oprette forbindelse: ${error}',
|
'companionRemote.pairing.failedToConnect' => ({required Object error}) => 'Kunne ikke oprette forbindelse: ${error}',
|
||||||
|
|||||||
@@ -393,6 +393,22 @@ class _TranslationsSettingsDe extends TranslationsSettingsEn {
|
|||||||
@override String get tunneledPlaybackDescription => 'Video-Tunneling verwenden. Deaktivieren, wenn HDR-Wiedergabe schwarzes Video zeigt.';
|
@override String get tunneledPlaybackDescription => 'Video-Tunneling verwenden. Deaktivieren, wenn HDR-Wiedergabe schwarzes Video zeigt.';
|
||||||
@override String get audioPassthrough => 'Audio-Durchleitung';
|
@override String get audioPassthrough => 'Audio-Durchleitung';
|
||||||
@override String get audioPassthroughDescription => 'Dolby/DTS-Audio ohne Neukodierung an deinen Receiver oder Fernseher senden und Surround-Sound erhalten. Deaktivieren, wenn kein Ton zu hören ist.';
|
@override String get audioPassthroughDescription => 'Dolby/DTS-Audio ohne Neukodierung an deinen Receiver oder Fernseher senden und Surround-Sound erhalten. Deaktivieren, wenn kein Ton zu hören ist.';
|
||||||
|
@override String get audioPassthroughDescriptionAppleTv => 'Übergibt Dolby Digital Plus (inkl. Atmos) als Bitstream an das System. DTS und TrueHD werden weiterhin als Mehrkanal-PCM wiedergegeben. Beim Spulen können kurze Tonaussetzer auftreten.';
|
||||||
|
@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 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 dvConversionMode => 'Dolby-Vision-Konvertierung';
|
||||||
@override String get dvConversionModeDescription => 'Wähle, wie ExoPlayer Dolby-Vision-Profil-7-Dateien behandelt.';
|
@override String get dvConversionModeDescription => 'Wähle, wie ExoPlayer Dolby-Vision-Profil-7-Dateien behandelt.';
|
||||||
@override String get dvConversionAuto => 'Automatisch';
|
@override String get dvConversionAuto => 'Automatisch';
|
||||||
@@ -2184,6 +2200,22 @@ extension on TranslationsDe {
|
|||||||
'settings.tunneledPlaybackDescription' => 'Video-Tunneling verwenden. Deaktivieren, wenn HDR-Wiedergabe schwarzes Video zeigt.',
|
'settings.tunneledPlaybackDescription' => 'Video-Tunneling verwenden. Deaktivieren, wenn HDR-Wiedergabe schwarzes Video zeigt.',
|
||||||
'settings.audioPassthrough' => 'Audio-Durchleitung',
|
'settings.audioPassthrough' => 'Audio-Durchleitung',
|
||||||
'settings.audioPassthroughDescription' => 'Dolby/DTS-Audio ohne Neukodierung an deinen Receiver oder Fernseher senden und Surround-Sound erhalten. Deaktivieren, wenn kein Ton zu hören ist.',
|
'settings.audioPassthroughDescription' => 'Dolby/DTS-Audio ohne Neukodierung an deinen Receiver oder Fernseher senden und Surround-Sound erhalten. Deaktivieren, wenn kein Ton zu hören ist.',
|
||||||
|
'settings.audioPassthroughDescriptionAppleTv' => 'Übergibt Dolby Digital Plus (inkl. Atmos) als Bitstream an das System. DTS und TrueHD werden weiterhin als Mehrkanal-PCM wiedergegeben. Beim Spulen können kurze Tonaussetzer auftreten.',
|
||||||
|
'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.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.dvConversionMode' => 'Dolby-Vision-Konvertierung',
|
||||||
'settings.dvConversionModeDescription' => 'Wähle, wie ExoPlayer Dolby-Vision-Profil-7-Dateien behandelt.',
|
'settings.dvConversionModeDescription' => 'Wähle, wie ExoPlayer Dolby-Vision-Profil-7-Dateien behandelt.',
|
||||||
'settings.dvConversionAuto' => 'Automatisch',
|
'settings.dvConversionAuto' => 'Automatisch',
|
||||||
@@ -2426,6 +2458,8 @@ extension on TranslationsDe {
|
|||||||
'messages.libraryScanFailed' => ({required Object error}) => 'Fehler beim Scannen der Mediathek: ${error}',
|
'messages.libraryScanFailed' => ({required Object error}) => 'Fehler beim Scannen der Mediathek: ${error}',
|
||||||
'messages.metadataRefreshing' => ({required Object title}) => 'Metadaten werden aktualisiert für „${title}“...',
|
'messages.metadataRefreshing' => ({required Object title}) => 'Metadaten werden aktualisiert für „${title}“...',
|
||||||
'messages.metadataRefreshStarted' => ({required Object title}) => 'Metadaten-Aktualisierung gestartet für „${title}“',
|
'messages.metadataRefreshStarted' => ({required Object title}) => 'Metadaten-Aktualisierung gestartet für „${title}“',
|
||||||
|
_ => null,
|
||||||
|
} ?? switch (path) {
|
||||||
'messages.metadataRefreshFailed' => ({required Object error}) => 'Metadaten konnten nicht aktualisiert werden: ${error}',
|
'messages.metadataRefreshFailed' => ({required Object error}) => 'Metadaten konnten nicht aktualisiert werden: ${error}',
|
||||||
'messages.logoutConfirm' => 'Abmeldung wirklich durchführen?',
|
'messages.logoutConfirm' => 'Abmeldung wirklich durchführen?',
|
||||||
'messages.noSeasonsFound' => 'Keine Staffeln gefunden',
|
'messages.noSeasonsFound' => 'Keine Staffeln gefunden',
|
||||||
@@ -2442,8 +2476,6 @@ extension on TranslationsDe {
|
|||||||
'messages.serverLimitTitle' => 'Wiedergabe fehlgeschlagen',
|
'messages.serverLimitTitle' => 'Wiedergabe fehlgeschlagen',
|
||||||
'messages.serverLimitBody' => 'Serverfehler (HTTP 500). Ein Bandbreiten-/Transcoding-Limit lehnte diese Sitzung wohl ab. Bitte den Besitzer um Anpassung.',
|
'messages.serverLimitBody' => 'Serverfehler (HTTP 500). Ein Bandbreiten-/Transcoding-Limit lehnte diese Sitzung wohl ab. Bitte den Besitzer um Anpassung.',
|
||||||
'messages.logsUploaded' => 'Protokolle hochgeladen',
|
'messages.logsUploaded' => 'Protokolle hochgeladen',
|
||||||
_ => null,
|
|
||||||
} ?? switch (path) {
|
|
||||||
'messages.logsUploadFailed' => 'Protokolle konnten nicht hochgeladen werden',
|
'messages.logsUploadFailed' => 'Protokolle konnten nicht hochgeladen werden',
|
||||||
'messages.logId' => 'Protokoll-ID',
|
'messages.logId' => 'Protokoll-ID',
|
||||||
'subtitlingStyling.text' => 'Text',
|
'subtitlingStyling.text' => 'Text',
|
||||||
@@ -2940,6 +2972,8 @@ extension on TranslationsDe {
|
|||||||
'companionRemote.session.serverStopped' => 'Remote-Server gestoppt',
|
'companionRemote.session.serverStopped' => 'Remote-Server gestoppt',
|
||||||
'companionRemote.session.serverRunningDescription' => 'Mobilgeräte in deinem Netzwerk können sich mit dieser App verbinden',
|
'companionRemote.session.serverRunningDescription' => 'Mobilgeräte in deinem Netzwerk können sich mit dieser App verbinden',
|
||||||
'companionRemote.session.serverStoppedDescription' => 'Starte den Server, um Mobilgeräten die Verbindung zu ermöglichen',
|
'companionRemote.session.serverStoppedDescription' => 'Starte den Server, um Mobilgeräten die Verbindung zu ermöglichen',
|
||||||
|
_ => null,
|
||||||
|
} ?? switch (path) {
|
||||||
'companionRemote.session.usePhoneToControl' => 'Verwende dein Mobilgerät, um diese App zu steuern',
|
'companionRemote.session.usePhoneToControl' => 'Verwende dein Mobilgerät, um diese App zu steuern',
|
||||||
'companionRemote.session.startServer' => 'Server starten',
|
'companionRemote.session.startServer' => 'Server starten',
|
||||||
'companionRemote.session.stopServer' => 'Server stoppen',
|
'companionRemote.session.stopServer' => 'Server stoppen',
|
||||||
@@ -2956,8 +2990,6 @@ extension on TranslationsDe {
|
|||||||
'companionRemote.pairing.validationHostRequired' => 'Bitte Host-Adresse eingeben',
|
'companionRemote.pairing.validationHostRequired' => 'Bitte Host-Adresse eingeben',
|
||||||
'companionRemote.pairing.validationHostFormat' => 'Format muss IP:Port sein (z.B. 192.168.1.100:48632)',
|
'companionRemote.pairing.validationHostFormat' => 'Format muss IP:Port sein (z.B. 192.168.1.100:48632)',
|
||||||
'companionRemote.pairing.connectionTimedOut' => 'Verbindung hat Zeitlimit überschritten. Nutze auf beiden Geräten dasselbe Netzwerk.',
|
'companionRemote.pairing.connectionTimedOut' => 'Verbindung hat Zeitlimit überschritten. Nutze auf beiden Geräten dasselbe Netzwerk.',
|
||||||
_ => null,
|
|
||||||
} ?? switch (path) {
|
|
||||||
'companionRemote.pairing.sessionNotFound' => 'Gerät nicht gefunden. Stelle sicher, dass Plezy auf dem Host läuft.',
|
'companionRemote.pairing.sessionNotFound' => 'Gerät nicht gefunden. Stelle sicher, dass Plezy auf dem Host läuft.',
|
||||||
'companionRemote.pairing.authFailed' => 'Authentifizierung fehlgeschlagen. Beide Geräte benötigen dasselbe Plex-Konto.',
|
'companionRemote.pairing.authFailed' => 'Authentifizierung fehlgeschlagen. Beide Geräte benötigen dasselbe Plex-Konto.',
|
||||||
'companionRemote.pairing.failedToConnect' => ({required Object error}) => 'Verbindung fehlgeschlagen: ${error}',
|
'companionRemote.pairing.failedToConnect' => ({required Object error}) => 'Verbindung fehlgeschlagen: ${error}',
|
||||||
|
|||||||
@@ -921,6 +921,54 @@ class TranslationsSettingsEn {
|
|||||||
/// en: 'Send Dolby/DTS audio to your receiver or TV without re-encoding, preserving surround sound. Turn off if you have no sound.'
|
/// en: 'Send Dolby/DTS audio to your receiver or TV without re-encoding, preserving surround sound. Turn off if you have no sound.'
|
||||||
String get audioPassthroughDescription => 'Send Dolby/DTS audio to your receiver or TV without re-encoding, preserving surround sound. Turn off if you have no sound.';
|
String get audioPassthroughDescription => 'Send Dolby/DTS audio to your receiver or TV without re-encoding, preserving surround sound. Turn off if you have no sound.';
|
||||||
|
|
||||||
|
/// en: 'Hand Dolby Digital Plus (including Atmos) to the system for bitstream output. DTS and TrueHD still play as multichannel PCM. Brief audio gaps can occur when seeking.'
|
||||||
|
String get audioPassthroughDescriptionAppleTv => 'Hand Dolby Digital Plus (including Atmos) to the system for bitstream output. DTS and TrueHD still play as multichannel PCM. Brief audio gaps can occur when seeking.';
|
||||||
|
|
||||||
|
/// 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: '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'
|
/// en: 'Dolby Vision Conversion'
|
||||||
String get dvConversionMode => 'Dolby Vision Conversion';
|
String get dvConversionMode => 'Dolby Vision Conversion';
|
||||||
|
|
||||||
@@ -4785,6 +4833,22 @@ extension on Translations {
|
|||||||
'settings.tunneledPlaybackDescription' => 'Use video tunneling. Disable if HDR playback shows black video.',
|
'settings.tunneledPlaybackDescription' => 'Use video tunneling. Disable if HDR playback shows black video.',
|
||||||
'settings.audioPassthrough' => 'Audio Passthrough',
|
'settings.audioPassthrough' => 'Audio Passthrough',
|
||||||
'settings.audioPassthroughDescription' => 'Send Dolby/DTS audio to your receiver or TV without re-encoding, preserving surround sound. Turn off if you have no sound.',
|
'settings.audioPassthroughDescription' => 'Send Dolby/DTS audio to your receiver or TV without re-encoding, preserving surround sound. Turn off if you have no sound.',
|
||||||
|
'settings.audioPassthroughDescriptionAppleTv' => 'Hand Dolby Digital Plus (including Atmos) to the system for bitstream output. DTS and TrueHD still play as multichannel PCM. Brief audio gaps can occur when seeking.',
|
||||||
|
'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.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.dvConversionMode' => 'Dolby Vision Conversion',
|
||||||
'settings.dvConversionModeDescription' => 'Choose how ExoPlayer handles Dolby Vision Profile 7 files.',
|
'settings.dvConversionModeDescription' => 'Choose how ExoPlayer handles Dolby Vision Profile 7 files.',
|
||||||
'settings.dvConversionAuto' => 'Auto',
|
'settings.dvConversionAuto' => 'Auto',
|
||||||
@@ -5021,6 +5085,8 @@ extension on Translations {
|
|||||||
'messages.unableToDetermineLibrarySection' => 'Unable to determine library section for this item',
|
'messages.unableToDetermineLibrarySection' => 'Unable to determine library section for this item',
|
||||||
'messages.logsCleared' => 'Logs cleared',
|
'messages.logsCleared' => 'Logs cleared',
|
||||||
'messages.logsCopied' => 'Logs copied to clipboard',
|
'messages.logsCopied' => 'Logs copied to clipboard',
|
||||||
|
_ => null,
|
||||||
|
} ?? switch (path) {
|
||||||
'messages.noLogsAvailable' => 'No logs available',
|
'messages.noLogsAvailable' => 'No logs available',
|
||||||
'messages.libraryScanning' => ({required Object title}) => 'Scanning "${title}"...',
|
'messages.libraryScanning' => ({required Object title}) => 'Scanning "${title}"...',
|
||||||
'messages.libraryScanStarted' => ({required Object title}) => 'Library scan started for "${title}"',
|
'messages.libraryScanStarted' => ({required Object title}) => 'Library scan started for "${title}"',
|
||||||
@@ -5037,8 +5103,6 @@ extension on Translations {
|
|||||||
'messages.noResultsFound' => 'No results found',
|
'messages.noResultsFound' => 'No results found',
|
||||||
'messages.sleepTimerSet' => ({required Object label}) => 'Sleep timer set for ${label}',
|
'messages.sleepTimerSet' => ({required Object label}) => 'Sleep timer set for ${label}',
|
||||||
'messages.noItemsAvailable' => 'No items available',
|
'messages.noItemsAvailable' => 'No items available',
|
||||||
_ => null,
|
|
||||||
} ?? switch (path) {
|
|
||||||
'messages.failedToCreatePlayQueueNoItems' => 'Failed to create play queue - no items',
|
'messages.failedToCreatePlayQueueNoItems' => 'Failed to create play queue - no items',
|
||||||
'messages.failedPlayback' => ({required Object action, required Object error}) => 'Failed to ${action}: ${error}',
|
'messages.failedPlayback' => ({required Object action, required Object error}) => 'Failed to ${action}: ${error}',
|
||||||
'messages.switchingToCompatiblePlayer' => 'Switching to compatible player...',
|
'messages.switchingToCompatiblePlayer' => 'Switching to compatible player...',
|
||||||
@@ -5535,6 +5599,8 @@ extension on Translations {
|
|||||||
'shaders.deleteShaderConfirm' => ({required Object name}) => 'Delete "${name}"?',
|
'shaders.deleteShaderConfirm' => ({required Object name}) => 'Delete "${name}"?',
|
||||||
'companionRemote.title' => 'Companion Remote',
|
'companionRemote.title' => 'Companion Remote',
|
||||||
'companionRemote.connectedTo' => ({required Object name}) => 'Connected to ${name}',
|
'companionRemote.connectedTo' => ({required Object name}) => 'Connected to ${name}',
|
||||||
|
_ => null,
|
||||||
|
} ?? switch (path) {
|
||||||
'companionRemote.unknownDevice' => 'Unknown Device',
|
'companionRemote.unknownDevice' => 'Unknown Device',
|
||||||
'companionRemote.session.startingServer' => 'Starting remote server...',
|
'companionRemote.session.startingServer' => 'Starting remote server...',
|
||||||
'companionRemote.session.failedToCreate' => 'Failed to start remote server:',
|
'companionRemote.session.failedToCreate' => 'Failed to start remote server:',
|
||||||
@@ -5551,8 +5617,6 @@ extension on Translations {
|
|||||||
'companionRemote.pairing.discoveryDescription' => 'Plezy devices with the same Plex account appear here',
|
'companionRemote.pairing.discoveryDescription' => 'Plezy devices with the same Plex account appear here',
|
||||||
'companionRemote.pairing.hostAddressHint' => '192.168.1.100:48632',
|
'companionRemote.pairing.hostAddressHint' => '192.168.1.100:48632',
|
||||||
'companionRemote.pairing.connecting' => 'Connecting...',
|
'companionRemote.pairing.connecting' => 'Connecting...',
|
||||||
_ => null,
|
|
||||||
} ?? switch (path) {
|
|
||||||
'companionRemote.pairing.searchingForDevices' => 'Looking for devices...',
|
'companionRemote.pairing.searchingForDevices' => 'Looking for devices...',
|
||||||
'companionRemote.pairing.noDevicesFound' => 'No devices found on your network',
|
'companionRemote.pairing.noDevicesFound' => 'No devices found on your network',
|
||||||
'companionRemote.pairing.noDevicesHint' => 'Open Plezy on desktop and use the same WiFi',
|
'companionRemote.pairing.noDevicesHint' => 'Open Plezy on desktop and use the same WiFi',
|
||||||
|
|||||||
@@ -393,6 +393,22 @@ class _TranslationsSettingsEs extends TranslationsSettingsEn {
|
|||||||
@override String get tunneledPlaybackDescription => 'Usar tunelización de video. Desactívala si HDR muestra video negro.';
|
@override String get tunneledPlaybackDescription => 'Usar tunelización de video. Desactívala si HDR muestra video negro.';
|
||||||
@override String get audioPassthrough => 'Audio Passthrough';
|
@override String get audioPassthrough => 'Audio Passthrough';
|
||||||
@override String get audioPassthroughDescription => 'Envía el audio Dolby/DTS a tu receptor o TV sin recodificar, conservando el sonido envolvente. Desactívalo si no tienes sonido.';
|
@override String get audioPassthroughDescription => 'Envía el audio Dolby/DTS a tu receptor o TV sin recodificar, conservando el sonido envolvente. Desactívalo si no tienes sonido.';
|
||||||
|
@override String get audioPassthroughDescriptionAppleTv => 'Entrega Dolby Digital Plus (incluido Atmos) al sistema como bitstream. DTS y TrueHD se siguen reproduciendo como PCM multicanal. Pueden producirse breves cortes de audio al buscar.';
|
||||||
|
@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 => 'Stream Atmos de Apple';
|
||||||
|
@override String get atmosTestHlsAtmosDescription => 'Stream Dolby Atmos de referencia. El receptor debería mostrar Dolby Atmos.';
|
||||||
|
@override String get atmosTestHlsControl => 'Stream surround de Apple';
|
||||||
|
@override String get atmosTestHlsControlDescription => 'Stream de control sin Atmos. El receptor debería mostrar surround sin Atmos.';
|
||||||
|
@override String get atmosTestRawStream => 'Stream EAC3 sin procesar';
|
||||||
|
@override String get atmosTestRawStreamDescription => 'Transmite el archivo de prueba igual que la reproducción Atmos del reproductor. Necesita 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 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 dvConversionMode => 'Conversión de Dolby Vision';
|
||||||
@override String get dvConversionModeDescription => 'Elige cómo ExoPlayer gestiona archivos Dolby Vision Profile 7.';
|
@override String get dvConversionModeDescription => 'Elige cómo ExoPlayer gestiona archivos Dolby Vision Profile 7.';
|
||||||
@override String get dvConversionAuto => 'Automático';
|
@override String get dvConversionAuto => 'Automático';
|
||||||
@@ -2184,6 +2200,22 @@ extension on TranslationsEs {
|
|||||||
'settings.tunneledPlaybackDescription' => 'Usar tunelización de video. Desactívala si HDR muestra video negro.',
|
'settings.tunneledPlaybackDescription' => 'Usar tunelización de video. Desactívala si HDR muestra video negro.',
|
||||||
'settings.audioPassthrough' => 'Audio Passthrough',
|
'settings.audioPassthrough' => 'Audio Passthrough',
|
||||||
'settings.audioPassthroughDescription' => 'Envía el audio Dolby/DTS a tu receptor o TV sin recodificar, conservando el sonido envolvente. Desactívalo si no tienes sonido.',
|
'settings.audioPassthroughDescription' => 'Envía el audio Dolby/DTS a tu receptor o TV sin recodificar, conservando el sonido envolvente. Desactívalo si no tienes sonido.',
|
||||||
|
'settings.audioPassthroughDescriptionAppleTv' => 'Entrega Dolby Digital Plus (incluido Atmos) al sistema como bitstream. DTS y TrueHD se siguen reproduciendo como PCM multicanal. Pueden producirse breves cortes de audio al buscar.',
|
||||||
|
'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' => 'Stream Atmos de Apple',
|
||||||
|
'settings.atmosTestHlsAtmosDescription' => 'Stream Dolby Atmos de referencia. El receptor debería mostrar Dolby Atmos.',
|
||||||
|
'settings.atmosTestHlsControl' => 'Stream surround de Apple',
|
||||||
|
'settings.atmosTestHlsControlDescription' => 'Stream de control sin Atmos. El receptor debería mostrar surround sin Atmos.',
|
||||||
|
'settings.atmosTestRawStream' => 'Stream EAC3 sin procesar',
|
||||||
|
'settings.atmosTestRawStreamDescription' => 'Transmite el archivo de prueba igual que la reproducción Atmos del reproductor. Necesita 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.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.dvConversionMode' => 'Conversión de Dolby Vision',
|
||||||
'settings.dvConversionModeDescription' => 'Elige cómo ExoPlayer gestiona archivos Dolby Vision Profile 7.',
|
'settings.dvConversionModeDescription' => 'Elige cómo ExoPlayer gestiona archivos Dolby Vision Profile 7.',
|
||||||
'settings.dvConversionAuto' => 'Automático',
|
'settings.dvConversionAuto' => 'Automático',
|
||||||
@@ -2426,6 +2458,8 @@ extension on TranslationsEs {
|
|||||||
'messages.libraryScanFailed' => ({required Object error}) => 'Error al escanear biblioteca: ${error}',
|
'messages.libraryScanFailed' => ({required Object error}) => 'Error al escanear biblioteca: ${error}',
|
||||||
'messages.metadataRefreshing' => ({required Object title}) => 'Actualizando metadatos de "${title}"...',
|
'messages.metadataRefreshing' => ({required Object title}) => 'Actualizando metadatos de "${title}"...',
|
||||||
'messages.metadataRefreshStarted' => ({required Object title}) => 'Actualización de metadatos iniciada para "${title}"',
|
'messages.metadataRefreshStarted' => ({required Object title}) => 'Actualización de metadatos iniciada para "${title}"',
|
||||||
|
_ => null,
|
||||||
|
} ?? switch (path) {
|
||||||
'messages.metadataRefreshFailed' => ({required Object error}) => 'Error al actualizar metadatos: ${error}',
|
'messages.metadataRefreshFailed' => ({required Object error}) => 'Error al actualizar metadatos: ${error}',
|
||||||
'messages.logoutConfirm' => '¿Estás seguro de que quieres cerrar sesión?',
|
'messages.logoutConfirm' => '¿Estás seguro de que quieres cerrar sesión?',
|
||||||
'messages.noSeasonsFound' => 'No se encontraron temporadas',
|
'messages.noSeasonsFound' => 'No se encontraron temporadas',
|
||||||
@@ -2442,8 +2476,6 @@ extension on TranslationsEs {
|
|||||||
'messages.serverLimitTitle' => 'Error de reproducción',
|
'messages.serverLimitTitle' => 'Error de reproducción',
|
||||||
'messages.serverLimitBody' => 'Error del servidor (HTTP 500). Un límite de ancho de banda/transcodificación probablemente rechazó esta sesión. Pide al propietario que lo ajuste.',
|
'messages.serverLimitBody' => 'Error del servidor (HTTP 500). Un límite de ancho de banda/transcodificación probablemente rechazó esta sesión. Pide al propietario que lo ajuste.',
|
||||||
'messages.logsUploaded' => 'Registros subidos',
|
'messages.logsUploaded' => 'Registros subidos',
|
||||||
_ => null,
|
|
||||||
} ?? switch (path) {
|
|
||||||
'messages.logsUploadFailed' => 'Error al subir registros',
|
'messages.logsUploadFailed' => 'Error al subir registros',
|
||||||
'messages.logId' => 'ID de registro',
|
'messages.logId' => 'ID de registro',
|
||||||
'subtitlingStyling.text' => 'Texto',
|
'subtitlingStyling.text' => 'Texto',
|
||||||
@@ -2940,6 +2972,8 @@ extension on TranslationsEs {
|
|||||||
'companionRemote.session.serverStopped' => 'Servidor remoto detenido',
|
'companionRemote.session.serverStopped' => 'Servidor remoto detenido',
|
||||||
'companionRemote.session.serverRunningDescription' => 'Los dispositivos móviles de tu red pueden conectarse a esta app',
|
'companionRemote.session.serverRunningDescription' => 'Los dispositivos móviles de tu red pueden conectarse a esta app',
|
||||||
'companionRemote.session.serverStoppedDescription' => 'Inicia el servidor para permitir que los dispositivos móviles se conecten',
|
'companionRemote.session.serverStoppedDescription' => 'Inicia el servidor para permitir que los dispositivos móviles se conecten',
|
||||||
|
_ => null,
|
||||||
|
} ?? switch (path) {
|
||||||
'companionRemote.session.usePhoneToControl' => 'Usa tu dispositivo móvil para controlar esta aplicación',
|
'companionRemote.session.usePhoneToControl' => 'Usa tu dispositivo móvil para controlar esta aplicación',
|
||||||
'companionRemote.session.startServer' => 'Iniciar servidor',
|
'companionRemote.session.startServer' => 'Iniciar servidor',
|
||||||
'companionRemote.session.stopServer' => 'Detener servidor',
|
'companionRemote.session.stopServer' => 'Detener servidor',
|
||||||
@@ -2956,8 +2990,6 @@ extension on TranslationsEs {
|
|||||||
'companionRemote.pairing.validationHostRequired' => 'Ingresa la dirección del host',
|
'companionRemote.pairing.validationHostRequired' => 'Ingresa la dirección del host',
|
||||||
'companionRemote.pairing.validationHostFormat' => 'El formato debe ser IP:puerto (ej. 192.168.1.100:48632)',
|
'companionRemote.pairing.validationHostFormat' => 'El formato debe ser IP:puerto (ej. 192.168.1.100:48632)',
|
||||||
'companionRemote.pairing.connectionTimedOut' => 'Tiempo de conexión agotado. Usa la misma red en ambos dispositivos.',
|
'companionRemote.pairing.connectionTimedOut' => 'Tiempo de conexión agotado. Usa la misma red en ambos dispositivos.',
|
||||||
_ => null,
|
|
||||||
} ?? switch (path) {
|
|
||||||
'companionRemote.pairing.sessionNotFound' => 'Dispositivo no encontrado. Asegúrate de que Plezy esté en ejecución en el host.',
|
'companionRemote.pairing.sessionNotFound' => 'Dispositivo no encontrado. Asegúrate de que Plezy esté en ejecución en el host.',
|
||||||
'companionRemote.pairing.authFailed' => 'Autenticación fallida. Ambos dispositivos necesitan la misma cuenta Plex.',
|
'companionRemote.pairing.authFailed' => 'Autenticación fallida. Ambos dispositivos necesitan la misma cuenta Plex.',
|
||||||
'companionRemote.pairing.failedToConnect' => ({required Object error}) => 'Error al conectar: ${error}',
|
'companionRemote.pairing.failedToConnect' => ({required Object error}) => 'Error al conectar: ${error}',
|
||||||
|
|||||||
@@ -393,6 +393,22 @@ class _TranslationsSettingsFr extends TranslationsSettingsEn {
|
|||||||
@override String get tunneledPlaybackDescription => 'Utiliser le tunneling vidéo. Désactivez si la lecture HDR affiche un écran noir.';
|
@override String get tunneledPlaybackDescription => 'Utiliser le tunneling vidéo. Désactivez si la lecture HDR affiche un écran noir.';
|
||||||
@override String get audioPassthrough => 'Audio Pass-Through';
|
@override String get audioPassthrough => 'Audio Pass-Through';
|
||||||
@override String get audioPassthroughDescription => 'Envoyez l\'audio Dolby/DTS vers votre ampli ou téléviseur sans réencodage, en conservant le son surround. Désactivez si vous n\'avez aucun son.';
|
@override String get audioPassthroughDescription => 'Envoyez l\'audio Dolby/DTS vers votre ampli ou téléviseur sans réencodage, en conservant le son surround. Désactivez si vous n\'avez aucun son.';
|
||||||
|
@override String get audioPassthroughDescriptionAppleTv => 'Transmet le Dolby Digital Plus (y compris Atmos) au système en bitstream. Le DTS et le TrueHD restent lus en PCM multicanal. De brèves coupures audio peuvent survenir lors des sauts.';
|
||||||
|
@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 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 dvConversionMode => 'Conversion Dolby Vision';
|
||||||
@override String get dvConversionModeDescription => 'Choisissez comment ExoPlayer gère les fichiers Dolby Vision Profile 7.';
|
@override String get dvConversionModeDescription => 'Choisissez comment ExoPlayer gère les fichiers Dolby Vision Profile 7.';
|
||||||
@override String get dvConversionAuto => 'Auto';
|
@override String get dvConversionAuto => 'Auto';
|
||||||
@@ -2184,6 +2200,22 @@ extension on TranslationsFr {
|
|||||||
'settings.tunneledPlaybackDescription' => 'Utiliser le tunneling vidéo. Désactivez si la lecture HDR affiche un écran noir.',
|
'settings.tunneledPlaybackDescription' => 'Utiliser le tunneling vidéo. Désactivez si la lecture HDR affiche un écran noir.',
|
||||||
'settings.audioPassthrough' => 'Audio Pass-Through',
|
'settings.audioPassthrough' => 'Audio Pass-Through',
|
||||||
'settings.audioPassthroughDescription' => 'Envoyez l\'audio Dolby/DTS vers votre ampli ou téléviseur sans réencodage, en conservant le son surround. Désactivez si vous n\'avez aucun son.',
|
'settings.audioPassthroughDescription' => 'Envoyez l\'audio Dolby/DTS vers votre ampli ou téléviseur sans réencodage, en conservant le son surround. Désactivez si vous n\'avez aucun son.',
|
||||||
|
'settings.audioPassthroughDescriptionAppleTv' => 'Transmet le Dolby Digital Plus (y compris Atmos) au système en bitstream. Le DTS et le TrueHD restent lus en PCM multicanal. De brèves coupures audio peuvent survenir lors des sauts.',
|
||||||
|
'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.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.dvConversionMode' => 'Conversion Dolby Vision',
|
||||||
'settings.dvConversionModeDescription' => 'Choisissez comment ExoPlayer gère les fichiers Dolby Vision Profile 7.',
|
'settings.dvConversionModeDescription' => 'Choisissez comment ExoPlayer gère les fichiers Dolby Vision Profile 7.',
|
||||||
'settings.dvConversionAuto' => 'Auto',
|
'settings.dvConversionAuto' => 'Auto',
|
||||||
@@ -2426,6 +2458,8 @@ extension on TranslationsFr {
|
|||||||
'messages.libraryScanFailed' => ({required Object error}) => 'Échec du scan de la bibliothèque: ${error}',
|
'messages.libraryScanFailed' => ({required Object error}) => 'Échec du scan de la bibliothèque: ${error}',
|
||||||
'messages.metadataRefreshing' => ({required Object title}) => 'Actualisation des métadonnées pour "${title}"...',
|
'messages.metadataRefreshing' => ({required Object title}) => 'Actualisation des métadonnées pour "${title}"...',
|
||||||
'messages.metadataRefreshStarted' => ({required Object title}) => 'Actualisation des métadonnées lancée pour "${title}"',
|
'messages.metadataRefreshStarted' => ({required Object title}) => 'Actualisation des métadonnées lancée pour "${title}"',
|
||||||
|
_ => null,
|
||||||
|
} ?? switch (path) {
|
||||||
'messages.metadataRefreshFailed' => ({required Object error}) => 'Échec de l\'actualisation des métadonnées: ${error}',
|
'messages.metadataRefreshFailed' => ({required Object error}) => 'Échec de l\'actualisation des métadonnées: ${error}',
|
||||||
'messages.logoutConfirm' => 'Êtes-vous sûr de vouloir vous déconnecter ?',
|
'messages.logoutConfirm' => 'Êtes-vous sûr de vouloir vous déconnecter ?',
|
||||||
'messages.noSeasonsFound' => 'Aucune saison trouvée',
|
'messages.noSeasonsFound' => 'Aucune saison trouvée',
|
||||||
@@ -2442,8 +2476,6 @@ extension on TranslationsFr {
|
|||||||
'messages.serverLimitTitle' => 'Échec de la lecture',
|
'messages.serverLimitTitle' => 'Échec de la lecture',
|
||||||
'messages.serverLimitBody' => 'Erreur serveur (HTTP 500). Une limite de bande passante/transcodage a probablement rejeté cette session. Demandez au propriétaire de l\'ajuster.',
|
'messages.serverLimitBody' => 'Erreur serveur (HTTP 500). Une limite de bande passante/transcodage a probablement rejeté cette session. Demandez au propriétaire de l\'ajuster.',
|
||||||
'messages.logsUploaded' => 'Logs envoyés',
|
'messages.logsUploaded' => 'Logs envoyés',
|
||||||
_ => null,
|
|
||||||
} ?? switch (path) {
|
|
||||||
'messages.logsUploadFailed' => 'Échec de l\'envoi des logs',
|
'messages.logsUploadFailed' => 'Échec de l\'envoi des logs',
|
||||||
'messages.logId' => 'ID du log',
|
'messages.logId' => 'ID du log',
|
||||||
'subtitlingStyling.text' => 'Texte',
|
'subtitlingStyling.text' => 'Texte',
|
||||||
@@ -2940,6 +2972,8 @@ extension on TranslationsFr {
|
|||||||
'companionRemote.session.serverStopped' => 'Serveur distant arrêté',
|
'companionRemote.session.serverStopped' => 'Serveur distant arrêté',
|
||||||
'companionRemote.session.serverRunningDescription' => 'Les appareils mobiles de votre réseau peuvent se connecter à cette app',
|
'companionRemote.session.serverRunningDescription' => 'Les appareils mobiles de votre réseau peuvent se connecter à cette app',
|
||||||
'companionRemote.session.serverStoppedDescription' => 'Démarrez le serveur pour permettre aux appareils mobiles de se connecter',
|
'companionRemote.session.serverStoppedDescription' => 'Démarrez le serveur pour permettre aux appareils mobiles de se connecter',
|
||||||
|
_ => null,
|
||||||
|
} ?? switch (path) {
|
||||||
'companionRemote.session.usePhoneToControl' => 'Utilisez votre appareil mobile pour contrôler cette application',
|
'companionRemote.session.usePhoneToControl' => 'Utilisez votre appareil mobile pour contrôler cette application',
|
||||||
'companionRemote.session.startServer' => 'Démarrer le serveur',
|
'companionRemote.session.startServer' => 'Démarrer le serveur',
|
||||||
'companionRemote.session.stopServer' => 'Arrêter le serveur',
|
'companionRemote.session.stopServer' => 'Arrêter le serveur',
|
||||||
@@ -2956,8 +2990,6 @@ extension on TranslationsFr {
|
|||||||
'companionRemote.pairing.validationHostRequired' => 'Veuillez entrer l\'adresse de l\'hôte',
|
'companionRemote.pairing.validationHostRequired' => 'Veuillez entrer l\'adresse de l\'hôte',
|
||||||
'companionRemote.pairing.validationHostFormat' => 'Le format doit être IP:port (ex. 192.168.1.100:48632)',
|
'companionRemote.pairing.validationHostFormat' => 'Le format doit être IP:port (ex. 192.168.1.100:48632)',
|
||||||
'companionRemote.pairing.connectionTimedOut' => 'Connexion expirée. Utilisez le même réseau sur les deux appareils.',
|
'companionRemote.pairing.connectionTimedOut' => 'Connexion expirée. Utilisez le même réseau sur les deux appareils.',
|
||||||
_ => null,
|
|
||||||
} ?? switch (path) {
|
|
||||||
'companionRemote.pairing.sessionNotFound' => 'Appareil introuvable. Assurez-vous que Plezy fonctionne sur l\'hôte.',
|
'companionRemote.pairing.sessionNotFound' => 'Appareil introuvable. Assurez-vous que Plezy fonctionne sur l\'hôte.',
|
||||||
'companionRemote.pairing.authFailed' => 'Échec de l\'authentification. Les deux appareils doivent utiliser le même compte Plex.',
|
'companionRemote.pairing.authFailed' => 'Échec de l\'authentification. Les deux appareils doivent utiliser le même compte Plex.',
|
||||||
'companionRemote.pairing.failedToConnect' => ({required Object error}) => 'Échec de la connexion : ${error}',
|
'companionRemote.pairing.failedToConnect' => ({required Object error}) => 'Échec de la connexion : ${error}',
|
||||||
|
|||||||
@@ -393,6 +393,22 @@ class _TranslationsSettingsIt extends TranslationsSettingsEn {
|
|||||||
@override String get tunneledPlaybackDescription => 'Usa tunneling video. Disattiva se la riproduzione HDR mostra video nero.';
|
@override String get tunneledPlaybackDescription => 'Usa tunneling video. Disattiva se la riproduzione HDR mostra video nero.';
|
||||||
@override String get audioPassthrough => 'Audio Passthrough';
|
@override String get audioPassthrough => 'Audio Passthrough';
|
||||||
@override String get audioPassthroughDescription => 'Invia l\'audio Dolby/DTS al ricevitore o alla TV senza ricodifica, mantenendo il suono surround. Disattiva se non senti audio.';
|
@override String get audioPassthroughDescription => 'Invia l\'audio Dolby/DTS al ricevitore o alla TV senza ricodifica, mantenendo il suono surround. Disattiva se non senti audio.';
|
||||||
|
@override String get audioPassthroughDescriptionAppleTv => 'Consegna Dolby Digital Plus (incluso Atmos) al sistema come bitstream. DTS e TrueHD vengono comunque riprodotti come PCM multicanale. Durante i salti possono verificarsi brevi interruzioni audio.';
|
||||||
|
@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 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 dvConversionMode => 'Conversione Dolby Vision';
|
||||||
@override String get dvConversionModeDescription => 'Scegli come ExoPlayer gestisce i file Dolby Vision Profile 7.';
|
@override String get dvConversionModeDescription => 'Scegli come ExoPlayer gestisce i file Dolby Vision Profile 7.';
|
||||||
@override String get dvConversionAuto => 'Auto';
|
@override String get dvConversionAuto => 'Auto';
|
||||||
@@ -2184,6 +2200,22 @@ extension on TranslationsIt {
|
|||||||
'settings.tunneledPlaybackDescription' => 'Usa tunneling video. Disattiva se la riproduzione HDR mostra video nero.',
|
'settings.tunneledPlaybackDescription' => 'Usa tunneling video. Disattiva se la riproduzione HDR mostra video nero.',
|
||||||
'settings.audioPassthrough' => 'Audio Passthrough',
|
'settings.audioPassthrough' => 'Audio Passthrough',
|
||||||
'settings.audioPassthroughDescription' => 'Invia l\'audio Dolby/DTS al ricevitore o alla TV senza ricodifica, mantenendo il suono surround. Disattiva se non senti audio.',
|
'settings.audioPassthroughDescription' => 'Invia l\'audio Dolby/DTS al ricevitore o alla TV senza ricodifica, mantenendo il suono surround. Disattiva se non senti audio.',
|
||||||
|
'settings.audioPassthroughDescriptionAppleTv' => 'Consegna Dolby Digital Plus (incluso Atmos) al sistema come bitstream. DTS e TrueHD vengono comunque riprodotti come PCM multicanale. Durante i salti possono verificarsi brevi interruzioni audio.',
|
||||||
|
'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.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.dvConversionMode' => 'Conversione Dolby Vision',
|
||||||
'settings.dvConversionModeDescription' => 'Scegli come ExoPlayer gestisce i file Dolby Vision Profile 7.',
|
'settings.dvConversionModeDescription' => 'Scegli come ExoPlayer gestisce i file Dolby Vision Profile 7.',
|
||||||
'settings.dvConversionAuto' => 'Auto',
|
'settings.dvConversionAuto' => 'Auto',
|
||||||
@@ -2426,6 +2458,8 @@ extension on TranslationsIt {
|
|||||||
'messages.libraryScanFailed' => ({required Object error}) => 'Impossibile eseguire scansione della libreria: ${error}',
|
'messages.libraryScanFailed' => ({required Object error}) => 'Impossibile eseguire scansione della libreria: ${error}',
|
||||||
'messages.metadataRefreshing' => ({required Object title}) => 'Aggiornamento metadati per "${title}"...',
|
'messages.metadataRefreshing' => ({required Object title}) => 'Aggiornamento metadati per "${title}"...',
|
||||||
'messages.metadataRefreshStarted' => ({required Object title}) => 'Aggiornamento metadati per "${title}"',
|
'messages.metadataRefreshStarted' => ({required Object title}) => 'Aggiornamento metadati per "${title}"',
|
||||||
|
_ => null,
|
||||||
|
} ?? switch (path) {
|
||||||
'messages.metadataRefreshFailed' => ({required Object error}) => 'Errore aggiornamento metadati: ${error}',
|
'messages.metadataRefreshFailed' => ({required Object error}) => 'Errore aggiornamento metadati: ${error}',
|
||||||
'messages.logoutConfirm' => 'Sei sicuro di volerti disconnettere?',
|
'messages.logoutConfirm' => 'Sei sicuro di volerti disconnettere?',
|
||||||
'messages.noSeasonsFound' => 'Nessuna stagione trovata',
|
'messages.noSeasonsFound' => 'Nessuna stagione trovata',
|
||||||
@@ -2442,8 +2476,6 @@ extension on TranslationsIt {
|
|||||||
'messages.serverLimitTitle' => 'Riproduzione non riuscita',
|
'messages.serverLimitTitle' => 'Riproduzione non riuscita',
|
||||||
'messages.serverLimitBody' => 'Errore server (HTTP 500). Un limite di banda/transcodifica probabilmente ha rifiutato questa sessione. Chiedi al proprietario di modificarlo.',
|
'messages.serverLimitBody' => 'Errore server (HTTP 500). Un limite di banda/transcodifica probabilmente ha rifiutato questa sessione. Chiedi al proprietario di modificarlo.',
|
||||||
'messages.logsUploaded' => 'Log caricati',
|
'messages.logsUploaded' => 'Log caricati',
|
||||||
_ => null,
|
|
||||||
} ?? switch (path) {
|
|
||||||
'messages.logsUploadFailed' => 'Caricamento log fallito',
|
'messages.logsUploadFailed' => 'Caricamento log fallito',
|
||||||
'messages.logId' => 'ID log',
|
'messages.logId' => 'ID log',
|
||||||
'subtitlingStyling.text' => 'Testo',
|
'subtitlingStyling.text' => 'Testo',
|
||||||
@@ -2940,6 +2972,8 @@ extension on TranslationsIt {
|
|||||||
'companionRemote.session.serverStopped' => 'Server remoto arrestato',
|
'companionRemote.session.serverStopped' => 'Server remoto arrestato',
|
||||||
'companionRemote.session.serverRunningDescription' => 'I dispositivi mobili sulla tua rete possono connettersi a questa app',
|
'companionRemote.session.serverRunningDescription' => 'I dispositivi mobili sulla tua rete possono connettersi a questa app',
|
||||||
'companionRemote.session.serverStoppedDescription' => 'Avvia il server per consentire ai dispositivi mobili di connettersi',
|
'companionRemote.session.serverStoppedDescription' => 'Avvia il server per consentire ai dispositivi mobili di connettersi',
|
||||||
|
_ => null,
|
||||||
|
} ?? switch (path) {
|
||||||
'companionRemote.session.usePhoneToControl' => 'Usa il tuo dispositivo mobile per controllare questa app',
|
'companionRemote.session.usePhoneToControl' => 'Usa il tuo dispositivo mobile per controllare questa app',
|
||||||
'companionRemote.session.startServer' => 'Avvia server',
|
'companionRemote.session.startServer' => 'Avvia server',
|
||||||
'companionRemote.session.stopServer' => 'Arresta server',
|
'companionRemote.session.stopServer' => 'Arresta server',
|
||||||
@@ -2956,8 +2990,6 @@ extension on TranslationsIt {
|
|||||||
'companionRemote.pairing.validationHostRequired' => 'Inserisci l\'indirizzo host',
|
'companionRemote.pairing.validationHostRequired' => 'Inserisci l\'indirizzo host',
|
||||||
'companionRemote.pairing.validationHostFormat' => 'Il formato deve essere IP:porta (es. 192.168.1.100:48632)',
|
'companionRemote.pairing.validationHostFormat' => 'Il formato deve essere IP:porta (es. 192.168.1.100:48632)',
|
||||||
'companionRemote.pairing.connectionTimedOut' => 'Connessione scaduta. Usa la stessa rete su entrambi i dispositivi.',
|
'companionRemote.pairing.connectionTimedOut' => 'Connessione scaduta. Usa la stessa rete su entrambi i dispositivi.',
|
||||||
_ => null,
|
|
||||||
} ?? switch (path) {
|
|
||||||
'companionRemote.pairing.sessionNotFound' => 'Dispositivo non trovato. Assicurati che Plezy sia in esecuzione sull\'host.',
|
'companionRemote.pairing.sessionNotFound' => 'Dispositivo non trovato. Assicurati che Plezy sia in esecuzione sull\'host.',
|
||||||
'companionRemote.pairing.authFailed' => 'Autenticazione non riuscita. Entrambi i dispositivi devono usare lo stesso account Plex.',
|
'companionRemote.pairing.authFailed' => 'Autenticazione non riuscita. Entrambi i dispositivi devono usare lo stesso account Plex.',
|
||||||
'companionRemote.pairing.failedToConnect' => ({required Object error}) => 'Connessione fallita: ${error}',
|
'companionRemote.pairing.failedToConnect' => ({required Object error}) => 'Connessione fallita: ${error}',
|
||||||
|
|||||||
@@ -393,6 +393,22 @@ class _TranslationsSettingsJa extends TranslationsSettingsEn {
|
|||||||
@override String get tunneledPlaybackDescription => '動画トンネリングを使用します。HDR再生で画面が黒くなる場合は無効にしてください。';
|
@override String get tunneledPlaybackDescription => '動画トンネリングを使用します。HDR再生で画面が黒くなる場合は無効にしてください。';
|
||||||
@override String get audioPassthrough => 'オーディオパススルー';
|
@override String get audioPassthrough => 'オーディオパススルー';
|
||||||
@override String get audioPassthroughDescription => 'Dolby/DTS音声を再エンコードせずにレシーバーやテレビに送り、サラウンドを維持します。音が出ない場合は無効にしてください。';
|
@override String get audioPassthroughDescription => 'Dolby/DTS音声を再エンコードせずにレシーバーやテレビに送り、サラウンドを維持します。音が出ない場合は無効にしてください。';
|
||||||
|
@override String get audioPassthroughDescriptionAppleTv => 'Dolby Digital Plus(Atmos含む)をビットストリームとしてシステムに渡します。DTSとTrueHDは引き続きマルチチャンネルPCMで再生されます。シーク時に短い音切れが発生することがあります。';
|
||||||
|
@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 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 dvConversionMode => 'Dolby Vision 変換';
|
||||||
@override String get dvConversionModeDescription => 'ExoPlayer が Dolby Vision Profile 7 ファイルを処理する方法を選択します。';
|
@override String get dvConversionModeDescription => 'ExoPlayer が Dolby Vision Profile 7 ファイルを処理する方法を選択します。';
|
||||||
@override String get dvConversionAuto => '自動';
|
@override String get dvConversionAuto => '自動';
|
||||||
@@ -2184,6 +2200,22 @@ extension on TranslationsJa {
|
|||||||
'settings.tunneledPlaybackDescription' => '動画トンネリングを使用します。HDR再生で画面が黒くなる場合は無効にしてください。',
|
'settings.tunneledPlaybackDescription' => '動画トンネリングを使用します。HDR再生で画面が黒くなる場合は無効にしてください。',
|
||||||
'settings.audioPassthrough' => 'オーディオパススルー',
|
'settings.audioPassthrough' => 'オーディオパススルー',
|
||||||
'settings.audioPassthroughDescription' => 'Dolby/DTS音声を再エンコードせずにレシーバーやテレビに送り、サラウンドを維持します。音が出ない場合は無効にしてください。',
|
'settings.audioPassthroughDescription' => 'Dolby/DTS音声を再エンコードせずにレシーバーやテレビに送り、サラウンドを維持します。音が出ない場合は無効にしてください。',
|
||||||
|
'settings.audioPassthroughDescriptionAppleTv' => 'Dolby Digital Plus(Atmos含む)をビットストリームとしてシステムに渡します。DTSとTrueHDは引き続きマルチチャンネルPCMで再生されます。シーク時に短い音切れが発生することがあります。',
|
||||||
|
'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.atmosTestStop' => 'テストを停止',
|
||||||
|
'settings.atmosTestUrl' => 'テストファイルのURL',
|
||||||
|
'settings.atmosTestUrlDescription' => '生の.ec3 Dolby AtmosファイルのHTTP URL(例: ffmpegで抽出)',
|
||||||
|
'settings.atmosTestUrlMissing' => '先にテストファイルのURLを設定してください',
|
||||||
|
'settings.atmosTestStatus' => 'ステータス',
|
||||||
'settings.dvConversionMode' => 'Dolby Vision 変換',
|
'settings.dvConversionMode' => 'Dolby Vision 変換',
|
||||||
'settings.dvConversionModeDescription' => 'ExoPlayer が Dolby Vision Profile 7 ファイルを処理する方法を選択します。',
|
'settings.dvConversionModeDescription' => 'ExoPlayer が Dolby Vision Profile 7 ファイルを処理する方法を選択します。',
|
||||||
'settings.dvConversionAuto' => '自動',
|
'settings.dvConversionAuto' => '自動',
|
||||||
@@ -2426,6 +2458,8 @@ extension on TranslationsJa {
|
|||||||
'messages.libraryScanFailed' => ({required Object error}) => 'ライブラリのスキャンに失敗しました: ${error}',
|
'messages.libraryScanFailed' => ({required Object error}) => 'ライブラリのスキャンに失敗しました: ${error}',
|
||||||
'messages.metadataRefreshing' => ({required Object title}) => '"${title}"のメタデータを更新中...',
|
'messages.metadataRefreshing' => ({required Object title}) => '"${title}"のメタデータを更新中...',
|
||||||
'messages.metadataRefreshStarted' => ({required Object title}) => '"${title}"のメタデータ更新を開始しました',
|
'messages.metadataRefreshStarted' => ({required Object title}) => '"${title}"のメタデータ更新を開始しました',
|
||||||
|
_ => null,
|
||||||
|
} ?? switch (path) {
|
||||||
'messages.metadataRefreshFailed' => ({required Object error}) => 'メタデータの更新に失敗しました: ${error}',
|
'messages.metadataRefreshFailed' => ({required Object error}) => 'メタデータの更新に失敗しました: ${error}',
|
||||||
'messages.logoutConfirm' => 'ログアウトしてもよろしいですか?',
|
'messages.logoutConfirm' => 'ログアウトしてもよろしいですか?',
|
||||||
'messages.noSeasonsFound' => 'シーズンが見つかりません',
|
'messages.noSeasonsFound' => 'シーズンが見つかりません',
|
||||||
@@ -2442,8 +2476,6 @@ extension on TranslationsJa {
|
|||||||
'messages.serverLimitTitle' => '再生に失敗しました',
|
'messages.serverLimitTitle' => '再生に失敗しました',
|
||||||
'messages.serverLimitBody' => 'サーバーエラー(HTTP 500)。帯域幅/トランスコード制限により拒否された可能性があります。所有者に調整を依頼してください。',
|
'messages.serverLimitBody' => 'サーバーエラー(HTTP 500)。帯域幅/トランスコード制限により拒否された可能性があります。所有者に調整を依頼してください。',
|
||||||
'messages.logsUploaded' => 'ログをアップロードしました',
|
'messages.logsUploaded' => 'ログをアップロードしました',
|
||||||
_ => null,
|
|
||||||
} ?? switch (path) {
|
|
||||||
'messages.logsUploadFailed' => 'ログのアップロードに失敗しました',
|
'messages.logsUploadFailed' => 'ログのアップロードに失敗しました',
|
||||||
'messages.logId' => 'ログID',
|
'messages.logId' => 'ログID',
|
||||||
'subtitlingStyling.text' => 'テキスト',
|
'subtitlingStyling.text' => 'テキスト',
|
||||||
@@ -2940,6 +2972,8 @@ extension on TranslationsJa {
|
|||||||
'companionRemote.session.serverStopped' => 'リモートサーバー停止中',
|
'companionRemote.session.serverStopped' => 'リモートサーバー停止中',
|
||||||
'companionRemote.session.serverRunningDescription' => 'ネットワーク上のモバイルデバイスがこのアプリに接続できます',
|
'companionRemote.session.serverRunningDescription' => 'ネットワーク上のモバイルデバイスがこのアプリに接続できます',
|
||||||
'companionRemote.session.serverStoppedDescription' => 'モバイルデバイスの接続を許可するにはサーバーを起動してください',
|
'companionRemote.session.serverStoppedDescription' => 'モバイルデバイスの接続を許可するにはサーバーを起動してください',
|
||||||
|
_ => null,
|
||||||
|
} ?? switch (path) {
|
||||||
'companionRemote.session.usePhoneToControl' => 'モバイルデバイスでこのアプリを操作できます',
|
'companionRemote.session.usePhoneToControl' => 'モバイルデバイスでこのアプリを操作できます',
|
||||||
'companionRemote.session.startServer' => 'サーバーを起動',
|
'companionRemote.session.startServer' => 'サーバーを起動',
|
||||||
'companionRemote.session.stopServer' => 'サーバーを停止',
|
'companionRemote.session.stopServer' => 'サーバーを停止',
|
||||||
@@ -2956,8 +2990,6 @@ extension on TranslationsJa {
|
|||||||
'companionRemote.pairing.validationHostRequired' => 'ホストアドレスを入力してください',
|
'companionRemote.pairing.validationHostRequired' => 'ホストアドレスを入力してください',
|
||||||
'companionRemote.pairing.validationHostFormat' => '形式はIP:ポートである必要があります(例: 192.168.1.100:48632)',
|
'companionRemote.pairing.validationHostFormat' => '形式はIP:ポートである必要があります(例: 192.168.1.100:48632)',
|
||||||
'companionRemote.pairing.connectionTimedOut' => '接続がタイムアウトしました。両方のデバイスで同じネットワークを使用してください。',
|
'companionRemote.pairing.connectionTimedOut' => '接続がタイムアウトしました。両方のデバイスで同じネットワークを使用してください。',
|
||||||
_ => null,
|
|
||||||
} ?? switch (path) {
|
|
||||||
'companionRemote.pairing.sessionNotFound' => 'デバイスが見つかりません。ホストでPlezyが実行中か確認してください。',
|
'companionRemote.pairing.sessionNotFound' => 'デバイスが見つかりません。ホストでPlezyが実行中か確認してください。',
|
||||||
'companionRemote.pairing.authFailed' => '認証に失敗しました。両方のデバイスで同じPlexアカウントが必要です。',
|
'companionRemote.pairing.authFailed' => '認証に失敗しました。両方のデバイスで同じPlexアカウントが必要です。',
|
||||||
'companionRemote.pairing.failedToConnect' => ({required Object error}) => '接続に失敗しました: ${error}',
|
'companionRemote.pairing.failedToConnect' => ({required Object error}) => '接続に失敗しました: ${error}',
|
||||||
|
|||||||
@@ -393,6 +393,22 @@ class _TranslationsSettingsKo extends TranslationsSettingsEn {
|
|||||||
@override String get tunneledPlaybackDescription => '비디오 터널링을 사용합니다. HDR 재생 시 검은 화면이 보이면 비활성화하세요.';
|
@override String get tunneledPlaybackDescription => '비디오 터널링을 사용합니다. HDR 재생 시 검은 화면이 보이면 비활성화하세요.';
|
||||||
@override String get audioPassthrough => '오디오 패스스루';
|
@override String get audioPassthrough => '오디오 패스스루';
|
||||||
@override String get audioPassthroughDescription => 'Dolby/DTS 오디오를 재인코딩 없이 리시버나 TV로 전송하여 서라운드 사운드를 유지합니다. 소리가 나지 않으면 비활성화하세요.';
|
@override String get audioPassthroughDescription => 'Dolby/DTS 오디오를 재인코딩 없이 리시버나 TV로 전송하여 서라운드 사운드를 유지합니다. 소리가 나지 않으면 비활성화하세요.';
|
||||||
|
@override String get audioPassthroughDescriptionAppleTv => 'Dolby Digital Plus(Atmos 포함)를 비트스트림으로 시스템에 전달합니다. DTS와 TrueHD는 계속 멀티채널 PCM으로 재생됩니다. 탐색 시 짧은 소리 끊김이 발생할 수 있습니다.';
|
||||||
|
@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 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 dvConversionMode => 'Dolby Vision 변환';
|
||||||
@override String get dvConversionModeDescription => 'ExoPlayer가 Dolby Vision Profile 7 파일을 처리하는 방식을 선택합니다.';
|
@override String get dvConversionModeDescription => 'ExoPlayer가 Dolby Vision Profile 7 파일을 처리하는 방식을 선택합니다.';
|
||||||
@override String get dvConversionAuto => '자동';
|
@override String get dvConversionAuto => '자동';
|
||||||
@@ -2184,6 +2200,22 @@ extension on TranslationsKo {
|
|||||||
'settings.tunneledPlaybackDescription' => '비디오 터널링을 사용합니다. HDR 재생 시 검은 화면이 보이면 비활성화하세요.',
|
'settings.tunneledPlaybackDescription' => '비디오 터널링을 사용합니다. HDR 재생 시 검은 화면이 보이면 비활성화하세요.',
|
||||||
'settings.audioPassthrough' => '오디오 패스스루',
|
'settings.audioPassthrough' => '오디오 패스스루',
|
||||||
'settings.audioPassthroughDescription' => 'Dolby/DTS 오디오를 재인코딩 없이 리시버나 TV로 전송하여 서라운드 사운드를 유지합니다. 소리가 나지 않으면 비활성화하세요.',
|
'settings.audioPassthroughDescription' => 'Dolby/DTS 오디오를 재인코딩 없이 리시버나 TV로 전송하여 서라운드 사운드를 유지합니다. 소리가 나지 않으면 비활성화하세요.',
|
||||||
|
'settings.audioPassthroughDescriptionAppleTv' => 'Dolby Digital Plus(Atmos 포함)를 비트스트림으로 시스템에 전달합니다. DTS와 TrueHD는 계속 멀티채널 PCM으로 재생됩니다. 탐색 시 짧은 소리 끊김이 발생할 수 있습니다.',
|
||||||
|
'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.atmosTestStop' => '테스트 중지',
|
||||||
|
'settings.atmosTestUrl' => '테스트 파일 URL',
|
||||||
|
'settings.atmosTestUrlDescription' => '원시 .ec3 Dolby Atmos 파일의 HTTP URL(예: ffmpeg로 추출)',
|
||||||
|
'settings.atmosTestUrlMissing' => '먼저 테스트 파일 URL을 설정하세요',
|
||||||
|
'settings.atmosTestStatus' => '상태',
|
||||||
'settings.dvConversionMode' => 'Dolby Vision 변환',
|
'settings.dvConversionMode' => 'Dolby Vision 변환',
|
||||||
'settings.dvConversionModeDescription' => 'ExoPlayer가 Dolby Vision Profile 7 파일을 처리하는 방식을 선택합니다.',
|
'settings.dvConversionModeDescription' => 'ExoPlayer가 Dolby Vision Profile 7 파일을 처리하는 방식을 선택합니다.',
|
||||||
'settings.dvConversionAuto' => '자동',
|
'settings.dvConversionAuto' => '자동',
|
||||||
@@ -2426,6 +2458,8 @@ extension on TranslationsKo {
|
|||||||
'messages.libraryScanFailed' => ({required Object error}) => '미디어 라이브러리 스캔 실패: ${error}',
|
'messages.libraryScanFailed' => ({required Object error}) => '미디어 라이브러리 스캔 실패: ${error}',
|
||||||
'messages.metadataRefreshing' => ({required Object title}) => '"${title}" 메타데이터 새로고침 중...',
|
'messages.metadataRefreshing' => ({required Object title}) => '"${title}" 메타데이터 새로고침 중...',
|
||||||
'messages.metadataRefreshStarted' => ({required Object title}) => '"${title}" 메타데이터 새로고침 시작됨',
|
'messages.metadataRefreshStarted' => ({required Object title}) => '"${title}" 메타데이터 새로고침 시작됨',
|
||||||
|
_ => null,
|
||||||
|
} ?? switch (path) {
|
||||||
'messages.metadataRefreshFailed' => ({required Object error}) => '메타데이터 새로고침 실패: ${error}',
|
'messages.metadataRefreshFailed' => ({required Object error}) => '메타데이터 새로고침 실패: ${error}',
|
||||||
'messages.logoutConfirm' => '로그아웃 하시겠습니까?',
|
'messages.logoutConfirm' => '로그아웃 하시겠습니까?',
|
||||||
'messages.noSeasonsFound' => '시즌을 찾을 수 없음',
|
'messages.noSeasonsFound' => '시즌을 찾을 수 없음',
|
||||||
@@ -2442,8 +2476,6 @@ extension on TranslationsKo {
|
|||||||
'messages.serverLimitTitle' => '재생 실패',
|
'messages.serverLimitTitle' => '재생 실패',
|
||||||
'messages.serverLimitBody' => '서버 오류(HTTP 500). 대역폭/트랜스코딩 제한으로 세션이 거부된 것 같습니다. 소유자에게 조정을 요청하세요.',
|
'messages.serverLimitBody' => '서버 오류(HTTP 500). 대역폭/트랜스코딩 제한으로 세션이 거부된 것 같습니다. 소유자에게 조정을 요청하세요.',
|
||||||
'messages.logsUploaded' => '로그 업로드 완료',
|
'messages.logsUploaded' => '로그 업로드 완료',
|
||||||
_ => null,
|
|
||||||
} ?? switch (path) {
|
|
||||||
'messages.logsUploadFailed' => '로그 업로드 실패',
|
'messages.logsUploadFailed' => '로그 업로드 실패',
|
||||||
'messages.logId' => '로그 ID',
|
'messages.logId' => '로그 ID',
|
||||||
'subtitlingStyling.text' => '텍스트',
|
'subtitlingStyling.text' => '텍스트',
|
||||||
@@ -2940,6 +2972,8 @@ extension on TranslationsKo {
|
|||||||
'companionRemote.session.serverStopped' => '원격 서버 중지됨',
|
'companionRemote.session.serverStopped' => '원격 서버 중지됨',
|
||||||
'companionRemote.session.serverRunningDescription' => '네트워크의 모바일 기기가 이 앱에 연결할 수 있습니다',
|
'companionRemote.session.serverRunningDescription' => '네트워크의 모바일 기기가 이 앱에 연결할 수 있습니다',
|
||||||
'companionRemote.session.serverStoppedDescription' => '모바일 기기의 연결을 허용하려면 서버를 시작하세요',
|
'companionRemote.session.serverStoppedDescription' => '모바일 기기의 연결을 허용하려면 서버를 시작하세요',
|
||||||
|
_ => null,
|
||||||
|
} ?? switch (path) {
|
||||||
'companionRemote.session.usePhoneToControl' => '모바일 기기로 이 앱을 제어하세요',
|
'companionRemote.session.usePhoneToControl' => '모바일 기기로 이 앱을 제어하세요',
|
||||||
'companionRemote.session.startServer' => '서버 시작',
|
'companionRemote.session.startServer' => '서버 시작',
|
||||||
'companionRemote.session.stopServer' => '서버 중지',
|
'companionRemote.session.stopServer' => '서버 중지',
|
||||||
@@ -2956,8 +2990,6 @@ extension on TranslationsKo {
|
|||||||
'companionRemote.pairing.validationHostRequired' => '호스트 주소를 입력하세요',
|
'companionRemote.pairing.validationHostRequired' => '호스트 주소를 입력하세요',
|
||||||
'companionRemote.pairing.validationHostFormat' => '형식은 IP:포트여야 합니다 (예: 192.168.1.100:48632)',
|
'companionRemote.pairing.validationHostFormat' => '형식은 IP:포트여야 합니다 (예: 192.168.1.100:48632)',
|
||||||
'companionRemote.pairing.connectionTimedOut' => '연결 시간이 초과되었습니다. 두 기기에서 같은 네트워크를 사용하세요.',
|
'companionRemote.pairing.connectionTimedOut' => '연결 시간이 초과되었습니다. 두 기기에서 같은 네트워크를 사용하세요.',
|
||||||
_ => null,
|
|
||||||
} ?? switch (path) {
|
|
||||||
'companionRemote.pairing.sessionNotFound' => '기기를 찾을 수 없습니다. 호스트에서 Plezy가 실행 중인지 확인하세요.',
|
'companionRemote.pairing.sessionNotFound' => '기기를 찾을 수 없습니다. 호스트에서 Plezy가 실행 중인지 확인하세요.',
|
||||||
'companionRemote.pairing.authFailed' => '인증에 실패했습니다. 두 기기 모두 같은 Plex 계정이 필요합니다.',
|
'companionRemote.pairing.authFailed' => '인증에 실패했습니다. 두 기기 모두 같은 Plex 계정이 필요합니다.',
|
||||||
'companionRemote.pairing.failedToConnect' => ({required Object error}) => '연결 실패: ${error}',
|
'companionRemote.pairing.failedToConnect' => ({required Object error}) => '연결 실패: ${error}',
|
||||||
|
|||||||
@@ -393,6 +393,22 @@ class _TranslationsSettingsNb extends TranslationsSettingsEn {
|
|||||||
@override String get tunneledPlaybackDescription => 'Bruk videotunneling. Slå av hvis HDR-avspilling viser svart video.';
|
@override String get tunneledPlaybackDescription => 'Bruk videotunneling. Slå av hvis HDR-avspilling viser svart video.';
|
||||||
@override String get audioPassthrough => 'Lydgjennomgang';
|
@override String get audioPassthrough => 'Lydgjennomgang';
|
||||||
@override String get audioPassthroughDescription => 'Send Dolby/DTS-lyd til mottakeren eller TV-en uten omkoding, slik at surroundlyd bevares. Slå av hvis du ikke har lyd.';
|
@override String get audioPassthroughDescription => 'Send Dolby/DTS-lyd til mottakeren eller TV-en uten omkoding, slik at surroundlyd bevares. Slå av hvis du ikke har lyd.';
|
||||||
|
@override String get audioPassthroughDescriptionAppleTv => 'Overlater Dolby Digital Plus (inkl. Atmos) til systemet som bitstream. DTS og TrueHD spilles fortsatt av som flerkanals PCM. Korte lydbrudd kan forekomme ved søking.';
|
||||||
|
@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 => 'Kjent god 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 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 dvConversionMode => 'Dolby Vision-konvertering';
|
||||||
@override String get dvConversionModeDescription => 'Velg hvordan ExoPlayer håndterer Dolby Vision Profile 7-filer.';
|
@override String get dvConversionModeDescription => 'Velg hvordan ExoPlayer håndterer Dolby Vision Profile 7-filer.';
|
||||||
@override String get dvConversionAuto => 'Auto';
|
@override String get dvConversionAuto => 'Auto';
|
||||||
@@ -2184,6 +2200,22 @@ extension on TranslationsNb {
|
|||||||
'settings.tunneledPlaybackDescription' => 'Bruk videotunneling. Slå av hvis HDR-avspilling viser svart video.',
|
'settings.tunneledPlaybackDescription' => 'Bruk videotunneling. Slå av hvis HDR-avspilling viser svart video.',
|
||||||
'settings.audioPassthrough' => 'Lydgjennomgang',
|
'settings.audioPassthrough' => 'Lydgjennomgang',
|
||||||
'settings.audioPassthroughDescription' => 'Send Dolby/DTS-lyd til mottakeren eller TV-en uten omkoding, slik at surroundlyd bevares. Slå av hvis du ikke har lyd.',
|
'settings.audioPassthroughDescription' => 'Send Dolby/DTS-lyd til mottakeren eller TV-en uten omkoding, slik at surroundlyd bevares. Slå av hvis du ikke har lyd.',
|
||||||
|
'settings.audioPassthroughDescriptionAppleTv' => 'Overlater Dolby Digital Plus (inkl. Atmos) til systemet som bitstream. DTS og TrueHD spilles fortsatt av som flerkanals PCM. Korte lydbrudd kan forekomme ved søking.',
|
||||||
|
'settings.atmosDiagnostics' => 'Atmos-utgangstest',
|
||||||
|
'settings.atmosDiagnosticsDescription' => 'Diagnostiser Dolby Atmos-utgangen ved å spille testsignaler gjennom systemspilleren',
|
||||||
|
'settings.atmosTestHlsAtmos' => 'Apple Atmos-strøm',
|
||||||
|
'settings.atmosTestHlsAtmosDescription' => 'Kjent god 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.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.dvConversionMode' => 'Dolby Vision-konvertering',
|
||||||
'settings.dvConversionModeDescription' => 'Velg hvordan ExoPlayer håndterer Dolby Vision Profile 7-filer.',
|
'settings.dvConversionModeDescription' => 'Velg hvordan ExoPlayer håndterer Dolby Vision Profile 7-filer.',
|
||||||
'settings.dvConversionAuto' => 'Auto',
|
'settings.dvConversionAuto' => 'Auto',
|
||||||
@@ -2426,6 +2458,8 @@ extension on TranslationsNb {
|
|||||||
'messages.libraryScanFailed' => ({required Object error}) => 'Kunne ikke skanne bibliotek: ${error}',
|
'messages.libraryScanFailed' => ({required Object error}) => 'Kunne ikke skanne bibliotek: ${error}',
|
||||||
'messages.metadataRefreshing' => ({required Object title}) => 'Oppdaterer metadata for "${title}"...',
|
'messages.metadataRefreshing' => ({required Object title}) => 'Oppdaterer metadata for "${title}"...',
|
||||||
'messages.metadataRefreshStarted' => ({required Object title}) => 'Metadataoppdatering startet for "${title}"',
|
'messages.metadataRefreshStarted' => ({required Object title}) => 'Metadataoppdatering startet for "${title}"',
|
||||||
|
_ => null,
|
||||||
|
} ?? switch (path) {
|
||||||
'messages.metadataRefreshFailed' => ({required Object error}) => 'Kunne ikke oppdatere metadata: ${error}',
|
'messages.metadataRefreshFailed' => ({required Object error}) => 'Kunne ikke oppdatere metadata: ${error}',
|
||||||
'messages.logoutConfirm' => 'Er du sikker på at du vil logge ut?',
|
'messages.logoutConfirm' => 'Er du sikker på at du vil logge ut?',
|
||||||
'messages.noSeasonsFound' => 'Ingen sesonger funnet',
|
'messages.noSeasonsFound' => 'Ingen sesonger funnet',
|
||||||
@@ -2442,8 +2476,6 @@ extension on TranslationsNb {
|
|||||||
'messages.serverLimitTitle' => 'Avspilling mislyktes',
|
'messages.serverLimitTitle' => 'Avspilling mislyktes',
|
||||||
'messages.serverLimitBody' => 'Serverfeil (HTTP 500). En båndbredde-/transkodingsgrense avviste trolig økten. Be eieren justere den.',
|
'messages.serverLimitBody' => 'Serverfeil (HTTP 500). En båndbredde-/transkodingsgrense avviste trolig økten. Be eieren justere den.',
|
||||||
'messages.logsUploaded' => 'Logger lastet opp',
|
'messages.logsUploaded' => 'Logger lastet opp',
|
||||||
_ => null,
|
|
||||||
} ?? switch (path) {
|
|
||||||
'messages.logsUploadFailed' => 'Kunne ikke laste opp logger',
|
'messages.logsUploadFailed' => 'Kunne ikke laste opp logger',
|
||||||
'messages.logId' => 'Logg-ID',
|
'messages.logId' => 'Logg-ID',
|
||||||
'subtitlingStyling.text' => 'Tekst',
|
'subtitlingStyling.text' => 'Tekst',
|
||||||
@@ -2940,6 +2972,8 @@ extension on TranslationsNb {
|
|||||||
'companionRemote.session.serverStopped' => 'Fjernserver stoppet',
|
'companionRemote.session.serverStopped' => 'Fjernserver stoppet',
|
||||||
'companionRemote.session.serverRunningDescription' => 'Mobile enheter på nettverket ditt kan koble til denne appen',
|
'companionRemote.session.serverRunningDescription' => 'Mobile enheter på nettverket ditt kan koble til denne appen',
|
||||||
'companionRemote.session.serverStoppedDescription' => 'Start serveren for å la mobilenheter koble til',
|
'companionRemote.session.serverStoppedDescription' => 'Start serveren for å la mobilenheter koble til',
|
||||||
|
_ => null,
|
||||||
|
} ?? switch (path) {
|
||||||
'companionRemote.session.usePhoneToControl' => 'Bruk mobilenheten din til å styre denne appen',
|
'companionRemote.session.usePhoneToControl' => 'Bruk mobilenheten din til å styre denne appen',
|
||||||
'companionRemote.session.startServer' => 'Start server',
|
'companionRemote.session.startServer' => 'Start server',
|
||||||
'companionRemote.session.stopServer' => 'Stopp server',
|
'companionRemote.session.stopServer' => 'Stopp server',
|
||||||
@@ -2956,8 +2990,6 @@ extension on TranslationsNb {
|
|||||||
'companionRemote.pairing.validationHostRequired' => 'Vennligst oppgi vertsadresse',
|
'companionRemote.pairing.validationHostRequired' => 'Vennligst oppgi vertsadresse',
|
||||||
'companionRemote.pairing.validationHostFormat' => 'Format må være IP:port (f.eks. 192.168.1.100:48632)',
|
'companionRemote.pairing.validationHostFormat' => 'Format må være IP:port (f.eks. 192.168.1.100:48632)',
|
||||||
'companionRemote.pairing.connectionTimedOut' => 'Tilkoblingen fikk tidsavbrudd. Bruk samme nettverk på begge enheter.',
|
'companionRemote.pairing.connectionTimedOut' => 'Tilkoblingen fikk tidsavbrudd. Bruk samme nettverk på begge enheter.',
|
||||||
_ => null,
|
|
||||||
} ?? switch (path) {
|
|
||||||
'companionRemote.pairing.sessionNotFound' => 'Enhet ikke funnet. Sørg for at Plezy kjører på verten.',
|
'companionRemote.pairing.sessionNotFound' => 'Enhet ikke funnet. Sørg for at Plezy kjører på verten.',
|
||||||
'companionRemote.pairing.authFailed' => 'Autentisering mislyktes. Begge enheter må bruke samme Plex-konto.',
|
'companionRemote.pairing.authFailed' => 'Autentisering mislyktes. Begge enheter må bruke samme Plex-konto.',
|
||||||
'companionRemote.pairing.failedToConnect' => ({required Object error}) => 'Kunne ikke koble til: ${error}',
|
'companionRemote.pairing.failedToConnect' => ({required Object error}) => 'Kunne ikke koble til: ${error}',
|
||||||
|
|||||||
@@ -393,6 +393,22 @@ class _TranslationsSettingsNl extends TranslationsSettingsEn {
|
|||||||
@override String get tunneledPlaybackDescription => 'Gebruik videotunneling. Schakel uit als HDR-afspelen zwart beeld geeft.';
|
@override String get tunneledPlaybackDescription => 'Gebruik videotunneling. Schakel uit als HDR-afspelen zwart beeld geeft.';
|
||||||
@override String get audioPassthrough => 'Audio-doorvoer';
|
@override String get audioPassthrough => 'Audio-doorvoer';
|
||||||
@override String get audioPassthroughDescription => 'Stuur Dolby/DTS-audio zonder hercodering naar je receiver of tv en behoud surroundgeluid. Schakel uit als je geen geluid hebt.';
|
@override String get audioPassthroughDescription => 'Stuur Dolby/DTS-audio zonder hercodering naar je receiver of tv en behoud surroundgeluid. Schakel uit als je geen geluid hebt.';
|
||||||
|
@override String get audioPassthroughDescriptionAppleTv => 'Geeft Dolby Digital Plus (incl. Atmos) als bitstream aan het systeem door. DTS en TrueHD worden nog steeds als meerkanaals PCM afgespeeld. Bij zoeken kunnen korte geluidsonderbrekingen optreden.';
|
||||||
|
@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 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 dvConversionMode => 'Dolby Vision-conversie';
|
||||||
@override String get dvConversionModeDescription => 'Kies hoe ExoPlayer Dolby Vision Profile 7-bestanden verwerkt.';
|
@override String get dvConversionModeDescription => 'Kies hoe ExoPlayer Dolby Vision Profile 7-bestanden verwerkt.';
|
||||||
@override String get dvConversionAuto => 'Auto';
|
@override String get dvConversionAuto => 'Auto';
|
||||||
@@ -2184,6 +2200,22 @@ extension on TranslationsNl {
|
|||||||
'settings.tunneledPlaybackDescription' => 'Gebruik videotunneling. Schakel uit als HDR-afspelen zwart beeld geeft.',
|
'settings.tunneledPlaybackDescription' => 'Gebruik videotunneling. Schakel uit als HDR-afspelen zwart beeld geeft.',
|
||||||
'settings.audioPassthrough' => 'Audio-doorvoer',
|
'settings.audioPassthrough' => 'Audio-doorvoer',
|
||||||
'settings.audioPassthroughDescription' => 'Stuur Dolby/DTS-audio zonder hercodering naar je receiver of tv en behoud surroundgeluid. Schakel uit als je geen geluid hebt.',
|
'settings.audioPassthroughDescription' => 'Stuur Dolby/DTS-audio zonder hercodering naar je receiver of tv en behoud surroundgeluid. Schakel uit als je geen geluid hebt.',
|
||||||
|
'settings.audioPassthroughDescriptionAppleTv' => 'Geeft Dolby Digital Plus (incl. Atmos) als bitstream aan het systeem door. DTS en TrueHD worden nog steeds als meerkanaals PCM afgespeeld. Bij zoeken kunnen korte geluidsonderbrekingen optreden.',
|
||||||
|
'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.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.dvConversionMode' => 'Dolby Vision-conversie',
|
||||||
'settings.dvConversionModeDescription' => 'Kies hoe ExoPlayer Dolby Vision Profile 7-bestanden verwerkt.',
|
'settings.dvConversionModeDescription' => 'Kies hoe ExoPlayer Dolby Vision Profile 7-bestanden verwerkt.',
|
||||||
'settings.dvConversionAuto' => 'Auto',
|
'settings.dvConversionAuto' => 'Auto',
|
||||||
@@ -2426,6 +2458,8 @@ extension on TranslationsNl {
|
|||||||
'messages.libraryScanFailed' => ({required Object error}) => 'Kon bibliotheek niet scannen: ${error}',
|
'messages.libraryScanFailed' => ({required Object error}) => 'Kon bibliotheek niet scannen: ${error}',
|
||||||
'messages.metadataRefreshing' => ({required Object title}) => 'Metadata vernieuwen voor "${title}"...',
|
'messages.metadataRefreshing' => ({required Object title}) => 'Metadata vernieuwen voor "${title}"...',
|
||||||
'messages.metadataRefreshStarted' => ({required Object title}) => 'Metadata vernieuwen gestart voor "${title}"',
|
'messages.metadataRefreshStarted' => ({required Object title}) => 'Metadata vernieuwen gestart voor "${title}"',
|
||||||
|
_ => null,
|
||||||
|
} ?? switch (path) {
|
||||||
'messages.metadataRefreshFailed' => ({required Object error}) => 'Kon metadata niet vernieuwen: ${error}',
|
'messages.metadataRefreshFailed' => ({required Object error}) => 'Kon metadata niet vernieuwen: ${error}',
|
||||||
'messages.logoutConfirm' => 'Weet je zeker dat je wilt uitloggen?',
|
'messages.logoutConfirm' => 'Weet je zeker dat je wilt uitloggen?',
|
||||||
'messages.noSeasonsFound' => 'Geen seizoenen gevonden',
|
'messages.noSeasonsFound' => 'Geen seizoenen gevonden',
|
||||||
@@ -2442,8 +2476,6 @@ extension on TranslationsNl {
|
|||||||
'messages.serverLimitTitle' => 'Afspelen mislukt',
|
'messages.serverLimitTitle' => 'Afspelen mislukt',
|
||||||
'messages.serverLimitBody' => 'Serverfout (HTTP 500). Waarschijnlijk weigerde een bandbreedte-/transcodeerlimiet deze sessie. Vraag de eigenaar dit aan te passen.',
|
'messages.serverLimitBody' => 'Serverfout (HTTP 500). Waarschijnlijk weigerde een bandbreedte-/transcodeerlimiet deze sessie. Vraag de eigenaar dit aan te passen.',
|
||||||
'messages.logsUploaded' => 'Logs geüpload',
|
'messages.logsUploaded' => 'Logs geüpload',
|
||||||
_ => null,
|
|
||||||
} ?? switch (path) {
|
|
||||||
'messages.logsUploadFailed' => 'Uploaden van logs mislukt',
|
'messages.logsUploadFailed' => 'Uploaden van logs mislukt',
|
||||||
'messages.logId' => 'Log-ID',
|
'messages.logId' => 'Log-ID',
|
||||||
'subtitlingStyling.text' => 'Tekst',
|
'subtitlingStyling.text' => 'Tekst',
|
||||||
@@ -2940,6 +2972,8 @@ extension on TranslationsNl {
|
|||||||
'companionRemote.session.serverStopped' => 'Externe server gestopt',
|
'companionRemote.session.serverStopped' => 'Externe server gestopt',
|
||||||
'companionRemote.session.serverRunningDescription' => 'Mobiele apparaten op je netwerk kunnen met deze app verbinden',
|
'companionRemote.session.serverRunningDescription' => 'Mobiele apparaten op je netwerk kunnen met deze app verbinden',
|
||||||
'companionRemote.session.serverStoppedDescription' => 'Start de server om mobiele apparaten te laten verbinden',
|
'companionRemote.session.serverStoppedDescription' => 'Start de server om mobiele apparaten te laten verbinden',
|
||||||
|
_ => null,
|
||||||
|
} ?? switch (path) {
|
||||||
'companionRemote.session.usePhoneToControl' => 'Gebruik je mobiele apparaat om deze app te bedienen',
|
'companionRemote.session.usePhoneToControl' => 'Gebruik je mobiele apparaat om deze app te bedienen',
|
||||||
'companionRemote.session.startServer' => 'Server starten',
|
'companionRemote.session.startServer' => 'Server starten',
|
||||||
'companionRemote.session.stopServer' => 'Server stoppen',
|
'companionRemote.session.stopServer' => 'Server stoppen',
|
||||||
@@ -2956,8 +2990,6 @@ extension on TranslationsNl {
|
|||||||
'companionRemote.pairing.validationHostRequired' => 'Voer het hostadres in',
|
'companionRemote.pairing.validationHostRequired' => 'Voer het hostadres in',
|
||||||
'companionRemote.pairing.validationHostFormat' => 'Formaat moet IP:poort zijn (bijv. 192.168.1.100:48632)',
|
'companionRemote.pairing.validationHostFormat' => 'Formaat moet IP:poort zijn (bijv. 192.168.1.100:48632)',
|
||||||
'companionRemote.pairing.connectionTimedOut' => 'Verbinding verlopen. Gebruik hetzelfde netwerk op beide apparaten.',
|
'companionRemote.pairing.connectionTimedOut' => 'Verbinding verlopen. Gebruik hetzelfde netwerk op beide apparaten.',
|
||||||
_ => null,
|
|
||||||
} ?? switch (path) {
|
|
||||||
'companionRemote.pairing.sessionNotFound' => 'Apparaat niet gevonden. Zorg dat Plezy op de host draait.',
|
'companionRemote.pairing.sessionNotFound' => 'Apparaat niet gevonden. Zorg dat Plezy op de host draait.',
|
||||||
'companionRemote.pairing.authFailed' => 'Authenticatie mislukt. Beide apparaten hebben hetzelfde Plex-account nodig.',
|
'companionRemote.pairing.authFailed' => 'Authenticatie mislukt. Beide apparaten hebben hetzelfde Plex-account nodig.',
|
||||||
'companionRemote.pairing.failedToConnect' => ({required Object error}) => 'Kan niet verbinden: ${error}',
|
'companionRemote.pairing.failedToConnect' => ({required Object error}) => 'Kan niet verbinden: ${error}',
|
||||||
|
|||||||
@@ -393,6 +393,22 @@ class _TranslationsSettingsPl extends TranslationsSettingsEn {
|
|||||||
@override String get tunneledPlaybackDescription => 'Użyj tunelowania wideo. Wyłącz, jeśli HDR pokazuje czarny obraz.';
|
@override String get tunneledPlaybackDescription => 'Użyj tunelowania wideo. Wyłącz, jeśli HDR pokazuje czarny obraz.';
|
||||||
@override String get audioPassthrough => 'Bezpośrednie audio';
|
@override String get audioPassthrough => 'Bezpośrednie audio';
|
||||||
@override String get audioPassthroughDescription => 'Wysyłaj dźwięk Dolby/DTS do amplitunera lub telewizora bez ponownego kodowania, zachowując dźwięk przestrzenny. Wyłącz, jeśli nie ma dźwięku.';
|
@override String get audioPassthroughDescription => 'Wysyłaj dźwięk Dolby/DTS do amplitunera lub telewizora bez ponownego kodowania, zachowując dźwięk przestrzenny. Wyłącz, jeśli nie ma dźwięku.';
|
||||||
|
@override String get audioPassthroughDescriptionAppleTv => 'Przekazuje Dolby Digital Plus (w tym Atmos) do systemu jako bitstream. DTS i TrueHD nadal odtwarzane są jako wielokanałowe PCM. Podczas przewijania mogą wystąpić krótkie przerwy w dźwięku.';
|
||||||
|
@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ń surround Apple';
|
||||||
|
@override String get atmosTestHlsControlDescription => 'Strumień kontrolny bez Atmos. Amplituner powinien pokazać surround bez Atmos.';
|
||||||
|
@override String get atmosTestRawStream => 'Surowy strumień EAC3';
|
||||||
|
@override String get atmosTestRawStreamDescription => 'Strumieniuje plik testowy dokładnie jak odtwarzanie Atmos w odtwarzaczu. Wymaga 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 atmosTestStop => 'Zatrzymaj test';
|
||||||
|
@override String get atmosTestUrl => 'URL pliku testowego';
|
||||||
|
@override String get atmosTestUrlDescription => 'HTTP URL surowego pliku .ec3 Dolby Atmos (np. wyodrębnionego przez ffmpeg)';
|
||||||
|
@override String get atmosTestUrlMissing => 'Najpierw ustaw URL pliku testowego';
|
||||||
|
@override String get atmosTestStatus => 'Stan';
|
||||||
@override String get dvConversionMode => 'Konwersja Dolby Vision';
|
@override String get dvConversionMode => 'Konwersja Dolby Vision';
|
||||||
@override String get dvConversionModeDescription => 'Wybierz, jak ExoPlayer obsługuje pliki Dolby Vision Profile 7.';
|
@override String get dvConversionModeDescription => 'Wybierz, jak ExoPlayer obsługuje pliki Dolby Vision Profile 7.';
|
||||||
@override String get dvConversionAuto => 'Automatycznie';
|
@override String get dvConversionAuto => 'Automatycznie';
|
||||||
@@ -2184,6 +2200,22 @@ extension on TranslationsPl {
|
|||||||
'settings.tunneledPlaybackDescription' => 'Użyj tunelowania wideo. Wyłącz, jeśli HDR pokazuje czarny obraz.',
|
'settings.tunneledPlaybackDescription' => 'Użyj tunelowania wideo. Wyłącz, jeśli HDR pokazuje czarny obraz.',
|
||||||
'settings.audioPassthrough' => 'Bezpośrednie audio',
|
'settings.audioPassthrough' => 'Bezpośrednie audio',
|
||||||
'settings.audioPassthroughDescription' => 'Wysyłaj dźwięk Dolby/DTS do amplitunera lub telewizora bez ponownego kodowania, zachowując dźwięk przestrzenny. Wyłącz, jeśli nie ma dźwięku.',
|
'settings.audioPassthroughDescription' => 'Wysyłaj dźwięk Dolby/DTS do amplitunera lub telewizora bez ponownego kodowania, zachowując dźwięk przestrzenny. Wyłącz, jeśli nie ma dźwięku.',
|
||||||
|
'settings.audioPassthroughDescriptionAppleTv' => 'Przekazuje Dolby Digital Plus (w tym Atmos) do systemu jako bitstream. DTS i TrueHD nadal odtwarzane są jako wielokanałowe PCM. Podczas przewijania mogą wystąpić krótkie przerwy w dźwięku.',
|
||||||
|
'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ń surround Apple',
|
||||||
|
'settings.atmosTestHlsControlDescription' => 'Strumień kontrolny bez Atmos. Amplituner powinien pokazać surround bez Atmos.',
|
||||||
|
'settings.atmosTestRawStream' => 'Surowy strumień EAC3',
|
||||||
|
'settings.atmosTestRawStreamDescription' => 'Strumieniuje plik testowy dokładnie jak odtwarzanie Atmos w odtwarzaczu. Wymaga URL pliku testowego.',
|
||||||
|
'settings.atmosTestRawFile' => 'Surowy plik EAC3',
|
||||||
|
'settings.atmosTestRawFileDescription' => 'Odtwarza plik testowy o znanej długości. Wymaga URL pliku testowego.',
|
||||||
|
'settings.atmosTestStop' => 'Zatrzymaj test',
|
||||||
|
'settings.atmosTestUrl' => 'URL pliku testowego',
|
||||||
|
'settings.atmosTestUrlDescription' => 'HTTP URL surowego pliku .ec3 Dolby Atmos (np. wyodrębnionego przez ffmpeg)',
|
||||||
|
'settings.atmosTestUrlMissing' => 'Najpierw ustaw URL pliku testowego',
|
||||||
|
'settings.atmosTestStatus' => 'Stan',
|
||||||
'settings.dvConversionMode' => 'Konwersja Dolby Vision',
|
'settings.dvConversionMode' => 'Konwersja Dolby Vision',
|
||||||
'settings.dvConversionModeDescription' => 'Wybierz, jak ExoPlayer obsługuje pliki Dolby Vision Profile 7.',
|
'settings.dvConversionModeDescription' => 'Wybierz, jak ExoPlayer obsługuje pliki Dolby Vision Profile 7.',
|
||||||
'settings.dvConversionAuto' => 'Automatycznie',
|
'settings.dvConversionAuto' => 'Automatycznie',
|
||||||
@@ -2426,6 +2458,8 @@ extension on TranslationsPl {
|
|||||||
'messages.libraryScanFailed' => ({required Object error}) => 'Nie udało się zeskanować biblioteki: ${error}',
|
'messages.libraryScanFailed' => ({required Object error}) => 'Nie udało się zeskanować biblioteki: ${error}',
|
||||||
'messages.metadataRefreshing' => ({required Object title}) => 'Odświeżanie metadanych "${title}"...',
|
'messages.metadataRefreshing' => ({required Object title}) => 'Odświeżanie metadanych "${title}"...',
|
||||||
'messages.metadataRefreshStarted' => ({required Object title}) => 'Rozpoczęto odświeżanie metadanych "${title}"',
|
'messages.metadataRefreshStarted' => ({required Object title}) => 'Rozpoczęto odświeżanie metadanych "${title}"',
|
||||||
|
_ => null,
|
||||||
|
} ?? switch (path) {
|
||||||
'messages.metadataRefreshFailed' => ({required Object error}) => 'Nie udało się odświeżyć metadanych: ${error}',
|
'messages.metadataRefreshFailed' => ({required Object error}) => 'Nie udało się odświeżyć metadanych: ${error}',
|
||||||
'messages.logoutConfirm' => 'Czy na pewno chcesz się wylogować?',
|
'messages.logoutConfirm' => 'Czy na pewno chcesz się wylogować?',
|
||||||
'messages.noSeasonsFound' => 'Nie znaleziono sezonów',
|
'messages.noSeasonsFound' => 'Nie znaleziono sezonów',
|
||||||
@@ -2442,8 +2476,6 @@ extension on TranslationsPl {
|
|||||||
'messages.serverLimitTitle' => 'Odtwarzanie nie powiodło się',
|
'messages.serverLimitTitle' => 'Odtwarzanie nie powiodło się',
|
||||||
'messages.serverLimitBody' => 'Błąd serwera (HTTP 500). Limit przepustowości/transkodowania prawdopodobnie odrzucił tę sesję. Poproś właściciela o zmianę.',
|
'messages.serverLimitBody' => 'Błąd serwera (HTTP 500). Limit przepustowości/transkodowania prawdopodobnie odrzucił tę sesję. Poproś właściciela o zmianę.',
|
||||||
'messages.logsUploaded' => 'Logi przesłane',
|
'messages.logsUploaded' => 'Logi przesłane',
|
||||||
_ => null,
|
|
||||||
} ?? switch (path) {
|
|
||||||
'messages.logsUploadFailed' => 'Nie udało się przesłać logów',
|
'messages.logsUploadFailed' => 'Nie udało się przesłać logów',
|
||||||
'messages.logId' => 'ID logu',
|
'messages.logId' => 'ID logu',
|
||||||
'subtitlingStyling.text' => 'Tekst',
|
'subtitlingStyling.text' => 'Tekst',
|
||||||
@@ -2940,6 +2972,8 @@ extension on TranslationsPl {
|
|||||||
'companionRemote.session.serverStopped' => 'Serwer zdalny zatrzymany',
|
'companionRemote.session.serverStopped' => 'Serwer zdalny zatrzymany',
|
||||||
'companionRemote.session.serverRunningDescription' => 'Urządzenia mobilne w Twojej sieci mogą łączyć się z tą aplikacją',
|
'companionRemote.session.serverRunningDescription' => 'Urządzenia mobilne w Twojej sieci mogą łączyć się z tą aplikacją',
|
||||||
'companionRemote.session.serverStoppedDescription' => 'Uruchom serwer, aby umożliwić połączenie urządzeń mobilnych',
|
'companionRemote.session.serverStoppedDescription' => 'Uruchom serwer, aby umożliwić połączenie urządzeń mobilnych',
|
||||||
|
_ => null,
|
||||||
|
} ?? switch (path) {
|
||||||
'companionRemote.session.usePhoneToControl' => 'Użyj urządzenia mobilnego, aby sterować tą aplikacją',
|
'companionRemote.session.usePhoneToControl' => 'Użyj urządzenia mobilnego, aby sterować tą aplikacją',
|
||||||
'companionRemote.session.startServer' => 'Uruchom serwer',
|
'companionRemote.session.startServer' => 'Uruchom serwer',
|
||||||
'companionRemote.session.stopServer' => 'Zatrzymaj serwer',
|
'companionRemote.session.stopServer' => 'Zatrzymaj serwer',
|
||||||
@@ -2956,8 +2990,6 @@ extension on TranslationsPl {
|
|||||||
'companionRemote.pairing.validationHostRequired' => 'Wprowadź adres hosta',
|
'companionRemote.pairing.validationHostRequired' => 'Wprowadź adres hosta',
|
||||||
'companionRemote.pairing.validationHostFormat' => 'Format musi być IP:port (np. 192.168.1.100:48632)',
|
'companionRemote.pairing.validationHostFormat' => 'Format musi być IP:port (np. 192.168.1.100:48632)',
|
||||||
'companionRemote.pairing.connectionTimedOut' => 'Limit czasu połączenia. Użyj tej samej sieci na obu urządzeniach.',
|
'companionRemote.pairing.connectionTimedOut' => 'Limit czasu połączenia. Użyj tej samej sieci na obu urządzeniach.',
|
||||||
_ => null,
|
|
||||||
} ?? switch (path) {
|
|
||||||
'companionRemote.pairing.sessionNotFound' => 'Nie znaleziono urządzenia. Upewnij się, że Plezy działa na hoście.',
|
'companionRemote.pairing.sessionNotFound' => 'Nie znaleziono urządzenia. Upewnij się, że Plezy działa na hoście.',
|
||||||
'companionRemote.pairing.authFailed' => 'Uwierzytelnianie nie powiodło się. Oba urządzenia muszą używać tego samego konta Plex.',
|
'companionRemote.pairing.authFailed' => 'Uwierzytelnianie nie powiodło się. Oba urządzenia muszą używać tego samego konta Plex.',
|
||||||
'companionRemote.pairing.failedToConnect' => ({required Object error}) => 'Nie udało się połączyć: ${error}',
|
'companionRemote.pairing.failedToConnect' => ({required Object error}) => 'Nie udało się połączyć: ${error}',
|
||||||
|
|||||||
@@ -393,6 +393,22 @@ class _TranslationsSettingsPt extends TranslationsSettingsEn {
|
|||||||
@override String get tunneledPlaybackDescription => 'Usar tunelamento de vídeo. Desative se HDR mostrar vídeo preto.';
|
@override String get tunneledPlaybackDescription => 'Usar tunelamento de vídeo. Desative se HDR mostrar vídeo preto.';
|
||||||
@override String get audioPassthrough => 'Passagem de Áudio';
|
@override String get audioPassthrough => 'Passagem de Áudio';
|
||||||
@override String get audioPassthroughDescription => 'Envie áudio Dolby/DTS para o seu receptor ou TV sem recodificar, preservando o som surround. Desative se não tiver som.';
|
@override String get audioPassthroughDescription => 'Envie áudio Dolby/DTS para o seu receptor ou TV sem recodificar, preservando o som surround. Desative se não tiver som.';
|
||||||
|
@override String get audioPassthroughDescriptionAppleTv => 'Entrega Dolby Digital Plus (incluindo Atmos) ao sistema como bitstream. DTS e TrueHD continuam sendo reproduzidos como PCM multicanal. Podem ocorrer breves cortes de áudio ao buscar.';
|
||||||
|
@override String get atmosDiagnostics => 'Teste de saída Atmos';
|
||||||
|
@override String get atmosDiagnosticsDescription => 'Diagnostique a saída Dolby Atmos reproduzindo sinais de teste pelo player do sistema';
|
||||||
|
@override String get atmosTestHlsAtmos => 'Stream Atmos da Apple';
|
||||||
|
@override String get atmosTestHlsAtmosDescription => 'Stream Dolby Atmos comprovadamente bom. O receptor deve mostrar Dolby Atmos.';
|
||||||
|
@override String get atmosTestHlsControl => 'Stream surround da Apple';
|
||||||
|
@override String get atmosTestHlsControlDescription => 'Stream de controle sem Atmos. O receptor deve mostrar surround sem Atmos.';
|
||||||
|
@override String get atmosTestRawStream => 'Stream EAC3 bruto';
|
||||||
|
@override String get atmosTestRawStreamDescription => 'Transmite o arquivo de teste exatamente como a reprodução Atmos no player. 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 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 dvConversionMode => 'Conversão Dolby Vision';
|
||||||
@override String get dvConversionModeDescription => 'Escolha como o ExoPlayer lida com arquivos Dolby Vision Profile 7.';
|
@override String get dvConversionModeDescription => 'Escolha como o ExoPlayer lida com arquivos Dolby Vision Profile 7.';
|
||||||
@override String get dvConversionAuto => 'Automático';
|
@override String get dvConversionAuto => 'Automático';
|
||||||
@@ -2184,6 +2200,22 @@ extension on TranslationsPt {
|
|||||||
'settings.tunneledPlaybackDescription' => 'Usar tunelamento de vídeo. Desative se HDR mostrar vídeo preto.',
|
'settings.tunneledPlaybackDescription' => 'Usar tunelamento de vídeo. Desative se HDR mostrar vídeo preto.',
|
||||||
'settings.audioPassthrough' => 'Passagem de Áudio',
|
'settings.audioPassthrough' => 'Passagem de Áudio',
|
||||||
'settings.audioPassthroughDescription' => 'Envie áudio Dolby/DTS para o seu receptor ou TV sem recodificar, preservando o som surround. Desative se não tiver som.',
|
'settings.audioPassthroughDescription' => 'Envie áudio Dolby/DTS para o seu receptor ou TV sem recodificar, preservando o som surround. Desative se não tiver som.',
|
||||||
|
'settings.audioPassthroughDescriptionAppleTv' => 'Entrega Dolby Digital Plus (incluindo Atmos) ao sistema como bitstream. DTS e TrueHD continuam sendo reproduzidos como PCM multicanal. Podem ocorrer breves cortes de áudio ao buscar.',
|
||||||
|
'settings.atmosDiagnostics' => 'Teste de saída Atmos',
|
||||||
|
'settings.atmosDiagnosticsDescription' => 'Diagnostique a saída Dolby Atmos reproduzindo sinais de teste pelo player do sistema',
|
||||||
|
'settings.atmosTestHlsAtmos' => 'Stream Atmos da Apple',
|
||||||
|
'settings.atmosTestHlsAtmosDescription' => 'Stream Dolby Atmos comprovadamente bom. O receptor deve mostrar Dolby Atmos.',
|
||||||
|
'settings.atmosTestHlsControl' => 'Stream surround da Apple',
|
||||||
|
'settings.atmosTestHlsControlDescription' => 'Stream de controle sem Atmos. O receptor deve mostrar surround sem Atmos.',
|
||||||
|
'settings.atmosTestRawStream' => 'Stream EAC3 bruto',
|
||||||
|
'settings.atmosTestRawStreamDescription' => 'Transmite o arquivo de teste exatamente como a reprodução Atmos no player. 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.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.dvConversionMode' => 'Conversão Dolby Vision',
|
||||||
'settings.dvConversionModeDescription' => 'Escolha como o ExoPlayer lida com arquivos Dolby Vision Profile 7.',
|
'settings.dvConversionModeDescription' => 'Escolha como o ExoPlayer lida com arquivos Dolby Vision Profile 7.',
|
||||||
'settings.dvConversionAuto' => 'Automático',
|
'settings.dvConversionAuto' => 'Automático',
|
||||||
@@ -2426,6 +2458,8 @@ extension on TranslationsPt {
|
|||||||
'messages.libraryScanFailed' => ({required Object error}) => 'Falha ao escanear biblioteca: ${error}',
|
'messages.libraryScanFailed' => ({required Object error}) => 'Falha ao escanear biblioteca: ${error}',
|
||||||
'messages.metadataRefreshing' => ({required Object title}) => 'Atualizando metadados de "${title}"...',
|
'messages.metadataRefreshing' => ({required Object title}) => 'Atualizando metadados de "${title}"...',
|
||||||
'messages.metadataRefreshStarted' => ({required Object title}) => 'Atualização de metadados iniciada para "${title}"',
|
'messages.metadataRefreshStarted' => ({required Object title}) => 'Atualização de metadados iniciada para "${title}"',
|
||||||
|
_ => null,
|
||||||
|
} ?? switch (path) {
|
||||||
'messages.metadataRefreshFailed' => ({required Object error}) => 'Falha ao atualizar metadados: ${error}',
|
'messages.metadataRefreshFailed' => ({required Object error}) => 'Falha ao atualizar metadados: ${error}',
|
||||||
'messages.logoutConfirm' => 'Tem certeza que deseja sair?',
|
'messages.logoutConfirm' => 'Tem certeza que deseja sair?',
|
||||||
'messages.noSeasonsFound' => 'Nenhuma temporada encontrada',
|
'messages.noSeasonsFound' => 'Nenhuma temporada encontrada',
|
||||||
@@ -2442,8 +2476,6 @@ extension on TranslationsPt {
|
|||||||
'messages.serverLimitTitle' => 'Falha na reprodução',
|
'messages.serverLimitTitle' => 'Falha na reprodução',
|
||||||
'messages.serverLimitBody' => 'Erro do servidor (HTTP 500). Um limite de largura de banda/transcodificação provavelmente rejeitou esta sessão. Peça ao dono para ajustar.',
|
'messages.serverLimitBody' => 'Erro do servidor (HTTP 500). Um limite de largura de banda/transcodificação provavelmente rejeitou esta sessão. Peça ao dono para ajustar.',
|
||||||
'messages.logsUploaded' => 'Logs enviados',
|
'messages.logsUploaded' => 'Logs enviados',
|
||||||
_ => null,
|
|
||||||
} ?? switch (path) {
|
|
||||||
'messages.logsUploadFailed' => 'Falha ao enviar logs',
|
'messages.logsUploadFailed' => 'Falha ao enviar logs',
|
||||||
'messages.logId' => 'ID do Log',
|
'messages.logId' => 'ID do Log',
|
||||||
'subtitlingStyling.text' => 'Texto',
|
'subtitlingStyling.text' => 'Texto',
|
||||||
@@ -2940,6 +2972,8 @@ extension on TranslationsPt {
|
|||||||
'companionRemote.session.serverStopped' => 'Servidor remoto parado',
|
'companionRemote.session.serverStopped' => 'Servidor remoto parado',
|
||||||
'companionRemote.session.serverRunningDescription' => 'Dispositivos móveis na sua rede podem se conectar a este app',
|
'companionRemote.session.serverRunningDescription' => 'Dispositivos móveis na sua rede podem se conectar a este app',
|
||||||
'companionRemote.session.serverStoppedDescription' => 'Inicie o servidor para permitir que dispositivos móveis se conectem',
|
'companionRemote.session.serverStoppedDescription' => 'Inicie o servidor para permitir que dispositivos móveis se conectem',
|
||||||
|
_ => null,
|
||||||
|
} ?? switch (path) {
|
||||||
'companionRemote.session.usePhoneToControl' => 'Use o seu dispositivo móvel para controlar esta aplicação',
|
'companionRemote.session.usePhoneToControl' => 'Use o seu dispositivo móvel para controlar esta aplicação',
|
||||||
'companionRemote.session.startServer' => 'Iniciar servidor',
|
'companionRemote.session.startServer' => 'Iniciar servidor',
|
||||||
'companionRemote.session.stopServer' => 'Parar servidor',
|
'companionRemote.session.stopServer' => 'Parar servidor',
|
||||||
@@ -2956,8 +2990,6 @@ extension on TranslationsPt {
|
|||||||
'companionRemote.pairing.validationHostRequired' => 'Introduza o endereço do host',
|
'companionRemote.pairing.validationHostRequired' => 'Introduza o endereço do host',
|
||||||
'companionRemote.pairing.validationHostFormat' => 'O formato deve ser IP:porta (ex. 192.168.1.100:48632)',
|
'companionRemote.pairing.validationHostFormat' => 'O formato deve ser IP:porta (ex. 192.168.1.100:48632)',
|
||||||
'companionRemote.pairing.connectionTimedOut' => 'Conexão expirou. Use a mesma rede nos dois dispositivos.',
|
'companionRemote.pairing.connectionTimedOut' => 'Conexão expirou. Use a mesma rede nos dois dispositivos.',
|
||||||
_ => null,
|
|
||||||
} ?? switch (path) {
|
|
||||||
'companionRemote.pairing.sessionNotFound' => 'Dispositivo não encontrado. Verifique se Plezy está rodando no host.',
|
'companionRemote.pairing.sessionNotFound' => 'Dispositivo não encontrado. Verifique se Plezy está rodando no host.',
|
||||||
'companionRemote.pairing.authFailed' => 'Falha na autenticação. Ambos os dispositivos precisam da mesma conta Plex.',
|
'companionRemote.pairing.authFailed' => 'Falha na autenticação. Ambos os dispositivos precisam da mesma conta Plex.',
|
||||||
'companionRemote.pairing.failedToConnect' => ({required Object error}) => 'Falha ao conectar: ${error}',
|
'companionRemote.pairing.failedToConnect' => ({required Object error}) => 'Falha ao conectar: ${error}',
|
||||||
|
|||||||
@@ -393,6 +393,22 @@ class _TranslationsSettingsRu extends TranslationsSettingsEn {
|
|||||||
@override String get tunneledPlaybackDescription => 'Использовать видеотуннелирование. Отключите, если HDR показывает черный экран.';
|
@override String get tunneledPlaybackDescription => 'Использовать видеотуннелирование. Отключите, если HDR показывает черный экран.';
|
||||||
@override String get audioPassthrough => 'Сквозной вывод аудио';
|
@override String get audioPassthrough => 'Сквозной вывод аудио';
|
||||||
@override String get audioPassthroughDescription => 'Передавать звук Dolby/DTS на ресивер или телевизор без перекодирования, сохраняя объёмный звук. Отключите, если нет звука.';
|
@override String get audioPassthroughDescription => 'Передавать звук Dolby/DTS на ресивер или телевизор без перекодирования, сохраняя объёмный звук. Отключите, если нет звука.';
|
||||||
|
@override String get audioPassthroughDescriptionAppleTv => 'Передаёт Dolby Digital Plus (включая Atmos) системе в виде битового потока. DTS и TrueHD по-прежнему воспроизводятся как многоканальный PCM. При перемотке возможны короткие пропадания звука.';
|
||||||
|
@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 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 dvConversionMode => 'Преобразование Dolby Vision';
|
||||||
@override String get dvConversionModeDescription => 'Выберите, как ExoPlayer обрабатывает файлы Dolby Vision Profile 7.';
|
@override String get dvConversionModeDescription => 'Выберите, как ExoPlayer обрабатывает файлы Dolby Vision Profile 7.';
|
||||||
@override String get dvConversionAuto => 'Авто';
|
@override String get dvConversionAuto => 'Авто';
|
||||||
@@ -2184,6 +2200,22 @@ extension on TranslationsRu {
|
|||||||
'settings.tunneledPlaybackDescription' => 'Использовать видеотуннелирование. Отключите, если HDR показывает черный экран.',
|
'settings.tunneledPlaybackDescription' => 'Использовать видеотуннелирование. Отключите, если HDR показывает черный экран.',
|
||||||
'settings.audioPassthrough' => 'Сквозной вывод аудио',
|
'settings.audioPassthrough' => 'Сквозной вывод аудио',
|
||||||
'settings.audioPassthroughDescription' => 'Передавать звук Dolby/DTS на ресивер или телевизор без перекодирования, сохраняя объёмный звук. Отключите, если нет звука.',
|
'settings.audioPassthroughDescription' => 'Передавать звук Dolby/DTS на ресивер или телевизор без перекодирования, сохраняя объёмный звук. Отключите, если нет звука.',
|
||||||
|
'settings.audioPassthroughDescriptionAppleTv' => 'Передаёт Dolby Digital Plus (включая Atmos) системе в виде битового потока. DTS и TrueHD по-прежнему воспроизводятся как многоканальный PCM. При перемотке возможны короткие пропадания звука.',
|
||||||
|
'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.atmosTestStop' => 'Остановить тест',
|
||||||
|
'settings.atmosTestUrl' => 'URL тестового файла',
|
||||||
|
'settings.atmosTestUrlDescription' => 'HTTP-URL сырого файла .ec3 Dolby Atmos (например, извлечённого через ffmpeg)',
|
||||||
|
'settings.atmosTestUrlMissing' => 'Сначала укажите URL тестового файла',
|
||||||
|
'settings.atmosTestStatus' => 'Статус',
|
||||||
'settings.dvConversionMode' => 'Преобразование Dolby Vision',
|
'settings.dvConversionMode' => 'Преобразование Dolby Vision',
|
||||||
'settings.dvConversionModeDescription' => 'Выберите, как ExoPlayer обрабатывает файлы Dolby Vision Profile 7.',
|
'settings.dvConversionModeDescription' => 'Выберите, как ExoPlayer обрабатывает файлы Dolby Vision Profile 7.',
|
||||||
'settings.dvConversionAuto' => 'Авто',
|
'settings.dvConversionAuto' => 'Авто',
|
||||||
@@ -2426,6 +2458,8 @@ extension on TranslationsRu {
|
|||||||
'messages.libraryScanFailed' => ({required Object error}) => 'Не удалось отсканировать библиотеку: ${error}',
|
'messages.libraryScanFailed' => ({required Object error}) => 'Не удалось отсканировать библиотеку: ${error}',
|
||||||
'messages.metadataRefreshing' => ({required Object title}) => 'Обновление метаданных "${title}"...',
|
'messages.metadataRefreshing' => ({required Object title}) => 'Обновление метаданных "${title}"...',
|
||||||
'messages.metadataRefreshStarted' => ({required Object title}) => 'Обновление метаданных начато для "${title}"',
|
'messages.metadataRefreshStarted' => ({required Object title}) => 'Обновление метаданных начато для "${title}"',
|
||||||
|
_ => null,
|
||||||
|
} ?? switch (path) {
|
||||||
'messages.metadataRefreshFailed' => ({required Object error}) => 'Не удалось обновить метаданные: ${error}',
|
'messages.metadataRefreshFailed' => ({required Object error}) => 'Не удалось обновить метаданные: ${error}',
|
||||||
'messages.logoutConfirm' => 'Вы уверены, что хотите выйти?',
|
'messages.logoutConfirm' => 'Вы уверены, что хотите выйти?',
|
||||||
'messages.noSeasonsFound' => 'Сезоны не найдены',
|
'messages.noSeasonsFound' => 'Сезоны не найдены',
|
||||||
@@ -2442,8 +2476,6 @@ extension on TranslationsRu {
|
|||||||
'messages.serverLimitTitle' => 'Ошибка воспроизведения',
|
'messages.serverLimitTitle' => 'Ошибка воспроизведения',
|
||||||
'messages.serverLimitBody' => 'Ошибка сервера (HTTP 500). Лимит пропускной способности/транскодирования, вероятно, отклонил сессию. Попросите владельца изменить настройки.',
|
'messages.serverLimitBody' => 'Ошибка сервера (HTTP 500). Лимит пропускной способности/транскодирования, вероятно, отклонил сессию. Попросите владельца изменить настройки.',
|
||||||
'messages.logsUploaded' => 'Логи загружены',
|
'messages.logsUploaded' => 'Логи загружены',
|
||||||
_ => null,
|
|
||||||
} ?? switch (path) {
|
|
||||||
'messages.logsUploadFailed' => 'Не удалось загрузить логи',
|
'messages.logsUploadFailed' => 'Не удалось загрузить логи',
|
||||||
'messages.logId' => 'ID лога',
|
'messages.logId' => 'ID лога',
|
||||||
'subtitlingStyling.text' => 'Текст',
|
'subtitlingStyling.text' => 'Текст',
|
||||||
@@ -2940,6 +2972,8 @@ extension on TranslationsRu {
|
|||||||
'companionRemote.session.serverStopped' => 'Удалённый сервер остановлен',
|
'companionRemote.session.serverStopped' => 'Удалённый сервер остановлен',
|
||||||
'companionRemote.session.serverRunningDescription' => 'Мобильные устройства в вашей сети могут подключаться к этому приложению',
|
'companionRemote.session.serverRunningDescription' => 'Мобильные устройства в вашей сети могут подключаться к этому приложению',
|
||||||
'companionRemote.session.serverStoppedDescription' => 'Запустите сервер, чтобы разрешить подключение мобильных устройств',
|
'companionRemote.session.serverStoppedDescription' => 'Запустите сервер, чтобы разрешить подключение мобильных устройств',
|
||||||
|
_ => null,
|
||||||
|
} ?? switch (path) {
|
||||||
'companionRemote.session.usePhoneToControl' => 'Используйте мобильное устройство для управления этим приложением',
|
'companionRemote.session.usePhoneToControl' => 'Используйте мобильное устройство для управления этим приложением',
|
||||||
'companionRemote.session.startServer' => 'Запустить сервер',
|
'companionRemote.session.startServer' => 'Запустить сервер',
|
||||||
'companionRemote.session.stopServer' => 'Остановить сервер',
|
'companionRemote.session.stopServer' => 'Остановить сервер',
|
||||||
@@ -2956,8 +2990,6 @@ extension on TranslationsRu {
|
|||||||
'companionRemote.pairing.validationHostRequired' => 'Введите адрес хоста',
|
'companionRemote.pairing.validationHostRequired' => 'Введите адрес хоста',
|
||||||
'companionRemote.pairing.validationHostFormat' => 'Формат должен быть IP:порт (например, 192.168.1.100:48632)',
|
'companionRemote.pairing.validationHostFormat' => 'Формат должен быть IP:порт (например, 192.168.1.100:48632)',
|
||||||
'companionRemote.pairing.connectionTimedOut' => 'Время подключения истекло. Используйте одну сеть на обоих устройствах.',
|
'companionRemote.pairing.connectionTimedOut' => 'Время подключения истекло. Используйте одну сеть на обоих устройствах.',
|
||||||
_ => null,
|
|
||||||
} ?? switch (path) {
|
|
||||||
'companionRemote.pairing.sessionNotFound' => 'Устройство не найдено. Убедитесь, что Plezy запущен на хосте.',
|
'companionRemote.pairing.sessionNotFound' => 'Устройство не найдено. Убедитесь, что Plezy запущен на хосте.',
|
||||||
'companionRemote.pairing.authFailed' => 'Аутентификация не удалась. На обоих устройствах нужен один аккаунт Plex.',
|
'companionRemote.pairing.authFailed' => 'Аутентификация не удалась. На обоих устройствах нужен один аккаунт Plex.',
|
||||||
'companionRemote.pairing.failedToConnect' => ({required Object error}) => 'Не удалось подключиться: ${error}',
|
'companionRemote.pairing.failedToConnect' => ({required Object error}) => 'Не удалось подключиться: ${error}',
|
||||||
|
|||||||
@@ -393,6 +393,22 @@ class _TranslationsSettingsSv extends TranslationsSettingsEn {
|
|||||||
@override String get tunneledPlaybackDescription => 'Använd videotunnling. Inaktivera om HDR-uppspelning visar svart video.';
|
@override String get tunneledPlaybackDescription => 'Använd videotunnling. Inaktivera om HDR-uppspelning visar svart video.';
|
||||||
@override String get audioPassthrough => 'Ljudgenomkoppling';
|
@override String get audioPassthrough => 'Ljudgenomkoppling';
|
||||||
@override String get audioPassthroughDescription => 'Skicka Dolby/DTS-ljud till din receiver eller TV utan omkodning och bevara surroundljudet. Stäng av om du inte har något ljud.';
|
@override String get audioPassthroughDescription => 'Skicka Dolby/DTS-ljud till din receiver eller TV utan omkodning och bevara surroundljudet. Stäng av om du inte har något ljud.';
|
||||||
|
@override String get audioPassthroughDescriptionAppleTv => 'Lämnar Dolby Digital Plus (inkl. Atmos) till systemet som bitstream. DTS och TrueHD spelas fortfarande upp som flerkanals-PCM. Korta ljudavbrott kan förekomma vid sökning.';
|
||||||
|
@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 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 dvConversionMode => 'Dolby Vision-konvertering';
|
||||||
@override String get dvConversionModeDescription => 'Välj hur ExoPlayer hanterar Dolby Vision Profile 7-filer.';
|
@override String get dvConversionModeDescription => 'Välj hur ExoPlayer hanterar Dolby Vision Profile 7-filer.';
|
||||||
@override String get dvConversionAuto => 'Auto';
|
@override String get dvConversionAuto => 'Auto';
|
||||||
@@ -2184,6 +2200,22 @@ extension on TranslationsSv {
|
|||||||
'settings.tunneledPlaybackDescription' => 'Använd videotunnling. Inaktivera om HDR-uppspelning visar svart video.',
|
'settings.tunneledPlaybackDescription' => 'Använd videotunnling. Inaktivera om HDR-uppspelning visar svart video.',
|
||||||
'settings.audioPassthrough' => 'Ljudgenomkoppling',
|
'settings.audioPassthrough' => 'Ljudgenomkoppling',
|
||||||
'settings.audioPassthroughDescription' => 'Skicka Dolby/DTS-ljud till din receiver eller TV utan omkodning och bevara surroundljudet. Stäng av om du inte har något ljud.',
|
'settings.audioPassthroughDescription' => 'Skicka Dolby/DTS-ljud till din receiver eller TV utan omkodning och bevara surroundljudet. Stäng av om du inte har något ljud.',
|
||||||
|
'settings.audioPassthroughDescriptionAppleTv' => 'Lämnar Dolby Digital Plus (inkl. Atmos) till systemet som bitstream. DTS och TrueHD spelas fortfarande upp som flerkanals-PCM. Korta ljudavbrott kan förekomma vid sökning.',
|
||||||
|
'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.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.dvConversionMode' => 'Dolby Vision-konvertering',
|
||||||
'settings.dvConversionModeDescription' => 'Välj hur ExoPlayer hanterar Dolby Vision Profile 7-filer.',
|
'settings.dvConversionModeDescription' => 'Välj hur ExoPlayer hanterar Dolby Vision Profile 7-filer.',
|
||||||
'settings.dvConversionAuto' => 'Auto',
|
'settings.dvConversionAuto' => 'Auto',
|
||||||
@@ -2426,6 +2458,8 @@ extension on TranslationsSv {
|
|||||||
'messages.libraryScanFailed' => ({required Object error}) => 'Misslyckades att skanna bibliotek: ${error}',
|
'messages.libraryScanFailed' => ({required Object error}) => 'Misslyckades att skanna bibliotek: ${error}',
|
||||||
'messages.metadataRefreshing' => ({required Object title}) => 'Uppdaterar metadata för "${title}"...',
|
'messages.metadataRefreshing' => ({required Object title}) => 'Uppdaterar metadata för "${title}"...',
|
||||||
'messages.metadataRefreshStarted' => ({required Object title}) => 'Metadata-uppdatering startad för "${title}"',
|
'messages.metadataRefreshStarted' => ({required Object title}) => 'Metadata-uppdatering startad för "${title}"',
|
||||||
|
_ => null,
|
||||||
|
} ?? switch (path) {
|
||||||
'messages.metadataRefreshFailed' => ({required Object error}) => 'Misslyckades att uppdatera metadata: ${error}',
|
'messages.metadataRefreshFailed' => ({required Object error}) => 'Misslyckades att uppdatera metadata: ${error}',
|
||||||
'messages.logoutConfirm' => 'Är du säker på att du vill logga ut?',
|
'messages.logoutConfirm' => 'Är du säker på att du vill logga ut?',
|
||||||
'messages.noSeasonsFound' => 'Inga säsonger hittades',
|
'messages.noSeasonsFound' => 'Inga säsonger hittades',
|
||||||
@@ -2442,8 +2476,6 @@ extension on TranslationsSv {
|
|||||||
'messages.serverLimitTitle' => 'Uppspelningen misslyckades',
|
'messages.serverLimitTitle' => 'Uppspelningen misslyckades',
|
||||||
'messages.serverLimitBody' => 'Serverfel (HTTP 500). En bandbredds-/transkodningsgräns avvisade troligen sessionen. Be ägaren justera den.',
|
'messages.serverLimitBody' => 'Serverfel (HTTP 500). En bandbredds-/transkodningsgräns avvisade troligen sessionen. Be ägaren justera den.',
|
||||||
'messages.logsUploaded' => 'Loggar uppladdade',
|
'messages.logsUploaded' => 'Loggar uppladdade',
|
||||||
_ => null,
|
|
||||||
} ?? switch (path) {
|
|
||||||
'messages.logsUploadFailed' => 'Uppladdning av loggar misslyckades',
|
'messages.logsUploadFailed' => 'Uppladdning av loggar misslyckades',
|
||||||
'messages.logId' => 'Logg-ID',
|
'messages.logId' => 'Logg-ID',
|
||||||
'subtitlingStyling.text' => 'Text',
|
'subtitlingStyling.text' => 'Text',
|
||||||
@@ -2940,6 +2972,8 @@ extension on TranslationsSv {
|
|||||||
'companionRemote.session.serverStopped' => 'Fjärrserver stoppad',
|
'companionRemote.session.serverStopped' => 'Fjärrserver stoppad',
|
||||||
'companionRemote.session.serverRunningDescription' => 'Mobila enheter i ditt nätverk kan ansluta till den här appen',
|
'companionRemote.session.serverRunningDescription' => 'Mobila enheter i ditt nätverk kan ansluta till den här appen',
|
||||||
'companionRemote.session.serverStoppedDescription' => 'Starta servern för att tillåta mobila enheter att ansluta',
|
'companionRemote.session.serverStoppedDescription' => 'Starta servern för att tillåta mobila enheter att ansluta',
|
||||||
|
_ => null,
|
||||||
|
} ?? switch (path) {
|
||||||
'companionRemote.session.usePhoneToControl' => 'Använd din mobila enhet för att styra denna app',
|
'companionRemote.session.usePhoneToControl' => 'Använd din mobila enhet för att styra denna app',
|
||||||
'companionRemote.session.startServer' => 'Starta server',
|
'companionRemote.session.startServer' => 'Starta server',
|
||||||
'companionRemote.session.stopServer' => 'Stoppa server',
|
'companionRemote.session.stopServer' => 'Stoppa server',
|
||||||
@@ -2956,8 +2990,6 @@ extension on TranslationsSv {
|
|||||||
'companionRemote.pairing.validationHostRequired' => 'Ange värdadress',
|
'companionRemote.pairing.validationHostRequired' => 'Ange värdadress',
|
||||||
'companionRemote.pairing.validationHostFormat' => 'Format måste vara IP:port (t.ex. 192.168.1.100:48632)',
|
'companionRemote.pairing.validationHostFormat' => 'Format måste vara IP:port (t.ex. 192.168.1.100:48632)',
|
||||||
'companionRemote.pairing.connectionTimedOut' => 'Anslutningen tog för lång tid. Använd samma nätverk på båda enheter.',
|
'companionRemote.pairing.connectionTimedOut' => 'Anslutningen tog för lång tid. Använd samma nätverk på båda enheter.',
|
||||||
_ => null,
|
|
||||||
} ?? switch (path) {
|
|
||||||
'companionRemote.pairing.sessionNotFound' => 'Enhet hittades inte. Kontrollera att Plezy körs på värden.',
|
'companionRemote.pairing.sessionNotFound' => 'Enhet hittades inte. Kontrollera att Plezy körs på värden.',
|
||||||
'companionRemote.pairing.authFailed' => 'Autentisering misslyckades. Båda enheter behöver samma Plex-konto.',
|
'companionRemote.pairing.authFailed' => 'Autentisering misslyckades. Båda enheter behöver samma Plex-konto.',
|
||||||
'companionRemote.pairing.failedToConnect' => ({required Object error}) => 'Kunde inte ansluta: ${error}',
|
'companionRemote.pairing.failedToConnect' => ({required Object error}) => 'Kunde inte ansluta: ${error}',
|
||||||
|
|||||||
@@ -393,6 +393,22 @@ class _TranslationsSettingsZh extends TranslationsSettingsEn {
|
|||||||
@override String get tunneledPlaybackDescription => '使用视频隧道。若 HDR 播放出现黑屏,请禁用。';
|
@override String get tunneledPlaybackDescription => '使用视频隧道。若 HDR 播放出现黑屏,请禁用。';
|
||||||
@override String get audioPassthrough => '音频直通';
|
@override String get audioPassthrough => '音频直通';
|
||||||
@override String get audioPassthroughDescription => '将 Dolby/DTS 音频不经重新编码直接发送到功放或电视,保留环绕声。如果没有声音,请关闭。';
|
@override String get audioPassthroughDescription => '将 Dolby/DTS 音频不经重新编码直接发送到功放或电视,保留环绕声。如果没有声音,请关闭。';
|
||||||
|
@override String get audioPassthroughDescriptionAppleTv => '将 Dolby Digital Plus(含 Atmos)以比特流方式交给系统输出。DTS 和 TrueHD 仍以多声道 PCM 播放。快进快退时可能出现短暂声音中断。';
|
||||||
|
@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 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 dvConversionMode => 'Dolby Vision 转换';
|
||||||
@override String get dvConversionModeDescription => '选择 ExoPlayer 如何处理 Dolby Vision Profile 7 文件。';
|
@override String get dvConversionModeDescription => '选择 ExoPlayer 如何处理 Dolby Vision Profile 7 文件。';
|
||||||
@override String get dvConversionAuto => '自动';
|
@override String get dvConversionAuto => '自动';
|
||||||
@@ -2184,6 +2200,22 @@ extension on TranslationsZh {
|
|||||||
'settings.tunneledPlaybackDescription' => '使用视频隧道。若 HDR 播放出现黑屏,请禁用。',
|
'settings.tunneledPlaybackDescription' => '使用视频隧道。若 HDR 播放出现黑屏,请禁用。',
|
||||||
'settings.audioPassthrough' => '音频直通',
|
'settings.audioPassthrough' => '音频直通',
|
||||||
'settings.audioPassthroughDescription' => '将 Dolby/DTS 音频不经重新编码直接发送到功放或电视,保留环绕声。如果没有声音,请关闭。',
|
'settings.audioPassthroughDescription' => '将 Dolby/DTS 音频不经重新编码直接发送到功放或电视,保留环绕声。如果没有声音,请关闭。',
|
||||||
|
'settings.audioPassthroughDescriptionAppleTv' => '将 Dolby Digital Plus(含 Atmos)以比特流方式交给系统输出。DTS 和 TrueHD 仍以多声道 PCM 播放。快进快退时可能出现短暂声音中断。',
|
||||||
|
'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.atmosTestStop' => '停止测试',
|
||||||
|
'settings.atmosTestUrl' => '测试文件 URL',
|
||||||
|
'settings.atmosTestUrlDescription' => '原始 .ec3 Dolby Atmos 文件的 HTTP URL(例如用 ffmpeg 提取)',
|
||||||
|
'settings.atmosTestUrlMissing' => '请先设置测试文件 URL',
|
||||||
|
'settings.atmosTestStatus' => '状态',
|
||||||
'settings.dvConversionMode' => 'Dolby Vision 转换',
|
'settings.dvConversionMode' => 'Dolby Vision 转换',
|
||||||
'settings.dvConversionModeDescription' => '选择 ExoPlayer 如何处理 Dolby Vision Profile 7 文件。',
|
'settings.dvConversionModeDescription' => '选择 ExoPlayer 如何处理 Dolby Vision Profile 7 文件。',
|
||||||
'settings.dvConversionAuto' => '自动',
|
'settings.dvConversionAuto' => '自动',
|
||||||
@@ -2426,6 +2458,8 @@ extension on TranslationsZh {
|
|||||||
'messages.libraryScanFailed' => ({required Object error}) => '无法扫描媒体库: ${error}',
|
'messages.libraryScanFailed' => ({required Object error}) => '无法扫描媒体库: ${error}',
|
||||||
'messages.metadataRefreshing' => ({required Object title}) => '正在刷新 “${title}” 的元数据...',
|
'messages.metadataRefreshing' => ({required Object title}) => '正在刷新 “${title}” 的元数据...',
|
||||||
'messages.metadataRefreshStarted' => ({required Object title}) => '已开始刷新 “${title}” 的元数据',
|
'messages.metadataRefreshStarted' => ({required Object title}) => '已开始刷新 “${title}” 的元数据',
|
||||||
|
_ => null,
|
||||||
|
} ?? switch (path) {
|
||||||
'messages.metadataRefreshFailed' => ({required Object error}) => '无法刷新元数据: ${error}',
|
'messages.metadataRefreshFailed' => ({required Object error}) => '无法刷新元数据: ${error}',
|
||||||
'messages.logoutConfirm' => '你确定要登出吗?',
|
'messages.logoutConfirm' => '你确定要登出吗?',
|
||||||
'messages.noSeasonsFound' => '未找到季',
|
'messages.noSeasonsFound' => '未找到季',
|
||||||
@@ -2442,8 +2476,6 @@ extension on TranslationsZh {
|
|||||||
'messages.serverLimitTitle' => '播放失败',
|
'messages.serverLimitTitle' => '播放失败',
|
||||||
'messages.serverLimitBody' => '服务器错误 (HTTP 500)。带宽/转码限制可能拒绝了此会话。请让所有者调整。',
|
'messages.serverLimitBody' => '服务器错误 (HTTP 500)。带宽/转码限制可能拒绝了此会话。请让所有者调整。',
|
||||||
'messages.logsUploaded' => '日志已上传',
|
'messages.logsUploaded' => '日志已上传',
|
||||||
_ => null,
|
|
||||||
} ?? switch (path) {
|
|
||||||
'messages.logsUploadFailed' => '上传日志失败',
|
'messages.logsUploadFailed' => '上传日志失败',
|
||||||
'messages.logId' => '日志 ID',
|
'messages.logId' => '日志 ID',
|
||||||
'subtitlingStyling.text' => '文本',
|
'subtitlingStyling.text' => '文本',
|
||||||
@@ -2940,6 +2972,8 @@ extension on TranslationsZh {
|
|||||||
'companionRemote.session.serverStopped' => '远程服务器已停止',
|
'companionRemote.session.serverStopped' => '远程服务器已停止',
|
||||||
'companionRemote.session.serverRunningDescription' => '网络上的移动设备可以连接到此应用',
|
'companionRemote.session.serverRunningDescription' => '网络上的移动设备可以连接到此应用',
|
||||||
'companionRemote.session.serverStoppedDescription' => '启动服务器以允许移动设备连接',
|
'companionRemote.session.serverStoppedDescription' => '启动服务器以允许移动设备连接',
|
||||||
|
_ => null,
|
||||||
|
} ?? switch (path) {
|
||||||
'companionRemote.session.usePhoneToControl' => '使用移动设备控制此应用',
|
'companionRemote.session.usePhoneToControl' => '使用移动设备控制此应用',
|
||||||
'companionRemote.session.startServer' => '启动服务器',
|
'companionRemote.session.startServer' => '启动服务器',
|
||||||
'companionRemote.session.stopServer' => '停止服务器',
|
'companionRemote.session.stopServer' => '停止服务器',
|
||||||
@@ -2956,8 +2990,6 @@ extension on TranslationsZh {
|
|||||||
'companionRemote.pairing.validationHostRequired' => '请输入主机地址',
|
'companionRemote.pairing.validationHostRequired' => '请输入主机地址',
|
||||||
'companionRemote.pairing.validationHostFormat' => '格式必须为IP:端口(例如 192.168.1.100:48632)',
|
'companionRemote.pairing.validationHostFormat' => '格式必须为IP:端口(例如 192.168.1.100:48632)',
|
||||||
'companionRemote.pairing.connectionTimedOut' => '连接超时。请在两台设备上使用同一网络。',
|
'companionRemote.pairing.connectionTimedOut' => '连接超时。请在两台设备上使用同一网络。',
|
||||||
_ => null,
|
|
||||||
} ?? switch (path) {
|
|
||||||
'companionRemote.pairing.sessionNotFound' => '未找到设备。请确认 Plezy 正在主机上运行。',
|
'companionRemote.pairing.sessionNotFound' => '未找到设备。请确认 Plezy 正在主机上运行。',
|
||||||
'companionRemote.pairing.authFailed' => '认证失败。两台设备需要使用同一 Plex 账号。',
|
'companionRemote.pairing.authFailed' => '认证失败。两台设备需要使用同一 Plex 账号。',
|
||||||
'companionRemote.pairing.failedToConnect' => ({required Object error}) => '连接失败:${error}',
|
'companionRemote.pairing.failedToConnect' => ({required Object error}) => '连接失败:${error}',
|
||||||
|
|||||||
@@ -264,6 +264,22 @@
|
|||||||
"tunneledPlaybackDescription": "Använd videotunnling. Inaktivera om HDR-uppspelning visar svart video.",
|
"tunneledPlaybackDescription": "Använd videotunnling. Inaktivera om HDR-uppspelning visar svart video.",
|
||||||
"audioPassthrough": "Ljudgenomkoppling",
|
"audioPassthrough": "Ljudgenomkoppling",
|
||||||
"audioPassthroughDescription": "Skicka Dolby/DTS-ljud till din receiver eller TV utan omkodning och bevara surroundljudet. Stäng av om du inte har något ljud.",
|
"audioPassthroughDescription": "Skicka Dolby/DTS-ljud till din receiver eller TV utan omkodning och bevara surroundljudet. Stäng av om du inte har något ljud.",
|
||||||
|
"audioPassthroughDescriptionAppleTv": "Lämnar Dolby Digital Plus (inkl. Atmos) till systemet som bitstream. DTS och TrueHD spelas fortfarande upp som flerkanals-PCM. Korta ljudavbrott kan förekomma vid sökning.",
|
||||||
|
"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.",
|
||||||
|
"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",
|
"dvConversionMode": "Dolby Vision-konvertering",
|
||||||
"dvConversionModeDescription": "Välj hur ExoPlayer hanterar Dolby Vision Profile 7-filer.",
|
"dvConversionModeDescription": "Välj hur ExoPlayer hanterar Dolby Vision Profile 7-filer.",
|
||||||
"dvConversionAuto": "Auto",
|
"dvConversionAuto": "Auto",
|
||||||
|
|||||||
@@ -264,6 +264,22 @@
|
|||||||
"tunneledPlaybackDescription": "使用视频隧道。若 HDR 播放出现黑屏,请禁用。",
|
"tunneledPlaybackDescription": "使用视频隧道。若 HDR 播放出现黑屏,请禁用。",
|
||||||
"audioPassthrough": "音频直通",
|
"audioPassthrough": "音频直通",
|
||||||
"audioPassthroughDescription": "将 Dolby/DTS 音频不经重新编码直接发送到功放或电视,保留环绕声。如果没有声音,请关闭。",
|
"audioPassthroughDescription": "将 Dolby/DTS 音频不经重新编码直接发送到功放或电视,保留环绕声。如果没有声音,请关闭。",
|
||||||
|
"audioPassthroughDescriptionAppleTv": "将 Dolby Digital Plus(含 Atmos)以比特流方式交给系统输出。DTS 和 TrueHD 仍以多声道 PCM 播放。快进快退时可能出现短暂声音中断。",
|
||||||
|
"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。",
|
||||||
|
"atmosTestStop": "停止测试",
|
||||||
|
"atmosTestUrl": "测试文件 URL",
|
||||||
|
"atmosTestUrlDescription": "原始 .ec3 Dolby Atmos 文件的 HTTP URL(例如用 ffmpeg 提取)",
|
||||||
|
"atmosTestUrlMissing": "请先设置测试文件 URL",
|
||||||
|
"atmosTestStatus": "状态",
|
||||||
"dvConversionMode": "Dolby Vision 转换",
|
"dvConversionMode": "Dolby Vision 转换",
|
||||||
"dvConversionModeDescription": "选择 ExoPlayer 如何处理 Dolby Vision Profile 7 文件。",
|
"dvConversionModeDescription": "选择 ExoPlayer 如何处理 Dolby Vision Profile 7 文件。",
|
||||||
"dvConversionAuto": "自动",
|
"dvConversionAuto": "自动",
|
||||||
|
|||||||
@@ -363,6 +363,7 @@ class PlayerNative extends PlayerBase {
|
|||||||
|
|
||||||
bool _passthroughRequested = false;
|
bool _passthroughRequested = false;
|
||||||
bool _passthroughActive = false;
|
bool _passthroughActive = false;
|
||||||
|
bool _normalizationRequested = false;
|
||||||
double _currentRate = 1.0;
|
double _currentRate = 1.0;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
@@ -383,6 +384,11 @@ class PlayerNative extends PlayerBase {
|
|||||||
|
|
||||||
Future<void> _applyPassthrough(bool enabled) async {
|
Future<void> _applyPassthrough(bool enabled) async {
|
||||||
_passthroughActive = enabled;
|
_passthroughActive = enabled;
|
||||||
|
// loudnorm decodes to PCM, which defeats bitstream passthrough; the
|
||||||
|
// filter yields while passthrough is active and returns when it ends.
|
||||||
|
if (enabled && _normalizationRequested) {
|
||||||
|
await super.setAudioNormalization(false);
|
||||||
|
}
|
||||||
await setProperty('audio-spdif', enabled ? _passthroughCodecs : '');
|
await setProperty('audio-spdif', enabled ? _passthroughCodecs : '');
|
||||||
// audio-exclusive redirects coreaudio to coreaudio_exclusive on macOS
|
// audio-exclusive redirects coreaudio to coreaudio_exclusive on macOS
|
||||||
// (and exclusive WASAPI on Windows); on iOS/tvOS it is set once at
|
// (and exclusive WASAPI on Windows); on iOS/tvOS it is set once at
|
||||||
@@ -390,6 +396,16 @@ class PlayerNative extends PlayerBase {
|
|||||||
if (!Platform.isIOS) {
|
if (!Platform.isIOS) {
|
||||||
await setProperty('audio-exclusive', enabled ? 'yes' : 'no');
|
await setProperty('audio-exclusive', enabled ? 'yes' : 'no');
|
||||||
}
|
}
|
||||||
|
if (!enabled && _normalizationRequested) {
|
||||||
|
await super.setAudioNormalization(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Future<void> setAudioNormalization(bool enabled) async {
|
||||||
|
_normalizationRequested = enabled;
|
||||||
|
if (enabled && _passthroughActive) return; // deferred until passthrough ends
|
||||||
|
await super.setAudioNormalization(enabled);
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
|
|||||||
@@ -0,0 +1,168 @@
|
|||||||
|
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/snackbar_helper.dart';
|
||||||
|
import '../../widgets/setting_tile.dart';
|
||||||
|
import '../../widgets/settings_builder.dart';
|
||||||
|
import '../../widgets/settings_page.dart';
|
||||||
|
import '../../widgets/settings_section.dart';
|
||||||
|
import 'settings_utils.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<AtmosDiagnosticsScreen> createState() => _AtmosDiagnosticsScreenState();
|
||||||
|
}
|
||||||
|
|
||||||
|
class _AtmosDiagnosticsScreenState extends State<AtmosDiagnosticsScreen> {
|
||||||
|
static const _channel = MethodChannel('plezy/atmos_probe');
|
||||||
|
|
||||||
|
Timer? _poll;
|
||||||
|
Map<Object?, Object?> _status = const {};
|
||||||
|
String? _activeMode;
|
||||||
|
|
||||||
|
@override
|
||||||
|
void initState() {
|
||||||
|
super.initState();
|
||||||
|
_poll = Timer.periodic(const Duration(seconds: 1), (_) => _refreshStatus());
|
||||||
|
_refreshStatus();
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
void dispose() {
|
||||||
|
_poll?.cancel();
|
||||||
|
_channel.invokeMethod('stop').ignore();
|
||||||
|
super.dispose();
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<void> _refreshStatus() async {
|
||||||
|
try {
|
||||||
|
final status = await _channel.invokeMethod<Map<Object?, Object?>>('getStatus');
|
||||||
|
if (mounted && status != null) setState(() => _status = status);
|
||||||
|
} on PlatformException {
|
||||||
|
// native side unavailable (non-Apple build); leave the status empty
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<void> _start(String mode) async {
|
||||||
|
final needsUrl = mode == 'rawEc3' || mode == 'rawEc3Finite';
|
||||||
|
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});
|
||||||
|
setState(() => _activeMode = mode);
|
||||||
|
} on PlatformException catch (e) {
|
||||||
|
if (mounted) showErrorSnackBar(context, e.message ?? e.code);
|
||||||
|
}
|
||||||
|
await _refreshStatus();
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<void> _stop() async {
|
||||||
|
await _channel.invokeMethod('stop');
|
||||||
|
setState(() => _activeMode = null);
|
||||||
|
await _refreshStatus();
|
||||||
|
}
|
||||||
|
|
||||||
|
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,
|
||||||
|
),
|
||||||
|
SettingNavigationTile(
|
||||||
|
icon: Symbols.stop_circle_rounded,
|
||||||
|
title: t.settings.atmosTestStop,
|
||||||
|
trailingIcon: Symbols.stop_rounded,
|
||||||
|
onTap: _stop,
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
SettingsGroup(
|
||||||
|
children: [
|
||||||
|
SettingValueBuilder<String>(
|
||||||
|
pref: SettingsService.atmosProbeUrl,
|
||||||
|
builder: (context, value, _) => SettingNavigationTile(
|
||||||
|
icon: Symbols.link_rounded,
|
||||||
|
title: t.settings.atmosTestUrl,
|
||||||
|
subtitle: value.isEmpty ? t.settings.atmosTestUrlDescription : value,
|
||||||
|
onTap: () => showTextInputDialog(
|
||||||
|
context: context,
|
||||||
|
title: t.settings.atmosTestUrl,
|
||||||
|
labelText: 'URL',
|
||||||
|
currentValue: value,
|
||||||
|
onSave: (v) => SettingsService.instance.write(SettingsService.atmosProbeUrl, v),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
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),
|
||||||
|
],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -17,6 +17,7 @@ import '../../widgets/setting_tile.dart';
|
|||||||
import '../../widgets/settings_builder.dart';
|
import '../../widgets/settings_builder.dart';
|
||||||
import '../../widgets/settings_page.dart';
|
import '../../widgets/settings_page.dart';
|
||||||
import '../../widgets/settings_section.dart';
|
import '../../widgets/settings_section.dart';
|
||||||
|
import 'atmos_diagnostics_screen.dart';
|
||||||
import 'external_player_screen.dart';
|
import 'external_player_screen.dart';
|
||||||
import 'mpv_config_screen.dart';
|
import 'mpv_config_screen.dart';
|
||||||
import 'settings_utils.dart';
|
import 'settings_utils.dart';
|
||||||
@@ -81,6 +82,7 @@ class _PlaybackSettingsScreenState extends State<PlaybackSettingsScreen> {
|
|||||||
if (showDisplaySwitchDelay) _displaySwitchDelayTile(),
|
if (showDisplaySwitchDelay) _displaySwitchDelayTile(),
|
||||||
if (exoActive) _tunneledPlaybackTile(),
|
if (exoActive) _tunneledPlaybackTile(),
|
||||||
if (PlatformDetector.supportsAudioPassthrough()) _audioPassthroughTile(),
|
if (PlatformDetector.supportsAudioPassthrough()) _audioPassthroughTile(),
|
||||||
|
if (PlatformDetector.isAppleTV()) _atmosDiagnosticsTile(),
|
||||||
if (exoActive) _dvConversionModeTile(),
|
if (exoActive) _dvConversionModeTile(),
|
||||||
_bufferSizeTile(),
|
_bufferSizeTile(),
|
||||||
_defaultQualityTile(),
|
_defaultQualityTile(),
|
||||||
@@ -325,7 +327,16 @@ class _PlaybackSettingsScreenState extends State<PlaybackSettingsScreen> {
|
|||||||
pref: SettingsService.audioPassthrough,
|
pref: SettingsService.audioPassthrough,
|
||||||
icon: Symbols.surround_sound_rounded,
|
icon: Symbols.surround_sound_rounded,
|
||||||
title: t.settings.audioPassthrough,
|
title: t.settings.audioPassthrough,
|
||||||
subtitle: t.settings.audioPassthroughDescription,
|
subtitle: PlatformDetector.isAppleTV()
|
||||||
|
? t.settings.audioPassthroughDescriptionAppleTv
|
||||||
|
: t.settings.audioPassthroughDescription,
|
||||||
|
);
|
||||||
|
|
||||||
|
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
|
// Visibility for this and the three tiles below is decided by the hoisted
|
||||||
|
|||||||
@@ -365,6 +365,37 @@ void _showColorInputDialogTV({
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Shows a text input dialog with regex validation and reset-to-default support.
|
/// Shows a text input dialog with regex validation and reset-to-default support.
|
||||||
|
/// Plain single-field text input dialog (dpad/TV friendly via
|
||||||
|
/// [FocusableTextField]); the free-form sibling of [showRegexInputDialog].
|
||||||
|
void showTextInputDialog({
|
||||||
|
required BuildContext context,
|
||||||
|
required String title,
|
||||||
|
required String labelText,
|
||||||
|
required String currentValue,
|
||||||
|
required Future<void> Function(String value) onSave,
|
||||||
|
}) {
|
||||||
|
final controller = TextEditingController(text: currentValue);
|
||||||
|
|
||||||
|
_showSettingsInputDialog(
|
||||||
|
context: context,
|
||||||
|
title: title,
|
||||||
|
contentBuilder: (_, _, _, saveFocusNode) {
|
||||||
|
return FocusableTextField(
|
||||||
|
controller: controller,
|
||||||
|
decoration: InputDecoration(labelText: labelText),
|
||||||
|
autofocus: true,
|
||||||
|
textInputAction: TextInputAction.done,
|
||||||
|
onEditingComplete: () => saveFocusNode.requestFocus(),
|
||||||
|
);
|
||||||
|
},
|
||||||
|
onSave: (_) async {
|
||||||
|
await onSave(controller.text.trim());
|
||||||
|
return true;
|
||||||
|
},
|
||||||
|
onDispose: controller.dispose,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
void showRegexInputDialog({
|
void showRegexInputDialog({
|
||||||
required BuildContext context,
|
required BuildContext context,
|
||||||
required String title,
|
required String title,
|
||||||
|
|||||||
@@ -815,7 +815,8 @@ class VideoPlayerScreenState extends State<VideoPlayerScreen> with WidgetsBindin
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Audio passthrough (desktop and Android TV; disabled on tvOS)
|
// Audio passthrough (desktop, Android TV, and Apple TV — where the
|
||||||
|
// fork's AVPlayer Atmos sink handles EAC3+JOC, #1300)
|
||||||
if (PlatformDetector.supportsAudioPassthrough()) {
|
if (PlatformDetector.supportsAudioPassthrough()) {
|
||||||
await currentPlayer.setAudioPassthrough(settingsService.read(SettingsService.audioPassthrough));
|
await currentPlayer.setAudioPassthrough(settingsService.read(SettingsService.audioPassthrough));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -188,8 +188,9 @@ class _UseExternalPlayerPref extends Pref<bool> {
|
|||||||
Future<void> writeTo(BaseSharedPreferencesService svc, bool value) => svc.writeBool(key, value);
|
Future<void> writeTo(BaseSharedPreferencesService svc, bool value) => svc.writeBool(key, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Experimental Dolby passthrough. Keep opt-in everywhere, including Apple TV,
|
/// Experimental Dolby passthrough. Keep opt-in on Apple TV until the
|
||||||
/// until the AVFoundation EAC3 path is verified across real receiver setups.
|
/// AVPlayer Atmos sink (EAC3+JOC → Dolby MAT, #1300) is verified on real
|
||||||
|
/// receiver setups; non-JOC content still decodes to multichannel PCM there.
|
||||||
class _AudioPassthroughPref extends Pref<bool> {
|
class _AudioPassthroughPref extends Pref<bool> {
|
||||||
const _AudioPassthroughPref() : super('audio_passthrough');
|
const _AudioPassthroughPref() : super('audio_passthrough');
|
||||||
|
|
||||||
@@ -201,7 +202,7 @@ class _AudioPassthroughPref extends Pref<bool> {
|
|||||||
// (Media3 picks bitstream vs PCM via AudioCapabilities), preserving surround.
|
// (Media3 picks bitstream vs PCM via AudioCapabilities), preserving surround.
|
||||||
// Scoped to ExoPlayer — the mpv backend force-sets audio-spdif with no decode
|
// Scoped to ExoPlayer — the mpv backend force-sets audio-spdif with no decode
|
||||||
// fallback. (#1458)
|
// fallback. (#1458)
|
||||||
// TODO: Default Apple TV to on once EAC3 passthrough is hardware-verified.
|
// TODO: Default Apple TV to on once the #1300 Atmos sink is hardware-verified.
|
||||||
return Platform.isAndroid && PlatformDetector.isTV() && svc.read(SettingsService.useExoPlayer);
|
return Platform.isAndroid && PlatformDetector.isTV() && svc.read(SettingsService.useExoPlayer);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -337,6 +338,9 @@ class SettingsService extends BaseSharedPreferencesService {
|
|||||||
static const String defaultCreditsPattern = r'(?:^|\b)(?:outro|closing|credits?|ending)(?:\b|$)|^ed(?:\s?\d+)?$';
|
static const String defaultCreditsPattern = r'(?:^|\b)(?:outro|closing|credits?|ending)(?:\b|$)|^ed(?:\s?\d+)?$';
|
||||||
|
|
||||||
static const enableDebugLogging = BoolPref('enable_debug_logging', onWrite: setLoggerLevel);
|
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: '');
|
||||||
static const crashReporting = BoolPref('crash_reporting', defaultValue: true);
|
static const crashReporting = BoolPref('crash_reporting', defaultValue: true);
|
||||||
static const enableHardwareDecoding = BoolPref('enable_hardware_decoding', defaultValue: true);
|
static const enableHardwareDecoding = BoolPref('enable_hardware_decoding', defaultValue: true);
|
||||||
static const enableHDR = BoolPref('enable_hdr', defaultValue: true);
|
static const enableHDR = BoolPref('enable_hdr', defaultValue: true);
|
||||||
|
|||||||
@@ -211,8 +211,10 @@ class PlatformDetector {
|
|||||||
}
|
}
|
||||||
|
|
||||||
static bool supportsAudioPassthrough() {
|
static bool supportsAudioPassthrough() {
|
||||||
if (isAppleTV()) return false;
|
// Apple TV: EAC3+JOC rides the AVPlayer Atmos sink in the mpv fork's
|
||||||
return isDesktopOS() || (Platform.isAndroid && isTV());
|
// ao_avfoundation; other Dolby content decodes to multichannel PCM.
|
||||||
|
// Route capability is gated at runtime inside the AO itself.
|
||||||
|
return isAppleTV() || isDesktopOS() || (Platform.isAndroid && isTV());
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool supportsPictureInPicture() {
|
static bool supportsPictureInPicture() {
|
||||||
|
|||||||
@@ -547,7 +547,7 @@ class _VideoSettingsSheetState extends State<VideoSettingsSheet> {
|
|||||||
},
|
},
|
||||||
),
|
),
|
||||||
|
|
||||||
// Audio Passthrough (desktop and Android TV)
|
// Audio Passthrough (desktop, Android TV, and Apple TV)
|
||||||
if (PlatformDetector.supportsAudioPassthrough())
|
if (PlatformDetector.supportsAudioPassthrough())
|
||||||
_SettingsToggleItem(
|
_SettingsToggleItem(
|
||||||
pref: SettingsService.audioPassthrough,
|
pref: SettingsService.audioPassthrough,
|
||||||
|
|||||||
@@ -0,0 +1,287 @@
|
|||||||
|
import AVFoundation
|
||||||
|
import Flutter
|
||||||
|
import Foundation
|
||||||
|
|
||||||
|
/// Diagnostics harness for #1300: plays known assets through a bare AVPlayer
|
||||||
|
/// 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
|
||||||
|
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?
|
||||||
|
|
||||||
|
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, result: result)
|
||||||
|
case "stop":
|
||||||
|
stopPlayback()
|
||||||
|
result(nil)
|
||||||
|
case "getStatus":
|
||||||
|
result(status())
|
||||||
|
default:
|
||||||
|
result(FlutterMethodNotImplemented)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private func start(mode: String, url: 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()
|
||||||
|
default:
|
||||||
|
result(FlutterError(code: "bad_mode", message: mode, details: nil))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
let player = AVPlayer(playerItem: item)
|
||||||
|
player.automaticallyWaitsToMinimizeStalling = false
|
||||||
|
player.allowsExternalPlayback = false
|
||||||
|
self.player = player
|
||||||
|
player.play()
|
||||||
|
result(nil)
|
||||||
|
}
|
||||||
|
|
||||||
|
private func stopPlayback() {
|
||||||
|
player?.pause()
|
||||||
|
player?.replaceCurrentItem(with: nil)
|
||||||
|
player = nil
|
||||||
|
loader?.cancel()
|
||||||
|
loader = nil
|
||||||
|
}
|
||||||
|
|
||||||
|
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: ", ")
|
||||||
|
|
||||||
|
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 {
|
||||||
|
out["fedBytes"] = loader.bytesReceived
|
||||||
|
out["loaderRequests"] = loader.requestLog
|
||||||
|
}
|
||||||
|
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.
|
||||||
|
private final class RawEc3Loader: NSObject, AVAssetResourceLoaderDelegate, URLSessionDataDelegate {
|
||||||
|
let asset: AVURLAsset
|
||||||
|
private let source: URL
|
||||||
|
private let finiteLength: Bool
|
||||||
|
private let queue = DispatchQueue(label: "plezy.atmos.probe.loader")
|
||||||
|
private var session: URLSession!
|
||||||
|
private var buffer = Data()
|
||||||
|
private var contentLength: Int64 = -1
|
||||||
|
private var finished = false
|
||||||
|
private var pending: [AVAssetResourceLoadingRequest] = []
|
||||||
|
private(set) var bytesReceived: Int = 0
|
||||||
|
private(set) var requestLog: String = ""
|
||||||
|
|
||||||
|
init(source: URL, finiteLength: Bool) {
|
||||||
|
self.source = source
|
||||||
|
self.finiteLength = finiteLength
|
||||||
|
self.asset = AVURLAsset(url: URL(string: "plezy-ec3-probe://stream/audio.ec3")!)
|
||||||
|
super.init()
|
||||||
|
asset.resourceLoader.setDelegate(self, queue: queue)
|
||||||
|
}
|
||||||
|
|
||||||
|
func begin() {
|
||||||
|
let config = URLSessionConfiguration.default
|
||||||
|
session = URLSession(configuration: config, delegate: self, delegateQueue: nil)
|
||||||
|
session.dataTask(with: source).resume()
|
||||||
|
}
|
||||||
|
|
||||||
|
func cancel() {
|
||||||
|
session?.invalidateAndCancel()
|
||||||
|
queue.async {
|
||||||
|
for request in self.pending where !request.isFinished {
|
||||||
|
request.finishLoading(with: NSError(domain: NSURLErrorDomain, code: NSURLErrorCancelled))
|
||||||
|
}
|
||||||
|
self.pending.removeAll()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// MARK: URLSessionDataDelegate (background queue -> hop to `queue`)
|
||||||
|
|
||||||
|
func urlSession(
|
||||||
|
_ session: URLSession, dataTask: URLSessionDataTask,
|
||||||
|
didReceive response: URLResponse,
|
||||||
|
completionHandler: @escaping (URLSession.ResponseDisposition) -> Void
|
||||||
|
) {
|
||||||
|
queue.async {
|
||||||
|
self.contentLength = response.expectedContentLength
|
||||||
|
self.serve()
|
||||||
|
}
|
||||||
|
completionHandler(.allow)
|
||||||
|
}
|
||||||
|
|
||||||
|
func urlSession(_ session: URLSession, dataTask: URLSessionDataTask, didReceive data: Data) {
|
||||||
|
queue.async {
|
||||||
|
self.buffer.append(data)
|
||||||
|
self.bytesReceived += data.count
|
||||||
|
self.serve()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func urlSession(_ session: URLSession, task: URLSessionTask, didCompleteWithError error: Error?) {
|
||||||
|
queue.async {
|
||||||
|
self.finished = true
|
||||||
|
self.serve()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// MARK: AVAssetResourceLoaderDelegate (on `queue`)
|
||||||
|
|
||||||
|
func resourceLoader(
|
||||||
|
_ resourceLoader: AVAssetResourceLoader,
|
||||||
|
shouldWaitForLoadingOfRequestedResource loadingRequest: AVAssetResourceLoadingRequest
|
||||||
|
) -> Bool {
|
||||||
|
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() {
|
||||||
|
// content info: unbounded mirrors the mpv sink; finite passes the real
|
||||||
|
// length through once the HTTP response reveals it
|
||||||
|
let knownLength: Int64? =
|
||||||
|
finiteLength
|
||||||
|
? (contentLength >= 0 ? contentLength : (finished ? 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 // wait for the HTTP response before answering
|
||||||
|
}
|
||||||
|
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 offset = dataRequest.currentOffset
|
||||||
|
let end = dataRequest.requestedOffset + Int64(dataRequest.requestedLength)
|
||||||
|
if offset < Int64(buffer.count) {
|
||||||
|
let chunkEnd = min(Int64(buffer.count), end)
|
||||||
|
dataRequest.respond(with: buffer.subdata(in: Int(offset)..<Int(chunkEnd)))
|
||||||
|
}
|
||||||
|
if dataRequest.currentOffset >= end || (finished && dataRequest.currentOffset >= Int64(buffer.count)) {
|
||||||
|
request.finishLoading()
|
||||||
|
pending.remove(at: index)
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
index += 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -13,6 +13,7 @@
|
|||||||
35DB0C8FEF635A3BCA0B722A /* PackageInfoPlusPlugin.swift in Sources */ = {isa = PBXBuildFile; fileRef = F9426EFA282CDA8E0E98EEE9 /* PackageInfoPlusPlugin.swift */; };
|
35DB0C8FEF635A3BCA0B722A /* PackageInfoPlusPlugin.swift in Sources */ = {isa = PBXBuildFile; fileRef = F9426EFA282CDA8E0E98EEE9 /* PackageInfoPlusPlugin.swift */; };
|
||||||
3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; };
|
3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; };
|
||||||
5C71F5F7B33075F2B007825B /* MpvPlayerPluginShared.swift in Sources */ = {isa = PBXBuildFile; fileRef = 73645904F226A24585A092CE /* MpvPlayerPluginShared.swift */; };
|
5C71F5F7B33075F2B007825B /* MpvPlayerPluginShared.swift in Sources */ = {isa = PBXBuildFile; fileRef = 73645904F226A24585A092CE /* MpvPlayerPluginShared.swift */; };
|
||||||
|
7A11A7C50113007825B00A01 /* AtmosProbePlugin.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7A11A7C50113007825B00A02 /* AtmosProbePlugin.swift */; };
|
||||||
691577F0EB3F4EB1A5160280 /* MpvPlayerCoreBase.swift in Sources */ = {isa = PBXBuildFile; fileRef = D52A3BDA46E79969EA1DF3AC /* MpvPlayerCoreBase.swift */; };
|
691577F0EB3F4EB1A5160280 /* MpvPlayerCoreBase.swift in Sources */ = {isa = PBXBuildFile; fileRef = D52A3BDA46E79969EA1DF3AC /* MpvPlayerCoreBase.swift */; };
|
||||||
6F3C0DD6F2F8DA14E7E2F386 /* MpvPlayerCore.swift in Sources */ = {isa = PBXBuildFile; fileRef = A12B8610AE5D580077264851 /* MpvPlayerCore.swift */; };
|
6F3C0DD6F2F8DA14E7E2F386 /* MpvPlayerCore.swift in Sources */ = {isa = PBXBuildFile; fileRef = A12B8610AE5D580077264851 /* MpvPlayerCore.swift */; };
|
||||||
74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; };
|
74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; };
|
||||||
@@ -81,6 +82,7 @@
|
|||||||
67C3193A50DFDECE2B92D075 /* ConnectivityPlusPlugin.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ConnectivityPlusPlugin.swift; sourceTree = "<group>"; };
|
67C3193A50DFDECE2B92D075 /* ConnectivityPlusPlugin.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ConnectivityPlusPlugin.swift; sourceTree = "<group>"; };
|
||||||
6AEF79DFBD1D80F00AB39CDA /* PathMonitorConnectivityProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = PathMonitorConnectivityProvider.swift; sourceTree = "<group>"; };
|
6AEF79DFBD1D80F00AB39CDA /* PathMonitorConnectivityProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = PathMonitorConnectivityProvider.swift; sourceTree = "<group>"; };
|
||||||
73645904F226A24585A092CE /* MpvPlayerPluginShared.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MpvPlayerPluginShared.swift; path = ../shared/apple/MpvPlayer/MpvPlayerPluginShared.swift; sourceTree = "<source_root>"; };
|
73645904F226A24585A092CE /* MpvPlayerPluginShared.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MpvPlayerPluginShared.swift; path = ../shared/apple/MpvPlayer/MpvPlayerPluginShared.swift; sourceTree = "<source_root>"; };
|
||||||
|
7A11A7C50113007825B00A02 /* AtmosProbePlugin.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AtmosProbePlugin.swift; path = ../shared/apple/AtmosProbe/AtmosProbePlugin.swift; sourceTree = "<source_root>"; };
|
||||||
74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = "<group>"; };
|
74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = "<group>"; };
|
||||||
74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
|
74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
|
||||||
7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = "<group>"; };
|
7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = "<group>"; };
|
||||||
@@ -249,6 +251,7 @@
|
|||||||
children = (
|
children = (
|
||||||
D52A3BDA46E79969EA1DF3AC /* MpvPlayerCoreBase.swift */,
|
D52A3BDA46E79969EA1DF3AC /* MpvPlayerCoreBase.swift */,
|
||||||
73645904F226A24585A092CE /* MpvPlayerPluginShared.swift */,
|
73645904F226A24585A092CE /* MpvPlayerPluginShared.swift */,
|
||||||
|
7A11A7C50113007825B00A02 /* AtmosProbePlugin.swift */,
|
||||||
A12B8610AE5D580077264851 /* MpvPlayerCore.swift */,
|
A12B8610AE5D580077264851 /* MpvPlayerCore.swift */,
|
||||||
9D7A998830EDC8F77BF521D1 /* MpvPlayerPlugin.swift */,
|
9D7A998830EDC8F77BF521D1 /* MpvPlayerPlugin.swift */,
|
||||||
A2635E12EB9322B151EE5127 /* MpvPipController.swift */,
|
A2635E12EB9322B151EE5127 /* MpvPipController.swift */,
|
||||||
@@ -477,6 +480,7 @@
|
|||||||
74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */,
|
74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */,
|
||||||
691577F0EB3F4EB1A5160280 /* MpvPlayerCoreBase.swift in Sources */,
|
691577F0EB3F4EB1A5160280 /* MpvPlayerCoreBase.swift in Sources */,
|
||||||
5C71F5F7B33075F2B007825B /* MpvPlayerPluginShared.swift in Sources */,
|
5C71F5F7B33075F2B007825B /* MpvPlayerPluginShared.swift in Sources */,
|
||||||
|
7A11A7C50113007825B00A01 /* AtmosProbePlugin.swift in Sources */,
|
||||||
6F3C0DD6F2F8DA14E7E2F386 /* MpvPlayerCore.swift in Sources */,
|
6F3C0DD6F2F8DA14E7E2F386 /* MpvPlayerCore.swift in Sources */,
|
||||||
8E5EED3DDAC9455D4DAA9776 /* MpvPlayerPlugin.swift in Sources */,
|
8E5EED3DDAC9455D4DAA9776 /* MpvPlayerPlugin.swift in Sources */,
|
||||||
AA34E3E5872B3792D6959EAA /* MpvPipController.swift in Sources */,
|
AA34E3E5872B3792D6959EAA /* MpvPipController.swift in Sources */,
|
||||||
|
|||||||
@@ -138,6 +138,9 @@ import wakelock_plus
|
|||||||
if let r = self.registrar(forPlugin: "MpvPlayerPlugin") {
|
if let r = self.registrar(forPlugin: "MpvPlayerPlugin") {
|
||||||
MpvPlayerPlugin.register(with: r)
|
MpvPlayerPlugin.register(with: r)
|
||||||
}
|
}
|
||||||
|
if let r = self.registrar(forPlugin: "AtmosProbePlugin") {
|
||||||
|
AtmosProbePlugin.register(with: r)
|
||||||
|
}
|
||||||
if let r = self.registrar(forPlugin: "PackageInfoPlusPlugin") {
|
if let r = self.registrar(forPlugin: "PackageInfoPlusPlugin") {
|
||||||
PackageInfoPlusPlugin.register(with: r)
|
PackageInfoPlusPlugin.register(with: r)
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user