mirror of
https://github.com/4gray/iptvnator.git
synced 2026-10-14 13:16:16 -08:00
fix(playback): clarify external launch feedback
This commit is contained in:
1 parent
c189acf147
commit
7ed1ccfd8e
50 files changed
+2254
-202
No files matched your search
@@ -3,6 +3,7 @@ import { readFileSync } from 'fs';
|
||||
import { basename, join } from 'path';
|
||||
import type {
|
||||
ExternalPlayerName,
|
||||
ExternalPlayerSession,
|
||||
PlayerContentInfo,
|
||||
} from '@iptvnator/shared/interfaces';
|
||||
import {
|
||||
@@ -189,6 +190,7 @@ type CapturedExternalPlayerLaunch = {
|
||||
};
|
||||
|
||||
type PlaybackRecommendationCaptureSnapshot = {
|
||||
closed: string[];
|
||||
completed: number;
|
||||
launches: CapturedExternalPlayerLaunch[];
|
||||
released: boolean;
|
||||
@@ -197,6 +199,7 @@ type PlaybackRecommendationCaptureSnapshot = {
|
||||
type PlaybackRecommendationCaptureState =
|
||||
PlaybackRecommendationCaptureSnapshot & {
|
||||
releaseFirstResponse: (() => void) | undefined;
|
||||
sessions: Record<string, ExternalPlayerSession>;
|
||||
waitForFirstResponse: Promise<void>;
|
||||
};
|
||||
|
||||
@@ -209,10 +212,12 @@ async function installPlaybackRecommendationLaunchCapture(
|
||||
releaseFirstResponse = resolve;
|
||||
});
|
||||
const state: PlaybackRecommendationCaptureState = {
|
||||
closed: [],
|
||||
completed: 0,
|
||||
launches: [],
|
||||
released: false,
|
||||
releaseFirstResponse,
|
||||
sessions: {},
|
||||
waitForFirstResponse,
|
||||
};
|
||||
const globalRef = globalThis as typeof globalThis & {
|
||||
@@ -223,7 +228,7 @@ async function installPlaybackRecommendationLaunchCapture(
|
||||
const captureLaunch =
|
||||
(player: ExternalPlayerName) =>
|
||||
async (
|
||||
_event: unknown,
|
||||
rawEvent: unknown,
|
||||
url: string,
|
||||
title: string,
|
||||
thumbnail?: string,
|
||||
@@ -248,30 +253,81 @@ async function installPlaybackRecommendationLaunchCapture(
|
||||
],
|
||||
player,
|
||||
});
|
||||
const now = new Date().toISOString();
|
||||
const id = `e2e-recommended-${player}-${invocation}`;
|
||||
const event = rawEvent as {
|
||||
sender: {
|
||||
send: (
|
||||
channel: string,
|
||||
session: ExternalPlayerSession
|
||||
) => void;
|
||||
};
|
||||
};
|
||||
const launching: ExternalPlayerSession = {
|
||||
canClose: true,
|
||||
id,
|
||||
player,
|
||||
startedAt: now,
|
||||
status: 'launching',
|
||||
streamUrl: url,
|
||||
thumbnail: thumbnail ?? null,
|
||||
title,
|
||||
updatedAt: now,
|
||||
};
|
||||
state.sessions[id] = launching;
|
||||
event.sender.send('EXTERNAL_PLAYER_SESSION_UPDATE', launching);
|
||||
|
||||
if (invocation === 1 && !state.released) {
|
||||
await state.waitForFirstResponse;
|
||||
}
|
||||
|
||||
state.completed += 1;
|
||||
const now = new Date().toISOString();
|
||||
return {
|
||||
canClose: false,
|
||||
id: `e2e-recommended-${player}-${invocation}`,
|
||||
const completed: ExternalPlayerSession = {
|
||||
...launching,
|
||||
canClose: player === 'mpv',
|
||||
error:
|
||||
player === 'vlc'
|
||||
? 'E2E player launch failed'
|
||||
: undefined,
|
||||
player,
|
||||
startedAt: now,
|
||||
status: 'opened',
|
||||
streamUrl: url,
|
||||
thumbnail: thumbnail ?? null,
|
||||
title,
|
||||
updatedAt: now,
|
||||
status: player === 'mpv' ? 'opened' : 'error',
|
||||
updatedAt: new Date().toISOString(),
|
||||
};
|
||||
state.sessions[id] = completed;
|
||||
event.sender.send('EXTERNAL_PLAYER_SESSION_UPDATE', completed);
|
||||
return completed;
|
||||
};
|
||||
|
||||
ipcMain.removeHandler('OPEN_MPV_PLAYER');
|
||||
ipcMain.removeHandler('OPEN_VLC_PLAYER');
|
||||
ipcMain.handle('OPEN_MPV_PLAYER', captureLaunch('mpv'));
|
||||
ipcMain.handle('OPEN_VLC_PLAYER', captureLaunch('vlc'));
|
||||
ipcMain.removeHandler('CLOSE_EXTERNAL_PLAYER_SESSION');
|
||||
ipcMain.handle(
|
||||
'CLOSE_EXTERNAL_PLAYER_SESSION',
|
||||
(rawEvent: unknown, sessionId: string) => {
|
||||
const session = state.sessions[sessionId];
|
||||
if (!session) return null;
|
||||
const closed: ExternalPlayerSession = {
|
||||
...session,
|
||||
canClose: false,
|
||||
status: 'closed',
|
||||
updatedAt: new Date().toISOString(),
|
||||
};
|
||||
state.closed.push(sessionId);
|
||||
state.sessions[sessionId] = closed;
|
||||
const event = rawEvent as {
|
||||
sender: {
|
||||
send: (
|
||||
channel: string,
|
||||
update: ExternalPlayerSession
|
||||
) => void;
|
||||
};
|
||||
};
|
||||
event.sender.send('EXTERNAL_PLAYER_SESSION_UPDATE', closed);
|
||||
return closed;
|
||||
}
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
@@ -289,6 +345,7 @@ async function getPlaybackRecommendationCapture(
|
||||
);
|
||||
}
|
||||
return {
|
||||
closed: capture.closed,
|
||||
completed: capture.completed,
|
||||
launches: capture.launches,
|
||||
released: capture.released,
|
||||
@@ -313,7 +370,7 @@ async function releasePlaybackRecommendationCapture(
|
||||
});
|
||||
}
|
||||
|
||||
test('@electron @dash ClearKey DASH filters DRM fallback and eligible MKV opens in MPV', async ({
|
||||
test('@electron @dash ClearKey DASH filters DRM fallback and reports external launch states', async ({
|
||||
dataDir,
|
||||
}) => {
|
||||
const fixtureServer = await startDashFixtureServer();
|
||||
@@ -439,6 +496,7 @@ test('@electron @dash ClearKey DASH filters DRM fallback and eligible MKV opens
|
||||
},
|
||||
] satisfies CapturedExternalPlayerLaunch[];
|
||||
expect(await getPlaybackRecommendationCapture(app)).toEqual({
|
||||
closed: [],
|
||||
completed: 0,
|
||||
launches: [],
|
||||
released: false,
|
||||
@@ -450,18 +508,33 @@ test('@electron @dash ClearKey DASH filters DRM fallback and eligible MKV opens
|
||||
timeout: 10_000,
|
||||
})
|
||||
.toEqual({
|
||||
closed: [],
|
||||
completed: 0,
|
||||
launches: expectedLaunches,
|
||||
released: false,
|
||||
});
|
||||
expect(
|
||||
(await getPlaybackRecommendationCapture(app)).launches.filter(
|
||||
({ player }) => player === 'vlc'
|
||||
)
|
||||
).toHaveLength(0);
|
||||
await expect(mpvFallback).toHaveCount(0);
|
||||
await expect(vlcFallback).toHaveClass(
|
||||
/web-player-diagnostic__player-card--primary/
|
||||
await expect(mpvFallback).toBeVisible();
|
||||
await expect(vlcFallback).toBeVisible();
|
||||
await expect(mpvFallback).toContainText('Opening MPV');
|
||||
await expect(mpvFallback).toContainText('Opening player');
|
||||
await expect(mpvFallback).toHaveAttribute('aria-busy', 'true');
|
||||
await expect(vlcFallback).toHaveAttribute('aria-disabled', 'true');
|
||||
await vlcFallback.evaluate((button: HTMLButtonElement) =>
|
||||
button.click()
|
||||
);
|
||||
await expect
|
||||
.poll(() => getPlaybackRecommendationCapture(app))
|
||||
.toEqual({
|
||||
closed: [],
|
||||
completed: 0,
|
||||
launches: expectedLaunches,
|
||||
released: false,
|
||||
});
|
||||
const dock = app.mainWindow.locator('app-external-playback-dock');
|
||||
await expect(dock).toContainText('Opening player');
|
||||
await expect(dock.locator('.external-playback-dock')).toHaveAttribute(
|
||||
'aria-busy',
|
||||
'true'
|
||||
);
|
||||
|
||||
await releasePlaybackRecommendationCapture(app);
|
||||
@@ -470,6 +543,7 @@ test('@electron @dash ClearKey DASH filters DRM fallback and eligible MKV opens
|
||||
timeout: 10_000,
|
||||
})
|
||||
.toEqual({
|
||||
closed: [],
|
||||
completed: 1,
|
||||
launches: expectedLaunches,
|
||||
released: true,
|
||||
@@ -483,14 +557,47 @@ test('@electron @dash ClearKey DASH filters DRM fallback and eligible MKV opens
|
||||
})
|
||||
);
|
||||
expect(await getPlaybackRecommendationCapture(app)).toEqual({
|
||||
closed: [],
|
||||
completed: 1,
|
||||
launches: expectedLaunches,
|
||||
released: true,
|
||||
});
|
||||
await expect(mpvFallback).toHaveCount(0);
|
||||
await expect(mpvFallback).toBeVisible();
|
||||
await expect(mpvFallback).toContainText('Open MPV again');
|
||||
await expect(mpvFallback).toContainText('Player started');
|
||||
await expect(vlcFallback).toHaveClass(
|
||||
/web-player-diagnostic__player-card--primary/
|
||||
);
|
||||
await expect(dock).toContainText('Player started');
|
||||
|
||||
await vlcFallback.click();
|
||||
const expectedBothLaunches = [
|
||||
...expectedLaunches,
|
||||
{ ...expectedLaunches[0], player: 'vlc' as const },
|
||||
];
|
||||
await expect
|
||||
.poll(() => getPlaybackRecommendationCapture(app), {
|
||||
timeout: 10_000,
|
||||
})
|
||||
.toEqual({
|
||||
closed: ['e2e-recommended-mpv-1'],
|
||||
completed: 2,
|
||||
launches: expectedBothLaunches,
|
||||
released: true,
|
||||
});
|
||||
await expect(mpvFallback).toBeVisible();
|
||||
await expect(vlcFallback).toBeVisible();
|
||||
await expect(vlcFallback).toContainText('Try VLC again');
|
||||
await expect(vlcFallback).toContainText('Player launch failed');
|
||||
await expect(mpvFallback).toHaveClass(
|
||||
/web-player-diagnostic__player-card--primary/
|
||||
);
|
||||
await expect(dock).toContainText('E2E player launch failed');
|
||||
await expect(
|
||||
dock.getByRole('button', { name: 'Dismiss' })
|
||||
).toBeVisible();
|
||||
await dock.getByRole('button', { name: 'Dismiss' }).click();
|
||||
await expect(dock).toBeHidden();
|
||||
} finally {
|
||||
await releasePlaybackRecommendationCapture(app).catch(() => undefined);
|
||||
await closeElectronApp(app);
|
||||
|
||||
@@ -2,9 +2,7 @@ import { ExternalPlayerSession } from '@iptvnator/shared/interfaces';
|
||||
import { ExternalPlaybackService } from './external-playback.service';
|
||||
|
||||
describe('ExternalPlaybackService', () => {
|
||||
let listener:
|
||||
| ((session: ExternalPlayerSession) => void)
|
||||
| undefined;
|
||||
let listener: ((session: ExternalPlayerSession) => void) | undefined;
|
||||
let closeExternalPlayerSession: jest.Mock;
|
||||
let service: ExternalPlaybackService;
|
||||
|
||||
@@ -94,7 +92,9 @@ describe('ExternalPlaybackService', () => {
|
||||
contentType: 'vod',
|
||||
})
|
||||
).toBeNull();
|
||||
expect(service.visibleSession()).toBeNull();
|
||||
expect(service.visibleSession()).toEqual(
|
||||
expect.objectContaining({ status: 'error' })
|
||||
);
|
||||
});
|
||||
|
||||
it('delegates close requests for closable sessions', async () => {
|
||||
@@ -133,18 +133,22 @@ describe('ExternalPlaybackService', () => {
|
||||
expect(closeExternalPlayerSession).toHaveBeenCalledWith('session-2');
|
||||
});
|
||||
|
||||
it('hides terminal sessions from the dock', () => {
|
||||
it('hides closed sessions but keeps errors visible until dismissed', () => {
|
||||
listener?.(createSession({ status: 'closed', canClose: false }));
|
||||
expect(service.visibleSession()).toBeNull();
|
||||
|
||||
listener?.(
|
||||
createSession({
|
||||
id: 'session-3',
|
||||
status: 'error',
|
||||
error: 'Launch failed',
|
||||
canClose: false,
|
||||
})
|
||||
);
|
||||
const failed = createSession({
|
||||
id: 'session-3',
|
||||
status: 'error',
|
||||
error: 'Launch failed',
|
||||
canClose: false,
|
||||
});
|
||||
listener?.(createSession({ id: failed.id }));
|
||||
listener?.(failed);
|
||||
|
||||
expect(service.visibleSession()).toEqual(failed);
|
||||
|
||||
service.dismissActiveSession();
|
||||
expect(service.visibleSession()).toBeNull();
|
||||
});
|
||||
});
|
||||
@@ -1,5 +1,8 @@
|
||||
import { computed, Injectable, signal } from '@angular/core';
|
||||
import { ExternalPlayerSession, PlayerContentInfo } from '@iptvnator/shared/interfaces';
|
||||
import {
|
||||
ExternalPlayerSession,
|
||||
PlayerContentInfo,
|
||||
} from '@iptvnator/shared/interfaces';
|
||||
|
||||
@Injectable({
|
||||
providedIn: 'root',
|
||||
@@ -10,11 +13,7 @@ export class ExternalPlaybackService {
|
||||
|
||||
readonly visibleSession = computed(() => {
|
||||
const session = this.activeSession();
|
||||
if (
|
||||
!session ||
|
||||
session.status === 'closed' ||
|
||||
session.status === 'error'
|
||||
) {
|
||||
if (!session || session.status === 'closed') {
|
||||
return null;
|
||||
}
|
||||
|
||||
@@ -60,9 +59,8 @@ export class ExternalPlaybackService {
|
||||
this.dismissedSessionId.set(session.id);
|
||||
|
||||
try {
|
||||
const updatedSession = await window.electron.closeExternalPlayerSession(
|
||||
session.id
|
||||
);
|
||||
const updatedSession =
|
||||
await window.electron.closeExternalPlayerSession(session.id);
|
||||
if (updatedSession) {
|
||||
this.handleSessionUpdate(updatedSession);
|
||||
return;
|
||||
@@ -106,7 +104,11 @@ export class ExternalPlaybackService {
|
||||
private handleSessionUpdate(session: ExternalPlayerSession): void {
|
||||
const current = this.activeSession();
|
||||
|
||||
if (!current || current.id === session.id || session.status === 'launching') {
|
||||
if (
|
||||
!current ||
|
||||
current.id === session.id ||
|
||||
session.status === 'launching'
|
||||
) {
|
||||
this.activeSession.set(session);
|
||||
}
|
||||
|
||||
|
||||
@@ -583,6 +583,16 @@
|
||||
"REASON_COMPATIBLE_DRM_PATH": "هذا الهدف متوافق مع بيانات التشفير المتاحة",
|
||||
"ACTION_OPEN_MPV": "Open in MPV",
|
||||
"ACTION_OPEN_VLC": "Open in VLC",
|
||||
"ACTION_OPENING_MPV": "Opening MPV…",
|
||||
"ACTION_OPENING_VLC": "Opening VLC…",
|
||||
"ACTION_REOPEN_MPV": "Open MPV again",
|
||||
"ACTION_REOPEN_VLC": "Open VLC again",
|
||||
"ACTION_RETRY_MPV": "Try MPV again",
|
||||
"ACTION_RETRY_VLC": "Try VLC again",
|
||||
"EXTERNAL_OPENING": "Opening player…",
|
||||
"EXTERNAL_STARTED": "Player started",
|
||||
"EXTERNAL_PLAYING": "Playing",
|
||||
"EXTERNAL_FAILED": "Player launch failed",
|
||||
"ACTION_OPEN_MPV_HINT": "configured player",
|
||||
"ACTION_OPEN_VLC_HINT": "configured player",
|
||||
"ACTION_COPY_URL": "Copy URL",
|
||||
@@ -1298,6 +1308,12 @@
|
||||
"RAIL_FAVORITES": "المفضلة",
|
||||
"RAIL_DOWNLOADS": "التنزيلات",
|
||||
"EXTERNAL_PLAYBACK_CLOSE": "Close player",
|
||||
"EXTERNAL_PLAYBACK_DISMISS": "Dismiss",
|
||||
"EXTERNAL_PLAYBACK_OPENING": "Opening player…",
|
||||
"EXTERNAL_PLAYBACK_STARTED": "Player started",
|
||||
"EXTERNAL_PLAYBACK_PLAYING": "Playing",
|
||||
"EXTERNAL_PLAYBACK_FAILED": "Playback failed",
|
||||
"EXTERNAL_PLAYBACK_CLOSED": "Closed",
|
||||
"RAIL_ALL_CHANNELS": "جميع القنوات",
|
||||
"RAIL_GROUPS": "المجموعات",
|
||||
"RAIL_CONTEXT_ACTIONS": "إجراءات القسم",
|
||||
|
||||
@@ -583,6 +583,16 @@
|
||||
"REASON_COMPATIBLE_DRM_PATH": "هاد الهدف متوافق مع بيانات التشفير المتوفرة",
|
||||
"ACTION_OPEN_MPV": "Open in MPV",
|
||||
"ACTION_OPEN_VLC": "Open in VLC",
|
||||
"ACTION_OPENING_MPV": "Opening MPV…",
|
||||
"ACTION_OPENING_VLC": "Opening VLC…",
|
||||
"ACTION_REOPEN_MPV": "Open MPV again",
|
||||
"ACTION_REOPEN_VLC": "Open VLC again",
|
||||
"ACTION_RETRY_MPV": "Try MPV again",
|
||||
"ACTION_RETRY_VLC": "Try VLC again",
|
||||
"EXTERNAL_OPENING": "Opening player…",
|
||||
"EXTERNAL_STARTED": "Player started",
|
||||
"EXTERNAL_PLAYING": "Playing",
|
||||
"EXTERNAL_FAILED": "Player launch failed",
|
||||
"ACTION_OPEN_MPV_HINT": "configured player",
|
||||
"ACTION_OPEN_VLC_HINT": "configured player",
|
||||
"ACTION_COPY_URL": "Copy URL",
|
||||
@@ -1298,6 +1308,12 @@
|
||||
"RAIL_FAVORITES": "المفضلة",
|
||||
"RAIL_DOWNLOADS": "التحميلات",
|
||||
"EXTERNAL_PLAYBACK_CLOSE": "Close player",
|
||||
"EXTERNAL_PLAYBACK_DISMISS": "Dismiss",
|
||||
"EXTERNAL_PLAYBACK_OPENING": "Opening player…",
|
||||
"EXTERNAL_PLAYBACK_STARTED": "Player started",
|
||||
"EXTERNAL_PLAYBACK_PLAYING": "Playing",
|
||||
"EXTERNAL_PLAYBACK_FAILED": "Playback failed",
|
||||
"EXTERNAL_PLAYBACK_CLOSED": "Closed",
|
||||
"RAIL_ALL_CHANNELS": "جميع القنوات",
|
||||
"RAIL_GROUPS": "المجموعات",
|
||||
"RAIL_CONTEXT_ACTIONS": "إجراءات القسم",
|
||||
|
||||
@@ -583,6 +583,16 @@
|
||||
"REASON_COMPATIBLE_DRM_PATH": "Гэтая мэта сумяшчальная з даступнымі данымі шыфравання",
|
||||
"ACTION_OPEN_MPV": "Open in MPV",
|
||||
"ACTION_OPEN_VLC": "Open in VLC",
|
||||
"ACTION_OPENING_MPV": "Opening MPV…",
|
||||
"ACTION_OPENING_VLC": "Opening VLC…",
|
||||
"ACTION_REOPEN_MPV": "Open MPV again",
|
||||
"ACTION_REOPEN_VLC": "Open VLC again",
|
||||
"ACTION_RETRY_MPV": "Try MPV again",
|
||||
"ACTION_RETRY_VLC": "Try VLC again",
|
||||
"EXTERNAL_OPENING": "Opening player…",
|
||||
"EXTERNAL_STARTED": "Player started",
|
||||
"EXTERNAL_PLAYING": "Playing",
|
||||
"EXTERNAL_FAILED": "Player launch failed",
|
||||
"ACTION_OPEN_MPV_HINT": "configured player",
|
||||
"ACTION_OPEN_VLC_HINT": "configured player",
|
||||
"ACTION_COPY_URL": "Copy URL",
|
||||
@@ -1298,6 +1308,12 @@
|
||||
"RAIL_FAVORITES": "Выбранае",
|
||||
"RAIL_DOWNLOADS": "Спампаванні",
|
||||
"EXTERNAL_PLAYBACK_CLOSE": "Close player",
|
||||
"EXTERNAL_PLAYBACK_DISMISS": "Dismiss",
|
||||
"EXTERNAL_PLAYBACK_OPENING": "Opening player…",
|
||||
"EXTERNAL_PLAYBACK_STARTED": "Player started",
|
||||
"EXTERNAL_PLAYBACK_PLAYING": "Playing",
|
||||
"EXTERNAL_PLAYBACK_FAILED": "Playback failed",
|
||||
"EXTERNAL_PLAYBACK_CLOSED": "Closed",
|
||||
"RAIL_ALL_CHANNELS": "Усе каналы",
|
||||
"RAIL_GROUPS": "Групы",
|
||||
"RAIL_CONTEXT_ACTIONS": "Дзеянні раздзела",
|
||||
|
||||
@@ -583,6 +583,16 @@
|
||||
"REASON_COMPATIBLE_DRM_PATH": "Dieses Ziel ist mit den verfügbaren Verschlüsselungsdaten kompatibel",
|
||||
"ACTION_OPEN_MPV": "Open in MPV",
|
||||
"ACTION_OPEN_VLC": "Open in VLC",
|
||||
"ACTION_OPENING_MPV": "MPV wird geöffnet…",
|
||||
"ACTION_OPENING_VLC": "VLC wird geöffnet…",
|
||||
"ACTION_REOPEN_MPV": "MPV erneut öffnen",
|
||||
"ACTION_REOPEN_VLC": "VLC erneut öffnen",
|
||||
"ACTION_RETRY_MPV": "MPV erneut versuchen",
|
||||
"ACTION_RETRY_VLC": "VLC erneut versuchen",
|
||||
"EXTERNAL_OPENING": "Player wird geöffnet…",
|
||||
"EXTERNAL_STARTED": "Player gestartet",
|
||||
"EXTERNAL_PLAYING": "Wiedergabe läuft",
|
||||
"EXTERNAL_FAILED": "Player konnte nicht gestartet werden",
|
||||
"ACTION_OPEN_MPV_HINT": "configured player",
|
||||
"ACTION_OPEN_VLC_HINT": "configured player",
|
||||
"ACTION_COPY_URL": "Copy URL",
|
||||
@@ -1298,6 +1308,12 @@
|
||||
"RAIL_FAVORITES": "Favoriten",
|
||||
"RAIL_DOWNLOADS": "Downloads",
|
||||
"EXTERNAL_PLAYBACK_CLOSE": "Close player",
|
||||
"EXTERNAL_PLAYBACK_DISMISS": "Ausblenden",
|
||||
"EXTERNAL_PLAYBACK_OPENING": "Player wird geöffnet…",
|
||||
"EXTERNAL_PLAYBACK_STARTED": "Player gestartet",
|
||||
"EXTERNAL_PLAYBACK_PLAYING": "Wiedergabe läuft",
|
||||
"EXTERNAL_PLAYBACK_FAILED": "Wiedergabe fehlgeschlagen",
|
||||
"EXTERNAL_PLAYBACK_CLOSED": "Geschlossen",
|
||||
"RAIL_ALL_CHANNELS": "Alle Sender",
|
||||
"RAIL_GROUPS": "Gruppen",
|
||||
"RAIL_CONTEXT_ACTIONS": "Bereichsaktionen",
|
||||
|
||||
@@ -583,6 +583,16 @@
|
||||
"REASON_COMPATIBLE_DRM_PATH": "Αυτός ο στόχος είναι συμβατός με τα διαθέσιμα δεδομένα κρυπτογράφησης",
|
||||
"ACTION_OPEN_MPV": "Open in MPV",
|
||||
"ACTION_OPEN_VLC": "Open in VLC",
|
||||
"ACTION_OPENING_MPV": "Opening MPV…",
|
||||
"ACTION_OPENING_VLC": "Opening VLC…",
|
||||
"ACTION_REOPEN_MPV": "Open MPV again",
|
||||
"ACTION_REOPEN_VLC": "Open VLC again",
|
||||
"ACTION_RETRY_MPV": "Try MPV again",
|
||||
"ACTION_RETRY_VLC": "Try VLC again",
|
||||
"EXTERNAL_OPENING": "Opening player…",
|
||||
"EXTERNAL_STARTED": "Player started",
|
||||
"EXTERNAL_PLAYING": "Playing",
|
||||
"EXTERNAL_FAILED": "Player launch failed",
|
||||
"ACTION_OPEN_MPV_HINT": "configured player",
|
||||
"ACTION_OPEN_VLC_HINT": "configured player",
|
||||
"ACTION_COPY_URL": "Copy URL",
|
||||
@@ -1298,6 +1308,12 @@
|
||||
"RAIL_FAVORITES": "Αγαπημένα",
|
||||
"RAIL_DOWNLOADS": "Λήψεις",
|
||||
"EXTERNAL_PLAYBACK_CLOSE": "Close player",
|
||||
"EXTERNAL_PLAYBACK_DISMISS": "Dismiss",
|
||||
"EXTERNAL_PLAYBACK_OPENING": "Opening player…",
|
||||
"EXTERNAL_PLAYBACK_STARTED": "Player started",
|
||||
"EXTERNAL_PLAYBACK_PLAYING": "Playing",
|
||||
"EXTERNAL_PLAYBACK_FAILED": "Playback failed",
|
||||
"EXTERNAL_PLAYBACK_CLOSED": "Closed",
|
||||
"RAIL_ALL_CHANNELS": "Όλα τα κανάλια",
|
||||
"RAIL_GROUPS": "Ομάδες",
|
||||
"RAIL_CONTEXT_ACTIONS": "Ενέργειες ενότητας",
|
||||
|
||||
@@ -583,6 +583,16 @@
|
||||
"REASON_COMPATIBLE_DRM_PATH": "This target is compatible with the available encryption data",
|
||||
"ACTION_OPEN_MPV": "Open in MPV",
|
||||
"ACTION_OPEN_VLC": "Open in VLC",
|
||||
"ACTION_OPENING_MPV": "Opening MPV…",
|
||||
"ACTION_OPENING_VLC": "Opening VLC…",
|
||||
"ACTION_REOPEN_MPV": "Open MPV again",
|
||||
"ACTION_REOPEN_VLC": "Open VLC again",
|
||||
"ACTION_RETRY_MPV": "Try MPV again",
|
||||
"ACTION_RETRY_VLC": "Try VLC again",
|
||||
"EXTERNAL_OPENING": "Opening player…",
|
||||
"EXTERNAL_STARTED": "Player started",
|
||||
"EXTERNAL_PLAYING": "Playing",
|
||||
"EXTERNAL_FAILED": "Player launch failed",
|
||||
"ACTION_OPEN_MPV_HINT": "configured player",
|
||||
"ACTION_OPEN_VLC_HINT": "configured player",
|
||||
"ACTION_COPY_URL": "Copy stream URL",
|
||||
@@ -1298,6 +1308,12 @@
|
||||
"RAIL_FAVORITES": "Favorites",
|
||||
"RAIL_DOWNLOADS": "Downloads",
|
||||
"EXTERNAL_PLAYBACK_CLOSE": "Close player",
|
||||
"EXTERNAL_PLAYBACK_DISMISS": "Dismiss",
|
||||
"EXTERNAL_PLAYBACK_OPENING": "Opening player…",
|
||||
"EXTERNAL_PLAYBACK_STARTED": "Player started",
|
||||
"EXTERNAL_PLAYBACK_PLAYING": "Playing",
|
||||
"EXTERNAL_PLAYBACK_FAILED": "Playback failed",
|
||||
"EXTERNAL_PLAYBACK_CLOSED": "Closed",
|
||||
"RAIL_ALL_CHANNELS": "All channels",
|
||||
"RAIL_GROUPS": "Groups",
|
||||
"RAIL_CONTEXT_ACTIONS": "Section actions",
|
||||
|
||||
@@ -583,6 +583,16 @@
|
||||
"REASON_COMPATIBLE_DRM_PATH": "Este destino es compatible con los datos de cifrado disponibles",
|
||||
"ACTION_OPEN_MPV": "Open in MPV",
|
||||
"ACTION_OPEN_VLC": "Open in VLC",
|
||||
"ACTION_OPENING_MPV": "Opening MPV…",
|
||||
"ACTION_OPENING_VLC": "Opening VLC…",
|
||||
"ACTION_REOPEN_MPV": "Open MPV again",
|
||||
"ACTION_REOPEN_VLC": "Open VLC again",
|
||||
"ACTION_RETRY_MPV": "Try MPV again",
|
||||
"ACTION_RETRY_VLC": "Try VLC again",
|
||||
"EXTERNAL_OPENING": "Opening player…",
|
||||
"EXTERNAL_STARTED": "Player started",
|
||||
"EXTERNAL_PLAYING": "Playing",
|
||||
"EXTERNAL_FAILED": "Player launch failed",
|
||||
"ACTION_OPEN_MPV_HINT": "configured player",
|
||||
"ACTION_OPEN_VLC_HINT": "configured player",
|
||||
"ACTION_COPY_URL": "Copy URL",
|
||||
@@ -1298,6 +1308,12 @@
|
||||
"RAIL_FAVORITES": "Favoritos",
|
||||
"RAIL_DOWNLOADS": "Descargas",
|
||||
"EXTERNAL_PLAYBACK_CLOSE": "Close player",
|
||||
"EXTERNAL_PLAYBACK_DISMISS": "Dismiss",
|
||||
"EXTERNAL_PLAYBACK_OPENING": "Opening player…",
|
||||
"EXTERNAL_PLAYBACK_STARTED": "Player started",
|
||||
"EXTERNAL_PLAYBACK_PLAYING": "Playing",
|
||||
"EXTERNAL_PLAYBACK_FAILED": "Playback failed",
|
||||
"EXTERNAL_PLAYBACK_CLOSED": "Closed",
|
||||
"RAIL_ALL_CHANNELS": "Todos los canales",
|
||||
"RAIL_GROUPS": "Grupos",
|
||||
"RAIL_CONTEXT_ACTIONS": "Acciones de la sección",
|
||||
|
||||
@@ -583,6 +583,16 @@
|
||||
"REASON_COMPATIBLE_DRM_PATH": "Cette cible est compatible avec les données de chiffrement disponibles",
|
||||
"ACTION_OPEN_MPV": "Open in MPV",
|
||||
"ACTION_OPEN_VLC": "Open in VLC",
|
||||
"ACTION_OPENING_MPV": "Opening MPV…",
|
||||
"ACTION_OPENING_VLC": "Opening VLC…",
|
||||
"ACTION_REOPEN_MPV": "Open MPV again",
|
||||
"ACTION_REOPEN_VLC": "Open VLC again",
|
||||
"ACTION_RETRY_MPV": "Try MPV again",
|
||||
"ACTION_RETRY_VLC": "Try VLC again",
|
||||
"EXTERNAL_OPENING": "Opening player…",
|
||||
"EXTERNAL_STARTED": "Player started",
|
||||
"EXTERNAL_PLAYING": "Playing",
|
||||
"EXTERNAL_FAILED": "Player launch failed",
|
||||
"ACTION_OPEN_MPV_HINT": "configured player",
|
||||
"ACTION_OPEN_VLC_HINT": "configured player",
|
||||
"ACTION_COPY_URL": "Copy URL",
|
||||
@@ -1298,6 +1308,12 @@
|
||||
"RAIL_FAVORITES": "Favoris",
|
||||
"RAIL_DOWNLOADS": "Téléchargements",
|
||||
"EXTERNAL_PLAYBACK_CLOSE": "Close player",
|
||||
"EXTERNAL_PLAYBACK_DISMISS": "Dismiss",
|
||||
"EXTERNAL_PLAYBACK_OPENING": "Opening player…",
|
||||
"EXTERNAL_PLAYBACK_STARTED": "Player started",
|
||||
"EXTERNAL_PLAYBACK_PLAYING": "Playing",
|
||||
"EXTERNAL_PLAYBACK_FAILED": "Playback failed",
|
||||
"EXTERNAL_PLAYBACK_CLOSED": "Closed",
|
||||
"RAIL_ALL_CHANNELS": "Toutes les chaînes",
|
||||
"RAIL_GROUPS": "Groupes",
|
||||
"RAIL_CONTEXT_ACTIONS": "Actions de section",
|
||||
|
||||
@@ -583,6 +583,16 @@
|
||||
"REASON_COMPATIBLE_DRM_PATH": "Ez a cél kompatibilis az elérhető titkosítási adatokkal",
|
||||
"ACTION_OPEN_MPV": "Megnyitás MPV-ben",
|
||||
"ACTION_OPEN_VLC": "Megnyitás VLC-ben",
|
||||
"ACTION_OPENING_MPV": "Opening MPV…",
|
||||
"ACTION_OPENING_VLC": "Opening VLC…",
|
||||
"ACTION_REOPEN_MPV": "Open MPV again",
|
||||
"ACTION_REOPEN_VLC": "Open VLC again",
|
||||
"ACTION_RETRY_MPV": "Try MPV again",
|
||||
"ACTION_RETRY_VLC": "Try VLC again",
|
||||
"EXTERNAL_OPENING": "Opening player…",
|
||||
"EXTERNAL_STARTED": "Player started",
|
||||
"EXTERNAL_PLAYING": "Playing",
|
||||
"EXTERNAL_FAILED": "Player launch failed",
|
||||
"ACTION_OPEN_MPV_HINT": "beállított lejátszó",
|
||||
"ACTION_OPEN_VLC_HINT": "beállított lejátszó",
|
||||
"ACTION_COPY_URL": "Adatfolyam URL-címének másolása",
|
||||
@@ -1298,6 +1308,12 @@
|
||||
"RAIL_FAVORITES": "Kedvencek",
|
||||
"RAIL_DOWNLOADS": "Letöltések",
|
||||
"EXTERNAL_PLAYBACK_CLOSE": "Lejátszó bezárása",
|
||||
"EXTERNAL_PLAYBACK_DISMISS": "Dismiss",
|
||||
"EXTERNAL_PLAYBACK_OPENING": "Opening player…",
|
||||
"EXTERNAL_PLAYBACK_STARTED": "Player started",
|
||||
"EXTERNAL_PLAYBACK_PLAYING": "Playing",
|
||||
"EXTERNAL_PLAYBACK_FAILED": "Playback failed",
|
||||
"EXTERNAL_PLAYBACK_CLOSED": "Closed",
|
||||
"RAIL_ALL_CHANNELS": "Összes csatorna",
|
||||
"RAIL_GROUPS": "Csoportok",
|
||||
"RAIL_CONTEXT_ACTIONS": "A szakasz műveletei",
|
||||
|
||||
@@ -583,6 +583,16 @@
|
||||
"REASON_COMPATIBLE_DRM_PATH": "Questa destinazione è compatibile con i dati di crittografia disponibili",
|
||||
"ACTION_OPEN_MPV": "Open in MPV",
|
||||
"ACTION_OPEN_VLC": "Open in VLC",
|
||||
"ACTION_OPENING_MPV": "Opening MPV…",
|
||||
"ACTION_OPENING_VLC": "Opening VLC…",
|
||||
"ACTION_REOPEN_MPV": "Open MPV again",
|
||||
"ACTION_REOPEN_VLC": "Open VLC again",
|
||||
"ACTION_RETRY_MPV": "Try MPV again",
|
||||
"ACTION_RETRY_VLC": "Try VLC again",
|
||||
"EXTERNAL_OPENING": "Opening player…",
|
||||
"EXTERNAL_STARTED": "Player started",
|
||||
"EXTERNAL_PLAYING": "Playing",
|
||||
"EXTERNAL_FAILED": "Player launch failed",
|
||||
"ACTION_OPEN_MPV_HINT": "configured player",
|
||||
"ACTION_OPEN_VLC_HINT": "configured player",
|
||||
"ACTION_COPY_URL": "Copy URL",
|
||||
@@ -1298,6 +1308,12 @@
|
||||
"RAIL_FAVORITES": "Preferiti",
|
||||
"RAIL_DOWNLOADS": "Download",
|
||||
"EXTERNAL_PLAYBACK_CLOSE": "Close player",
|
||||
"EXTERNAL_PLAYBACK_DISMISS": "Dismiss",
|
||||
"EXTERNAL_PLAYBACK_OPENING": "Opening player…",
|
||||
"EXTERNAL_PLAYBACK_STARTED": "Player started",
|
||||
"EXTERNAL_PLAYBACK_PLAYING": "Playing",
|
||||
"EXTERNAL_PLAYBACK_FAILED": "Playback failed",
|
||||
"EXTERNAL_PLAYBACK_CLOSED": "Closed",
|
||||
"RAIL_ALL_CHANNELS": "Tutti i canali",
|
||||
"RAIL_GROUPS": "Gruppi",
|
||||
"RAIL_CONTEXT_ACTIONS": "Azioni di sezione",
|
||||
|
||||
@@ -583,6 +583,16 @@
|
||||
"REASON_COMPATIBLE_DRM_PATH": "この対象は利用可能な暗号化データに対応しています",
|
||||
"ACTION_OPEN_MPV": "Open in MPV",
|
||||
"ACTION_OPEN_VLC": "Open in VLC",
|
||||
"ACTION_OPENING_MPV": "Opening MPV…",
|
||||
"ACTION_OPENING_VLC": "Opening VLC…",
|
||||
"ACTION_REOPEN_MPV": "Open MPV again",
|
||||
"ACTION_REOPEN_VLC": "Open VLC again",
|
||||
"ACTION_RETRY_MPV": "Try MPV again",
|
||||
"ACTION_RETRY_VLC": "Try VLC again",
|
||||
"EXTERNAL_OPENING": "Opening player…",
|
||||
"EXTERNAL_STARTED": "Player started",
|
||||
"EXTERNAL_PLAYING": "Playing",
|
||||
"EXTERNAL_FAILED": "Player launch failed",
|
||||
"ACTION_OPEN_MPV_HINT": "configured player",
|
||||
"ACTION_OPEN_VLC_HINT": "configured player",
|
||||
"ACTION_COPY_URL": "Copy URL",
|
||||
@@ -1298,6 +1308,12 @@
|
||||
"RAIL_FAVORITES": "お気に入り",
|
||||
"RAIL_DOWNLOADS": "ダウンロード",
|
||||
"EXTERNAL_PLAYBACK_CLOSE": "Close player",
|
||||
"EXTERNAL_PLAYBACK_DISMISS": "Dismiss",
|
||||
"EXTERNAL_PLAYBACK_OPENING": "Opening player…",
|
||||
"EXTERNAL_PLAYBACK_STARTED": "Player started",
|
||||
"EXTERNAL_PLAYBACK_PLAYING": "Playing",
|
||||
"EXTERNAL_PLAYBACK_FAILED": "Playback failed",
|
||||
"EXTERNAL_PLAYBACK_CLOSED": "Closed",
|
||||
"RAIL_ALL_CHANNELS": "すべてのチャンネル",
|
||||
"RAIL_GROUPS": "グループ",
|
||||
"RAIL_CONTEXT_ACTIONS": "セクションのアクション",
|
||||
|
||||
@@ -583,6 +583,16 @@
|
||||
"REASON_COMPATIBLE_DRM_PATH": "이 대상은 사용 가능한 암호화 데이터와 호환됩니다",
|
||||
"ACTION_OPEN_MPV": "Open in MPV",
|
||||
"ACTION_OPEN_VLC": "Open in VLC",
|
||||
"ACTION_OPENING_MPV": "Opening MPV…",
|
||||
"ACTION_OPENING_VLC": "Opening VLC…",
|
||||
"ACTION_REOPEN_MPV": "Open MPV again",
|
||||
"ACTION_REOPEN_VLC": "Open VLC again",
|
||||
"ACTION_RETRY_MPV": "Try MPV again",
|
||||
"ACTION_RETRY_VLC": "Try VLC again",
|
||||
"EXTERNAL_OPENING": "Opening player…",
|
||||
"EXTERNAL_STARTED": "Player started",
|
||||
"EXTERNAL_PLAYING": "Playing",
|
||||
"EXTERNAL_FAILED": "Player launch failed",
|
||||
"ACTION_OPEN_MPV_HINT": "configured player",
|
||||
"ACTION_OPEN_VLC_HINT": "configured player",
|
||||
"ACTION_COPY_URL": "Copy URL",
|
||||
@@ -1298,6 +1308,12 @@
|
||||
"RAIL_FAVORITES": "즐겨찾기",
|
||||
"RAIL_DOWNLOADS": "다운로드",
|
||||
"EXTERNAL_PLAYBACK_CLOSE": "Close player",
|
||||
"EXTERNAL_PLAYBACK_DISMISS": "Dismiss",
|
||||
"EXTERNAL_PLAYBACK_OPENING": "Opening player…",
|
||||
"EXTERNAL_PLAYBACK_STARTED": "Player started",
|
||||
"EXTERNAL_PLAYBACK_PLAYING": "Playing",
|
||||
"EXTERNAL_PLAYBACK_FAILED": "Playback failed",
|
||||
"EXTERNAL_PLAYBACK_CLOSED": "Closed",
|
||||
"RAIL_ALL_CHANNELS": "모든 채널",
|
||||
"RAIL_GROUPS": "그룹",
|
||||
"RAIL_CONTEXT_ACTIONS": "섹션 작업",
|
||||
|
||||
@@ -583,6 +583,16 @@
|
||||
"REASON_COMPATIBLE_DRM_PATH": "Dit doel is compatibel met de beschikbare versleutelingsgegevens",
|
||||
"ACTION_OPEN_MPV": "Open in MPV",
|
||||
"ACTION_OPEN_VLC": "Open in VLC",
|
||||
"ACTION_OPENING_MPV": "Opening MPV…",
|
||||
"ACTION_OPENING_VLC": "Opening VLC…",
|
||||
"ACTION_REOPEN_MPV": "Open MPV again",
|
||||
"ACTION_REOPEN_VLC": "Open VLC again",
|
||||
"ACTION_RETRY_MPV": "Try MPV again",
|
||||
"ACTION_RETRY_VLC": "Try VLC again",
|
||||
"EXTERNAL_OPENING": "Opening player…",
|
||||
"EXTERNAL_STARTED": "Player started",
|
||||
"EXTERNAL_PLAYING": "Playing",
|
||||
"EXTERNAL_FAILED": "Player launch failed",
|
||||
"ACTION_OPEN_MPV_HINT": "configured player",
|
||||
"ACTION_OPEN_VLC_HINT": "configured player",
|
||||
"ACTION_COPY_URL": "Copy URL",
|
||||
@@ -1298,6 +1308,12 @@
|
||||
"RAIL_FAVORITES": "Favorieten",
|
||||
"RAIL_DOWNLOADS": "Downloads",
|
||||
"EXTERNAL_PLAYBACK_CLOSE": "Close player",
|
||||
"EXTERNAL_PLAYBACK_DISMISS": "Dismiss",
|
||||
"EXTERNAL_PLAYBACK_OPENING": "Opening player…",
|
||||
"EXTERNAL_PLAYBACK_STARTED": "Player started",
|
||||
"EXTERNAL_PLAYBACK_PLAYING": "Playing",
|
||||
"EXTERNAL_PLAYBACK_FAILED": "Playback failed",
|
||||
"EXTERNAL_PLAYBACK_CLOSED": "Closed",
|
||||
"RAIL_ALL_CHANNELS": "Alle kanalen",
|
||||
"RAIL_GROUPS": "Groepen",
|
||||
"RAIL_CONTEXT_ACTIONS": "Sectieacties",
|
||||
|
||||
@@ -583,6 +583,16 @@
|
||||
"REASON_COMPATIBLE_DRM_PATH": "Ten cel jest zgodny z dostępnymi danymi szyfrowania",
|
||||
"ACTION_OPEN_MPV": "Open in MPV",
|
||||
"ACTION_OPEN_VLC": "Open in VLC",
|
||||
"ACTION_OPENING_MPV": "Opening MPV…",
|
||||
"ACTION_OPENING_VLC": "Opening VLC…",
|
||||
"ACTION_REOPEN_MPV": "Open MPV again",
|
||||
"ACTION_REOPEN_VLC": "Open VLC again",
|
||||
"ACTION_RETRY_MPV": "Try MPV again",
|
||||
"ACTION_RETRY_VLC": "Try VLC again",
|
||||
"EXTERNAL_OPENING": "Opening player…",
|
||||
"EXTERNAL_STARTED": "Player started",
|
||||
"EXTERNAL_PLAYING": "Playing",
|
||||
"EXTERNAL_FAILED": "Player launch failed",
|
||||
"ACTION_OPEN_MPV_HINT": "configured player",
|
||||
"ACTION_OPEN_VLC_HINT": "configured player",
|
||||
"ACTION_COPY_URL": "Copy URL",
|
||||
@@ -1298,6 +1308,12 @@
|
||||
"RAIL_FAVORITES": "Ulubione",
|
||||
"RAIL_DOWNLOADS": "Pobrane",
|
||||
"EXTERNAL_PLAYBACK_CLOSE": "Close player",
|
||||
"EXTERNAL_PLAYBACK_DISMISS": "Dismiss",
|
||||
"EXTERNAL_PLAYBACK_OPENING": "Opening player…",
|
||||
"EXTERNAL_PLAYBACK_STARTED": "Player started",
|
||||
"EXTERNAL_PLAYBACK_PLAYING": "Playing",
|
||||
"EXTERNAL_PLAYBACK_FAILED": "Playback failed",
|
||||
"EXTERNAL_PLAYBACK_CLOSED": "Closed",
|
||||
"RAIL_ALL_CHANNELS": "Wszystkie kanały",
|
||||
"RAIL_GROUPS": "Grupy",
|
||||
"RAIL_CONTEXT_ACTIONS": "Akcje sekcji",
|
||||
|
||||
@@ -583,6 +583,16 @@
|
||||
"REASON_COMPATIBLE_DRM_PATH": "Este destino é compatível com os dados de criptografia disponíveis",
|
||||
"ACTION_OPEN_MPV": "Open in MPV",
|
||||
"ACTION_OPEN_VLC": "Open in VLC",
|
||||
"ACTION_OPENING_MPV": "Opening MPV…",
|
||||
"ACTION_OPENING_VLC": "Opening VLC…",
|
||||
"ACTION_REOPEN_MPV": "Open MPV again",
|
||||
"ACTION_REOPEN_VLC": "Open VLC again",
|
||||
"ACTION_RETRY_MPV": "Try MPV again",
|
||||
"ACTION_RETRY_VLC": "Try VLC again",
|
||||
"EXTERNAL_OPENING": "Opening player…",
|
||||
"EXTERNAL_STARTED": "Player started",
|
||||
"EXTERNAL_PLAYING": "Playing",
|
||||
"EXTERNAL_FAILED": "Player launch failed",
|
||||
"ACTION_OPEN_MPV_HINT": "configured player",
|
||||
"ACTION_OPEN_VLC_HINT": "configured player",
|
||||
"ACTION_COPY_URL": "Copy URL",
|
||||
@@ -1298,6 +1308,12 @@
|
||||
"RAIL_FAVORITES": "Favoritos",
|
||||
"RAIL_DOWNLOADS": "Downloads",
|
||||
"EXTERNAL_PLAYBACK_CLOSE": "Close player",
|
||||
"EXTERNAL_PLAYBACK_DISMISS": "Dismiss",
|
||||
"EXTERNAL_PLAYBACK_OPENING": "Opening player…",
|
||||
"EXTERNAL_PLAYBACK_STARTED": "Player started",
|
||||
"EXTERNAL_PLAYBACK_PLAYING": "Playing",
|
||||
"EXTERNAL_PLAYBACK_FAILED": "Playback failed",
|
||||
"EXTERNAL_PLAYBACK_CLOSED": "Closed",
|
||||
"RAIL_ALL_CHANNELS": "Todos os canais",
|
||||
"RAIL_GROUPS": "Grupos",
|
||||
"RAIL_CONTEXT_ACTIONS": "Ações da seção",
|
||||
|
||||
@@ -583,6 +583,16 @@
|
||||
"REASON_COMPATIBLE_DRM_PATH": "Эта цель совместима с доступными данными шифрования",
|
||||
"ACTION_OPEN_MPV": "Открыть в MPV",
|
||||
"ACTION_OPEN_VLC": "Открыть в VLC",
|
||||
"ACTION_OPENING_MPV": "MPV открывается…",
|
||||
"ACTION_OPENING_VLC": "VLC открывается…",
|
||||
"ACTION_REOPEN_MPV": "Открыть MPV снова",
|
||||
"ACTION_REOPEN_VLC": "Открыть VLC снова",
|
||||
"ACTION_RETRY_MPV": "Повторить запуск MPV",
|
||||
"ACTION_RETRY_VLC": "Повторить запуск VLC",
|
||||
"EXTERNAL_OPENING": "Плеер открывается…",
|
||||
"EXTERNAL_STARTED": "Плеер запущен",
|
||||
"EXTERNAL_PLAYING": "Воспроизведение",
|
||||
"EXTERNAL_FAILED": "Не удалось запустить плеер",
|
||||
"ACTION_OPEN_MPV_HINT": "настроенный плеер",
|
||||
"ACTION_OPEN_VLC_HINT": "настроенный плеер",
|
||||
"ACTION_COPY_URL": "Скопировать URL потока",
|
||||
@@ -1298,6 +1308,12 @@
|
||||
"RAIL_FAVORITES": "Избранное",
|
||||
"RAIL_DOWNLOADS": "Загрузки",
|
||||
"EXTERNAL_PLAYBACK_CLOSE": "Close player",
|
||||
"EXTERNAL_PLAYBACK_DISMISS": "Скрыть",
|
||||
"EXTERNAL_PLAYBACK_OPENING": "Плеер открывается…",
|
||||
"EXTERNAL_PLAYBACK_STARTED": "Плеер запущен",
|
||||
"EXTERNAL_PLAYBACK_PLAYING": "Воспроизведение",
|
||||
"EXTERNAL_PLAYBACK_FAILED": "Не удалось запустить плеер",
|
||||
"EXTERNAL_PLAYBACK_CLOSED": "Закрыт",
|
||||
"RAIL_ALL_CHANNELS": "Все каналы",
|
||||
"RAIL_GROUPS": "Группы",
|
||||
"RAIL_CONTEXT_ACTIONS": "Действия раздела",
|
||||
|
||||
@@ -583,6 +583,16 @@
|
||||
"REASON_COMPATIBLE_DRM_PATH": "Bu hedef kullanılabilir şifreleme verileriyle uyumludur",
|
||||
"ACTION_OPEN_MPV": "Open in MPV",
|
||||
"ACTION_OPEN_VLC": "Open in VLC",
|
||||
"ACTION_OPENING_MPV": "Opening MPV…",
|
||||
"ACTION_OPENING_VLC": "Opening VLC…",
|
||||
"ACTION_REOPEN_MPV": "Open MPV again",
|
||||
"ACTION_REOPEN_VLC": "Open VLC again",
|
||||
"ACTION_RETRY_MPV": "Try MPV again",
|
||||
"ACTION_RETRY_VLC": "Try VLC again",
|
||||
"EXTERNAL_OPENING": "Opening player…",
|
||||
"EXTERNAL_STARTED": "Player started",
|
||||
"EXTERNAL_PLAYING": "Playing",
|
||||
"EXTERNAL_FAILED": "Player launch failed",
|
||||
"ACTION_OPEN_MPV_HINT": "configured player",
|
||||
"ACTION_OPEN_VLC_HINT": "configured player",
|
||||
"ACTION_COPY_URL": "Copy URL",
|
||||
@@ -1298,6 +1308,12 @@
|
||||
"RAIL_FAVORITES": "Favoriler",
|
||||
"RAIL_DOWNLOADS": "İndirilenler",
|
||||
"EXTERNAL_PLAYBACK_CLOSE": "Close player",
|
||||
"EXTERNAL_PLAYBACK_DISMISS": "Dismiss",
|
||||
"EXTERNAL_PLAYBACK_OPENING": "Opening player…",
|
||||
"EXTERNAL_PLAYBACK_STARTED": "Player started",
|
||||
"EXTERNAL_PLAYBACK_PLAYING": "Playing",
|
||||
"EXTERNAL_PLAYBACK_FAILED": "Playback failed",
|
||||
"EXTERNAL_PLAYBACK_CLOSED": "Closed",
|
||||
"RAIL_ALL_CHANNELS": "Tüm kanallar",
|
||||
"RAIL_GROUPS": "Gruplar",
|
||||
"RAIL_CONTEXT_ACTIONS": "Bölüm işlemleri",
|
||||
|
||||
@@ -583,6 +583,16 @@
|
||||
"REASON_COMPATIBLE_DRM_PATH": "此目标与可用的加密数据兼容",
|
||||
"ACTION_OPEN_MPV": "Open in MPV",
|
||||
"ACTION_OPEN_VLC": "Open in VLC",
|
||||
"ACTION_OPENING_MPV": "Opening MPV…",
|
||||
"ACTION_OPENING_VLC": "Opening VLC…",
|
||||
"ACTION_REOPEN_MPV": "Open MPV again",
|
||||
"ACTION_REOPEN_VLC": "Open VLC again",
|
||||
"ACTION_RETRY_MPV": "Try MPV again",
|
||||
"ACTION_RETRY_VLC": "Try VLC again",
|
||||
"EXTERNAL_OPENING": "Opening player…",
|
||||
"EXTERNAL_STARTED": "Player started",
|
||||
"EXTERNAL_PLAYING": "Playing",
|
||||
"EXTERNAL_FAILED": "Player launch failed",
|
||||
"ACTION_OPEN_MPV_HINT": "configured player",
|
||||
"ACTION_OPEN_VLC_HINT": "configured player",
|
||||
"ACTION_COPY_URL": "Copy URL",
|
||||
@@ -1298,6 +1308,12 @@
|
||||
"RAIL_FAVORITES": "收藏",
|
||||
"RAIL_DOWNLOADS": "下载",
|
||||
"EXTERNAL_PLAYBACK_CLOSE": "Close player",
|
||||
"EXTERNAL_PLAYBACK_DISMISS": "Dismiss",
|
||||
"EXTERNAL_PLAYBACK_OPENING": "Opening player…",
|
||||
"EXTERNAL_PLAYBACK_STARTED": "Player started",
|
||||
"EXTERNAL_PLAYBACK_PLAYING": "Playing",
|
||||
"EXTERNAL_PLAYBACK_FAILED": "Playback failed",
|
||||
"EXTERNAL_PLAYBACK_CLOSED": "Closed",
|
||||
"RAIL_ALL_CHANNELS": "所有频道",
|
||||
"RAIL_GROUPS": "分组",
|
||||
"RAIL_CONTEXT_ACTIONS": "章节操作",
|
||||
|
||||
@@ -583,6 +583,16 @@
|
||||
"REASON_COMPATIBLE_DRM_PATH": "此目標與可用的加密資料相容",
|
||||
"ACTION_OPEN_MPV": "Open in MPV",
|
||||
"ACTION_OPEN_VLC": "Open in VLC",
|
||||
"ACTION_OPENING_MPV": "Opening MPV…",
|
||||
"ACTION_OPENING_VLC": "Opening VLC…",
|
||||
"ACTION_REOPEN_MPV": "Open MPV again",
|
||||
"ACTION_REOPEN_VLC": "Open VLC again",
|
||||
"ACTION_RETRY_MPV": "Try MPV again",
|
||||
"ACTION_RETRY_VLC": "Try VLC again",
|
||||
"EXTERNAL_OPENING": "Opening player…",
|
||||
"EXTERNAL_STARTED": "Player started",
|
||||
"EXTERNAL_PLAYING": "Playing",
|
||||
"EXTERNAL_FAILED": "Player launch failed",
|
||||
"ACTION_OPEN_MPV_HINT": "configured player",
|
||||
"ACTION_OPEN_VLC_HINT": "configured player",
|
||||
"ACTION_COPY_URL": "Copy URL",
|
||||
@@ -1298,6 +1308,12 @@
|
||||
"RAIL_FAVORITES": "我的最愛",
|
||||
"RAIL_DOWNLOADS": "下載",
|
||||
"EXTERNAL_PLAYBACK_CLOSE": "Close player",
|
||||
"EXTERNAL_PLAYBACK_DISMISS": "Dismiss",
|
||||
"EXTERNAL_PLAYBACK_OPENING": "Opening player…",
|
||||
"EXTERNAL_PLAYBACK_STARTED": "Player started",
|
||||
"EXTERNAL_PLAYBACK_PLAYING": "Playing",
|
||||
"EXTERNAL_PLAYBACK_FAILED": "Playback failed",
|
||||
"EXTERNAL_PLAYBACK_CLOSED": "Closed",
|
||||
"RAIL_ALL_CHANNELS": "所有頻道",
|
||||
"RAIL_GROUPS": "群組",
|
||||
"RAIL_CONTEXT_ACTIONS": "區段操作",
|
||||
|
||||
Reference in new issue
Block a user