Merge remote-tracking branch 'origin/master' into claude/dash-clearkey-shaka

# Conflicts:
#	CLAUDE.md
#	libs/ui/playback/src/lib/web-player-view/web-player-view.component.ts
This commit is contained in:
4gray committed 2026-07-24 18:44:22 +02:00
commit 5b2dd3b8b0
425 files changed
+59216 -3432

No files matched your search

@@ -0,0 +1,109 @@
import { parse } from 'iptv-playlist-parser';
/**
* Contract tests for the 4gray/iptv-playlist-parser fork (jest maps the
* module to the real parser source via test-stubs/iptv-playlist-parser.mjs).
* Guards the fork-specific behaviors iptvnator depends on:
* - no URL length/format validation (issue #1189: Pluto JWT URLs > 2084 chars)
* - '#' comments never become URLs and never shift the item index
* - the fork-only `radio` attribute survives upstream syncs
* - `url` is stripped at the first '|' while pipe params land in `http.*`
*/
describe('iptv-playlist-parser contract (4gray fork)', () => {
const plutoUrl = (id: string) =>
`https://cfd-v4-service-channel-stitcher-use1-1.prd.pluto.tv/v2/stitch/hls/channel/${id}/master.m3u8?jwt=${'e'.repeat(2100)}&masterJWTPassthrough=true`;
it('parses playlists whose URLs are longer than 2084 characters (#1189)', () => {
const playlist = [
'#EXTM3U',
'#EXTINF:-1 group-title="Anime & Geek" tvg-id="one" tvg-name="Beyblade",Beyblade',
plutoUrl('one'),
'#EXTINF:-1 group-title="TV Brasileira" tvg-id="two" tvg-name="TV Cultura",TV Cultura',
plutoUrl('two'),
'',
].join('\n');
const result = parse(playlist);
expect(result.items.length).toBe(2);
expect(result.items[0].name).toBe('Beyblade');
expect(result.items[0].url).toBe(plutoUrl('one'));
expect(result.items[1].name).toBe('TV Cultura');
expect(result.items[1].url).toBe(plutoUrl('two'));
});
it('ignores comments and unknown directives between #EXTINF and the URL', () => {
const playlist = [
'#EXTM3U',
'#EXTINF:-1 tvg-id="one",Channel One',
'# stray comment',
'#EXT-X-SESSION-DATA:DATA-ID="com.example",VALUE="x"',
'http://example.com/one.m3u8',
'#EXTINF:-1 tvg-id="two",Channel Two',
'http://example.com/two.m3u8',
'',
].join('\n');
const result = parse(playlist);
expect(result.items.length).toBe(2);
expect(result.items[0].url).toBe('http://example.com/one.m3u8');
expect(result.items[0].raw).toContain('# stray comment');
expect(result.items[1].url).toBe('http://example.com/two.m3u8');
});
it('parses the radio attribute used by the radio player', () => {
const playlist = [
'#EXTM3U',
'#EXTINF:-1 radio="true" tvg-id="r1",Radio One',
'http://example.com/radio1',
'#EXTINF:-1 tvg-id="tv1",TV One',
'http://example.com/tv1',
'',
].join('\n');
const result = parse(playlist);
expect(result.items[0].radio).toBe('true');
expect(result.items[1].radio).toBe('');
});
it('strips pipe options from url while keeping them in http.*', () => {
const playlist = [
'#EXTM3U',
'#EXTINF:-1,Piped',
'http://example.com/stream.ts|User-Agent=CustomUA&Referer=http://ref.example',
'',
].join('\n');
const result = parse(playlist);
expect(result.items[0].url).toBe('http://example.com/stream.ts');
expect(result.items[0].http['user-agent']).toBe('CustomUA');
expect(result.items[0].http.referrer).toBe('http://ref.example');
});
it('accepts playlists with a UTF-8 BOM before the header', () => {
const result = parse(
'#EXTM3U\n#EXTINF:-1,One\nhttp://example.com/one.m3u8\n'
);
expect(result.items.length).toBe(1);
expect(result.items[0].url).toBe('http://example.com/one.m3u8');
});
it('exposes EPG urls from the playlist header', () => {
const result = parse(
[
'#EXTM3U x-tvg-url="https://epg.example/guide.xml"',
'#EXTINF:-1,One',
'http://example.com/one.m3u8',
'',
].join('\n')
);
expect(result.header.attrs['x-tvg-url']).toBe(
'https://epg.example/guide.xml'
);
});
});
@@ -16,6 +16,7 @@ describe('ElectronService', () => {
const session = { id: 'session-1' };
let electronBridge: {
fetchPlaylistByUrl: jest.Mock;
onPlayerError: jest.Mock;
openInMpv: jest.Mock;
openInVlc: jest.Mock;
};
@@ -24,9 +25,11 @@ describe('ElectronService', () => {
beforeEach(() => {
jest.spyOn(console, 'log').mockImplementation(() => undefined);
jest.spyOn(console, 'error').mockImplementation(() => undefined);
electronBridge = {
fetchPlaylistByUrl: jest.fn(),
onPlayerError: jest.fn(),
openInMpv: jest.fn().mockResolvedValue(session),
openInVlc: jest.fn().mockResolvedValue(session),
};
@@ -99,6 +102,23 @@ describe('ElectronService', () => {
expect(electronBridge.fetchPlaylistByUrl).not.toHaveBeenCalled();
});
it('redacts credentials from backend player errors before logging', () => {
const secret = 'player-error-token-secret';
const listener = electronBridge.onPlayerError.mock.calls[0][0];
listener({
player: 'MPV',
error: 'Playback failed',
originalError: `Request failed: token=${secret}&channel=news`,
});
const output = JSON.stringify(
(console.error as jest.Mock).mock.calls
);
expect(output).not.toContain(secret);
expect(output).toContain('channel=news');
});
it('shows the trust-host action for Electron-wrapped security errors', async () => {
const securityPayload = {
code: ELECTRON_BRIDGE_SECURITY_ERROR_CODES.InvalidTlsCertificate,
+14 -12
View File
@@ -7,7 +7,6 @@ import { DialogService } from '@iptvnator/ui/components';
import { DataService, SettingsStore } from '@iptvnator/services';
import {
AUTO_UPDATE_PLAYLISTS,
createDevLogger,
ELECTRON_BRIDGE_SECURITY_ERROR_CODES,
ERROR,
normalizeHost,
@@ -22,6 +21,7 @@ import {
} from '@iptvnator/shared/interfaces';
import { AppConfig } from '../../environments/environment';
import {
createLogger,
createPortalDebugRequestContext,
logPortalDebugEvent,
} from '@iptvnator/portal/shared/util';
@@ -54,7 +54,7 @@ export class ElectronService extends DataService {
private readonly store = inject(Store);
private readonly settingsStore = inject(SettingsStore);
private readonly translateService = inject(TranslateService);
private readonly debugLog = createDevLogger('ElectronService');
private readonly logger = createLogger('ElectronService');
private readonly silentXtreamActions = new Set<string>([
XtreamCodeActions.GetAccountInfo,
XtreamCodeActions.GetLiveCategories,
@@ -67,7 +67,6 @@ export class ElectronService extends DataService {
constructor() {
super();
this.debugLog('Electron service initialized...');
this.setupPlayerErrorListener();
this.setupPortalDebugListener();
}
@@ -81,7 +80,10 @@ export class ElectronService extends DataService {
error: string;
originalError: string;
}) => {
console.error(`${data.player} Error:`, data.originalError);
this.logger.error(
`${data.player} Error:`,
data.originalError
);
this.snackBar.open(
`${data.player} Error: ${data.error}`,
'Close',
@@ -182,7 +184,7 @@ export class ElectronService extends DataService {
duration: 5000,
}
);
console.error('MPV launch error:', error);
this.logger.error('MPV launch error:', error);
throw error;
}
}
@@ -211,7 +213,7 @@ export class ElectronService extends DataService {
duration: 5000,
}
);
console.error('VLC launch error:', error);
this.logger.error('VLC launch error:', error);
throw error;
}
}
@@ -237,7 +239,7 @@ export class ElectronService extends DataService {
return playlists as T;
}
this.debugLog('Unknown IPC event type:', type);
this.logger.debug('Unknown IPC event type:', type);
return undefined as T;
}
@@ -265,7 +267,7 @@ export class ElectronService extends DataService {
return response;
} catch (err: unknown) {
const errorInfo = this.getErrorDetails(err);
console.error('Stalker request error:', err);
this.logger.error('Stalker request error:', err);
this.snackBar.open(
`Error: ${errorInfo?.message ?? ' Not found'}, status: ${errorInfo?.status ?? 404}`,
'Close',
@@ -362,7 +364,7 @@ export class ElectronService extends DataService {
data.title
);
} else {
console.error(
this.logger.error(
'Either url or filePath must be provided, but not both.'
);
return;
@@ -387,7 +389,7 @@ export class ElectronService extends DataService {
{ duration: 2000 }
);
} catch (error: unknown) {
console.error('Playlist refresh error:', error);
this.logger.error('Playlist refresh error:', error);
if (
data.url &&
this.handlePlaylistSecurityError(error, () => {
@@ -590,12 +592,12 @@ export class ElectronService extends DataService {
// Log error to console
if (isSilentAction) {
this.debugLog(
this.logger.debug(
`Background Xtream action failed (${action ?? 'unknown'}):`,
normalizedMessage
);
} else {
console.error('Xtream request error:', normalizedMessage);
this.logger.error('Xtream request error:', normalizedMessage);
}
// Only show snackbar for user-triggered Xtream requests
+6 -7
View File
@@ -15,7 +15,6 @@ import {
} from 'rxjs';
import { DataService } from '@iptvnator/services';
import {
createDevLogger,
ERROR,
Playlist,
PLAYLIST_PARSE_BY_URL,
@@ -32,6 +31,7 @@ import {
createPortalDebugSuccessEvent,
logPortalDebugEvent,
logPortalDebugRequest,
createLogger,
} from '@iptvnator/portal/shared/util';
import { getRuntimeBackendUrl } from './runtime-config';
@@ -71,7 +71,7 @@ export class PwaService extends DataService {
private readonly store = inject(Store);
private readonly swUpdate = inject(SwUpdate);
private readonly translateService = inject(TranslateService);
private readonly debugLog = createDevLogger('PwaService');
private readonly logger = createLogger('PwaService');
private readonly providerTargetIds = new Map<string, Promise<string>>();
private readonly silentXtreamActions = new Set<string>([
XtreamCodeActions.GetAccountInfo,
@@ -88,7 +88,6 @@ export class PwaService extends DataService {
constructor() {
super();
this.debugLog('PWA service initialized...');
}
/** Uses service worker mechanism to check for available application updates */
@@ -358,7 +357,7 @@ export class PwaService extends DataService {
);
if (isSilentAction) {
this.debugLog(
this.logger.debug(
`Background Xtream action failed (${action ?? 'unknown'}):`,
normalizedMessage
);
@@ -398,7 +397,7 @@ export class PwaService extends DataService {
// Log error to console
if (isSilentAction) {
this.debugLog(
this.logger.debug(
`Background Xtream action failed (${action ?? 'unknown'}):`,
normalizedMessage
);
@@ -409,7 +408,7 @@ export class PwaService extends DataService {
};
}
console.error('Xtream request error:', normalizedMessage);
this.logger.error('Xtream request error:', normalizedMessage);
this.snackBar.open(
`Xtream request failed: ${normalizedMessage}`,
'Close',
@@ -533,7 +532,7 @@ export class PwaService extends DataService {
} catch (err: unknown) {
const errorInfo = this.getErrorDetails(err);
logPortalDebugEvent(createPortalDebugErrorEvent(context, err));
console.error('Stalker request error:', err);
this.logger.error('Stalker request error:', err);
this.snackBar.open(
`Error: ${errorInfo?.message ?? ' Not found'}, status: ${errorInfo?.status ?? 404}`,
@@ -19,7 +19,17 @@
<p>{{ 'SETTINGS.VERSION_DESCRIPTION' | translate }}</p>
</div>
<div class="setting-item__control version-block">
<span>{{ version() }}</span>
<span data-test-id="app-version">
{{ version() }}
@if (buildCommitShort(); as commit) {
<span
class="build-commit"
data-test-id="app-build-commit"
[title]="buildCommit()"
>({{ commit }})</span
>
}
</span>
<small>{{ updateMessage() }}</small>
</div>
</div>
@@ -132,3 +132,60 @@ describe('SettingsAboutSectionComponent app updates', () => {
expect(getButton(fixture, 'app-update-open-release')).toBeTruthy();
});
});
describe('SettingsAboutSectionComponent version display', () => {
let fixture: ComponentFixture<SettingsAboutSectionComponent>;
beforeEach(async () => {
await TestBed.configureTestingModule({
imports: [
SettingsAboutSectionComponent,
TranslateModule.forRoot(),
],
}).compileComponents();
fixture = TestBed.createComponent(SettingsAboutSectionComponent);
fixture.componentRef.setInput('activeSection', 'about');
fixture.componentRef.setInput('version', '0.23.0');
});
function getVersionBlock() {
return fixture.nativeElement.querySelector(
'[data-test-id="app-version"]'
) as HTMLElement;
}
function getCommitMarker() {
return fixture.nativeElement.querySelector(
'[data-test-id="app-build-commit"]'
) as HTMLElement | null;
}
it('shows the shortened build commit next to the version on CI builds', () => {
fixture.componentRef.setInput(
'buildCommit',
'949ea520aa11bb22cc33dd44ee55ff6677889900'
);
fixture.detectChanges();
expect(getVersionBlock().textContent).toContain('0.23.0');
expect(getCommitMarker()?.textContent).toBe('(949ea52)');
expect(getCommitMarker()?.getAttribute('title')).toBe(
'949ea520aa11bb22cc33dd44ee55ff6677889900'
);
});
it('shows the plain version when no build commit was injected', () => {
fixture.detectChanges();
expect(getVersionBlock().textContent).toContain('0.23.0');
expect(getCommitMarker()).toBeNull();
});
it('treats a whitespace-only commit as absent', () => {
fixture.componentRef.setInput('buildCommit', ' ');
fixture.detectChanges();
expect(getCommitMarker()).toBeNull();
});
});
@@ -18,15 +18,25 @@ import {
imports: [MatButtonModule, MatIconModule, TranslateModule],
templateUrl: './settings-about-section.component.html',
encapsulation: ViewEncapsulation.None,
styles: [':host { display: contents; }'],
styles: [
':host { display: contents; }',
'.version-block .build-commit { opacity: 0.65; font-size: 0.85em; }',
],
})
export class SettingsAboutSectionComponent {
readonly activeSection = input.required<string>();
readonly isDesktop = input(false);
readonly version = input<string | undefined>();
readonly buildCommit = input<string | undefined>();
readonly updateMessage = input<string | undefined>();
readonly appUpdateStatus = input<ElectronBridgeAppUpdateStatus | null>(null);
readonly buildCommitShort = computed(() => {
const commit = this.buildCommit()?.trim();
return commit ? commit.slice(0, 7) : undefined;
});
readonly checkForAppUpdate = output<void>();
readonly downloadAppUpdate = output<void>();
readonly installAppUpdate = output<void>();
@@ -32,6 +32,7 @@ export function createSettingsForm(
return formBuilder.group({
player: [VideoPlayer.VideoJs],
webPlayerSharedControls: false,
playerAmbientMode: false,
...(supportsEpg
? { epgUrl: new FormArray<FormControl<string | null>>([]) }
: {}),
@@ -117,6 +118,7 @@ export function createSettingsFromFormValue(
return {
player: value.player ?? VideoPlayer.VideoJs,
webPlayerSharedControls: value.webPlayerSharedControls ?? false,
playerAmbientMode: value.playerAmbientMode ?? false,
streamFormat: value.streamFormat ?? StreamFormat.AutoStreamFormat,
openStreamOnDoubleClick: value.openStreamOnDoubleClick ?? false,
language: value.language ?? Language.ENGLISH,
@@ -95,6 +95,24 @@
></mat-checkbox>
</div>
</div>
<div class="setting-item" data-test-id="player-ambient-mode-setting">
<div class="setting-item__meta">
<h4>
{{ 'SETTINGS.PLAYER_AMBIENT_MODE' | translate }}
</h4>
<p>
{{ 'SETTINGS.PLAYER_AMBIENT_MODE_DESCRIPTION' | translate }}
</p>
</div>
<div class="setting-item__control setting-item__toggle">
<mat-checkbox
[aria-label]="'SETTINGS.PLAYER_AMBIENT_MODE' | translate"
formControlName="playerAmbientMode"
data-test-id="player-ambient-mode-toggle"
></mat-checkbox>
</div>
</div>
}
@if (supportsManagedExternalPlayers() && isExternalPlayerSelected()) {
@@ -381,6 +381,7 @@ function createForm(player = VideoPlayer.VideoJs): FormGroup {
return new FormGroup({
player: new FormControl(player),
webPlayerSharedControls: new FormControl(false),
playerAmbientMode: new FormControl(false),
streamFormat: new FormControl(StreamFormat.AutoStreamFormat),
openStreamOnDoubleClick: new FormControl(false),
showExternalPlaybackBar: new FormControl(true),
@@ -113,6 +113,7 @@
[activeSection]="activeSection()"
[isDesktop]="isDesktop"
[version]="version"
[buildCommit]="buildCommit"
[updateMessage]="updateMessage"
[appUpdateStatus]="appUpdateStatus()"
(checkForAppUpdate)="checkForAppUpdate()"
@@ -85,6 +85,7 @@ export class MockRouter {
const DEFAULT_SETTINGS = {
player: VideoPlayer.VideoJs,
webPlayerSharedControls: false,
playerAmbientMode: false,
streamFormat: StreamFormat.AutoStreamFormat,
openStreamOnDoubleClick: false,
language: Language.ENGLISH,
@@ -45,6 +45,7 @@ import {
Theme,
VideoPlayer,
} from '@iptvnator/shared/interfaces';
import { BUILD_COMMIT } from '../../environments/build-commit';
import { SettingsStore } from '../services/settings-store.service';
import { SettingsService } from './../services/settings.service';
import { SettingsAboutSectionComponent } from './settings-about-section.component';
@@ -200,6 +201,9 @@ export class SettingsComponent implements OnInit, OnDestroy {
/** Current version of the app */
version = '';
/** Git commit the app was built from (CI builds only) */
readonly buildCommit = BUILD_COMMIT;
/** Update message to show */
updateMessage = '';
readonly appUpdateStatus = signal<ElectronBridgeAppUpdateStatus | null>(
+31 -1
View File
@@ -298,6 +298,8 @@
"VIDEO_PLAYER_DESCRIPTION": "اختر مشغل الفيديو الافتراضي",
"WEB_PLAYER_SHARED_CONTROLS": "عناصر تحكم موحّدة لمشغلات الويب (تجريبي)",
"WEB_PLAYER_SHARED_CONTROLS_DESCRIPTION": "استخدم عناصر التحكم المشتركة في IPTVnator مع HTML5 وVideo.js وArtPlayer.",
"PLAYER_AMBIENT_MODE": "ملء الخلفية المحيطة",
"PLAYER_AMBIENT_MODE_DESCRIPTION": "تعبئة المساحة حول المشغل بنسخة مشوشة ومعتمة من الملصق بدلاً من الخطوط السوداء.",
"STREAM_FORMAT_DESCRIPTION": "اختر تنسيق البث الافتراضي (xtream)",
"LANGUAGE_DESCRIPTION": "اختر لغة التطبيق",
"THEME_DESCRIPTION": "اختر السمة البصرية للتطبيق",
@@ -453,6 +455,7 @@
},
"EMBEDDED_MPV": {
"PLAYER": {
"BACK": "رجوع",
"RETRY": "إعادة المحاولة",
"STALLED": "يستغرق بدء هذا البث وقتًا أطول من المتوقع.",
"PLAYBACK_FAILED": "فشل التشغيل عبر MPV المضمّن.",
@@ -569,6 +572,7 @@
"REMOVE_FAVORITE": "إزالة من المفضلة",
"ADD_FAVORITE": "إضافة إلى المفضلة",
"SHOW_DETAILS": "عرض تفاصيل القناة",
"MAP_EPG": "ربط قناة دليل البرامج",
"FAVORITES_UPDATED": "تم تحديث المفضلة!",
"SELECT_CHANNEL_PLAYBACK": "يرجى اختيار قناة لبدء التشغيل",
"SORT_BY": "ترتيب حسب",
@@ -714,6 +718,21 @@
"GROUP_EXPAND": "عرض ›"
}
},
"EPG_MAPPING_DIALOG": {
"TITLE": "ربط قناة دليل البرامج (EPG)",
"SUBTITLE": "اختر يدويًا قناة دليل البرامج لـ \"{{channelName}}\"",
"SEARCH_PLACEHOLDER": "البحث في قنوات دليل البرامج...",
"CURRENT_MAPPING": "الربط الحالي",
"NO_MAPPING": "لم يتم تعيين ربط لدليل البرامج",
"SAVE": "حفظ الربط",
"REMOVE": "إزالة الربط",
"CLOSE": "إغلاق",
"NO_RESULTS": "لم يتم العثور على قنوات دليل البرامج",
"SEARCH_HINT": "اكتب {{min}} أحرف على الأقل للبحث",
"SAVED": "تم حفظ ربط دليل البرامج",
"REMOVED": "تمت إزالة ربط دليل البرامج",
"SAVE_FAILED": "تعذر تحديث ربط دليل البرامج"
},
"LANGUAGES": {
"ARABIC": "العربية",
"MOROCCAN_ARABIC": "العربية (اللهجة المغربية)",
@@ -766,6 +785,8 @@
"ACTORS": "الممثلون",
"DIRECTOR": "المخرج",
"SIMILAR": "مشابه",
"CREW_JOB_DIRECTOR": "المخرج",
"CREW_JOB_CREATOR": "المبتكر",
"ACTOR_FILMOGRAPHY": "الأعمال الفنية",
"ACTOR_FILTER_ALL": "الكل",
"ACTOR_SCOPE_THIS_PORTAL": "هذه البوابة",
@@ -951,6 +972,11 @@
"CONTENT_NOT_AVAILABLE": "هذا المحتوى غير متاح على هذا الخادم",
"PLAYBACK_ERROR": "فشل الحصول على رابط التشغيل",
"LOADING_SEASONS": "جارٍ تحميل المواسم...",
"LOADING_ALL_CHANNELS": "جارٍ تحميل قائمة القنوات الكاملة…",
"REFRESH_CHANNEL_LIST": "تحديث قائمة القنوات",
"NO_CHANNELS_IN_CATEGORY": "لا توجد قنوات في هذه الفئة",
"ITEM": "عنصر",
"ITEMS": "عناصر",
"NO_EPISODES": "لا توجد حلقات متاحة",
"ALL_RADIO": "كل الراديو"
},
@@ -978,6 +1004,9 @@
"SOURCE_PLAYLIST_MISSING": "لم يعد بالإمكان فتح هذا التنزيل في المكتبة لأنه تمت إزالة قائمة التشغيل المصدر.",
"FILE_NOT_FOUND": "هذا الملف الذي تم تنزيله لم يعد متاحًا على القرص.",
"FILE_ACTION_ERROR": "تعذر إكمال الإجراء على الملف.",
"ACTION_FAILED": "فشل الإجراء",
"PAUSE": "إيقاف مؤقت",
"RESUME": "استئناف",
"CANCEL": "إلغاء",
"RETRY": "إعادة المحاولة",
"REMOVE": "إزالة",
@@ -991,7 +1020,8 @@
"DOWNLOADING": "جارٍ التنزيل",
"COMPLETED": "مكتمل",
"FAILED": "فشل",
"CANCELED": "ملغى"
"CANCELED": "ملغى",
"PAUSED": "متوقف مؤقتًا"
}
},
"REMOTE_CONTROL": {
+31 -1
View File
@@ -298,6 +298,8 @@
"VIDEO_PLAYER_DESCRIPTION": "اختار مشغل الفيديو الافتراضي",
"WEB_PLAYER_SHARED_CONTROLS": "عناصر تحكم موحدة لمشغلات الويب (تجريبية)",
"WEB_PLAYER_SHARED_CONTROLS_DESCRIPTION": "استعمل عناصر التحكم المشتركة ديال IPTVnator مع HTML5 وVideo.js وArtPlayer.",
"PLAYER_AMBIENT_MODE": "خلفية محيطة",
"PLAYER_AMBIENT_MODE_DESCRIPTION": "ملي المساحة حول المشغل بغلاف معتم وطابت بلاصة الشرائط السوداء.",
"STREAM_FORMAT_DESCRIPTION": "اختار صيغة البث الافتراضية (xtream)",
"LANGUAGE_DESCRIPTION": "اختار لغة التطبيق",
"THEME_DESCRIPTION": "اختار المظهر المرئي للتطبيق",
@@ -453,6 +455,7 @@
},
"EMBEDDED_MPV": {
"PLAYER": {
"BACK": "رجوع",
"RETRY": "حاول مرة أخرى",
"STALLED": "هاد البث كياخد وقت كثر من المتوقع باش يبدا.",
"PLAYBACK_FAILED": "فشل التشغيل بـ MPV المدمج.",
@@ -569,6 +572,7 @@
"REMOVE_FAVORITE": "حيد من المفضلة",
"ADD_FAVORITE": "زيد للمفضلة",
"SHOW_DETAILS": "وري تفاصيل القناة",
"MAP_EPG": "ربط قناة ديال EPG",
"FAVORITES_UPDATED": "المفضلة تحدثات!",
"SELECT_CHANNEL_PLAYBACK": "عفاك اختار قناة باش يبدا التشغيل",
"SORT_BY": "رتب بـ",
@@ -714,6 +718,21 @@
"GROUP_EXPAND": "وري ›"
}
},
"EPG_MAPPING_DIALOG": {
"TITLE": "ربط قناة ديال EPG",
"SUBTITLE": "اختار يدويا قناة EPG لـ \"{{channelName}}\"",
"SEARCH_PLACEHOLDER": "قلب على قنوات EPG...",
"CURRENT_MAPPING": "الربط الحالي",
"NO_MAPPING": "ما كاين حتى ربط ديال EPG",
"SAVE": "سجل الربط",
"REMOVE": "حيد الربط",
"CLOSE": "سد",
"NO_RESULTS": "ما لقينا حتى قناة EPG",
"SEARCH_HINT": "كتب على الأقل {{min}} حروف باش تقلب",
"SAVED": "تسجل الربط ديال EPG",
"REMOVED": "تحيد الربط ديال EPG",
"SAVE_FAILED": "ما قدرناش نبدلو الربط ديال EPG"
},
"LANGUAGES": {
"ARABIC": "العربية",
"MOROCCAN_ARABIC": "العربية (اللهجة المغربية)",
@@ -766,6 +785,8 @@
"ACTORS": "الممثلون",
"DIRECTOR": "المخرج",
"SIMILAR": "بحال هادو",
"CREW_JOB_DIRECTOR": "المخرج",
"CREW_JOB_CREATOR": "المبتكر",
"ACTOR_FILMOGRAPHY": "الأفلام ديالو",
"ACTOR_FILTER_ALL": "كلشي",
"ACTOR_SCOPE_THIS_PORTAL": "هاد البوابة",
@@ -951,6 +972,11 @@
"CONTENT_NOT_AVAILABLE": "هاد المحتوى ما متوفرش على هاد السيرفر",
"PLAYBACK_ERROR": "فشل جلب رابط التشغيل",
"LOADING_SEASONS": "جاري تشريج المواسم...",
"LOADING_ALL_CHANNELS": "كيتم تحميل لائحة القنوات كاملة…",
"REFRESH_CHANNEL_LIST": "تحديث لائحة القنوات",
"NO_CHANNELS_IN_CATEGORY": "ماكاينش قنوات فهاد الصنف",
"ITEM": "عنصر",
"ITEMS": "عناصر",
"NO_EPISODES": "ما كاينش حلقات متوفرة",
"ALL_RADIO": "All radio"
},
@@ -978,6 +1004,9 @@
"SOURCE_PLAYLIST_MISSING": "هاد التحميل ما يقدرش يتحل في المكتبة حيت قائمة التشغيل المصدر تحيدات.",
"FILE_NOT_FOUND": "هاد الملف المحمل ما بقاش متوفر على القرص.",
"FILE_ACTION_ERROR": "العملية على الملف ما تكملاتش.",
"ACTION_FAILED": "العملية ما نجحاتش",
"PAUSE": "وقّف مؤقتاً",
"RESUME": "كمّل",
"CANCEL": "إلغاء",
"RETRY": "حاول مرة أخرى",
"REMOVE": "حيد",
@@ -991,7 +1020,8 @@
"DOWNLOADING": "جاري التحميل",
"COMPLETED": "كمل",
"FAILED": "فشل",
"CANCELED": "تلغى"
"CANCELED": "تلغى",
"PAUSED": "موقوف مؤقتاً"
}
},
"REMOTE_CONTROL": {
+31 -1
View File
@@ -298,6 +298,8 @@
"VIDEO_PLAYER_DESCRIPTION": "Выбраць стандартны відэапрайгравальнік",
"WEB_PLAYER_SHARED_CONTROLS": "Адзіныя элементы кіравання для вэб-прайгравальнікаў (эксперыментальна)",
"WEB_PLAYER_SHARED_CONTROLS_DESCRIPTION": "Выкарыстоўваць агульныя элементы кіравання IPTVnator у HTML5, Video.js і ArtPlayer.",
"PLAYER_AMBIENT_MODE": "Атмасфернае запаўненне",
"PLAYER_AMBIENT_MODE_DESCRIPTION": "Запаўніць прастор вакол плэйра размытай, затемнёнай вокладкай замяст чорных палос.",
"STREAM_FORMAT_DESCRIPTION": "Выберыце фармат патоку па змаўчанні (xtream)",
"LANGUAGE_DESCRIPTION": "Выбраць мову праграмы",
"THEME_DESCRIPTION": "Выбраць візуальную тэму афармлення",
@@ -453,6 +455,7 @@
},
"EMBEDDED_MPV": {
"PLAYER": {
"BACK": "Назад",
"RETRY": "Паўтарыць",
"STALLED": "Гэты паток запускаецца даўжэй, чым чакалася.",
"PLAYBACK_FAILED": "Не ўдалося прайграць праз убудаваны MPV.",
@@ -569,6 +572,7 @@
"REMOVE_FAVORITE": "Выдаліць са спісу фаварытаў",
"ADD_FAVORITE": "Дадаць у выбранае",
"SHOW_DETAILS": "Паказаць інфармацыю аб канале",
"MAP_EPG": "Прывязаць канал EPG",
"FAVORITES_UPDATED": "Спіс фаварытаў быў абноўлены!",
"SELECT_CHANNEL_PLAYBACK": "Калі ласка, выберыце канал, каб пачаць прайграванне",
"SORT_BY": "Сартаваць па",
@@ -714,6 +718,21 @@
"GROUP_EXPAND": "паказаць ›"
}
},
"EPG_MAPPING_DIALOG": {
"TITLE": "Прывязка канала EPG",
"SUBTITLE": "Выберыце канал EPG для \"{{channelName}}\" уручную",
"SEARCH_PLACEHOLDER": "Пошук каналаў EPG...",
"CURRENT_MAPPING": "Бягучая прывязка",
"NO_MAPPING": "Прывязка EPG не зададзена",
"SAVE": "Захаваць прывязку",
"REMOVE": "Выдаліць прывязку",
"CLOSE": "Закрыць",
"NO_RESULTS": "Каналы EPG не знойдзены",
"SEARCH_HINT": "Увядзіце не менш за {{min}} сімвалы для пошуку",
"SAVED": "Прывязка EPG захавана",
"REMOVED": "Прывязка EPG выдалена",
"SAVE_FAILED": "Не ўдалося абнавіць прывязку EPG"
},
"LANGUAGES": {
"ARABIC": "العربية",
"MOROCCAN_ARABIC": "العربية (اللهجة المغربية)",
@@ -766,6 +785,8 @@
"ACTORS": "Акцёры",
"DIRECTOR": "Рэжысёр",
"SIMILAR": "Падобнае",
"CREW_JOB_DIRECTOR": "Рэжысёр",
"CREW_JOB_CREATOR": "Стваральнік",
"ACTOR_FILMOGRAPHY": "Фільмаграфія",
"ACTOR_FILTER_ALL": "Усе",
"ACTOR_SCOPE_THIS_PORTAL": "Гэты партал",
@@ -951,6 +972,11 @@
"CONTENT_NOT_AVAILABLE": "Гэты кантэнт недаступны на дадзеным серверы",
"PLAYBACK_ERROR": "Не ўдалося атрымаць URL для прайгравання",
"LOADING_SEASONS": "Загрузка сезонаў...",
"LOADING_ALL_CHANNELS": "Загрузка поўнага спісу каналаў…",
"REFRESH_CHANNEL_LIST": "Абнавіць спіс каналаў",
"NO_CHANNELS_IN_CATEGORY": "У гэтай катэгорыі няма каналаў",
"ITEM": "элемент",
"ITEMS": "элементаў",
"NO_EPISODES": "Няма даступных эпізодаў",
"ALL_RADIO": "Усе радыё"
},
@@ -978,6 +1004,9 @@
"SOURCE_PLAYLIST_MISSING": "Гэта спампаванне больш нельга адкрыць у бібліятэцы, бо яго зыходны плэйліст быў выдалены.",
"FILE_NOT_FOUND": "Гэты спампаваны файл больш недаступны на дыску.",
"FILE_ACTION_ERROR": "Не ўдалося выканаць дзеянне з файлам.",
"ACTION_FAILED": "Дзеянне не выканана",
"PAUSE": "Паўза",
"RESUME": "Узнавіць",
"CANCEL": "Скасаваць",
"RETRY": "Паўтарыць",
"REMOVE": "Выдаліць",
@@ -991,7 +1020,8 @@
"DOWNLOADING": "Спампоўваецца",
"COMPLETED": "Завершана",
"FAILED": "Няўдала",
"CANCELED": "Скасавана"
"CANCELED": "Скасавана",
"PAUSED": "На паўзе"
}
},
"REMOTE_CONTROL": {
+31 -1
View File
@@ -298,6 +298,8 @@
"VIDEO_PLAYER_DESCRIPTION": "Wählen Sie den Standard-Videoplayer aus",
"WEB_PLAYER_SHARED_CONTROLS": "Einheitliche Steuerung für Web-Player (experimentell)",
"WEB_PLAYER_SHARED_CONTROLS_DESCRIPTION": "Verwendet die gemeinsamen IPTVnator-Steuerelemente in HTML5, Video.js und ArtPlayer.",
"PLAYER_AMBIENT_MODE": "Umgebungs-Hintergrund",
"PLAYER_AMBIENT_MODE_DESCRIPTION": "Füllt den Bereich um den Player mit einem unscharfen, gedimmten Poster auf, anstelle von einfachen schwarzen Balken.",
"STREAM_FORMAT_DESCRIPTION": "Standard-Streamformat auswählen (Xtream)",
"LANGUAGE_DESCRIPTION": "Wählen Sie die Sprache der Anwendung aus",
"THEME_DESCRIPTION": "Wählen Sie das visuelle Thema der Anwendung aus",
@@ -453,6 +455,7 @@
},
"EMBEDDED_MPV": {
"PLAYER": {
"BACK": "Zurück",
"RETRY": "Erneut versuchen",
"STALLED": "Der Start dieses Streams dauert länger als erwartet.",
"PLAYBACK_FAILED": "Die Wiedergabe mit eingebettetem MPV ist fehlgeschlagen.",
@@ -569,6 +572,7 @@
"REMOVE_FAVORITE": "Aus Favoritenliste entfernen",
"ADD_FAVORITE": "Zu Favoriten hinzufügen",
"SHOW_DETAILS": "Senderdetails anzeigen",
"MAP_EPG": "EPG-Kanal zuordnen",
"FAVORITES_UPDATED": "Favoriten wurden aktualisiert!",
"SELECT_CHANNEL_PLAYBACK": "Bitte wählen Sie einen Sender aus, um die Wiedergabe zu starten",
"SORT_BY": "Sortieren nach",
@@ -714,6 +718,21 @@
"GROUP_EXPAND": "anzeigen ›"
}
},
"EPG_MAPPING_DIALOG": {
"TITLE": "EPG-Kanal zuordnen",
"SUBTITLE": "EPG-Kanal für \"{{channelName}}\" manuell auswählen",
"SEARCH_PLACEHOLDER": "EPG-Kanäle durchsuchen...",
"CURRENT_MAPPING": "Aktuelle Zuordnung",
"NO_MAPPING": "Keine EPG-Zuordnung festgelegt",
"SAVE": "Zuordnung speichern",
"REMOVE": "Zuordnung entfernen",
"CLOSE": "Schließen",
"NO_RESULTS": "Keine EPG-Kanäle gefunden",
"SEARCH_HINT": "Mindestens {{min}} Zeichen zum Suchen eingeben",
"SAVED": "EPG-Zuordnung gespeichert",
"REMOVED": "EPG-Zuordnung entfernt",
"SAVE_FAILED": "EPG-Zuordnung konnte nicht aktualisiert werden"
},
"LANGUAGES": {
"ARABIC": "العربية",
"MOROCCAN_ARABIC": "العربية (اللهجة المغربية)",
@@ -766,6 +785,8 @@
"ACTORS": "Schauspieler",
"DIRECTOR": "Regisseur",
"SIMILAR": "Ähnliche Titel",
"CREW_JOB_DIRECTOR": "Regisseur",
"CREW_JOB_CREATOR": "Schöpfer",
"ACTOR_FILMOGRAPHY": "Filmografie",
"ACTOR_FILTER_ALL": "Alle",
"ACTOR_SCOPE_THIS_PORTAL": "Dieses Portal",
@@ -951,6 +972,11 @@
"CONTENT_NOT_AVAILABLE": "Dieser Inhalt ist auf diesem Server nicht verfügbar",
"PLAYBACK_ERROR": "Wiedergabe-URL konnte nicht abgerufen werden",
"LOADING_SEASONS": "Staffeln werden geladen …",
"LOADING_ALL_CHANNELS": "Vollständige Senderliste wird geladen…",
"REFRESH_CHANNEL_LIST": "Senderliste aktualisieren",
"NO_CHANNELS_IN_CATEGORY": "Keine Sender in dieser Kategorie",
"ITEM": "Element",
"ITEMS": "Elemente",
"NO_EPISODES": "Keine Episoden verfügbar",
"ALL_RADIO": "Alle Radiosender"
},
@@ -978,6 +1004,9 @@
"SOURCE_PLAYLIST_MISSING": "Dieser Download kann nicht mehr in der Bibliothek geöffnet werden, weil die zugehörige Playlist entfernt wurde.",
"FILE_NOT_FOUND": "Diese heruntergeladene Datei ist auf der Festplatte nicht mehr verfügbar.",
"FILE_ACTION_ERROR": "Die Dateiaktion konnte nicht ausgeführt werden.",
"ACTION_FAILED": "Aktion fehlgeschlagen",
"PAUSE": "Pausieren",
"RESUME": "Fortsetzen",
"CANCEL": "Abbrechen",
"RETRY": "Wiederholen",
"REMOVE": "Entfernen",
@@ -991,7 +1020,8 @@
"DOWNLOADING": "Wird heruntergeladen",
"COMPLETED": "Abgeschlossen",
"FAILED": "Fehlgeschlagen",
"CANCELED": "Abgebrochen"
"CANCELED": "Abgebrochen",
"PAUSED": "Pausiert"
}
},
"REMOTE_CONTROL": {
+31 -1
View File
@@ -298,6 +298,8 @@
"VIDEO_PLAYER_DESCRIPTION": "Επιλογή προεπιλεγμένου προγράμματος αναπαραγωγής βίντεο",
"WEB_PLAYER_SHARED_CONTROLS": "Ενοποιημένα στοιχεία ελέγχου για web players (πειραματικό)",
"WEB_PLAYER_SHARED_CONTROLS_DESCRIPTION": "Χρησιμοποιήστε τα κοινά στοιχεία ελέγχου του IPTVnator σε HTML5, Video.js και ArtPlayer.",
"PLAYER_AMBIENT_MODE": "Περιβαλλοντικό γέμισμα",
"PLAYER_AMBIENT_MODE_DESCRIPTION": "Γεμίστε το χώρο γύρω από τον αναπαραγωγό με θολωμένη, σκοτεινή αφίσα αντί για απλές μαύρες ράβδους.",
"STREAM_FORMAT_DESCRIPTION": "Επιλογή προεπιλεγμένης μορφής ροής (xtream)",
"LANGUAGE_DESCRIPTION": "Επιλέξτε τη γλώσσα της εφαρμογής",
"THEME_DESCRIPTION": "Επιλέξτε οπτικό θέμα της εφαρμογής",
@@ -453,6 +455,7 @@
},
"EMBEDDED_MPV": {
"PLAYER": {
"BACK": "Πίσω",
"RETRY": "Επανάληψη",
"STALLED": "Η έναρξη αυτής της ροής καθυστερεί περισσότερο από το αναμενόμενο.",
"PLAYBACK_FAILED": "Η αναπαραγωγή με το ενσωματωμένο MPV απέτυχε.",
@@ -569,6 +572,7 @@
"REMOVE_FAVORITE": "Αφαίρεση από τα αγαπημένα",
"ADD_FAVORITE": "Προσθήκη στα αγαπημένα",
"SHOW_DETAILS": "Εμφάνιση λεπτομερειών καναλιού",
"MAP_EPG": "Αντιστοίχιση καναλιού EPG",
"FAVORITES_UPDATED": "Τα αγαπημένα ενημερώθηκαν!",
"SELECT_CHANNEL_PLAYBACK": "Επιλέξτε ένα κανάλι για να ξεκινήσει η αναπαραγωγή",
"SORT_BY": "Ταξινόμηση κατά",
@@ -714,6 +718,21 @@
"GROUP_EXPAND": "εμφάνιση ›"
}
},
"EPG_MAPPING_DIALOG": {
"TITLE": "Αντιστοίχιση καναλιού EPG",
"SUBTITLE": "Επιλέξτε χειροκίνητα κανάλι EPG για το \"{{channelName}}\"",
"SEARCH_PLACEHOLDER": "Αναζήτηση καναλιών EPG...",
"CURRENT_MAPPING": "Τρέχουσα αντιστοίχιση",
"NO_MAPPING": "Δεν έχει οριστεί αντιστοίχιση EPG",
"SAVE": "Αποθήκευση αντιστοίχισης",
"REMOVE": "Κατάργηση αντιστοίχισης",
"CLOSE": "Κλείσιμο",
"NO_RESULTS": "Δεν βρέθηκαν κανάλια EPG",
"SEARCH_HINT": "Πληκτρολογήστε τουλάχιστον {{min}} χαρακτήρες για αναζήτηση",
"SAVED": "Η αντιστοίχιση EPG αποθηκεύτηκε",
"REMOVED": "Η αντιστοίχιση EPG καταργήθηκε",
"SAVE_FAILED": "Δεν ήταν δυνατή η ενημέρωση της αντιστοίχισης EPG"
},
"LANGUAGES": {
"ARABIC": "العربية",
"MOROCCAN_ARABIC": "العربية (اللهجة المغربية)",
@@ -766,6 +785,8 @@
"ACTORS": "Ηθοποιοί",
"DIRECTOR": "Σκηνοθέτης",
"SIMILAR": "Παρόμοια",
"CREW_JOB_DIRECTOR": "Σκηνοθέτης",
"CREW_JOB_CREATOR": "Δημιουργός",
"ACTOR_FILMOGRAPHY": "Φιλμογραφία",
"ACTOR_FILTER_ALL": "Όλα",
"ACTOR_SCOPE_THIS_PORTAL": "Αυτή η πύλη",
@@ -951,6 +972,11 @@
"CONTENT_NOT_AVAILABLE": "Αυτό το περιεχόμενο δεν είναι διαθέσιμο σε αυτόν τον διακομιστή",
"PLAYBACK_ERROR": "Αποτυχία λήψης διεύθυνσης URL αναπαραγωγής",
"LOADING_SEASONS": "Φόρτωση σεζόν...",
"LOADING_ALL_CHANNELS": "Φόρτωση πλήρους λίστας καναλιών…",
"REFRESH_CHANNEL_LIST": "Ανανέωση λίστας καναλιών",
"NO_CHANNELS_IN_CATEGORY": "Δεν υπάρχουν κανάλια σε αυτήν την κατηγορία",
"ITEM": "στοιχείο",
"ITEMS": "στοιχεία",
"NO_EPISODES": "Δεν υπάρχουν διαθέσιμα επεισόδια",
"ALL_RADIO": "Όλα τα ραδιόφωνα"
},
@@ -978,6 +1004,9 @@
"SOURCE_PLAYLIST_MISSING": "Αυτή η λήψη δεν μπορεί πλέον να ανοίξει στη βιβλιοθήκη επειδή η πηγαία λίστα αναπαραγωγής αφαιρέθηκε.",
"FILE_NOT_FOUND": "Αυτό το ληφθέν αρχείο δεν είναι πλέον διαθέσιμο στον δίσκο.",
"FILE_ACTION_ERROR": "Δεν ήταν δυνατή η ολοκλήρωση της ενέργειας αρχείου.",
"ACTION_FAILED": "Η ενέργεια απέτυχε",
"PAUSE": "Παύση",
"RESUME": "Συνέχιση",
"CANCEL": "Ακύρωση",
"RETRY": "Επανάληψη",
"REMOVE": "Αφαίρεση",
@@ -991,7 +1020,8 @@
"DOWNLOADING": "Λήψη",
"COMPLETED": "Ολοκληρώθηκε",
"FAILED": "Απέτυχε",
"CANCELED": "Ακυρώθηκε"
"CANCELED": "Ακυρώθηκε",
"PAUSED": "Σε παύση"
}
},
"REMOTE_CONTROL": {
+31 -1
View File
@@ -298,6 +298,8 @@
"VIDEO_PLAYER_DESCRIPTION": "Select default video player",
"WEB_PLAYER_SHARED_CONTROLS": "Unified controls for web players (experimental)",
"WEB_PLAYER_SHARED_CONTROLS_DESCRIPTION": "Use IPTVnator's shared controls in HTML5, Video.js, and ArtPlayer.",
"PLAYER_AMBIENT_MODE": "Ambient background fill",
"PLAYER_AMBIENT_MODE_DESCRIPTION": "Fill the space around the player with a blurred, dimmed poster instead of plain black bars.",
"STREAM_FORMAT_DESCRIPTION": "Select default stream format (xtream)",
"LANGUAGE_DESCRIPTION": "Select language of the application",
"THEME_DESCRIPTION": "Select visual theme of the application",
@@ -453,6 +455,7 @@
},
"EMBEDDED_MPV": {
"PLAYER": {
"BACK": "Back",
"RETRY": "Retry",
"STALLED": "This stream is taking longer than expected to start.",
"PLAYBACK_FAILED": "Embedded MPV playback failed.",
@@ -569,6 +572,7 @@
"REMOVE_FAVORITE": "Remove from favorites",
"ADD_FAVORITE": "Add to favorites",
"SHOW_DETAILS": "Show channel details",
"MAP_EPG": "Map EPG channel",
"FAVORITES_UPDATED": "Favorites were updated!",
"SELECT_CHANNEL_PLAYBACK": "Please select a channel to start playback",
"SORT_BY": "Sort by",
@@ -714,6 +718,21 @@
"GROUP_EXPAND": "show ›"
}
},
"EPG_MAPPING_DIALOG": {
"TITLE": "Map EPG Channel",
"SUBTITLE": "Manually select an EPG channel for \"{{channelName}}\"",
"SEARCH_PLACEHOLDER": "Search EPG channels...",
"CURRENT_MAPPING": "Current mapping",
"NO_MAPPING": "No EPG mapping set",
"SAVE": "Save mapping",
"REMOVE": "Remove mapping",
"CLOSE": "Close",
"NO_RESULTS": "No EPG channels found",
"SEARCH_HINT": "Type at least {{min}} characters to search",
"SAVED": "EPG mapping saved",
"REMOVED": "EPG mapping removed",
"SAVE_FAILED": "Could not update the EPG mapping"
},
"LANGUAGES": {
"ARABIC": "العربية",
"MOROCCAN_ARABIC": "العربية (اللهجة المغربية)",
@@ -766,6 +785,8 @@
"ACTORS": "Actors",
"DIRECTOR": "Director",
"SIMILAR": "Similar",
"CREW_JOB_DIRECTOR": "Director",
"CREW_JOB_CREATOR": "Creator",
"ACTOR_FILMOGRAPHY": "Filmography",
"ACTOR_FILTER_ALL": "All",
"ACTOR_SCOPE_THIS_PORTAL": "This portal",
@@ -951,6 +972,11 @@
"CONTENT_NOT_AVAILABLE": "This content is not available on this server",
"PLAYBACK_ERROR": "Failed to get playback URL",
"LOADING_SEASONS": "Loading seasons...",
"LOADING_ALL_CHANNELS": "Loading full channel list…",
"REFRESH_CHANNEL_LIST": "Refresh channel list",
"NO_CHANNELS_IN_CATEGORY": "No channels in this category",
"ITEM": "item",
"ITEMS": "items",
"NO_EPISODES": "No episodes available",
"ALL_RADIO": "All radio"
},
@@ -978,6 +1004,9 @@
"SOURCE_PLAYLIST_MISSING": "This download can no longer open in the library because its source playlist was removed.",
"FILE_NOT_FOUND": "This downloaded file is no longer available on disk.",
"FILE_ACTION_ERROR": "The file action could not be completed.",
"ACTION_FAILED": "Action failed",
"PAUSE": "Pause",
"RESUME": "Resume",
"CANCEL": "Cancel",
"RETRY": "Retry",
"REMOVE": "Remove",
@@ -991,7 +1020,8 @@
"DOWNLOADING": "Downloading",
"COMPLETED": "Completed",
"FAILED": "Failed",
"CANCELED": "Canceled"
"CANCELED": "Canceled",
"PAUSED": "Paused"
}
},
"REMOTE_CONTROL": {
+31 -1
View File
@@ -298,6 +298,8 @@
"VIDEO_PLAYER_DESCRIPTION": "Seleccionar reproductor de vídeo predeterminado",
"WEB_PLAYER_SHARED_CONTROLS": "Controles unificados para reproductores web (experimental)",
"WEB_PLAYER_SHARED_CONTROLS_DESCRIPTION": "Usa los controles compartidos de IPTVnator en HTML5, Video.js y ArtPlayer.",
"PLAYER_AMBIENT_MODE": "Relleno de fondo ambiental",
"PLAYER_AMBIENT_MODE_DESCRIPTION": "Rellena el espacio alrededor del reproductor con una imagen de póster desenfocada y oscurecida en lugar de barras negras simples.",
"STREAM_FORMAT_DESCRIPTION": "Selecciona el formato de transmision predeterminado (Xtream)",
"LANGUAGE_DESCRIPTION": "Seleccione el idioma de la aplicación",
"THEME_DESCRIPTION": "Seleccione el tema visual de la aplicación.",
@@ -453,6 +455,7 @@
},
"EMBEDDED_MPV": {
"PLAYER": {
"BACK": "Atrás",
"RETRY": "Reintentar",
"STALLED": "Este stream está tardando más de lo esperado en iniciarse.",
"PLAYBACK_FAILED": "Falló la reproducción de MPV integrado.",
@@ -569,6 +572,7 @@
"REMOVE_FAVORITE": "Quitar de favoritos",
"ADD_FAVORITE": "Agregar a favoritos",
"SHOW_DETAILS": "Mostrar detalles del canal",
"MAP_EPG": "Asignar canal EPG",
"FAVORITES_UPDATED": "¡Se actualizaron los favoritos!",
"SELECT_CHANNEL_PLAYBACK": "Selecciona un canal para iniciar la reproducción",
"SORT_BY": "Ordenar por",
@@ -714,6 +718,21 @@
"GROUP_EXPAND": "ver ›"
}
},
"EPG_MAPPING_DIALOG": {
"TITLE": "Asignar canal EPG",
"SUBTITLE": "Selecciona manualmente un canal EPG para \"{{channelName}}\"",
"SEARCH_PLACEHOLDER": "Buscar canales EPG...",
"CURRENT_MAPPING": "Asignación actual",
"NO_MAPPING": "No hay asignación EPG",
"SAVE": "Guardar asignación",
"REMOVE": "Eliminar asignación",
"CLOSE": "Cerrar",
"NO_RESULTS": "No se encontraron canales EPG",
"SEARCH_HINT": "Escribe al menos {{min}} caracteres para buscar",
"SAVED": "Asignación EPG guardada",
"REMOVED": "Asignación EPG eliminada",
"SAVE_FAILED": "No se pudo actualizar la asignación EPG"
},
"LANGUAGES": {
"ARABIC": "العربية",
"MOROCCAN_ARABIC": "العربية (اللهجة المغربية)",
@@ -766,6 +785,8 @@
"ACTORS": "Actores",
"DIRECTOR": "Director",
"SIMILAR": "Similares",
"CREW_JOB_DIRECTOR": "Director",
"CREW_JOB_CREATOR": "Creador",
"ACTOR_FILMOGRAPHY": "Filmografía",
"ACTOR_FILTER_ALL": "Todas",
"ACTOR_SCOPE_THIS_PORTAL": "Este portal",
@@ -951,6 +972,11 @@
"CONTENT_NOT_AVAILABLE": "Este contenido no está disponible en este servidor",
"PLAYBACK_ERROR": "No se pudo obtener la URL de reproducción",
"LOADING_SEASONS": "Cargando temporadas…",
"LOADING_ALL_CHANNELS": "Cargando la lista completa de canales…",
"REFRESH_CHANNEL_LIST": "Actualizar lista de canales",
"NO_CHANNELS_IN_CATEGORY": "No hay canales en esta categoría",
"ITEM": "elemento",
"ITEMS": "elementos",
"NO_EPISODES": "No hay episodios disponibles",
"ALL_RADIO": "Todas las radios"
},
@@ -978,6 +1004,9 @@
"SOURCE_PLAYLIST_MISSING": "Esta descarga ya no se puede abrir en la biblioteca porque su lista de reproducción de origen fue eliminada.",
"FILE_NOT_FOUND": "Este archivo descargado ya no está disponible en el disco.",
"FILE_ACTION_ERROR": "No se pudo completar la acción del archivo.",
"ACTION_FAILED": "La acción ha fallado",
"PAUSE": "Pausar",
"RESUME": "Reanudar",
"CANCEL": "Cancelar",
"RETRY": "Reintentar",
"REMOVE": "Eliminar",
@@ -991,7 +1020,8 @@
"DOWNLOADING": "Descargando",
"COMPLETED": "Completado",
"FAILED": "Fallido",
"CANCELED": "Cancelado"
"CANCELED": "Cancelado",
"PAUSED": "En pausa"
}
},
"REMOTE_CONTROL": {
+31 -1
View File
@@ -298,6 +298,8 @@
"VIDEO_PLAYER_DESCRIPTION": "Sélectionnez le lecteur vidéo par défaut",
"WEB_PLAYER_SHARED_CONTROLS": "Commandes unifiées pour les lecteurs web (expérimental)",
"WEB_PLAYER_SHARED_CONTROLS_DESCRIPTION": "Utilise les commandes partagées d’IPTVnator dans HTML5, Video.js et ArtPlayer.",
"PLAYER_AMBIENT_MODE": "Mode ambiant",
"PLAYER_AMBIENT_MODE_DESCRIPTION": "Remplit l'espace autour du lecteur avec une affiche floue et assombrie au lieu de barres noires simples.",
"STREAM_FORMAT_DESCRIPTION": "Sélectionnez le format de flux par défaut (xtream)",
"LANGUAGE_DESCRIPTION": "Sélectionnez la langue de l'application",
"THEME_DESCRIPTION": "Sélectionnez le thème visuel de l'application",
@@ -453,6 +455,7 @@
},
"EMBEDDED_MPV": {
"PLAYER": {
"BACK": "Retour",
"RETRY": "Réessayer",
"STALLED": "Ce flux met plus de temps que prévu à démarrer.",
"PLAYBACK_FAILED": "Échec de la lecture avec MPV intégré.",
@@ -569,6 +572,7 @@
"REMOVE_FAVORITE": "Retirer des favoris",
"ADD_FAVORITE": "Ajouter aux favoris",
"SHOW_DETAILS": "Afficher les détails de la chaîne",
"MAP_EPG": "Associer une chaîne EPG",
"FAVORITES_UPDATED": "Les favoris ont été mis à jour !",
"SELECT_CHANNEL_PLAYBACK": "Veuillez sélectionner une chaîne pour démarrer la lecture",
"SORT_BY": "Trier par",
@@ -714,6 +718,21 @@
"GROUP_EXPAND": "afficher ›"
}
},
"EPG_MAPPING_DIALOG": {
"TITLE": "Associer une chaîne EPG",
"SUBTITLE": "Sélectionner manuellement une chaîne EPG pour « {{channelName}} »",
"SEARCH_PLACEHOLDER": "Rechercher des chaînes EPG...",
"CURRENT_MAPPING": "Association actuelle",
"NO_MAPPING": "Aucune association EPG définie",
"SAVE": "Enregistrer l'association",
"REMOVE": "Supprimer l'association",
"CLOSE": "Fermer",
"NO_RESULTS": "Aucune chaîne EPG trouvée",
"SEARCH_HINT": "Saisissez au moins {{min}} caractères pour rechercher",
"SAVED": "Association EPG enregistrée",
"REMOVED": "Association EPG supprimée",
"SAVE_FAILED": "Impossible de mettre à jour l'association EPG"
},
"LANGUAGES": {
"ARABIC": "العربية",
"MOROCCAN_ARABIC": "العربية (اللهجة المغربية)",
@@ -766,6 +785,8 @@
"ACTORS": "Acteurs",
"DIRECTOR": "Réalisateur",
"SIMILAR": "Similaires",
"CREW_JOB_DIRECTOR": "Réalisateur",
"CREW_JOB_CREATOR": "Créateur",
"ACTOR_FILMOGRAPHY": "Filmographie",
"ACTOR_FILTER_ALL": "Tout",
"ACTOR_SCOPE_THIS_PORTAL": "Ce portail",
@@ -951,6 +972,11 @@
"CONTENT_NOT_AVAILABLE": "Ce contenu n'est pas disponible sur ce serveur",
"PLAYBACK_ERROR": "Échec de l'obtention de l'URL de lecture",
"LOADING_SEASONS": "Chargement des saisons…",
"LOADING_ALL_CHANNELS": "Chargement de la liste complète des chaînes…",
"REFRESH_CHANNEL_LIST": "Actualiser la liste des chaînes",
"NO_CHANNELS_IN_CATEGORY": "Aucune chaîne dans cette catégorie",
"ITEM": "élément",
"ITEMS": "éléments",
"NO_EPISODES": "Aucun épisode disponible",
"ALL_RADIO": "Toutes les radios"
},
@@ -978,6 +1004,9 @@
"SOURCE_PLAYLIST_MISSING": "Ce téléchargement ne peut plus être ouvert dans la bibliothèque car sa liste de lecture source a été supprimée.",
"FILE_NOT_FOUND": "Ce fichier téléchargé n'est plus disponible sur le disque.",
"FILE_ACTION_ERROR": "L'action sur le fichier n'a pas pu être effectuée.",
"ACTION_FAILED": "Échec de l'action",
"PAUSE": "Mettre en pause",
"RESUME": "Reprendre",
"CANCEL": "Annuler",
"RETRY": "Réessayer",
"REMOVE": "Supprimer",
@@ -991,7 +1020,8 @@
"DOWNLOADING": "En cours",
"COMPLETED": "Terminé",
"FAILED": "Échec",
"CANCELED": "Annulé"
"CANCELED": "Annulé",
"PAUSED": "En pause"
}
},
"REMOTE_CONTROL": {
+31 -1
View File
@@ -298,6 +298,8 @@
"VIDEO_PLAYER_DESCRIPTION": "Seleziona lettore video predefinito",
"WEB_PLAYER_SHARED_CONTROLS": "Controlli unificati per i player web (sperimentale)",
"WEB_PLAYER_SHARED_CONTROLS_DESCRIPTION": "Usa i controlli condivisi di IPTVnator in HTML5, Video.js e ArtPlayer.",
"PLAYER_AMBIENT_MODE": "Riempimento ambientale dello sfondo",
"PLAYER_AMBIENT_MODE_DESCRIPTION": "Riempie lo spazio intorno al lettore con un poster sfocato e scurito invece delle semplici barre nere.",
"STREAM_FORMAT_DESCRIPTION": "Seleziona il formato di streaming predefinito (xtream)",
"LANGUAGE_DESCRIPTION": "Seleziona la lingua dell'applicazione",
"THEME_DESCRIPTION": "Seleziona il tema visivo dell'applicazione",
@@ -453,6 +455,7 @@
},
"EMBEDDED_MPV": {
"PLAYER": {
"BACK": "Indietro",
"RETRY": "Riprova",
"STALLED": "L'avvio di questo stream sta richiedendo più tempo del previsto.",
"PLAYBACK_FAILED": "Riproduzione con MPV integrato non riuscita.",
@@ -569,6 +572,7 @@
"REMOVE_FAVORITE": "Rimuovi dai preferiti",
"ADD_FAVORITE": "Aggiungi ai preferiti",
"SHOW_DETAILS": "Mostra dettagli canale",
"MAP_EPG": "Associa canale EPG",
"FAVORITES_UPDATED": "Aggiornamento preferiti completato!",
"SELECT_CHANNEL_PLAYBACK": "Seleziona un canale per avviare la riproduzione",
"SORT_BY": "Ordina per",
@@ -714,6 +718,21 @@
"GROUP_EXPAND": "mostra ›"
}
},
"EPG_MAPPING_DIALOG": {
"TITLE": "Associa canale EPG",
"SUBTITLE": "Seleziona manualmente un canale EPG per \"{{channelName}}\"",
"SEARCH_PLACEHOLDER": "Cerca canali EPG...",
"CURRENT_MAPPING": "Associazione attuale",
"NO_MAPPING": "Nessuna associazione EPG impostata",
"SAVE": "Salva associazione",
"REMOVE": "Rimuovi associazione",
"CLOSE": "Chiudi",
"NO_RESULTS": "Nessun canale EPG trovato",
"SEARCH_HINT": "Digita almeno {{min}} caratteri per cercare",
"SAVED": "Associazione EPG salvata",
"REMOVED": "Associazione EPG rimossa",
"SAVE_FAILED": "Impossibile aggiornare l'associazione EPG"
},
"LANGUAGES": {
"ARABIC": "العربية",
"MOROCCAN_ARABIC": "العربية (اللهجة المغربية)",
@@ -766,6 +785,8 @@
"ACTORS": "Attori",
"DIRECTOR": "Regista",
"SIMILAR": "Simili",
"CREW_JOB_DIRECTOR": "Regista",
"CREW_JOB_CREATOR": "Ideatore",
"ACTOR_FILMOGRAPHY": "Filmografia",
"ACTOR_FILTER_ALL": "Tutti",
"ACTOR_SCOPE_THIS_PORTAL": "Questo portale",
@@ -951,6 +972,11 @@
"CONTENT_NOT_AVAILABLE": "Questo contenuto non è disponibile su questo server",
"PLAYBACK_ERROR": "Impossibile ottenere l'URL di riproduzione",
"LOADING_SEASONS": "Caricamento stagioni...",
"LOADING_ALL_CHANNELS": "Caricamento dell'elenco completo dei canali…",
"REFRESH_CHANNEL_LIST": "Aggiorna elenco canali",
"NO_CHANNELS_IN_CATEGORY": "Nessun canale in questa categoria",
"ITEM": "elemento",
"ITEMS": "elementi",
"NO_EPISODES": "Nessun episodio disponibile",
"ALL_RADIO": "Tutte le radio"
},
@@ -978,6 +1004,9 @@
"SOURCE_PLAYLIST_MISSING": "Questo download non può più essere aperto nella libreria perché la playlist di origine è stata rimossa.",
"FILE_NOT_FOUND": "Questo file scaricato non è più disponibile su disco.",
"FILE_ACTION_ERROR": "Impossibile completare l'azione sul file.",
"ACTION_FAILED": "Azione non riuscita",
"PAUSE": "Pausa",
"RESUME": "Riprendi",
"CANCEL": "Annulla",
"RETRY": "Riprova",
"REMOVE": "Rimuovi",
@@ -991,7 +1020,8 @@
"DOWNLOADING": "In download",
"COMPLETED": "Completato",
"FAILED": "Non riuscito",
"CANCELED": "Annullato"
"CANCELED": "Annullato",
"PAUSED": "In pausa"
}
},
"REMOTE_CONTROL": {
+31 -1
View File
@@ -298,6 +298,8 @@
"VIDEO_PLAYER_DESCRIPTION": "デフォルトのビデオプレーヤーを選択",
"WEB_PLAYER_SHARED_CONTROLS": "Webプレーヤーの統一コントロール(試験的)",
"WEB_PLAYER_SHARED_CONTROLS_DESCRIPTION": "HTML5、Video.js、ArtPlayerでIPTVnator共通のコントロールを使用します。",
"PLAYER_AMBIENT_MODE": "プレーヤー周囲のぼかし背景",
"PLAYER_AMBIENT_MODE_DESCRIPTION": "プレーヤーの周囲をぼかしたポスター画像で埋め、通常の黒い枠の代わりに表示します。",
"STREAM_FORMAT_DESCRIPTION": "デフォルトのストリーム形式を選択(Xtream)",
"LANGUAGE_DESCRIPTION": "アプリケーションの言語を選択",
"THEME_DESCRIPTION": "アプリケーションの視覚テーマを選択",
@@ -453,6 +455,7 @@
},
"EMBEDDED_MPV": {
"PLAYER": {
"BACK": "戻る",
"RETRY": "再試行",
"STALLED": "このストリームの開始に予想より時間がかかっています。",
"PLAYBACK_FAILED": "組み込みMPVでの再生に失敗しました。",
@@ -569,6 +572,7 @@
"REMOVE_FAVORITE": "お気に入りから削除",
"ADD_FAVORITE": "お気に入りに追加",
"SHOW_DETAILS": "チャンネルの詳細を表示",
"MAP_EPG": "EPGチャンネルを割り当て",
"FAVORITES_UPDATED": "お気に入りが更新されました!",
"SELECT_CHANNEL_PLAYBACK": "再生を開始するチャンネルを選択してください",
"SORT_BY": "並び替え",
@@ -714,6 +718,21 @@
"GROUP_EXPAND": "表示 ›"
}
},
"EPG_MAPPING_DIALOG": {
"TITLE": "EPGチャンネルの割り当て",
"SUBTITLE": "「{{channelName}}」のEPGチャンネルを手動で選択します",
"SEARCH_PLACEHOLDER": "EPGチャンネルを検索...",
"CURRENT_MAPPING": "現在の割り当て",
"NO_MAPPING": "EPGの割り当てはありません",
"SAVE": "割り当てを保存",
"REMOVE": "割り当てを削除",
"CLOSE": "閉じる",
"NO_RESULTS": "EPGチャンネルが見つかりません",
"SEARCH_HINT": "検索するには{{min}}文字以上入力してください",
"SAVED": "EPGの割り当てを保存しました",
"REMOVED": "EPGの割り当てを削除しました",
"SAVE_FAILED": "EPGの割り当てを更新できませんでした"
},
"LANGUAGES": {
"ARABIC": "العربية",
"MOROCCAN_ARABIC": "العربية (اللهجة المغربية)",
@@ -766,6 +785,8 @@
"ACTORS": "出演者",
"DIRECTOR": "監督",
"SIMILAR": "類似作品",
"CREW_JOB_DIRECTOR": "監督",
"CREW_JOB_CREATOR": "クリエイター",
"ACTOR_FILMOGRAPHY": "出演作品",
"ACTOR_FILTER_ALL": "すべて",
"ACTOR_SCOPE_THIS_PORTAL": "このポータル",
@@ -951,6 +972,11 @@
"CONTENT_NOT_AVAILABLE": "このコンテンツはこのサーバーでは利用できません",
"PLAYBACK_ERROR": "再生URLの取得に失敗しました",
"LOADING_SEASONS": "シーズンを読み込み中...",
"LOADING_ALL_CHANNELS": "全チャンネルリストを読み込み中…",
"REFRESH_CHANNEL_LIST": "チャンネルリストを更新",
"NO_CHANNELS_IN_CATEGORY": "このカテゴリーにチャンネルがありません",
"ITEM": "件",
"ITEMS": "件",
"NO_EPISODES": "利用可能なエピソードはありません",
"ALL_RADIO": "すべてのラジオ"
},
@@ -978,6 +1004,9 @@
"SOURCE_PLAYLIST_MISSING": "ソースのプレイリストが削除されたため、このダウンロードはライブラリで開けなくなりました。",
"FILE_NOT_FOUND": "このダウンロードファイルはディスク上で見つかりませんでした。",
"FILE_ACTION_ERROR": "ファイル操作を完了できませんでした。",
"ACTION_FAILED": "操作に失敗しました",
"PAUSE": "一時停止",
"RESUME": "再開",
"CANCEL": "キャンセル",
"RETRY": "再試行",
"REMOVE": "削除",
@@ -991,7 +1020,8 @@
"DOWNLOADING": "ダウンロード中",
"COMPLETED": "完了",
"FAILED": "失敗",
"CANCELED": "キャンセル済み"
"CANCELED": "キャンセル済み",
"PAUSED": "一時停止中"
}
},
"REMOTE_CONTROL": {
+31 -1
View File
@@ -298,6 +298,8 @@
"VIDEO_PLAYER_DESCRIPTION": "기본 비디오 플레이어 선택",
"WEB_PLAYER_SHARED_CONTROLS": "웹 플레이어 통합 컨트롤(실험적)",
"WEB_PLAYER_SHARED_CONTROLS_DESCRIPTION": "HTML5, Video.js 및 ArtPlayer에서 IPTVnator 공통 컨트롤을 사용합니다.",
"PLAYER_AMBIENT_MODE": "주변 배경 채우기",
"PLAYER_AMBIENT_MODE_DESCRIPTION": "플레이어 주변을 검은 막대 대신 흐려지고 어두워진 포스터로 채웁니다.",
"STREAM_FORMAT_DESCRIPTION": "기본 스트림 형식 선택 (xtream)",
"LANGUAGE_DESCRIPTION": "애플리케이션 언어 선택",
"THEME_DESCRIPTION": "애플리케이션의 시각적 테마 선택",
@@ -453,6 +455,7 @@
},
"EMBEDDED_MPV": {
"PLAYER": {
"BACK": "뒤로",
"RETRY": "다시 시도",
"STALLED": "이 스트림의 시작이 예상보다 오래 걸리고 있습니다.",
"PLAYBACK_FAILED": "내장 MPV 재생에 실패했습니다.",
@@ -569,6 +572,7 @@
"REMOVE_FAVORITE": "즐겨찾기에서 삭제하기",
"ADD_FAVORITE": "즐겨찾기에 추가",
"SHOW_DETAILS": "채널 세부정보 표시",
"MAP_EPG": "EPG 채널 매핑",
"FAVORITES_UPDATED": "즐겨찾기가 업데이트되었습니다!",
"SELECT_CHANNEL_PLAYBACK": "재생을 시작할 채널을 선택하세요",
"SORT_BY": "정렬 기준",
@@ -714,6 +718,21 @@
"GROUP_EXPAND": "보기 ›"
}
},
"EPG_MAPPING_DIALOG": {
"TITLE": "EPG 채널 매핑",
"SUBTITLE": "\"{{channelName}}\"의 EPG 채널을 직접 선택하세요",
"SEARCH_PLACEHOLDER": "EPG 채널 검색...",
"CURRENT_MAPPING": "현재 매핑",
"NO_MAPPING": "설정된 EPG 매핑 없음",
"SAVE": "매핑 저장",
"REMOVE": "매핑 제거",
"CLOSE": "닫기",
"NO_RESULTS": "EPG 채널을 찾을 수 없음",
"SEARCH_HINT": "검색하려면 {{min}}자 이상 입력하세요",
"SAVED": "EPG 매핑이 저장되었습니다",
"REMOVED": "EPG 매핑이 제거되었습니다",
"SAVE_FAILED": "EPG 매핑을 업데이트할 수 없습니다"
},
"LANGUAGES": {
"ARABIC": "العربية",
"MOROCCAN_ARABIC": "العربية (اللهجة المغربية)",
@@ -766,6 +785,8 @@
"ACTORS": "배우",
"DIRECTOR": "감독",
"SIMILAR": "비슷한 콘텐츠",
"CREW_JOB_DIRECTOR": "감독",
"CREW_JOB_CREATOR": "크리에이터",
"ACTOR_FILMOGRAPHY": "출연 작품",
"ACTOR_FILTER_ALL": "전체",
"ACTOR_SCOPE_THIS_PORTAL": "현재 포털",
@@ -951,6 +972,11 @@
"CONTENT_NOT_AVAILABLE": "이 서버에서는 이 콘텐츠를 사용할 수 없습니다",
"PLAYBACK_ERROR": "재생 URL을 가져오지 못했습니다",
"LOADING_SEASONS": "시즌을 불러오는 중...",
"LOADING_ALL_CHANNELS": "전체 채널 목록 불러오는 중…",
"REFRESH_CHANNEL_LIST": "채널 목록 새로고침",
"NO_CHANNELS_IN_CATEGORY": "이 카테고리에 채널이 없습니다",
"ITEM": "개",
"ITEMS": "개",
"NO_EPISODES": "사용 가능한 에피소드가 없습니다",
"ALL_RADIO": "모든 라디오"
},
@@ -978,6 +1004,9 @@
"SOURCE_PLAYLIST_MISSING": "원본 재생목록이 제거되어 이 다운로드 항목을 라이브러리에서 더 이상 열 수 없습니다.",
"FILE_NOT_FOUND": "이 다운로드한 파일을 디스크에서 더 이상 사용할 수 없습니다.",
"FILE_ACTION_ERROR": "파일 작업을 완료하지 못했습니다.",
"ACTION_FAILED": "작업 실패",
"PAUSE": "일시정지",
"RESUME": "재개",
"CANCEL": "취소",
"RETRY": "다시 시도",
"REMOVE": "제거",
@@ -991,7 +1020,8 @@
"DOWNLOADING": "다운로드 중",
"COMPLETED": "완료됨",
"FAILED": "실패",
"CANCELED": "취소됨"
"CANCELED": "취소됨",
"PAUSED": "일시정지됨"
}
},
"REMOTE_CONTROL": {
+31 -1
View File
@@ -298,6 +298,8 @@
"VIDEO_PLAYER_DESCRIPTION": "Selecteer de standaard videospeler",
"WEB_PLAYER_SHARED_CONTROLS": "Uniforme bediening voor webspelers (experimenteel)",
"WEB_PLAYER_SHARED_CONTROLS_DESCRIPTION": "Gebruik de gedeelde IPTVnator-bediening in HTML5, Video.js en ArtPlayer.",
"PLAYER_AMBIENT_MODE": "Ambient achtergrond",
"PLAYER_AMBIENT_MODE_DESCRIPTION": "Vult de ruimte rond de speler met een vervaagde, gedimde posterafbeelding in plaats van zwarte balken.",
"STREAM_FORMAT_DESCRIPTION": "Selecteer het standaard streamformaat (xtream)",
"LANGUAGE_DESCRIPTION": "Selecteer de taal van de applicatie",
"THEME_DESCRIPTION": "Kies het visuele thema van de applicatie",
@@ -453,6 +455,7 @@
},
"EMBEDDED_MPV": {
"PLAYER": {
"BACK": "Terug",
"RETRY": "Opnieuw proberen",
"STALLED": "Deze stream doet er langer over dan verwacht om te starten.",
"PLAYBACK_FAILED": "Afspelen via Embedded MPV is mislukt.",
@@ -569,6 +572,7 @@
"REMOVE_FAVORITE": "Verwijder uit favorieten",
"ADD_FAVORITE": "Toevoegen aan favorieten",
"SHOW_DETAILS": "Toon kanaaldetails",
"MAP_EPG": "EPG-kanaal koppelen",
"FAVORITES_UPDATED": "Favorieten zijn bijgewerkt!",
"SELECT_CHANNEL_PLAYBACK": "Selecteer een kanaal om af te spelen",
"SORT_BY": "Sorteren op",
@@ -714,6 +718,21 @@
"GROUP_EXPAND": "toon ›"
}
},
"EPG_MAPPING_DIALOG": {
"TITLE": "EPG-kanaal koppelen",
"SUBTITLE": "Selecteer handmatig een EPG-kanaal voor \"{{channelName}}\"",
"SEARCH_PLACEHOLDER": "EPG-kanalen zoeken...",
"CURRENT_MAPPING": "Huidige koppeling",
"NO_MAPPING": "Geen EPG-koppeling ingesteld",
"SAVE": "Koppeling opslaan",
"REMOVE": "Koppeling verwijderen",
"CLOSE": "Sluiten",
"NO_RESULTS": "Geen EPG-kanalen gevonden",
"SEARCH_HINT": "Typ minimaal {{min}} tekens om te zoeken",
"SAVED": "EPG-koppeling opgeslagen",
"REMOVED": "EPG-koppeling verwijderd",
"SAVE_FAILED": "Kan de EPG-koppeling niet bijwerken"
},
"LANGUAGES": {
"ARABIC": "العربية",
"MOROCCAN_ARABIC": "العربية (اللهجة المغربية)",
@@ -766,6 +785,8 @@
"ACTORS": "Acteurs",
"DIRECTOR": "Regisseur",
"SIMILAR": "Vergelijkbaar",
"CREW_JOB_DIRECTOR": "Regisseur",
"CREW_JOB_CREATOR": "Bedenker",
"ACTOR_FILMOGRAPHY": "Filmografie",
"ACTOR_FILTER_ALL": "Alles",
"ACTOR_SCOPE_THIS_PORTAL": "Dit portaal",
@@ -951,6 +972,11 @@
"CONTENT_NOT_AVAILABLE": "Deze inhoud is niet beschikbaar op deze server",
"PLAYBACK_ERROR": "Ophalen van afspeel-URL mislukt",
"LOADING_SEASONS": "Seizoenen laden...",
"LOADING_ALL_CHANNELS": "Volledige zenderlijst wordt geladen…",
"REFRESH_CHANNEL_LIST": "Zenderlijst vernieuwen",
"NO_CHANNELS_IN_CATEGORY": "Geen zenders in deze categorie",
"ITEM": "item",
"ITEMS": "items",
"NO_EPISODES": "Geen afleveringen beschikbaar",
"ALL_RADIO": "Alle radio"
},
@@ -978,6 +1004,9 @@
"SOURCE_PLAYLIST_MISSING": "Deze download kan niet meer worden geopend in de bibliotheek omdat de bronafspeellijst is verwijderd.",
"FILE_NOT_FOUND": "Dit gedownloade bestand is niet meer beschikbaar op de schijf.",
"FILE_ACTION_ERROR": "De bestandsactie kon niet worden voltooid.",
"ACTION_FAILED": "Actie mislukt",
"PAUSE": "Pauzeren",
"RESUME": "Hervatten",
"CANCEL": "Annuleren",
"RETRY": "Opnieuw proberen",
"REMOVE": "Verwijderen",
@@ -991,7 +1020,8 @@
"DOWNLOADING": "Downloaden",
"COMPLETED": "Voltooid",
"FAILED": "Mislukt",
"CANCELED": "Geannuleerd"
"CANCELED": "Geannuleerd",
"PAUSED": "Gepauzeerd"
}
},
"REMOTE_CONTROL": {
+31 -1
View File
@@ -298,6 +298,8 @@
"VIDEO_PLAYER_DESCRIPTION": "Wybierz domyślny odtwarzacz wideo",
"WEB_PLAYER_SHARED_CONTROLS": "Ujednolicone sterowanie odtwarzaczami internetowymi (eksperymentalne)",
"WEB_PLAYER_SHARED_CONTROLS_DESCRIPTION": "Używaj wspólnych elementów sterowania IPTVnator w HTML5, Video.js i ArtPlayer.",
"PLAYER_AMBIENT_MODE": "Rozmyte tło",
"PLAYER_AMBIENT_MODE_DESCRIPTION": "Wypełnij przestrzeń wokół odtwarzacza rozmytym, przyciemnianym plakatem zamiast zwykłych czarnych pasków.",
"STREAM_FORMAT_DESCRIPTION": "Wybierz domyślny format strumienia (xtream)",
"LANGUAGE_DESCRIPTION": "Wybierz język aplikacji",
"THEME_DESCRIPTION": "Wybierz motyw wizualny aplikacji",
@@ -453,6 +455,7 @@
},
"EMBEDDED_MPV": {
"PLAYER": {
"BACK": "Wstecz",
"RETRY": "Spróbuj ponownie",
"STALLED": "Uruchamianie tego strumienia trwa dłużej niż zwykle.",
"PLAYBACK_FAILED": "Odtwarzanie we wbudowanym MPV nie powiodło się.",
@@ -569,6 +572,7 @@
"REMOVE_FAVORITE": "Usuń z ulubionych",
"ADD_FAVORITE": "Dodaj do ulubionych",
"SHOW_DETAILS": "Pokaż szczegóły kanału",
"MAP_EPG": "Przypisz kanał EPG",
"FAVORITES_UPDATED": "Ulubione zostały zaktualizowane!",
"SELECT_CHANNEL_PLAYBACK": "Wybierz kanał, aby rozpocząć odtwarzanie",
"SORT_BY": "Sortuj według",
@@ -714,6 +718,21 @@
"GROUP_EXPAND": "pokaż ›"
}
},
"EPG_MAPPING_DIALOG": {
"TITLE": "Przypisz kanał EPG",
"SUBTITLE": "Ręcznie wybierz kanał EPG dla \"{{channelName}}\"",
"SEARCH_PLACEHOLDER": "Szukaj kanałów EPG...",
"CURRENT_MAPPING": "Bieżące przypisanie",
"NO_MAPPING": "Brak przypisania EPG",
"SAVE": "Zapisz przypisanie",
"REMOVE": "Usuń przypisanie",
"CLOSE": "Zamknij",
"NO_RESULTS": "Nie znaleziono kanałów EPG",
"SEARCH_HINT": "Wpisz co najmniej {{min}} znaki, aby wyszukać",
"SAVED": "Przypisanie EPG zapisane",
"REMOVED": "Przypisanie EPG usunięte",
"SAVE_FAILED": "Nie udało się zaktualizować przypisania EPG"
},
"LANGUAGES": {
"ARABIC": "العربية",
"MOROCCAN_ARABIC": "العربية (اللهجة المغربية)",
@@ -766,6 +785,8 @@
"ACTORS": "Aktorzy",
"DIRECTOR": "Reżyser",
"SIMILAR": "Podobne",
"CREW_JOB_DIRECTOR": "Reżyser",
"CREW_JOB_CREATOR": "Twórca",
"ACTOR_FILMOGRAPHY": "Filmografia",
"ACTOR_FILTER_ALL": "Wszystkie",
"ACTOR_SCOPE_THIS_PORTAL": "Ten portal",
@@ -951,6 +972,11 @@
"CONTENT_NOT_AVAILABLE": "Ta treść jest niedostępna na tym serwerze",
"PLAYBACK_ERROR": "Nie udało się uzyskać URL odtwarzania",
"LOADING_SEASONS": "Ładowanie sezonów...",
"LOADING_ALL_CHANNELS": "Ładowanie pełnej listy kanałów…",
"REFRESH_CHANNEL_LIST": "Odśwież listę kanałów",
"NO_CHANNELS_IN_CATEGORY": "Brak kanałów w tej kategorii",
"ITEM": "pozycja",
"ITEMS": "pozycji",
"NO_EPISODES": "Brak dostępnych odcinków",
"ALL_RADIO": "Wszystkie radia"
},
@@ -978,6 +1004,9 @@
"SOURCE_PLAYLIST_MISSING": "Tego pobrania nie można już otworzyć w bibliotece, ponieważ jego źródłowa lista odtwarzania została usunięta.",
"FILE_NOT_FOUND": "Ten pobrany plik nie jest już dostępny na dysku.",
"FILE_ACTION_ERROR": "Nie udało się wykonać akcji na pliku.",
"ACTION_FAILED": "Akcja nie powiodła się",
"PAUSE": "Wstrzymaj",
"RESUME": "Wznów",
"CANCEL": "Anuluj",
"RETRY": "Spróbuj ponownie",
"REMOVE": "Usuń",
@@ -991,7 +1020,8 @@
"DOWNLOADING": "Pobieranie",
"COMPLETED": "Ukończone",
"FAILED": "Niepowodzenie",
"CANCELED": "Anulowane"
"CANCELED": "Anulowane",
"PAUSED": "Wstrzymane"
}
},
"REMOTE_CONTROL": {
+31 -1
View File
@@ -298,6 +298,8 @@
"VIDEO_PLAYER_DESCRIPTION": "Selecionar reprodutor de vídeo padrão",
"WEB_PLAYER_SHARED_CONTROLS": "Controlos unificados para leitores web (experimental)",
"WEB_PLAYER_SHARED_CONTROLS_DESCRIPTION": "Usa os controlos partilhados do IPTVnator em HTML5, Video.js e ArtPlayer.",
"PLAYER_AMBIENT_MODE": "Preenchimento de fundo ambiente",
"PLAYER_AMBIENT_MODE_DESCRIPTION": "Preenche o espaço ao redor do reprodutor com um pôster desfocado e escurecido em vez de barras pretas simples.",
"STREAM_FORMAT_DESCRIPTION": "Selecionar formato de stream padrão (xtream)",
"LANGUAGE_DESCRIPTION": "Selecionar idioma do aplicativo",
"THEME_DESCRIPTION": "Selecionar tema visual do aplicativo",
@@ -453,6 +455,7 @@
},
"EMBEDDED_MPV": {
"PLAYER": {
"BACK": "Voltar",
"RETRY": "Tentar novamente",
"STALLED": "Este stream está demorando mais do que o esperado para iniciar.",
"PLAYBACK_FAILED": "Falha na reprodução do MPV integrado.",
@@ -569,6 +572,7 @@
"REMOVE_FAVORITE": "Remover dos favoritos",
"ADD_FAVORITE": "Adicionar aos favoritos",
"SHOW_DETAILS": "Mostrar detalhes do canal",
"MAP_EPG": "Associar canal EPG",
"FAVORITES_UPDATED": "Favoritos foram atualizados!",
"SELECT_CHANNEL_PLAYBACK": "Selecione um canal para iniciar a reprodução",
"SORT_BY": "Ordenar por",
@@ -714,6 +718,21 @@
"GROUP_EXPAND": "mostrar ›"
}
},
"EPG_MAPPING_DIALOG": {
"TITLE": "Associar canal EPG",
"SUBTITLE": "Selecione manualmente um canal EPG para \"{{channelName}}\"",
"SEARCH_PLACEHOLDER": "Pesquisar canais EPG...",
"CURRENT_MAPPING": "Associação atual",
"NO_MAPPING": "Nenhuma associação EPG definida",
"SAVE": "Guardar associação",
"REMOVE": "Remover associação",
"CLOSE": "Fechar",
"NO_RESULTS": "Nenhum canal EPG encontrado",
"SEARCH_HINT": "Digite pelo menos {{min}} caracteres para pesquisar",
"SAVED": "Associação EPG guardada",
"REMOVED": "Associação EPG removida",
"SAVE_FAILED": "Não foi possível atualizar a associação EPG"
},
"LANGUAGES": {
"ARABIC": "العربية",
"MOROCCAN_ARABIC": "العربية (اللهجة المغربية)",
@@ -766,6 +785,8 @@
"ACTORS": "Atores",
"DIRECTOR": "Diretor",
"SIMILAR": "Semelhantes",
"CREW_JOB_DIRECTOR": "Diretor",
"CREW_JOB_CREATOR": "Criador",
"ACTOR_FILMOGRAPHY": "Filmografia",
"ACTOR_FILTER_ALL": "Todos",
"ACTOR_SCOPE_THIS_PORTAL": "Este portal",
@@ -951,6 +972,11 @@
"CONTENT_NOT_AVAILABLE": "Este conteúdo não está disponível neste servidor",
"PLAYBACK_ERROR": "Falha ao obter URL de reprodução",
"LOADING_SEASONS": "Carregando temporadas...",
"LOADING_ALL_CHANNELS": "A carregar a lista completa de canais…",
"REFRESH_CHANNEL_LIST": "Atualizar lista de canais",
"NO_CHANNELS_IN_CATEGORY": "Nenhum canal nesta categoria",
"ITEM": "item",
"ITEMS": "itens",
"NO_EPISODES": "Nenhum episódio disponível",
"ALL_RADIO": "Todas as rádios"
},
@@ -978,6 +1004,9 @@
"SOURCE_PLAYLIST_MISSING": "Este download não pode mais ser aberto na biblioteca porque sua playlist de origem foi removida.",
"FILE_NOT_FOUND": "Este arquivo baixado não está mais disponível no disco.",
"FILE_ACTION_ERROR": "A ação do arquivo não pôde ser concluída.",
"ACTION_FAILED": "Falha na ação",
"PAUSE": "Pausar",
"RESUME": "Retomar",
"CANCEL": "Cancelar",
"RETRY": "Tentar novamente",
"REMOVE": "Remover",
@@ -991,7 +1020,8 @@
"DOWNLOADING": "Baixando",
"COMPLETED": "Concluído",
"FAILED": "Falhou",
"CANCELED": "Cancelado"
"CANCELED": "Cancelado",
"PAUSED": "Pausado"
}
},
"REMOTE_CONTROL": {
+31 -1
View File
@@ -298,6 +298,8 @@
"VIDEO_PLAYER_DESCRIPTION": "Выбрать стандартный видео плеер",
"WEB_PLAYER_SHARED_CONTROLS": "Единые элементы управления для веб-плееров (экспериментально)",
"WEB_PLAYER_SHARED_CONTROLS_DESCRIPTION": "Использовать общие элементы управления IPTVnator в HTML5, Video.js и ArtPlayer.",
"PLAYER_AMBIENT_MODE": "Заливка фона за плеером",
"PLAYER_AMBIENT_MODE_DESCRIPTION": "Заполнять пространство вокруг плеера размытым затемнённым постером вместо чёрных полос.",
"STREAM_FORMAT_DESCRIPTION": "Выбрать формат потока по умолчанию (Xtream)",
"LANGUAGE_DESCRIPTION": "Выбрать язык приложения",
"THEME_DESCRIPTION": "Выбрать визуальную тему оформления",
@@ -453,6 +455,7 @@
},
"EMBEDDED_MPV": {
"PLAYER": {
"BACK": "Назад",
"RETRY": "Повторить",
"STALLED": "Запуск этого потока занимает больше времени, чем ожидалось.",
"PLAYBACK_FAILED": "Не удалось воспроизвести через встроенный MPV.",
@@ -569,6 +572,7 @@
"REMOVE_FAVORITE": "Удалить из списка фаворитов",
"ADD_FAVORITE": "Добавить в избранное",
"SHOW_DETAILS": "Показать сведения о канале",
"MAP_EPG": "Привязать канал EPG",
"FAVORITES_UPDATED": "Список фаворитов был обновлен!",
"SELECT_CHANNEL_PLAYBACK": "Пожалуйста, выберите канал для начала воспроизведения",
"SORT_BY": "Сортировать по",
@@ -714,6 +718,21 @@
"GROUP_EXPAND": "показать ›"
}
},
"EPG_MAPPING_DIALOG": {
"TITLE": "Привязка канала EPG",
"SUBTITLE": "Выберите канал EPG для \"{{channelName}}\" вручную",
"SEARCH_PLACEHOLDER": "Поиск каналов EPG...",
"CURRENT_MAPPING": "Текущая привязка",
"NO_MAPPING": "Привязка EPG не задана",
"SAVE": "Сохранить привязку",
"REMOVE": "Удалить привязку",
"CLOSE": "Закрыть",
"NO_RESULTS": "Каналы EPG не найдены",
"SEARCH_HINT": "Введите не менее {{min}} символов для поиска",
"SAVED": "Привязка EPG сохранена",
"REMOVED": "Привязка EPG удалена",
"SAVE_FAILED": "Не удалось обновить привязку EPG"
},
"LANGUAGES": {
"ARABIC": "العربية",
"MOROCCAN_ARABIC": "العربية (اللهجة المغربية)",
@@ -766,6 +785,8 @@
"ACTORS": "Актеры",
"DIRECTOR": "Режиссёр",
"SIMILAR": "Похожее",
"CREW_JOB_DIRECTOR": "Режиссёр",
"CREW_JOB_CREATOR": "Создатель",
"ACTOR_FILMOGRAPHY": "Фильмография",
"ACTOR_FILTER_ALL": "Все",
"ACTOR_SCOPE_THIS_PORTAL": "Этот портал",
@@ -951,6 +972,11 @@
"CONTENT_NOT_AVAILABLE": "Этот контент недоступен на этом сервере",
"PLAYBACK_ERROR": "Не удалось получить URL для воспроизведения",
"LOADING_SEASONS": "Загрузка сезонов…",
"LOADING_ALL_CHANNELS": "Загрузка полного списка каналов…",
"REFRESH_CHANNEL_LIST": "Обновить список каналов",
"NO_CHANNELS_IN_CATEGORY": "В этой категории нет каналов",
"ITEM": "элемент",
"ITEMS": "элементов",
"NO_EPISODES": "Нет доступных эпизодов",
"ALL_RADIO": "Все радио"
},
@@ -978,6 +1004,9 @@
"SOURCE_PLAYLIST_MISSING": "Эту загрузку больше нельзя открыть в библиотеке, потому что исходный плейлист был удален.",
"FILE_NOT_FOUND": "Этот загруженный файл больше недоступен на диске.",
"FILE_ACTION_ERROR": "Не удалось выполнить действие с файлом.",
"ACTION_FAILED": "Действие не выполнено",
"PAUSE": "Пауза",
"RESUME": "Возобновить",
"CANCEL": "Отмена",
"RETRY": "Повторить",
"REMOVE": "Удалить",
@@ -991,7 +1020,8 @@
"DOWNLOADING": "Скачивается",
"COMPLETED": "Завершено",
"FAILED": "Ошибка",
"CANCELED": "Отменено"
"CANCELED": "Отменено",
"PAUSED": "На паузе"
}
},
"REMOTE_CONTROL": {
+31 -1
View File
@@ -298,6 +298,8 @@
"VIDEO_PLAYER_DESCRIPTION": "Varsayılan video oynatıcıyı seçin",
"WEB_PLAYER_SHARED_CONTROLS": "Web oynatıcıları için birleşik kontroller (deneysel)",
"WEB_PLAYER_SHARED_CONTROLS_DESCRIPTION": "HTML5, Video.js ve ArtPlayer'da IPTVnator'ın ortak kontrollerini kullan.",
"PLAYER_AMBIENT_MODE": "Ortam ışığı dolgusu",
"PLAYER_AMBIENT_MODE_DESCRIPTION": "Oynatıcının çevresindeki boşluğu siyah çubuklar yerine bulanık ve karartılmış bir poster ile doldurur.",
"STREAM_FORMAT_DESCRIPTION": "Varsayılan yayın formatını seçin (xtream)",
"LANGUAGE_DESCRIPTION": "Uygulamanın dilini seçin",
"THEME_DESCRIPTION": "Uygulamanın görünüm temasını seçin",
@@ -453,6 +455,7 @@
},
"EMBEDDED_MPV": {
"PLAYER": {
"BACK": "Geri",
"RETRY": "Tekrar dene",
"STALLED": "Bu yayının başlaması beklenenden uzun sürüyor.",
"PLAYBACK_FAILED": "Gömülü MPV oynatması başarısız oldu.",
@@ -569,6 +572,7 @@
"REMOVE_FAVORITE": "Favorilerden kaldır",
"ADD_FAVORITE": "Favorilere ekle",
"SHOW_DETAILS": "Kanal ayrıntılarını göster",
"MAP_EPG": "EPG kanalı eşle",
"FAVORITES_UPDATED": "Favoriler güncellendi!",
"SELECT_CHANNEL_PLAYBACK": "Lütfen oynatmaya başlamak için bir kanal seçin",
"SORT_BY": "Sırala",
@@ -714,6 +718,21 @@
"GROUP_EXPAND": "göster ›"
}
},
"EPG_MAPPING_DIALOG": {
"TITLE": "EPG Kanalı Eşle",
"SUBTITLE": "\"{{channelName}}\" için EPG kanalını elle seçin",
"SEARCH_PLACEHOLDER": "EPG kanallarında ara...",
"CURRENT_MAPPING": "Geçerli eşleme",
"NO_MAPPING": "EPG eşlemesi ayarlanmadı",
"SAVE": "Eşlemeyi kaydet",
"REMOVE": "Eşlemeyi kaldır",
"CLOSE": "Kapat",
"NO_RESULTS": "EPG kanalı bulunamadı",
"SEARCH_HINT": "Aramak için en az {{min}} karakter yazın",
"SAVED": "EPG eşlemesi kaydedildi",
"REMOVED": "EPG eşlemesi kaldırıldı",
"SAVE_FAILED": "EPG eşlemesi güncellenemedi"
},
"LANGUAGES": {
"ARABIC": "العربية",
"MOROCCAN_ARABIC": "العربية (اللهجة المغربية)",
@@ -766,6 +785,8 @@
"ACTORS": "Oyuncular",
"DIRECTOR": "Yönetmen",
"SIMILAR": "Benzerler",
"CREW_JOB_DIRECTOR": "Yönetmen",
"CREW_JOB_CREATOR": "Yaratıcı",
"ACTOR_FILMOGRAPHY": "Filmografi",
"ACTOR_FILTER_ALL": "Tümü",
"ACTOR_SCOPE_THIS_PORTAL": "Bu portal",
@@ -951,6 +972,11 @@
"CONTENT_NOT_AVAILABLE": "Bu içerik bu sunucuda mevcut değil",
"PLAYBACK_ERROR": "Oynatma URL'si alınamadı",
"LOADING_SEASONS": "Sezonlar yükleniyor...",
"LOADING_ALL_CHANNELS": "Tüm kanal listesi yükleniyor…",
"REFRESH_CHANNEL_LIST": "Kanal listesini yenile",
"NO_CHANNELS_IN_CATEGORY": "Bu kategoride kanal yok",
"ITEM": "öğe",
"ITEMS": "öğe",
"NO_EPISODES": "Bölüm mevcut değil",
"ALL_RADIO": "Tüm radyolar"
},
@@ -978,6 +1004,9 @@
"SOURCE_PLAYLIST_MISSING": "Bu indirme, kaynak oynatma listesi kaldırıldığı için kütüphanede artık açılamıyor.",
"FILE_NOT_FOUND": "Bu indirilen dosya artık diskte mevcut değil.",
"FILE_ACTION_ERROR": "Dosya işlemi tamamlanamadı.",
"ACTION_FAILED": "İşlem başarısız oldu",
"PAUSE": "Duraklat",
"RESUME": "Devam et",
"CANCEL": "İptal",
"RETRY": "Tekrar Dene",
"REMOVE": "Kaldır",
@@ -991,7 +1020,8 @@
"DOWNLOADING": "İndiriliyor",
"COMPLETED": "Tamamlandı",
"FAILED": "Başarısız",
"CANCELED": "İptal Edildi"
"CANCELED": "İptal Edildi",
"PAUSED": "Duraklatıldı"
}
},
"REMOTE_CONTROL": {
+31 -1
View File
@@ -298,6 +298,8 @@
"VIDEO_PLAYER_DESCRIPTION": "选择默认视频播放器",
"WEB_PLAYER_SHARED_CONTROLS": "Web 播放器统一控件(实验性)",
"WEB_PLAYER_SHARED_CONTROLS_DESCRIPTION": "在 HTML5、Video.js 和 ArtPlayer 中使用 IPTVnator 的共享控件。",
"PLAYER_AMBIENT_MODE": "环境背景填充",
"PLAYER_AMBIENT_MODE_DESCRIPTION": "用模糊、暗淡的海报填充播放器周围的空白,而不是黑条纹。",
"STREAM_FORMAT_DESCRIPTION": "选择默认的流格式(xtream)",
"LANGUAGE_DESCRIPTION": "选择应用程序的语言",
"THEME_DESCRIPTION": "选择应用程序的视觉主题",
@@ -453,6 +455,7 @@
},
"EMBEDDED_MPV": {
"PLAYER": {
"BACK": "返回",
"RETRY": "重试",
"STALLED": "该流的启动时间超出预期。",
"PLAYBACK_FAILED": "嵌入式 MPV 播放失败。",
@@ -569,6 +572,7 @@
"REMOVE_FAVORITE": "从收藏夹中删除",
"ADD_FAVORITE": "添加到收藏",
"SHOW_DETAILS": "显示频道详情",
"MAP_EPG": "映射 EPG 频道",
"FAVORITES_UPDATED": "收藏夹已更新!",
"SELECT_CHANNEL_PLAYBACK": "请选择一个频道开始播放",
"SORT_BY": "排序方式",
@@ -714,6 +718,21 @@
"GROUP_EXPAND": "展开 ›"
}
},
"EPG_MAPPING_DIALOG": {
"TITLE": "映射 EPG 频道",
"SUBTITLE": "为“{{channelName}}”手动选择 EPG 频道",
"SEARCH_PLACEHOLDER": "搜索 EPG 频道...",
"CURRENT_MAPPING": "当前映射",
"NO_MAPPING": "未设置 EPG 映射",
"SAVE": "保存映射",
"REMOVE": "移除映射",
"CLOSE": "关闭",
"NO_RESULTS": "未找到 EPG 频道",
"SEARCH_HINT": "输入至少 {{min}} 个字符进行搜索",
"SAVED": "EPG 映射已保存",
"REMOVED": "EPG 映射已移除",
"SAVE_FAILED": "无法更新 EPG 映射"
},
"LANGUAGES": {
"ARABIC": "العربية",
"MOROCCAN_ARABIC": "العربية (اللهجة المغربية)",
@@ -766,6 +785,8 @@
"ACTORS": "演员",
"DIRECTOR": "导演",
"SIMILAR": "类似影片",
"CREW_JOB_DIRECTOR": "导演",
"CREW_JOB_CREATOR": "主创",
"ACTOR_FILMOGRAPHY": "参演作品",
"ACTOR_FILTER_ALL": "全部",
"ACTOR_SCOPE_THIS_PORTAL": "当前门户",
@@ -951,6 +972,11 @@
"CONTENT_NOT_AVAILABLE": "此服务器上没有此内容",
"PLAYBACK_ERROR": "获取播放 URL 失败",
"LOADING_SEASONS": "正在加载季…",
"LOADING_ALL_CHANNELS": "正在加载完整频道列表…",
"REFRESH_CHANNEL_LIST": "刷新频道列表",
"NO_CHANNELS_IN_CATEGORY": "此分类中没有频道",
"ITEM": "项",
"ITEMS": "项",
"NO_EPISODES": "没有可用的剧集",
"ALL_RADIO": "所有广播"
},
@@ -978,6 +1004,9 @@
"SOURCE_PLAYLIST_MISSING": "由于源播放列表已被移除,此下载项无法在库中打开。",
"FILE_NOT_FOUND": "此下载文件已不在磁盘上。",
"FILE_ACTION_ERROR": "无法完成此文件操作。",
"ACTION_FAILED": "操作失败",
"PAUSE": "暂停",
"RESUME": "继续",
"CANCEL": "取消",
"RETRY": "重试",
"REMOVE": "移除",
@@ -991,7 +1020,8 @@
"DOWNLOADING": "下载中",
"COMPLETED": "已完成",
"FAILED": "失败",
"CANCELED": "已取消"
"CANCELED": "已取消",
"PAUSED": "已暂停"
}
},
"REMOTE_CONTROL": {
+31 -1
View File
@@ -298,6 +298,8 @@
"VIDEO_PLAYER_DESCRIPTION": "選擇預設影片播放器",
"WEB_PLAYER_SHARED_CONTROLS": "Web 播放器統一控制項(實驗性)",
"WEB_PLAYER_SHARED_CONTROLS_DESCRIPTION": "在 HTML5、Video.js 和 ArtPlayer 中使用 IPTVnator 的共用控制項。",
"PLAYER_AMBIENT_MODE": "環境背景填充",
"PLAYER_AMBIENT_MODE_DESCRIPTION": "用模糊、昏暗的海報填充播放器周圍的空間,取代純黑色邊框。",
"STREAM_FORMAT_DESCRIPTION": "選擇預設串流格式(xtream)",
"LANGUAGE_DESCRIPTION": "選擇應用程式語言",
"THEME_DESCRIPTION": "選擇應用程式視覺主題",
@@ -453,6 +455,7 @@
},
"EMBEDDED_MPV": {
"PLAYER": {
"BACK": "返回",
"RETRY": "重試",
"STALLED": "此串流的啟動時間比預期長。",
"PLAYBACK_FAILED": "內嵌 MPV 播放失敗。",
@@ -569,6 +572,7 @@
"REMOVE_FAVORITE": "從我的最愛中移除",
"ADD_FAVORITE": "加入我的最愛",
"SHOW_DETAILS": "顯示頻道詳細資訊",
"MAP_EPG": "對應 EPG 頻道",
"FAVORITES_UPDATED": "我的最愛已更新!",
"SELECT_CHANNEL_PLAYBACK": "請選擇一個頻道以開始播放",
"SORT_BY": "排序依據",
@@ -714,6 +718,21 @@
"GROUP_EXPAND": "顯示 ›"
}
},
"EPG_MAPPING_DIALOG": {
"TITLE": "對應 EPG 頻道",
"SUBTITLE": "為「{{channelName}}」手動選擇 EPG 頻道",
"SEARCH_PLACEHOLDER": "搜尋 EPG 頻道...",
"CURRENT_MAPPING": "目前對應",
"NO_MAPPING": "尚未設定 EPG 對應",
"SAVE": "儲存對應",
"REMOVE": "移除對應",
"CLOSE": "關閉",
"NO_RESULTS": "找不到 EPG 頻道",
"SEARCH_HINT": "輸入至少 {{min}} 個字元進行搜尋",
"SAVED": "EPG 對應已儲存",
"REMOVED": "EPG 對應已移除",
"SAVE_FAILED": "無法更新 EPG 對應"
},
"LANGUAGES": {
"ARABIC": "العربية",
"MOROCCAN_ARABIC": "العربية (اللهجة المغربية)",
@@ -766,6 +785,8 @@
"ACTORS": "演員",
"DIRECTOR": "導演",
"SIMILAR": "類似作品",
"CREW_JOB_DIRECTOR": "導演",
"CREW_JOB_CREATOR": "主創",
"ACTOR_FILMOGRAPHY": "參演作品",
"ACTOR_FILTER_ALL": "全部",
"ACTOR_SCOPE_THIS_PORTAL": "目前入口",
@@ -951,6 +972,11 @@
"CONTENT_NOT_AVAILABLE": "此伺服器上未提供此內容",
"PLAYBACK_ERROR": "無法取得播放網址",
"LOADING_SEASONS": "正在載入季數...",
"LOADING_ALL_CHANNELS": "正在載入完整頻道清單…",
"REFRESH_CHANNEL_LIST": "重新整理頻道清單",
"NO_CHANNELS_IN_CATEGORY": "此分類中沒有頻道",
"ITEM": "項",
"ITEMS": "項",
"NO_EPISODES": "沒有可用的集數",
"ALL_RADIO": "所有廣播"
},
@@ -978,6 +1004,9 @@
"SOURCE_PLAYLIST_MISSING": "此下載項目無法在媒體庫中開啟,因為其來源播放清單已被移除。",
"FILE_NOT_FOUND": "此下載檔案在磁碟上已不存在。",
"FILE_ACTION_ERROR": "無法完成檔案操作。",
"ACTION_FAILED": "操作失敗",
"PAUSE": "暫停",
"RESUME": "繼續",
"CANCEL": "取消",
"RETRY": "重試",
"REMOVE": "移除",
@@ -991,7 +1020,8 @@
"DOWNLOADING": "下載中",
"COMPLETED": "已完成",
"FAILED": "失敗",
"CANCELED": "已取消"
"CANCELED": "已取消",
"PAUSED": "已暫停"
}
},
"REMOTE_CONTROL": {
+10
View File
@@ -0,0 +1,10 @@
/**
* Git commit the app was built from. Populated by
* tools/build/inject-build-commit.mjs during CI builds; stays empty for
* local/dev builds, in which case Settings > About shows the plain version.
*
* Intentionally separate from AppConfig.version: appending the SHA to the
* semver itself would flip electron-updater into prerelease mode and leak
* into installer/artifact version fields.
*/
export const BUILD_COMMIT = '';