fix(android): restore ExoPlayer audio for tunneled decoded PCM

This commit is contained in:
edde746
2026-06-30 18:58:08 +02:00
parent 2d30686857
commit 28e6e349b3
37 changed files with 220 additions and 85 deletions
@@ -204,7 +204,7 @@ class ExoPlayerCore(private val activity: Activity) : Player.Listener {
private var tunnelingUserEnabled: Boolean = true private var tunnelingUserEnabled: Boolean = true
private var tunnelingDisabledForAudioCodec: Boolean = false private var tunnelingDisabledForAudioCodec: Boolean = false
private var tunnelingDisabledForVideoCodec: Boolean = false private var tunnelingDisabledForVideoCodec: Boolean = false
private var tunnelingDisabledForDecodedTrueHdPcm: Boolean = false private var tunnelingDisabledForDecodedPcm: Boolean = false
private var tunnelingDisabledForAudioRecovery: Boolean = false private var tunnelingDisabledForAudioRecovery: Boolean = false
// Tunneled playback never fires the VideoFrameMetadataListener (media3 releases // Tunneled playback never fires the VideoFrameMetadataListener (media3 releases
@@ -212,7 +212,7 @@ class ExoPlayerCore(private val activity: Activity) : Player.Listener {
// ASS subs would freeze. Correctness over tunneling while an ASS track is active. // ASS subs would freeze. Correctness over tunneling while an ASS track is active.
private var tunnelingDisabledForAssSubtitles: Boolean = false private var tunnelingDisabledForAssSubtitles: Boolean = false
private val tunnelingDisabledForCodec: Boolean private val tunnelingDisabledForCodec: Boolean
get() = tunnelingDisabledForAudioCodec || tunnelingDisabledForVideoCodec || tunnelingDisabledForDecodedTrueHdPcm || tunnelingDisabledForAudioRecovery get() = tunnelingDisabledForAudioCodec || tunnelingDisabledForVideoCodec || tunnelingDisabledForDecodedPcm || tunnelingDisabledForAudioRecovery
private var currentTunneledPlayback: Boolean = false private var currentTunneledPlayback: Boolean = false
// Loudness normalization (#1289): audiofx effects only process non-tunneled // Loudness normalization (#1289): audiofx effects only process non-tunneled
@@ -247,7 +247,7 @@ class ExoPlayerCore(private val activity: Activity) : Player.Listener {
private var lastAudioSinkError: String? = null private var lastAudioSinkError: String? = null
private var loggedEwasteEac3Workaround: Boolean = false private var loggedEwasteEac3Workaround: Boolean = false
private var lastTrueHdDirectOutputLogKey: String? = null private var lastTrueHdDirectOutputLogKey: String? = null
private var loggedDecodedTrueHdTunnelingGuard: Boolean = false private var loggedDecodedPcmTunnelingGuard: Boolean = false
private var firstFrameRendered: Boolean = false private var firstFrameRendered: Boolean = false
var delegate: ExoPlayerDelegate? = null var delegate: ExoPlayerDelegate? = null
var debugLoggingEnabled: Boolean = false var debugLoggingEnabled: Boolean = false
@@ -2380,7 +2380,7 @@ class ExoPlayerCore(private val activity: Activity) : Player.Listener {
currentTunneledPlayback = shouldTunnel currentTunneledPlayback = shouldTunnel
val speed = exoPlayer?.playbackParameters?.speed ?: 1f val speed = exoPlayer?.playbackParameters?.speed ?: 1f
val audioDelayActive = (renderersFactory?.audioDelayUs?.get() ?: 0L) != 0L val audioDelayActive = (renderersFactory?.audioDelayUs?.get() ?: 0L) != 0L
emitLog("info", "tunneling", "Toggling tunneling=$shouldTunnel (reason=$reason, user=$tunnelingUserEnabled, speed=$speed, audioCodecDisabled=$tunnelingDisabledForAudioCodec, videoCodecDisabled=$tunnelingDisabledForVideoCodec, decodedTrueHdPcmDisabled=$tunnelingDisabledForDecodedTrueHdPcm, audioRecoveryDisabled=$tunnelingDisabledForAudioRecovery, assSubtitlesDisabled=$tunnelingDisabledForAssSubtitles, audioDelay=$audioDelayActive, audioNormalization=$audioNormalizationEnabled)") emitLog("info", "tunneling", "Toggling tunneling=$shouldTunnel (reason=$reason, user=$tunnelingUserEnabled, speed=$speed, audioCodecDisabled=$tunnelingDisabledForAudioCodec, videoCodecDisabled=$tunnelingDisabledForVideoCodec, decodedPcmDisabled=$tunnelingDisabledForDecodedPcm, audioRecoveryDisabled=$tunnelingDisabledForAudioRecovery, assSubtitlesDisabled=$tunnelingDisabledForAssSubtitles, audioDelay=$audioDelayActive, audioNormalization=$audioNormalizationEnabled)")
return true return true
} }
@@ -2396,8 +2396,11 @@ class ExoPlayerCore(private val activity: Activity) : Player.Listener {
private fun updateAudioCodecForTunneling(format: Format) { private fun updateAudioCodecForTunneling(format: Format) {
val mimeType = format.sampleMimeType ?: return val mimeType = format.sampleMimeType ?: return
if (mimeType != MimeTypes.AUDIO_TRUEHD) { // The decoded-PCM guard only applies to passthrough-type codecs that can be
tunnelingDisabledForDecodedTrueHdPcm = false // force-decoded; clear it when the selected codec can't have set it. (onAudioTrackInitialized
// re-sets/clears it for passthrough codecs based on the actual output encoding.)
if (!isPassthroughAudioMimeType(mimeType)) {
tunnelingDisabledForDecodedPcm = false
} }
val newDisabled = !hasHardwareAudioDecoder(mimeType) val newDisabled = !hasHardwareAudioDecoder(mimeType)
@@ -2533,17 +2536,22 @@ class ExoPlayerCore(private val activity: Activity) : Player.Listener {
"AudioTrack initialized: input=${audioFormat?.let { formatAudioSummary(it) } ?: "unknown"}, " + "AudioTrack initialized: input=${audioFormat?.let { formatAudioSummary(it) } ?: "unknown"}, " +
"decoder=${audioDecoderInitName ?: "direct/bypass"}, ${describeAudioTrackConfig(audioTrackConfig)}" "decoder=${audioDecoderInitName ?: "direct/bypass"}, ${describeAudioTrackConfig(audioTrackConfig)}"
) )
if (audioFormat?.sampleMimeType == MimeTypes.AUDIO_TRUEHD) { // A passthrough-type codec (AC3/EAC3/DTS/TrueHD…) force-decoded to PCM must not
// stay on a tunneled AudioTrack: some Amlogic/AOSP boxes deliver the PCM frames
// but render silence (#1458). Generalizes the original TrueHD-only guard to every
// codec the passthrough block (and #1289 normalization) can force-decode.
val passthroughSrcMime = audioFormat?.sampleMimeType?.takeIf { isPassthroughAudioMimeType(it) }
if (passthroughSrcMime != null) {
if (audioTrackConfig.tunneling && isPcmEncoding(audioTrackConfig.encoding)) { if (audioTrackConfig.tunneling && isPcmEncoding(audioTrackConfig.encoding)) {
if (!loggedDecodedTrueHdTunnelingGuard) { if (!loggedDecodedPcmTunnelingGuard) {
loggedDecodedTrueHdTunnelingGuard = true loggedDecodedPcmTunnelingGuard = true
emitLog("warn", "audio", "Decoded TrueHD PCM initialized with tunneling=true; forcing tunneling off") emitLog("warn", "audio", "Decoded $passthroughSrcMime PCM initialized with tunneling=true; forcing tunneling off")
} }
tunnelingDisabledForDecodedTrueHdPcm = true tunnelingDisabledForDecodedPcm = true
updateTunnelingState("decoded TrueHD PCM tunneling guard", forceSelector = true) updateTunnelingState("decoded PCM tunneling guard", forceSelector = true)
} else if (!isPcmEncoding(audioTrackConfig.encoding) && tunnelingDisabledForDecodedTrueHdPcm) { } else if (!isPcmEncoding(audioTrackConfig.encoding) && tunnelingDisabledForDecodedPcm) {
tunnelingDisabledForDecodedTrueHdPcm = false tunnelingDisabledForDecodedPcm = false
updateTunnelingState("encoded TrueHD output initialized", forceSelector = true) updateTunnelingState("encoded passthrough output initialized", forceSelector = true)
} }
} }
// Re-key the normalization effect to the actual output channel count // Re-key the normalization effect to the actual output channel count
@@ -2735,7 +2743,7 @@ class ExoPlayerCore(private val activity: Activity) : Player.Listener {
loggedNativeDvFirstFrame = false loggedNativeDvFirstFrame = false
loggedDvPlaybackPathKey = null loggedDvPlaybackPathKey = null
lastDvPlaybackInfo = null lastDvPlaybackInfo = null
loggedDecodedTrueHdTunnelingGuard = false loggedDecodedPcmTunnelingGuard = false
updateAudioDecoderPolicy("open") updateAudioDecoderPolicy("open")
currentMediaUri = uri currentMediaUri = uri
currentHeaders = headers currentHeaders = headers
@@ -2781,7 +2789,7 @@ class ExoPlayerCore(private val activity: Activity) : Player.Listener {
} }
tunnelingDisabledForAudioCodec = false tunnelingDisabledForAudioCodec = false
tunnelingDisabledForVideoCodec = false tunnelingDisabledForVideoCodec = false
tunnelingDisabledForDecodedTrueHdPcm = false tunnelingDisabledForDecodedPcm = false
tunnelingDisabledForAudioRecovery = false tunnelingDisabledForAudioRecovery = false
tunnelingDisabledForAssSubtitles = false tunnelingDisabledForAssSubtitles = false
currentTunneledPlayback = false currentTunneledPlayback = false
@@ -3508,7 +3516,7 @@ class ExoPlayerCore(private val activity: Activity) : Player.Listener {
if (player.playbackParameters.speed != 1f) return "Off (speed ≠ 1×)" if (player.playbackParameters.speed != 1f) return "Off (speed ≠ 1×)"
if (audioNormalizationEnabled) return "Off (loudness normalization)" if (audioNormalizationEnabled) return "Off (loudness normalization)"
if (tunnelingDisabledForAudioRecovery) return "Off (audio recovery)" if (tunnelingDisabledForAudioRecovery) return "Off (audio recovery)"
if (tunnelingDisabledForDecodedTrueHdPcm) return "Off (decoded TrueHD PCM)" if (tunnelingDisabledForDecodedPcm) return "Off (decoded PCM)"
if (tunnelingDisabledForVideoCodec) return "Off (video codec unsupported)" if (tunnelingDisabledForVideoCodec) return "Off (video codec unsupported)"
if (tunnelingDisabledForAudioCodec) return "Off (no HW audio decoder)" if (tunnelingDisabledForAudioCodec) return "Off (no HW audio decoder)"
if (tunnelingDisabledForAssSubtitles) return "Off (ASS subtitles active)" if (tunnelingDisabledForAssSubtitles) return "Off (ASS subtitles active)"
@@ -3562,7 +3570,7 @@ class ExoPlayerCore(private val activity: Activity) : Player.Listener {
loggedDirectAudioRecoveryBlocks.clear() loggedDirectAudioRecoveryBlocks.clear()
tunnelingDisabledForAudioCodec = false tunnelingDisabledForAudioCodec = false
tunnelingDisabledForVideoCodec = false tunnelingDisabledForVideoCodec = false
tunnelingDisabledForDecodedTrueHdPcm = false tunnelingDisabledForDecodedPcm = false
tunnelingDisabledForAudioRecovery = false tunnelingDisabledForAudioRecovery = false
tunnelingDisabledForAssSubtitles = false tunnelingDisabledForAssSubtitles = false
currentTunneledPlayback = false currentTunneledPlayback = false
+2
View File
@@ -262,6 +262,8 @@
"displaySwitchDelay": "Забавяне при смяна на дисплея", "displaySwitchDelay": "Забавяне при смяна на дисплея",
"tunneledPlayback": "Тунелно възпроизвеждане", "tunneledPlayback": "Тунелно възпроизвеждане",
"tunneledPlaybackDescription": "Използвай видео тунелиране. Изключете, ако HDR възпроизвеждането показва черен екран.", "tunneledPlaybackDescription": "Използвай видео тунелиране. Изключете, ако HDR възпроизвеждането показва черен екран.",
"audioPassthrough": "Аудио passthrough",
"audioPassthroughDescription": "Изпращай Dolby/DTS звук към ресийвъра или телевизора без прекодиране, запазвайки съраунд звука. Изключете, ако няма звук.",
"dvConversionMode": "Dolby Vision конвертиране", "dvConversionMode": "Dolby Vision конвертиране",
"dvConversionModeDescription": "Изберете как ExoPlayer обработва Dolby Vision Profile 7 файлове.", "dvConversionModeDescription": "Изберете как ExoPlayer обработва Dolby Vision Profile 7 файлове.",
"dvConversionAuto": "Автоматично", "dvConversionAuto": "Автоматично",
+2
View File
@@ -262,6 +262,8 @@
"displaySwitchDelay": "Forsinkelse ved skærmskift", "displaySwitchDelay": "Forsinkelse ved skærmskift",
"tunneledPlayback": "Tunneleret afspilning", "tunneledPlayback": "Tunneleret afspilning",
"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",
"audioPassthroughDescription": "Send Dolby/DTS-lyd til din receiver eller dit TV uden genkodning, så surroundlyd bevares. Slå fra, hvis du ikke har lyd.",
"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",
+2
View File
@@ -262,6 +262,8 @@
"displaySwitchDelay": "Verzögerung beim Displaywechsel", "displaySwitchDelay": "Verzögerung beim Displaywechsel",
"tunneledPlayback": "Tunnelwiedergabe", "tunneledPlayback": "Tunnelwiedergabe",
"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",
"audioPassthroughDescription": "Dolby/DTS-Audio ohne Neukodierung an deinen Receiver oder Fernseher senden und Surround-Sound erhalten. Deaktivieren, wenn kein Ton zu hören ist.",
"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",
+2
View File
@@ -268,6 +268,8 @@
"displaySwitchDelay": "Display Switch Delay", "displaySwitchDelay": "Display Switch Delay",
"tunneledPlayback": "Tunneled Playback", "tunneledPlayback": "Tunneled Playback",
"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",
"audioPassthroughDescription": "Send Dolby/DTS audio to your receiver or TV without re-encoding, preserving surround sound. Turn off if you have no sound.",
"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",
+2
View File
@@ -262,6 +262,8 @@
"displaySwitchDelay": "Retraso de cambio de pantalla", "displaySwitchDelay": "Retraso de cambio de pantalla",
"tunneledPlayback": "Reproducción tunelizada", "tunneledPlayback": "Reproducción tunelizada",
"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",
"audioPassthroughDescription": "Envía el audio Dolby/DTS a tu receptor o TV sin recodificar, conservando el sonido envolvente. Desactívalo si no tienes sonido.",
"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",
+2
View File
@@ -262,6 +262,8 @@
"displaySwitchDelay": "Délai de changement d'affichage", "displaySwitchDelay": "Délai de changement d'affichage",
"tunneledPlayback": "Lecture tunnelée", "tunneledPlayback": "Lecture tunnelée",
"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",
"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.",
"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",
+2
View File
@@ -262,6 +262,8 @@
"displaySwitchDelay": "Ritardo cambio display", "displaySwitchDelay": "Ritardo cambio display",
"tunneledPlayback": "Riproduzione tunnelizzata", "tunneledPlayback": "Riproduzione tunnelizzata",
"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",
"audioPassthroughDescription": "Invia l'audio Dolby/DTS al ricevitore o alla TV senza ricodifica, mantenendo il suono surround. Disattiva se non senti audio.",
"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",
+2
View File
@@ -262,6 +262,8 @@
"displaySwitchDelay": "ディスプレイ切り替え遅延", "displaySwitchDelay": "ディスプレイ切り替え遅延",
"tunneledPlayback": "トンネル再生", "tunneledPlayback": "トンネル再生",
"tunneledPlaybackDescription": "動画トンネリングを使用します。HDR再生で画面が黒くなる場合は無効にしてください。", "tunneledPlaybackDescription": "動画トンネリングを使用します。HDR再生で画面が黒くなる場合は無効にしてください。",
"audioPassthrough": "オーディオパススルー",
"audioPassthroughDescription": "Dolby/DTS音声を再エンコードせずにレシーバーやテレビに送り、サラウンドを維持します。音が出ない場合は無効にしてください。",
"dvConversionMode": "Dolby Vision 変換", "dvConversionMode": "Dolby Vision 変換",
"dvConversionModeDescription": "ExoPlayer が Dolby Vision Profile 7 ファイルを処理する方法を選択します。", "dvConversionModeDescription": "ExoPlayer が Dolby Vision Profile 7 ファイルを処理する方法を選択します。",
"dvConversionAuto": "自動", "dvConversionAuto": "自動",
+2
View File
@@ -262,6 +262,8 @@
"displaySwitchDelay": "디스플레이 전환 지연", "displaySwitchDelay": "디스플레이 전환 지연",
"tunneledPlayback": "터널 재생", "tunneledPlayback": "터널 재생",
"tunneledPlaybackDescription": "비디오 터널링을 사용합니다. HDR 재생 시 검은 화면이 보이면 비활성화하세요.", "tunneledPlaybackDescription": "비디오 터널링을 사용합니다. HDR 재생 시 검은 화면이 보이면 비활성화하세요.",
"audioPassthrough": "오디오 패스스루",
"audioPassthroughDescription": "Dolby/DTS 오디오를 재인코딩 없이 리시버나 TV로 전송하여 서라운드 사운드를 유지합니다. 소리가 나지 않으면 비활성화하세요.",
"dvConversionMode": "Dolby Vision 변환", "dvConversionMode": "Dolby Vision 변환",
"dvConversionModeDescription": "ExoPlayer가 Dolby Vision Profile 7 파일을 처리하는 방식을 선택합니다.", "dvConversionModeDescription": "ExoPlayer가 Dolby Vision Profile 7 파일을 처리하는 방식을 선택합니다.",
"dvConversionAuto": "자동", "dvConversionAuto": "자동",
+2
View File
@@ -262,6 +262,8 @@
"displaySwitchDelay": "Forsinkelse ved skjermbytte", "displaySwitchDelay": "Forsinkelse ved skjermbytte",
"tunneledPlayback": "Tunnelert avspilling", "tunneledPlayback": "Tunnelert avspilling",
"tunneledPlaybackDescription": "Bruk videotunneling. Slå av hvis HDR-avspilling viser svart video.", "tunneledPlaybackDescription": "Bruk videotunneling. Slå av hvis HDR-avspilling viser svart video.",
"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.",
"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",
+2
View File
@@ -262,6 +262,8 @@
"displaySwitchDelay": "Vertraging bij schermwisseling", "displaySwitchDelay": "Vertraging bij schermwisseling",
"tunneledPlayback": "Getunnelde weergave", "tunneledPlayback": "Getunnelde weergave",
"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",
"audioPassthroughDescription": "Stuur Dolby/DTS-audio zonder hercodering naar je receiver of tv en behoud surroundgeluid. Schakel uit als je geen geluid hebt.",
"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",
+2
View File
@@ -262,6 +262,8 @@
"displaySwitchDelay": "Opóźnienie przełączania ekranu", "displaySwitchDelay": "Opóźnienie przełączania ekranu",
"tunneledPlayback": "Tunelowane odtwarzanie", "tunneledPlayback": "Tunelowane odtwarzanie",
"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",
"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.",
"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",
+2
View File
@@ -262,6 +262,8 @@
"displaySwitchDelay": "Atraso na Troca de Tela", "displaySwitchDelay": "Atraso na Troca de Tela",
"tunneledPlayback": "Reprodução Tunelizada", "tunneledPlayback": "Reprodução Tunelizada",
"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",
"audioPassthroughDescription": "Envie áudio Dolby/DTS para o seu receptor ou TV sem recodificar, preservando o som surround. Desative se não tiver som.",
"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",
+2
View File
@@ -262,6 +262,8 @@
"displaySwitchDelay": "Задержка переключения дисплея", "displaySwitchDelay": "Задержка переключения дисплея",
"tunneledPlayback": "Туннельное воспроизведение", "tunneledPlayback": "Туннельное воспроизведение",
"tunneledPlaybackDescription": "Использовать видеотуннелирование. Отключите, если HDR показывает черный экран.", "tunneledPlaybackDescription": "Использовать видеотуннелирование. Отключите, если HDR показывает черный экран.",
"audioPassthrough": "Сквозной вывод аудио",
"audioPassthroughDescription": "Передавать звук Dolby/DTS на ресивер или телевизор без перекодирования, сохраняя объёмный звук. Отключите, если нет звука.",
"dvConversionMode": "Преобразование Dolby Vision", "dvConversionMode": "Преобразование Dolby Vision",
"dvConversionModeDescription": "Выберите, как ExoPlayer обрабатывает файлы Dolby Vision Profile 7.", "dvConversionModeDescription": "Выберите, как ExoPlayer обрабатывает файлы Dolby Vision Profile 7.",
"dvConversionAuto": "Авто", "dvConversionAuto": "Авто",
+1 -1
View File
@@ -4,7 +4,7 @@
/// To regenerate, run: `dart run slang` /// To regenerate, run: `dart run slang`
/// ///
/// Locales: 16 /// Locales: 16
/// Strings: 20441 (1277 per locale) /// Strings: 20473 (1279 per locale)
// coverage:ignore-file // coverage:ignore-file
// ignore_for_file: type=lint, unused_import // ignore_for_file: type=lint, unused_import
+8 -4
View File
@@ -391,6 +391,8 @@ class _TranslationsSettingsBg extends TranslationsSettingsEn {
@override String get displaySwitchDelay => 'Забавяне при смяна на дисплея'; @override String get displaySwitchDelay => 'Забавяне при смяна на дисплея';
@override String get tunneledPlayback => 'Тунелно възпроизвеждане'; @override String get tunneledPlayback => 'Тунелно възпроизвеждане';
@override String get tunneledPlaybackDescription => 'Използвай видео тунелиране. Изключете, ако HDR възпроизвеждането показва черен екран.'; @override String get tunneledPlaybackDescription => 'Използвай видео тунелиране. Изключете, ако HDR възпроизвеждането показва черен екран.';
@override String get audioPassthrough => 'Аудио passthrough';
@override String get audioPassthroughDescription => 'Изпращай Dolby/DTS звук към ресийвъра или телевизора без прекодиране, запазвайки съраунд звука. Изключете, ако няма звук.';
@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 => 'Автоматично';
@@ -2178,6 +2180,8 @@ extension on TranslationsBg {
'settings.displaySwitchDelay' => 'Забавяне при смяна на дисплея', 'settings.displaySwitchDelay' => 'Забавяне при смяна на дисплея',
'settings.tunneledPlayback' => 'Тунелно възпроизвеждане', 'settings.tunneledPlayback' => 'Тунелно възпроизвеждане',
'settings.tunneledPlaybackDescription' => 'Използвай видео тунелиране. Изключете, ако HDR възпроизвеждането показва черен екран.', 'settings.tunneledPlaybackDescription' => 'Използвай видео тунелиране. Изключете, ако HDR възпроизвеждането показва черен екран.',
'settings.audioPassthrough' => 'Аудио passthrough',
'settings.audioPassthroughDescription' => 'Изпращай Dolby/DTS звук към ресийвъра или телевизора без прекодиране, запазвайки съраунд звука. Изключете, ако няма звук.',
'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' => 'Автоматично',
@@ -2436,10 +2440,10 @@ extension on TranslationsBg {
'messages.serverLimitTitle' => 'Възпроизвеждането е неуспешно', 'messages.serverLimitTitle' => 'Възпроизвеждането е неуспешно',
'messages.serverLimitBody' => 'Грешка на сървъра (HTTP 500). Вероятно лимит за пропускателна способност/транскодиране е отхвърлил тази сесия. Помолете собственика да го коригира.', 'messages.serverLimitBody' => 'Грешка на сървъра (HTTP 500). Вероятно лимит за пропускателна способност/транскодиране е отхвърлил тази сесия. Помолете собственика да го коригира.',
'messages.logsUploaded' => 'Логовете са качени', 'messages.logsUploaded' => 'Логовете са качени',
'messages.logsUploadFailed' => 'Неуспешно качване на логовете',
'messages.logId' => 'ID на лога',
_ => null, _ => null,
} ?? switch (path) { } ?? switch (path) {
'messages.logsUploadFailed' => 'Неуспешно качване на логовете',
'messages.logId' => 'ID на лога',
'subtitlingStyling.text' => 'Текст', 'subtitlingStyling.text' => 'Текст',
'subtitlingStyling.border' => 'Рамка', 'subtitlingStyling.border' => 'Рамка',
'subtitlingStyling.background' => 'Фон', 'subtitlingStyling.background' => 'Фон',
@@ -2950,10 +2954,10 @@ extension on TranslationsBg {
'companionRemote.pairing.connectionTimedOut' => 'Връзката изтече. Използвайте една и съща мрежа на двете устройства.', 'companionRemote.pairing.connectionTimedOut' => 'Връзката изтече. Използвайте една и съща мрежа на двете устройства.',
'companionRemote.pairing.sessionNotFound' => 'Устройството не е намерено. Уверете се, че Plezy работи на хоста.', 'companionRemote.pairing.sessionNotFound' => 'Устройството не е намерено. Уверете се, че Plezy работи на хоста.',
'companionRemote.pairing.authFailed' => 'Удостоверяването е неуспешно. Двете устройства трябва да използват същия Plex акаунт.', 'companionRemote.pairing.authFailed' => 'Удостоверяването е неуспешно. Двете устройства трябва да използват същия Plex акаунт.',
'companionRemote.pairing.failedToConnect' => ({required Object error}) => 'Неуспешно свързване: ${error}',
'companionRemote.remote.disconnectConfirm' => 'Искате ли да прекъснете връзката с дистанционната сесия?',
_ => null, _ => null,
} ?? switch (path) { } ?? switch (path) {
'companionRemote.pairing.failedToConnect' => ({required Object error}) => 'Неуспешно свързване: ${error}',
'companionRemote.remote.disconnectConfirm' => 'Искате ли да прекъснете връзката с дистанционната сесия?',
'companionRemote.remote.reconnecting' => 'Повторно свързване...', 'companionRemote.remote.reconnecting' => 'Повторно свързване...',
'companionRemote.remote.attemptOf' => ({required Object current}) => 'Опит ${current} от 5', 'companionRemote.remote.attemptOf' => ({required Object current}) => 'Опит ${current} от 5',
'companionRemote.remote.retryNow' => 'Опитай сега', 'companionRemote.remote.retryNow' => 'Опитай сега',
+8 -4
View File
@@ -391,6 +391,8 @@ class _TranslationsSettingsDa extends TranslationsSettingsEn {
@override String get displaySwitchDelay => 'Forsinkelse ved skærmskift'; @override String get displaySwitchDelay => 'Forsinkelse ved skærmskift';
@override String get tunneledPlayback => 'Tunneleret afspilning'; @override String get tunneledPlayback => 'Tunneleret afspilning';
@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 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 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';
@@ -2178,6 +2180,8 @@ extension on TranslationsDa {
'settings.displaySwitchDelay' => 'Forsinkelse ved skærmskift', 'settings.displaySwitchDelay' => 'Forsinkelse ved skærmskift',
'settings.tunneledPlayback' => 'Tunneleret afspilning', 'settings.tunneledPlayback' => 'Tunneleret afspilning',
'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.audioPassthroughDescription' => 'Send Dolby/DTS-lyd til din receiver eller dit TV uden genkodning, så surroundlyd bevares. Slå fra, hvis du ikke har lyd.',
'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',
@@ -2436,10 +2440,10 @@ 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',
'messages.logsUploadFailed' => 'Kunne ikke uploade logs',
'messages.logId' => 'Log-ID',
_ => null, _ => null,
} ?? switch (path) { } ?? switch (path) {
'messages.logsUploadFailed' => 'Kunne ikke uploade logs',
'messages.logId' => 'Log-ID',
'subtitlingStyling.text' => 'Tekst', 'subtitlingStyling.text' => 'Tekst',
'subtitlingStyling.border' => 'Kant', 'subtitlingStyling.border' => 'Kant',
'subtitlingStyling.background' => 'Baggrund', 'subtitlingStyling.background' => 'Baggrund',
@@ -2950,10 +2954,10 @@ extension on TranslationsDa {
'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.',
'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.remote.disconnectConfirm' => 'Vil du afbryde fra fjernsessionen?',
_ => null, _ => null,
} ?? switch (path) { } ?? switch (path) {
'companionRemote.pairing.failedToConnect' => ({required Object error}) => 'Kunne ikke oprette forbindelse: ${error}',
'companionRemote.remote.disconnectConfirm' => 'Vil du afbryde fra fjernsessionen?',
'companionRemote.remote.reconnecting' => 'Genopretter forbindelse...', 'companionRemote.remote.reconnecting' => 'Genopretter forbindelse...',
'companionRemote.remote.attemptOf' => ({required Object current}) => 'Forsøg ${current} af 5', 'companionRemote.remote.attemptOf' => ({required Object current}) => 'Forsøg ${current} af 5',
'companionRemote.remote.retryNow' => 'Prøv igen nu', 'companionRemote.remote.retryNow' => 'Prøv igen nu',
+8 -4
View File
@@ -391,6 +391,8 @@ class _TranslationsSettingsDe extends TranslationsSettingsEn {
@override String get displaySwitchDelay => 'Verzögerung beim Displaywechsel'; @override String get displaySwitchDelay => 'Verzögerung beim Displaywechsel';
@override String get tunneledPlayback => 'Tunnelwiedergabe'; @override String get tunneledPlayback => 'Tunnelwiedergabe';
@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 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 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';
@@ -2178,6 +2180,8 @@ extension on TranslationsDe {
'settings.displaySwitchDelay' => 'Verzögerung beim Displaywechsel', 'settings.displaySwitchDelay' => 'Verzögerung beim Displaywechsel',
'settings.tunneledPlayback' => 'Tunnelwiedergabe', 'settings.tunneledPlayback' => 'Tunnelwiedergabe',
'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.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.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',
@@ -2436,10 +2440,10 @@ 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',
'messages.logsUploadFailed' => 'Protokolle konnten nicht hochgeladen werden',
'messages.logId' => 'Protokoll-ID',
_ => null, _ => null,
} ?? switch (path) { } ?? switch (path) {
'messages.logsUploadFailed' => 'Protokolle konnten nicht hochgeladen werden',
'messages.logId' => 'Protokoll-ID',
'subtitlingStyling.text' => 'Text', 'subtitlingStyling.text' => 'Text',
'subtitlingStyling.border' => 'Rahmen', 'subtitlingStyling.border' => 'Rahmen',
'subtitlingStyling.background' => 'Hintergrund', 'subtitlingStyling.background' => 'Hintergrund',
@@ -2950,10 +2954,10 @@ extension on TranslationsDe {
'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.',
'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.remote.disconnectConfirm' => 'Möchtest du die Verbindung zur Fernsteuerungssitzung trennen?',
_ => null, _ => null,
} ?? switch (path) { } ?? switch (path) {
'companionRemote.pairing.failedToConnect' => ({required Object error}) => 'Verbindung fehlgeschlagen: ${error}',
'companionRemote.remote.disconnectConfirm' => 'Möchtest du die Verbindung zur Fernsteuerungssitzung trennen?',
'companionRemote.remote.reconnecting' => 'Verbindung wird wiederhergestellt...', 'companionRemote.remote.reconnecting' => 'Verbindung wird wiederhergestellt...',
'companionRemote.remote.attemptOf' => ({required Object current}) => 'Versuch ${current} von 5', 'companionRemote.remote.attemptOf' => ({required Object current}) => 'Versuch ${current} von 5',
'companionRemote.remote.retryNow' => 'Jetzt wiederholen', 'companionRemote.remote.retryNow' => 'Jetzt wiederholen',
+12 -4
View File
@@ -915,6 +915,12 @@ class TranslationsSettingsEn {
/// en: 'Use video tunneling. Disable if HDR playback shows black video.' /// en: 'Use video tunneling. Disable if HDR playback shows black video.'
String get tunneledPlaybackDescription => 'Use video tunneling. Disable if HDR playback shows black video.'; String get tunneledPlaybackDescription => 'Use video tunneling. Disable if HDR playback shows black video.';
/// en: 'Audio Passthrough'
String get audioPassthrough => 'Audio Passthrough';
/// 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.';
/// en: 'Dolby Vision Conversion' /// en: 'Dolby Vision Conversion'
String get dvConversionMode => 'Dolby Vision Conversion'; String get dvConversionMode => 'Dolby Vision Conversion';
@@ -4771,6 +4777,8 @@ extension on Translations {
'settings.displaySwitchDelay' => 'Display Switch Delay', 'settings.displaySwitchDelay' => 'Display Switch Delay',
'settings.tunneledPlayback' => 'Tunneled Playback', 'settings.tunneledPlayback' => 'Tunneled Playback',
'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.audioPassthroughDescription' => 'Send Dolby/DTS audio to your receiver or TV without re-encoding, preserving surround sound. Turn off if you have no sound.',
'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',
@@ -5023,10 +5031,10 @@ 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',
'messages.failedToCreatePlayQueueNoItems' => 'Failed to create play queue - no items',
'messages.failedPlayback' => ({required Object action, required Object error}) => 'Failed to ${action}: ${error}',
_ => null, _ => null,
} ?? switch (path) { } ?? switch (path) {
'messages.failedToCreatePlayQueueNoItems' => 'Failed to create play queue - no items',
'messages.failedPlayback' => ({required Object action, required Object error}) => 'Failed to ${action}: ${error}',
'messages.switchingToCompatiblePlayer' => 'Switching to compatible player...', 'messages.switchingToCompatiblePlayer' => 'Switching to compatible player...',
'messages.serverLimitTitle' => 'Playback failed', 'messages.serverLimitTitle' => 'Playback failed',
'messages.serverLimitBody' => 'Server error (HTTP 500). A bandwidth/transcoding limit likely rejected this session. Ask the owner to adjust it.', 'messages.serverLimitBody' => 'Server error (HTTP 500). A bandwidth/transcoding limit likely rejected this session. Ask the owner to adjust it.',
@@ -5537,10 +5545,10 @@ extension on Translations {
'companionRemote.pairing.connecting' => 'Connecting...', 'companionRemote.pairing.connecting' => 'Connecting...',
'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.availableDevices' => 'Available Devices',
_ => null, _ => null,
} ?? switch (path) { } ?? switch (path) {
'companionRemote.pairing.noDevicesHint' => 'Open Plezy on desktop and use the same WiFi',
'companionRemote.pairing.availableDevices' => 'Available Devices',
'companionRemote.pairing.manualConnection' => 'Manual Connection', 'companionRemote.pairing.manualConnection' => 'Manual Connection',
'companionRemote.pairing.cryptoInitFailed' => 'Couldn\'t start secure connection. Sign in to Plex first.', 'companionRemote.pairing.cryptoInitFailed' => 'Couldn\'t start secure connection. Sign in to Plex first.',
'companionRemote.pairing.validationHostRequired' => 'Please enter host address', 'companionRemote.pairing.validationHostRequired' => 'Please enter host address',
+8 -4
View File
@@ -391,6 +391,8 @@ class _TranslationsSettingsEs extends TranslationsSettingsEn {
@override String get displaySwitchDelay => 'Retraso de cambio de pantalla'; @override String get displaySwitchDelay => 'Retraso de cambio de pantalla';
@override String get tunneledPlayback => 'Reproducción tunelizada'; @override String get tunneledPlayback => 'Reproducción tunelizada';
@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 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 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';
@@ -2178,6 +2180,8 @@ extension on TranslationsEs {
'settings.displaySwitchDelay' => 'Retraso de cambio de pantalla', 'settings.displaySwitchDelay' => 'Retraso de cambio de pantalla',
'settings.tunneledPlayback' => 'Reproducción tunelizada', 'settings.tunneledPlayback' => 'Reproducción tunelizada',
'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.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.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',
@@ -2436,10 +2440,10 @@ 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',
'messages.logsUploadFailed' => 'Error al subir registros',
'messages.logId' => 'ID de registro',
_ => null, _ => null,
} ?? switch (path) { } ?? switch (path) {
'messages.logsUploadFailed' => 'Error al subir registros',
'messages.logId' => 'ID de registro',
'subtitlingStyling.text' => 'Texto', 'subtitlingStyling.text' => 'Texto',
'subtitlingStyling.border' => 'Borde', 'subtitlingStyling.border' => 'Borde',
'subtitlingStyling.background' => 'Fondo', 'subtitlingStyling.background' => 'Fondo',
@@ -2950,10 +2954,10 @@ extension on TranslationsEs {
'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.',
'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.remote.disconnectConfirm' => '¿Quieres desconectarte de la sesión remota?',
_ => null, _ => null,
} ?? switch (path) { } ?? switch (path) {
'companionRemote.pairing.failedToConnect' => ({required Object error}) => 'Error al conectar: ${error}',
'companionRemote.remote.disconnectConfirm' => '¿Quieres desconectarte de la sesión remota?',
'companionRemote.remote.reconnecting' => 'Reconectando...', 'companionRemote.remote.reconnecting' => 'Reconectando...',
'companionRemote.remote.attemptOf' => ({required Object current}) => 'Intento ${current} de 5', 'companionRemote.remote.attemptOf' => ({required Object current}) => 'Intento ${current} de 5',
'companionRemote.remote.retryNow' => 'Reintentar ahora', 'companionRemote.remote.retryNow' => 'Reintentar ahora',
+8 -4
View File
@@ -391,6 +391,8 @@ class _TranslationsSettingsFr extends TranslationsSettingsEn {
@override String get displaySwitchDelay => 'Délai de changement d\'affichage'; @override String get displaySwitchDelay => 'Délai de changement d\'affichage';
@override String get tunneledPlayback => 'Lecture tunnelée'; @override String get tunneledPlayback => 'Lecture tunnelée';
@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 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 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';
@@ -2178,6 +2180,8 @@ extension on TranslationsFr {
'settings.displaySwitchDelay' => 'Délai de changement d\'affichage', 'settings.displaySwitchDelay' => 'Délai de changement d\'affichage',
'settings.tunneledPlayback' => 'Lecture tunnelée', 'settings.tunneledPlayback' => 'Lecture tunnelée',
'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.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.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',
@@ -2436,10 +2440,10 @@ 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',
'messages.logsUploadFailed' => 'Échec de l\'envoi des logs',
'messages.logId' => 'ID du log',
_ => null, _ => null,
} ?? switch (path) { } ?? switch (path) {
'messages.logsUploadFailed' => 'Échec de l\'envoi des logs',
'messages.logId' => 'ID du log',
'subtitlingStyling.text' => 'Texte', 'subtitlingStyling.text' => 'Texte',
'subtitlingStyling.border' => 'Bordure', 'subtitlingStyling.border' => 'Bordure',
'subtitlingStyling.background' => 'Arrière-plan', 'subtitlingStyling.background' => 'Arrière-plan',
@@ -2950,10 +2954,10 @@ extension on TranslationsFr {
'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.',
'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.remote.disconnectConfirm' => 'Voulez-vous vous déconnecter de la session distante ?',
_ => null, _ => null,
} ?? switch (path) { } ?? switch (path) {
'companionRemote.pairing.failedToConnect' => ({required Object error}) => 'Échec de la connexion : ${error}',
'companionRemote.remote.disconnectConfirm' => 'Voulez-vous vous déconnecter de la session distante ?',
'companionRemote.remote.reconnecting' => 'Reconnexion...', 'companionRemote.remote.reconnecting' => 'Reconnexion...',
'companionRemote.remote.attemptOf' => ({required Object current}) => 'Tentative ${current} sur 5', 'companionRemote.remote.attemptOf' => ({required Object current}) => 'Tentative ${current} sur 5',
'companionRemote.remote.retryNow' => 'Réessayer maintenant', 'companionRemote.remote.retryNow' => 'Réessayer maintenant',
+8 -4
View File
@@ -391,6 +391,8 @@ class _TranslationsSettingsIt extends TranslationsSettingsEn {
@override String get displaySwitchDelay => 'Ritardo cambio display'; @override String get displaySwitchDelay => 'Ritardo cambio display';
@override String get tunneledPlayback => 'Riproduzione tunnelizzata'; @override String get tunneledPlayback => 'Riproduzione tunnelizzata';
@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 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 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';
@@ -2178,6 +2180,8 @@ extension on TranslationsIt {
'settings.displaySwitchDelay' => 'Ritardo cambio display', 'settings.displaySwitchDelay' => 'Ritardo cambio display',
'settings.tunneledPlayback' => 'Riproduzione tunnelizzata', 'settings.tunneledPlayback' => 'Riproduzione tunnelizzata',
'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.audioPassthroughDescription' => 'Invia l\'audio Dolby/DTS al ricevitore o alla TV senza ricodifica, mantenendo il suono surround. Disattiva se non senti audio.',
'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',
@@ -2436,10 +2440,10 @@ 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',
'messages.logsUploadFailed' => 'Caricamento log fallito',
'messages.logId' => 'ID log',
_ => null, _ => null,
} ?? switch (path) { } ?? switch (path) {
'messages.logsUploadFailed' => 'Caricamento log fallito',
'messages.logId' => 'ID log',
'subtitlingStyling.text' => 'Testo', 'subtitlingStyling.text' => 'Testo',
'subtitlingStyling.border' => 'Bordo', 'subtitlingStyling.border' => 'Bordo',
'subtitlingStyling.background' => 'Sfondo', 'subtitlingStyling.background' => 'Sfondo',
@@ -2950,10 +2954,10 @@ extension on TranslationsIt {
'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.',
'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.remote.disconnectConfirm' => 'Vuoi disconnetterti dalla sessione remota?',
_ => null, _ => null,
} ?? switch (path) { } ?? switch (path) {
'companionRemote.pairing.failedToConnect' => ({required Object error}) => 'Connessione fallita: ${error}',
'companionRemote.remote.disconnectConfirm' => 'Vuoi disconnetterti dalla sessione remota?',
'companionRemote.remote.reconnecting' => 'Riconnessione...', 'companionRemote.remote.reconnecting' => 'Riconnessione...',
'companionRemote.remote.attemptOf' => ({required Object current}) => 'Tentativo ${current} di 5', 'companionRemote.remote.attemptOf' => ({required Object current}) => 'Tentativo ${current} di 5',
'companionRemote.remote.retryNow' => 'Riprova ora', 'companionRemote.remote.retryNow' => 'Riprova ora',
+8 -4
View File
@@ -391,6 +391,8 @@ class _TranslationsSettingsJa extends TranslationsSettingsEn {
@override String get displaySwitchDelay => 'ディスプレイ切り替え遅延'; @override String get displaySwitchDelay => 'ディスプレイ切り替え遅延';
@override String get tunneledPlayback => 'トンネル再生'; @override String get tunneledPlayback => 'トンネル再生';
@override String get tunneledPlaybackDescription => '動画トンネリングを使用します。HDR再生で画面が黒くなる場合は無効にしてください。'; @override String get tunneledPlaybackDescription => '動画トンネリングを使用します。HDR再生で画面が黒くなる場合は無効にしてください。';
@override String get audioPassthrough => 'オーディオパススルー';
@override String get audioPassthroughDescription => 'Dolby/DTS音声を再エンコードせずにレシーバーやテレビに送り、サラウンドを維持します。音が出ない場合は無効にしてください。';
@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 => '自動';
@@ -2178,6 +2180,8 @@ extension on TranslationsJa {
'settings.displaySwitchDelay' => 'ディスプレイ切り替え遅延', 'settings.displaySwitchDelay' => 'ディスプレイ切り替え遅延',
'settings.tunneledPlayback' => 'トンネル再生', 'settings.tunneledPlayback' => 'トンネル再生',
'settings.tunneledPlaybackDescription' => '動画トンネリングを使用します。HDR再生で画面が黒くなる場合は無効にしてください。', 'settings.tunneledPlaybackDescription' => '動画トンネリングを使用します。HDR再生で画面が黒くなる場合は無効にしてください。',
'settings.audioPassthrough' => 'オーディオパススルー',
'settings.audioPassthroughDescription' => 'Dolby/DTS音声を再エンコードせずにレシーバーやテレビに送り、サラウンドを維持します。音が出ない場合は無効にしてください。',
'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' => '自動',
@@ -2436,10 +2440,10 @@ extension on TranslationsJa {
'messages.serverLimitTitle' => '再生に失敗しました', 'messages.serverLimitTitle' => '再生に失敗しました',
'messages.serverLimitBody' => 'サーバーエラー(HTTP 500)。帯域幅/トランスコード制限により拒否された可能性があります。所有者に調整を依頼してください。', 'messages.serverLimitBody' => 'サーバーエラー(HTTP 500)。帯域幅/トランスコード制限により拒否された可能性があります。所有者に調整を依頼してください。',
'messages.logsUploaded' => 'ログをアップロードしました', 'messages.logsUploaded' => 'ログをアップロードしました',
'messages.logsUploadFailed' => 'ログのアップロードに失敗しました',
'messages.logId' => 'ログID',
_ => null, _ => null,
} ?? switch (path) { } ?? switch (path) {
'messages.logsUploadFailed' => 'ログのアップロードに失敗しました',
'messages.logId' => 'ログID',
'subtitlingStyling.text' => 'テキスト', 'subtitlingStyling.text' => 'テキスト',
'subtitlingStyling.border' => '枠線', 'subtitlingStyling.border' => '枠線',
'subtitlingStyling.background' => '背景', 'subtitlingStyling.background' => '背景',
@@ -2950,10 +2954,10 @@ extension on TranslationsJa {
'companionRemote.pairing.connectionTimedOut' => '接続がタイムアウトしました。両方のデバイスで同じネットワークを使用してください。', 'companionRemote.pairing.connectionTimedOut' => '接続がタイムアウトしました。両方のデバイスで同じネットワークを使用してください。',
'companionRemote.pairing.sessionNotFound' => 'デバイスが見つかりません。ホストでPlezyが実行中か確認してください。', 'companionRemote.pairing.sessionNotFound' => 'デバイスが見つかりません。ホストでPlezyが実行中か確認してください。',
'companionRemote.pairing.authFailed' => '認証に失敗しました。両方のデバイスで同じPlexアカウントが必要です。', 'companionRemote.pairing.authFailed' => '認証に失敗しました。両方のデバイスで同じPlexアカウントが必要です。',
'companionRemote.pairing.failedToConnect' => ({required Object error}) => '接続に失敗しました: ${error}',
'companionRemote.remote.disconnectConfirm' => 'リモートセッションから切断しますか?',
_ => null, _ => null,
} ?? switch (path) { } ?? switch (path) {
'companionRemote.pairing.failedToConnect' => ({required Object error}) => '接続に失敗しました: ${error}',
'companionRemote.remote.disconnectConfirm' => 'リモートセッションから切断しますか?',
'companionRemote.remote.reconnecting' => '再接続中...', 'companionRemote.remote.reconnecting' => '再接続中...',
'companionRemote.remote.attemptOf' => ({required Object current}) => '試行 ${current}/5', 'companionRemote.remote.attemptOf' => ({required Object current}) => '試行 ${current}/5',
'companionRemote.remote.retryNow' => '今すぐ再試行', 'companionRemote.remote.retryNow' => '今すぐ再試行',
+8 -4
View File
@@ -391,6 +391,8 @@ class _TranslationsSettingsKo extends TranslationsSettingsEn {
@override String get displaySwitchDelay => '디스플레이 전환 지연'; @override String get displaySwitchDelay => '디스플레이 전환 지연';
@override String get tunneledPlayback => '터널 재생'; @override String get tunneledPlayback => '터널 재생';
@override String get tunneledPlaybackDescription => '비디오 터널링을 사용합니다. HDR 재생 시 검은 화면이 보이면 비활성화하세요.'; @override String get tunneledPlaybackDescription => '비디오 터널링을 사용합니다. HDR 재생 시 검은 화면이 보이면 비활성화하세요.';
@override String get audioPassthrough => '오디오 패스스루';
@override String get audioPassthroughDescription => 'Dolby/DTS 오디오를 재인코딩 없이 리시버나 TV로 전송하여 서라운드 사운드를 유지합니다. 소리가 나지 않으면 비활성화하세요.';
@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 => '자동';
@@ -2178,6 +2180,8 @@ extension on TranslationsKo {
'settings.displaySwitchDelay' => '디스플레이 전환 지연', 'settings.displaySwitchDelay' => '디스플레이 전환 지연',
'settings.tunneledPlayback' => '터널 재생', 'settings.tunneledPlayback' => '터널 재생',
'settings.tunneledPlaybackDescription' => '비디오 터널링을 사용합니다. HDR 재생 시 검은 화면이 보이면 비활성화하세요.', 'settings.tunneledPlaybackDescription' => '비디오 터널링을 사용합니다. HDR 재생 시 검은 화면이 보이면 비활성화하세요.',
'settings.audioPassthrough' => '오디오 패스스루',
'settings.audioPassthroughDescription' => 'Dolby/DTS 오디오를 재인코딩 없이 리시버나 TV로 전송하여 서라운드 사운드를 유지합니다. 소리가 나지 않으면 비활성화하세요.',
'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' => '자동',
@@ -2436,10 +2440,10 @@ extension on TranslationsKo {
'messages.serverLimitTitle' => '재생 실패', 'messages.serverLimitTitle' => '재생 실패',
'messages.serverLimitBody' => '서버 오류(HTTP 500). 대역폭/트랜스코딩 제한으로 세션이 거부된 것 같습니다. 소유자에게 조정을 요청하세요.', 'messages.serverLimitBody' => '서버 오류(HTTP 500). 대역폭/트랜스코딩 제한으로 세션이 거부된 것 같습니다. 소유자에게 조정을 요청하세요.',
'messages.logsUploaded' => '로그 업로드 완료', 'messages.logsUploaded' => '로그 업로드 완료',
'messages.logsUploadFailed' => '로그 업로드 실패',
'messages.logId' => '로그 ID',
_ => null, _ => null,
} ?? switch (path) { } ?? switch (path) {
'messages.logsUploadFailed' => '로그 업로드 실패',
'messages.logId' => '로그 ID',
'subtitlingStyling.text' => '텍스트', 'subtitlingStyling.text' => '텍스트',
'subtitlingStyling.border' => '테두리', 'subtitlingStyling.border' => '테두리',
'subtitlingStyling.background' => '배경', 'subtitlingStyling.background' => '배경',
@@ -2950,10 +2954,10 @@ extension on TranslationsKo {
'companionRemote.pairing.connectionTimedOut' => '연결 시간이 초과되었습니다. 두 기기에서 같은 네트워크를 사용하세요.', 'companionRemote.pairing.connectionTimedOut' => '연결 시간이 초과되었습니다. 두 기기에서 같은 네트워크를 사용하세요.',
'companionRemote.pairing.sessionNotFound' => '기기를 찾을 수 없습니다. 호스트에서 Plezy가 실행 중인지 확인하세요.', 'companionRemote.pairing.sessionNotFound' => '기기를 찾을 수 없습니다. 호스트에서 Plezy가 실행 중인지 확인하세요.',
'companionRemote.pairing.authFailed' => '인증에 실패했습니다. 두 기기 모두 같은 Plex 계정이 필요합니다.', 'companionRemote.pairing.authFailed' => '인증에 실패했습니다. 두 기기 모두 같은 Plex 계정이 필요합니다.',
'companionRemote.pairing.failedToConnect' => ({required Object error}) => '연결 실패: ${error}',
'companionRemote.remote.disconnectConfirm' => '원격 세션 연결을 해제하시겠습니까?',
_ => null, _ => null,
} ?? switch (path) { } ?? switch (path) {
'companionRemote.pairing.failedToConnect' => ({required Object error}) => '연결 실패: ${error}',
'companionRemote.remote.disconnectConfirm' => '원격 세션 연결을 해제하시겠습니까?',
'companionRemote.remote.reconnecting' => '재연결 중...', 'companionRemote.remote.reconnecting' => '재연결 중...',
'companionRemote.remote.attemptOf' => ({required Object current}) => '${current}/5 시도 중', 'companionRemote.remote.attemptOf' => ({required Object current}) => '${current}/5 시도 중',
'companionRemote.remote.retryNow' => '지금 재시도', 'companionRemote.remote.retryNow' => '지금 재시도',
+8 -4
View File
@@ -391,6 +391,8 @@ class _TranslationsSettingsNb extends TranslationsSettingsEn {
@override String get displaySwitchDelay => 'Forsinkelse ved skjermbytte'; @override String get displaySwitchDelay => 'Forsinkelse ved skjermbytte';
@override String get tunneledPlayback => 'Tunnelert avspilling'; @override String get tunneledPlayback => 'Tunnelert avspilling';
@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 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 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';
@@ -2178,6 +2180,8 @@ extension on TranslationsNb {
'settings.displaySwitchDelay' => 'Forsinkelse ved skjermbytte', 'settings.displaySwitchDelay' => 'Forsinkelse ved skjermbytte',
'settings.tunneledPlayback' => 'Tunnelert avspilling', 'settings.tunneledPlayback' => 'Tunnelert avspilling',
'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.audioPassthroughDescription' => 'Send Dolby/DTS-lyd til mottakeren eller TV-en uten omkoding, slik at surroundlyd bevares. Slå av hvis du ikke har lyd.',
'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',
@@ -2436,10 +2440,10 @@ 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',
'messages.logsUploadFailed' => 'Kunne ikke laste opp logger',
'messages.logId' => 'Logg-ID',
_ => null, _ => null,
} ?? switch (path) { } ?? switch (path) {
'messages.logsUploadFailed' => 'Kunne ikke laste opp logger',
'messages.logId' => 'Logg-ID',
'subtitlingStyling.text' => 'Tekst', 'subtitlingStyling.text' => 'Tekst',
'subtitlingStyling.border' => 'Kantlinje', 'subtitlingStyling.border' => 'Kantlinje',
'subtitlingStyling.background' => 'Bakgrunn', 'subtitlingStyling.background' => 'Bakgrunn',
@@ -2950,10 +2954,10 @@ extension on TranslationsNb {
'companionRemote.pairing.connectionTimedOut' => 'Tilkoblingen fikk tidsavbrudd. Bruk samme nettverk på begge enheter.', 'companionRemote.pairing.connectionTimedOut' => 'Tilkoblingen fikk tidsavbrudd. Bruk samme nettverk på begge enheter.',
'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.remote.disconnectConfirm' => 'Vil du koble fra fjernøkten?',
_ => null, _ => null,
} ?? switch (path) { } ?? switch (path) {
'companionRemote.pairing.failedToConnect' => ({required Object error}) => 'Kunne ikke koble til: ${error}',
'companionRemote.remote.disconnectConfirm' => 'Vil du koble fra fjernøkten?',
'companionRemote.remote.reconnecting' => 'Kobler til på nytt...', 'companionRemote.remote.reconnecting' => 'Kobler til på nytt...',
'companionRemote.remote.attemptOf' => ({required Object current}) => 'Forsøk ${current} av 5', 'companionRemote.remote.attemptOf' => ({required Object current}) => 'Forsøk ${current} av 5',
'companionRemote.remote.retryNow' => 'Prøv nå', 'companionRemote.remote.retryNow' => 'Prøv nå',
+8 -4
View File
@@ -391,6 +391,8 @@ class _TranslationsSettingsNl extends TranslationsSettingsEn {
@override String get displaySwitchDelay => 'Vertraging bij schermwisseling'; @override String get displaySwitchDelay => 'Vertraging bij schermwisseling';
@override String get tunneledPlayback => 'Getunnelde weergave'; @override String get tunneledPlayback => 'Getunnelde weergave';
@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 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 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';
@@ -2178,6 +2180,8 @@ extension on TranslationsNl {
'settings.displaySwitchDelay' => 'Vertraging bij schermwisseling', 'settings.displaySwitchDelay' => 'Vertraging bij schermwisseling',
'settings.tunneledPlayback' => 'Getunnelde weergave', 'settings.tunneledPlayback' => 'Getunnelde weergave',
'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.audioPassthroughDescription' => 'Stuur Dolby/DTS-audio zonder hercodering naar je receiver of tv en behoud surroundgeluid. Schakel uit als je geen geluid hebt.',
'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',
@@ -2436,10 +2440,10 @@ 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',
'messages.logsUploadFailed' => 'Uploaden van logs mislukt',
'messages.logId' => 'Log-ID',
_ => null, _ => null,
} ?? switch (path) { } ?? switch (path) {
'messages.logsUploadFailed' => 'Uploaden van logs mislukt',
'messages.logId' => 'Log-ID',
'subtitlingStyling.text' => 'Tekst', 'subtitlingStyling.text' => 'Tekst',
'subtitlingStyling.border' => 'Rand', 'subtitlingStyling.border' => 'Rand',
'subtitlingStyling.background' => 'Achtergrond', 'subtitlingStyling.background' => 'Achtergrond',
@@ -2950,10 +2954,10 @@ extension on TranslationsNl {
'companionRemote.pairing.connectionTimedOut' => 'Verbinding verlopen. Gebruik hetzelfde netwerk op beide apparaten.', 'companionRemote.pairing.connectionTimedOut' => 'Verbinding verlopen. Gebruik hetzelfde netwerk op beide apparaten.',
'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.remote.disconnectConfirm' => 'Wil je de verbinding met de externe sessie verbreken?',
_ => null, _ => null,
} ?? switch (path) { } ?? switch (path) {
'companionRemote.pairing.failedToConnect' => ({required Object error}) => 'Kan niet verbinden: ${error}',
'companionRemote.remote.disconnectConfirm' => 'Wil je de verbinding met de externe sessie verbreken?',
'companionRemote.remote.reconnecting' => 'Opnieuw verbinden...', 'companionRemote.remote.reconnecting' => 'Opnieuw verbinden...',
'companionRemote.remote.attemptOf' => ({required Object current}) => 'Poging ${current} van 5', 'companionRemote.remote.attemptOf' => ({required Object current}) => 'Poging ${current} van 5',
'companionRemote.remote.retryNow' => 'Nu opnieuw proberen', 'companionRemote.remote.retryNow' => 'Nu opnieuw proberen',
+8 -4
View File
@@ -391,6 +391,8 @@ class _TranslationsSettingsPl extends TranslationsSettingsEn {
@override String get displaySwitchDelay => 'Opóźnienie przełączania ekranu'; @override String get displaySwitchDelay => 'Opóźnienie przełączania ekranu';
@override String get tunneledPlayback => 'Tunelowane odtwarzanie'; @override String get tunneledPlayback => 'Tunelowane odtwarzanie';
@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 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 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';
@@ -2178,6 +2180,8 @@ extension on TranslationsPl {
'settings.displaySwitchDelay' => 'Opóźnienie przełączania ekranu', 'settings.displaySwitchDelay' => 'Opóźnienie przełączania ekranu',
'settings.tunneledPlayback' => 'Tunelowane odtwarzanie', 'settings.tunneledPlayback' => 'Tunelowane odtwarzanie',
'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.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.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',
@@ -2436,10 +2440,10 @@ 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',
'messages.logsUploadFailed' => 'Nie udało się przesłać logów',
'messages.logId' => 'ID logu',
_ => null, _ => null,
} ?? switch (path) { } ?? switch (path) {
'messages.logsUploadFailed' => 'Nie udało się przesłać logów',
'messages.logId' => 'ID logu',
'subtitlingStyling.text' => 'Tekst', 'subtitlingStyling.text' => 'Tekst',
'subtitlingStyling.border' => 'Obramowanie', 'subtitlingStyling.border' => 'Obramowanie',
'subtitlingStyling.background' => 'Tło', 'subtitlingStyling.background' => 'Tło',
@@ -2950,10 +2954,10 @@ extension on TranslationsPl {
'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.',
'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.remote.disconnectConfirm' => 'Czy chcesz się rozłączyć od sesji zdalnej?',
_ => null, _ => null,
} ?? switch (path) { } ?? switch (path) {
'companionRemote.pairing.failedToConnect' => ({required Object error}) => 'Nie udało się połączyć: ${error}',
'companionRemote.remote.disconnectConfirm' => 'Czy chcesz się rozłączyć od sesji zdalnej?',
'companionRemote.remote.reconnecting' => 'Ponowne łączenie...', 'companionRemote.remote.reconnecting' => 'Ponowne łączenie...',
'companionRemote.remote.attemptOf' => ({required Object current}) => 'Próba ${current} z 5', 'companionRemote.remote.attemptOf' => ({required Object current}) => 'Próba ${current} z 5',
'companionRemote.remote.retryNow' => 'Ponów teraz', 'companionRemote.remote.retryNow' => 'Ponów teraz',
+8 -4
View File
@@ -391,6 +391,8 @@ class _TranslationsSettingsPt extends TranslationsSettingsEn {
@override String get displaySwitchDelay => 'Atraso na Troca de Tela'; @override String get displaySwitchDelay => 'Atraso na Troca de Tela';
@override String get tunneledPlayback => 'Reprodução Tunelizada'; @override String get tunneledPlayback => 'Reprodução Tunelizada';
@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 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 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';
@@ -2178,6 +2180,8 @@ extension on TranslationsPt {
'settings.displaySwitchDelay' => 'Atraso na Troca de Tela', 'settings.displaySwitchDelay' => 'Atraso na Troca de Tela',
'settings.tunneledPlayback' => 'Reprodução Tunelizada', 'settings.tunneledPlayback' => 'Reprodução Tunelizada',
'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.audioPassthroughDescription' => 'Envie áudio Dolby/DTS para o seu receptor ou TV sem recodificar, preservando o som surround. Desative se não tiver som.',
'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',
@@ -2436,10 +2440,10 @@ 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',
'messages.logsUploadFailed' => 'Falha ao enviar logs',
'messages.logId' => 'ID do Log',
_ => null, _ => null,
} ?? switch (path) { } ?? switch (path) {
'messages.logsUploadFailed' => 'Falha ao enviar logs',
'messages.logId' => 'ID do Log',
'subtitlingStyling.text' => 'Texto', 'subtitlingStyling.text' => 'Texto',
'subtitlingStyling.border' => 'Borda', 'subtitlingStyling.border' => 'Borda',
'subtitlingStyling.background' => 'Fundo', 'subtitlingStyling.background' => 'Fundo',
@@ -2950,10 +2954,10 @@ extension on TranslationsPt {
'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.',
'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.remote.disconnectConfirm' => 'Deseja desconectar da sessão remota?',
_ => null, _ => null,
} ?? switch (path) { } ?? switch (path) {
'companionRemote.pairing.failedToConnect' => ({required Object error}) => 'Falha ao conectar: ${error}',
'companionRemote.remote.disconnectConfirm' => 'Deseja desconectar da sessão remota?',
'companionRemote.remote.reconnecting' => 'Reconectando...', 'companionRemote.remote.reconnecting' => 'Reconectando...',
'companionRemote.remote.attemptOf' => ({required Object current}) => 'Tentativa ${current} de 5', 'companionRemote.remote.attemptOf' => ({required Object current}) => 'Tentativa ${current} de 5',
'companionRemote.remote.retryNow' => 'Tentar Agora', 'companionRemote.remote.retryNow' => 'Tentar Agora',
+8 -4
View File
@@ -391,6 +391,8 @@ class _TranslationsSettingsRu extends TranslationsSettingsEn {
@override String get displaySwitchDelay => 'Задержка переключения дисплея'; @override String get displaySwitchDelay => 'Задержка переключения дисплея';
@override String get tunneledPlayback => 'Туннельное воспроизведение'; @override String get tunneledPlayback => 'Туннельное воспроизведение';
@override String get tunneledPlaybackDescription => 'Использовать видеотуннелирование. Отключите, если HDR показывает черный экран.'; @override String get tunneledPlaybackDescription => 'Использовать видеотуннелирование. Отключите, если HDR показывает черный экран.';
@override String get audioPassthrough => 'Сквозной вывод аудио';
@override String get audioPassthroughDescription => 'Передавать звук Dolby/DTS на ресивер или телевизор без перекодирования, сохраняя объёмный звук. Отключите, если нет звука.';
@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 => 'Авто';
@@ -2178,6 +2180,8 @@ extension on TranslationsRu {
'settings.displaySwitchDelay' => 'Задержка переключения дисплея', 'settings.displaySwitchDelay' => 'Задержка переключения дисплея',
'settings.tunneledPlayback' => 'Туннельное воспроизведение', 'settings.tunneledPlayback' => 'Туннельное воспроизведение',
'settings.tunneledPlaybackDescription' => 'Использовать видеотуннелирование. Отключите, если HDR показывает черный экран.', 'settings.tunneledPlaybackDescription' => 'Использовать видеотуннелирование. Отключите, если HDR показывает черный экран.',
'settings.audioPassthrough' => 'Сквозной вывод аудио',
'settings.audioPassthroughDescription' => 'Передавать звук Dolby/DTS на ресивер или телевизор без перекодирования, сохраняя объёмный звук. Отключите, если нет звука.',
'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' => 'Авто',
@@ -2436,10 +2440,10 @@ extension on TranslationsRu {
'messages.serverLimitTitle' => 'Ошибка воспроизведения', 'messages.serverLimitTitle' => 'Ошибка воспроизведения',
'messages.serverLimitBody' => 'Ошибка сервера (HTTP 500). Лимит пропускной способности/транскодирования, вероятно, отклонил сессию. Попросите владельца изменить настройки.', 'messages.serverLimitBody' => 'Ошибка сервера (HTTP 500). Лимит пропускной способности/транскодирования, вероятно, отклонил сессию. Попросите владельца изменить настройки.',
'messages.logsUploaded' => 'Логи загружены', 'messages.logsUploaded' => 'Логи загружены',
'messages.logsUploadFailed' => 'Не удалось загрузить логи',
'messages.logId' => 'ID лога',
_ => null, _ => null,
} ?? switch (path) { } ?? switch (path) {
'messages.logsUploadFailed' => 'Не удалось загрузить логи',
'messages.logId' => 'ID лога',
'subtitlingStyling.text' => 'Текст', 'subtitlingStyling.text' => 'Текст',
'subtitlingStyling.border' => 'Обводка', 'subtitlingStyling.border' => 'Обводка',
'subtitlingStyling.background' => 'Фон', 'subtitlingStyling.background' => 'Фон',
@@ -2950,10 +2954,10 @@ extension on TranslationsRu {
'companionRemote.pairing.connectionTimedOut' => 'Время подключения истекло. Используйте одну сеть на обоих устройствах.', 'companionRemote.pairing.connectionTimedOut' => 'Время подключения истекло. Используйте одну сеть на обоих устройствах.',
'companionRemote.pairing.sessionNotFound' => 'Устройство не найдено. Убедитесь, что Plezy запущен на хосте.', 'companionRemote.pairing.sessionNotFound' => 'Устройство не найдено. Убедитесь, что Plezy запущен на хосте.',
'companionRemote.pairing.authFailed' => 'Аутентификация не удалась. На обоих устройствах нужен один аккаунт Plex.', 'companionRemote.pairing.authFailed' => 'Аутентификация не удалась. На обоих устройствах нужен один аккаунт Plex.',
'companionRemote.pairing.failedToConnect' => ({required Object error}) => 'Не удалось подключиться: ${error}',
'companionRemote.remote.disconnectConfirm' => 'Отключиться от удалённой сессии?',
_ => null, _ => null,
} ?? switch (path) { } ?? switch (path) {
'companionRemote.pairing.failedToConnect' => ({required Object error}) => 'Не удалось подключиться: ${error}',
'companionRemote.remote.disconnectConfirm' => 'Отключиться от удалённой сессии?',
'companionRemote.remote.reconnecting' => 'Переподключение...', 'companionRemote.remote.reconnecting' => 'Переподключение...',
'companionRemote.remote.attemptOf' => ({required Object current}) => 'Попытка ${current} из 5', 'companionRemote.remote.attemptOf' => ({required Object current}) => 'Попытка ${current} из 5',
'companionRemote.remote.retryNow' => 'Повторить сейчас', 'companionRemote.remote.retryNow' => 'Повторить сейчас',
+8 -4
View File
@@ -391,6 +391,8 @@ class _TranslationsSettingsSv extends TranslationsSettingsEn {
@override String get displaySwitchDelay => 'Fördröjning vid skärmbyte'; @override String get displaySwitchDelay => 'Fördröjning vid skärmbyte';
@override String get tunneledPlayback => 'Tunneluppspelning'; @override String get tunneledPlayback => 'Tunneluppspelning';
@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 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 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';
@@ -2178,6 +2180,8 @@ extension on TranslationsSv {
'settings.displaySwitchDelay' => 'Fördröjning vid skärmbyte', 'settings.displaySwitchDelay' => 'Fördröjning vid skärmbyte',
'settings.tunneledPlayback' => 'Tunneluppspelning', 'settings.tunneledPlayback' => 'Tunneluppspelning',
'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.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.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',
@@ -2436,10 +2440,10 @@ 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',
'messages.logsUploadFailed' => 'Uppladdning av loggar misslyckades',
'messages.logId' => 'Logg-ID',
_ => null, _ => null,
} ?? switch (path) { } ?? switch (path) {
'messages.logsUploadFailed' => 'Uppladdning av loggar misslyckades',
'messages.logId' => 'Logg-ID',
'subtitlingStyling.text' => 'Text', 'subtitlingStyling.text' => 'Text',
'subtitlingStyling.border' => 'Kantlinje', 'subtitlingStyling.border' => 'Kantlinje',
'subtitlingStyling.background' => 'Bakgrund', 'subtitlingStyling.background' => 'Bakgrund',
@@ -2950,10 +2954,10 @@ extension on TranslationsSv {
'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.',
'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.remote.disconnectConfirm' => 'Vill du koppla från fjärrsessionen?',
_ => null, _ => null,
} ?? switch (path) { } ?? switch (path) {
'companionRemote.pairing.failedToConnect' => ({required Object error}) => 'Kunde inte ansluta: ${error}',
'companionRemote.remote.disconnectConfirm' => 'Vill du koppla från fjärrsessionen?',
'companionRemote.remote.reconnecting' => 'Återansluter...', 'companionRemote.remote.reconnecting' => 'Återansluter...',
'companionRemote.remote.attemptOf' => ({required Object current}) => 'Försök ${current} av 5', 'companionRemote.remote.attemptOf' => ({required Object current}) => 'Försök ${current} av 5',
'companionRemote.remote.retryNow' => 'Försök nu', 'companionRemote.remote.retryNow' => 'Försök nu',
+8 -4
View File
@@ -391,6 +391,8 @@ class _TranslationsSettingsZh extends TranslationsSettingsEn {
@override String get displaySwitchDelay => '显示切换延迟'; @override String get displaySwitchDelay => '显示切换延迟';
@override String get tunneledPlayback => '通道化播放'; @override String get tunneledPlayback => '通道化播放';
@override String get tunneledPlaybackDescription => '使用视频隧道。若 HDR 播放出现黑屏,请禁用。'; @override String get tunneledPlaybackDescription => '使用视频隧道。若 HDR 播放出现黑屏,请禁用。';
@override String get audioPassthrough => '音频直通';
@override String get audioPassthroughDescription => '将 Dolby/DTS 音频不经重新编码直接发送到功放或电视,保留环绕声。如果没有声音,请关闭。';
@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 => '自动';
@@ -2178,6 +2180,8 @@ extension on TranslationsZh {
'settings.displaySwitchDelay' => '显示切换延迟', 'settings.displaySwitchDelay' => '显示切换延迟',
'settings.tunneledPlayback' => '通道化播放', 'settings.tunneledPlayback' => '通道化播放',
'settings.tunneledPlaybackDescription' => '使用视频隧道。若 HDR 播放出现黑屏,请禁用。', 'settings.tunneledPlaybackDescription' => '使用视频隧道。若 HDR 播放出现黑屏,请禁用。',
'settings.audioPassthrough' => '音频直通',
'settings.audioPassthroughDescription' => '将 Dolby/DTS 音频不经重新编码直接发送到功放或电视,保留环绕声。如果没有声音,请关闭。',
'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' => '自动',
@@ -2436,10 +2440,10 @@ extension on TranslationsZh {
'messages.serverLimitTitle' => '播放失败', 'messages.serverLimitTitle' => '播放失败',
'messages.serverLimitBody' => '服务器错误 (HTTP 500)。带宽/转码限制可能拒绝了此会话。请让所有者调整。', 'messages.serverLimitBody' => '服务器错误 (HTTP 500)。带宽/转码限制可能拒绝了此会话。请让所有者调整。',
'messages.logsUploaded' => '日志已上传', 'messages.logsUploaded' => '日志已上传',
'messages.logsUploadFailed' => '上传日志失败',
'messages.logId' => '日志 ID',
_ => null, _ => null,
} ?? switch (path) { } ?? switch (path) {
'messages.logsUploadFailed' => '上传日志失败',
'messages.logId' => '日志 ID',
'subtitlingStyling.text' => '文本', 'subtitlingStyling.text' => '文本',
'subtitlingStyling.border' => '边框', 'subtitlingStyling.border' => '边框',
'subtitlingStyling.background' => '背景', 'subtitlingStyling.background' => '背景',
@@ -2950,10 +2954,10 @@ extension on TranslationsZh {
'companionRemote.pairing.connectionTimedOut' => '连接超时。请在两台设备上使用同一网络。', 'companionRemote.pairing.connectionTimedOut' => '连接超时。请在两台设备上使用同一网络。',
'companionRemote.pairing.sessionNotFound' => '未找到设备。请确认 Plezy 正在主机上运行。', 'companionRemote.pairing.sessionNotFound' => '未找到设备。请确认 Plezy 正在主机上运行。',
'companionRemote.pairing.authFailed' => '认证失败。两台设备需要使用同一 Plex 账号。', 'companionRemote.pairing.authFailed' => '认证失败。两台设备需要使用同一 Plex 账号。',
'companionRemote.pairing.failedToConnect' => ({required Object error}) => '连接失败:${error}',
'companionRemote.remote.disconnectConfirm' => '是否要断开远程会话的连接?',
_ => null, _ => null,
} ?? switch (path) { } ?? switch (path) {
'companionRemote.pairing.failedToConnect' => ({required Object error}) => '连接失败:${error}',
'companionRemote.remote.disconnectConfirm' => '是否要断开远程会话的连接?',
'companionRemote.remote.reconnecting' => '重新连接中...', 'companionRemote.remote.reconnecting' => '重新连接中...',
'companionRemote.remote.attemptOf' => ({required Object current}) => '${current} 次尝试,共 5 次', 'companionRemote.remote.attemptOf' => ({required Object current}) => '${current} 次尝试,共 5 次',
'companionRemote.remote.retryNow' => '立即重试', 'companionRemote.remote.retryNow' => '立即重试',
+2
View File
@@ -262,6 +262,8 @@
"displaySwitchDelay": "Fördröjning vid skärmbyte", "displaySwitchDelay": "Fördröjning vid skärmbyte",
"tunneledPlayback": "Tunneluppspelning", "tunneledPlayback": "Tunneluppspelning",
"tunneledPlaybackDescription": "Använd videotunnling. Inaktivera om HDR-uppspelning visar svart video.", "tunneledPlaybackDescription": "Använd videotunnling. Inaktivera om HDR-uppspelning visar svart video.",
"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.",
"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",
+2
View File
@@ -262,6 +262,8 @@
"displaySwitchDelay": "显示切换延迟", "displaySwitchDelay": "显示切换延迟",
"tunneledPlayback": "通道化播放", "tunneledPlayback": "通道化播放",
"tunneledPlaybackDescription": "使用视频隧道。若 HDR 播放出现黑屏,请禁用。", "tunneledPlaybackDescription": "使用视频隧道。若 HDR 播放出现黑屏,请禁用。",
"audioPassthrough": "音频直通",
"audioPassthroughDescription": "将 Dolby/DTS 音频不经重新编码直接发送到功放或电视,保留环绕声。如果没有声音,请关闭。",
"dvConversionMode": "Dolby Vision 转换", "dvConversionMode": "Dolby Vision 转换",
"dvConversionModeDescription": "选择 ExoPlayer 如何处理 Dolby Vision Profile 7 文件。", "dvConversionModeDescription": "选择 ExoPlayer 如何处理 Dolby Vision Profile 7 文件。",
"dvConversionAuto": "自动", "dvConversionAuto": "自动",
@@ -59,6 +59,7 @@ class _PlaybackSettingsScreenState extends State<PlaybackSettingsScreen> {
if (Platform.isWindows) _matchDynamicRangeTile(), if (Platform.isWindows) _matchDynamicRangeTile(),
_displaySwitchDelayTile(), _displaySwitchDelayTile(),
_tunneledPlaybackTile(), _tunneledPlaybackTile(),
if (PlatformDetector.supportsAudioPassthrough()) _audioPassthroughTile(),
_dvConversionModeTile(), _dvConversionModeTile(),
_bufferSizeTile(), _bufferSizeTile(),
_defaultQualityTile(), _defaultQualityTile(),
@@ -275,6 +276,13 @@ class _PlaybackSettingsScreenState extends State<PlaybackSettingsScreen> {
subtitle: t.settings.matchDynamicRangeDescription, subtitle: t.settings.matchDynamicRangeDescription,
); );
Widget _audioPassthroughTile() => SettingSwitchTile(
pref: SettingsService.audioPassthrough,
icon: Symbols.surround_sound_rounded,
title: t.settings.audioPassthrough,
subtitle: t.settings.audioPassthroughDescription,
);
Widget _displaySwitchDelayTile() => SettingsBuilder( Widget _displaySwitchDelayTile() => SettingsBuilder(
prefs: const [ prefs: const [
SettingsService.matchRefreshRate, SettingsService.matchRefreshRate,
+7 -1
View File
@@ -195,8 +195,14 @@ class _AudioPassthroughPref extends Pref<bool> {
@override @override
bool readFrom(BaseSharedPreferencesService svc) { bool readFrom(BaseSharedPreferencesService svc) {
final stored = svc.prefs.getBool(key);
if (stored != null) return stored;
// Android TV on ExoPlayer defaults to bitstreaming AC3/EAC3/DTS to the TV/AVR
// (Media3 picks bitstream vs PCM via AudioCapabilities), preserving surround.
// Scoped to ExoPlayer — the mpv backend force-sets audio-spdif with no decode
// fallback. (#1458)
// TODO: Default Apple TV to on once EAC3 passthrough is hardware-verified. // TODO: Default Apple TV to on once EAC3 passthrough is hardware-verified.
return svc.prefs.getBool(key) ?? false; return Platform.isAndroid && PlatformDetector.isTV() && svc.read(SettingsService.useExoPlayer);
} }
@override @override
+13
View File
@@ -110,6 +110,19 @@ void main() {
expect(PlatformDetector.supportsAudioPassthrough(), isFalse); expect(PlatformDetector.supportsAudioPassthrough(), isFalse);
}); });
test('audio passthrough defaults off on a non-Android-TV host and honors explicit writes', () async {
final settings = await SettingsService.getInstance();
// The Android-TV-on-ExoPlayer default-on branch depends on Platform.isAndroid,
// which is false (and unmockable) on the test host, so the default is off here.
expect(settings.read(SettingsService.audioPassthrough), isFalse);
await settings.write(SettingsService.audioPassthrough, true);
expect(settings.read(SettingsService.audioPassthrough), isTrue);
await settings.write(SettingsService.audioPassthrough, false);
expect(settings.read(SettingsService.audioPassthrough), isFalse);
});
test('forces external player off on Apple TV even when stored enabled', () async { test('forces external player off on Apple TV even when stored enabled', () async {
final settings = await SettingsService.getInstance(); final settings = await SettingsService.getInstance();
await settings.write(SettingsService.useExternalPlayer, true); await settings.write(SettingsService.useExternalPlayer, true);