Merge pull request #30 from Tzahi12345/localization

Added localization support
This commit is contained in:
Tzahi12345
2020-03-15 15:18:00 -04:00
committed by GitHub
39 changed files with 5006 additions and 12954 deletions

1
.gitignore vendored
View File

@@ -56,3 +56,4 @@ backend/subscriptions/channels/*
backend/subscriptions/playlists/*
backend/subscriptions/archives/*
src/assets/default.json
package-lock.json

View File

@@ -7,10 +7,17 @@
"root": "",
"sourceRoot": "src",
"projectType": "application",
"i18n": {
"sourceLocale": "en-US",
"locales": {
"es": "src/locale/messages.es.xlf"
}
},
"architect": {
"build": {
"builder": "@angular-devkit/build-angular:browser",
"options": {
"aot": true,
"outputPath": "dist",
"index": "src/index.html",
"main": "src/main.ts",
@@ -30,6 +37,12 @@
},
"configurations": {
"production": {
"budgets": [
{
"type": "anyComponentStyle",
"maximumWarning": "6kb"
}
],
"optimization": true,
"outputHashing": "all",
"sourceMap": false,
@@ -45,6 +58,9 @@
"with": "src/environments/environment.prod.ts"
}
]
},
"es": {
"localize": ["es"]
}
}
},
@@ -56,6 +72,9 @@
"configurations": {
"production": {
"browserTarget": "youtube-dl-material:build:production"
},
"es": {
"browserTarget": "youtube-dl-material:build:es"
}
}
},
@@ -176,7 +195,7 @@
"schematics": {
"@schematics/angular:component": {
"prefix": "app",
"styleext": "scss"
"style": "scss"
},
"@schematics/angular:directive": {
"prefix": "app"

12768
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -17,42 +17,44 @@
},
"private": true,
"dependencies": {
"@angular-devkit/core": "^8.3.12",
"@angular/animations": "^8.2.11",
"@angular/cdk": "^8.2.3",
"@angular/common": "^8.2.11",
"@angular/compiler": "^8.2.11",
"@angular/core": "^8.2.11",
"@angular/forms": "^8.2.11",
"@angular-devkit/core": "^9.0.6",
"@angular/animations": "^9.0.6",
"@angular/cdk": "^9.1.2",
"@angular/common": "^9.0.6",
"@angular/compiler": "^9.0.6",
"@angular/core": "^9.0.6",
"@angular/forms": "^9.0.6",
"@angular/http": "^7.2.15",
"@angular/material": "^8.2.3",
"@angular/platform-browser": "^8.2.11",
"@angular/platform-browser-dynamic": "^8.2.11",
"@angular/router": "^8.2.11",
"@angular/localize": "^9.0.6",
"@angular/material": "^9.1.2",
"@angular/platform-browser": "^9.0.6",
"@angular/platform-browser-dynamic": "^9.0.6",
"@angular/router": "^9.0.6",
"@locl/core": "0.0.1-beta.2",
"core-js": "^2.4.1",
"file-saver": "^2.0.2",
"hammerjs": "^2.0.8",
"ng-lazyload-image": "^7.0.1",
"ng4-configure": "^0.1.7",
"ngx-content-loading": "^0.1.3",
"ngx-videogular": "^9.0.1",
"rxjs": "^6.5.3",
"rxjs-compat": "^6.0.0-rc.0",
"tslib": "^1.10.0",
"typescript": "~3.5.3",
"videogular2": "^7.0.1",
"typescript": "~3.7.5",
"web-animations-js": "^2.3.2",
"zone.js": "~0.9.1"
"zone.js": "~0.10.2"
},
"devDependencies": {
"@angular-devkit/build-angular": "^0.803.24",
"@angular/cli": "^8.3.12",
"@angular/compiler-cli": "^8.2.11",
"@angular/language-service": "^8.2.11",
"@angular-devkit/build-angular": "~0.900.6",
"@angular/cli": "^9.0.6",
"@angular/compiler-cli": "^9.0.6",
"@angular/language-service": "^9.0.6",
"@locl/cli": "0.0.1-beta.6",
"@types/core-js": "^2.5.2",
"@types/file-saver": "^2.0.1",
"@types/jasmine": "2.5.45",
"@types/node": "~6.0.60",
"codelyzer": "^5.0.1",
"@types/node": "^12.11.1",
"codelyzer": "^5.1.2",
"electron": "^8.0.1",
"jasmine-core": "~2.6.2",
"jasmine-spec-reporter": "~4.1.0",
@@ -64,7 +66,6 @@
"karma-jasmine-html-reporter": "^0.2.2",
"protractor": "~5.1.2",
"ts-node": "~3.0.4",
"tslint": "~5.3.2",
"typescript": "~3.5.3"
"tslint": "~5.3.2"
}
}

View File

@@ -14,12 +14,12 @@
<mat-menu #menuSettings="matMenu">
<button (click)="themeMenuItemClicked($event)" *ngIf="allowThemeChange" mat-menu-item>
<mat-icon>{{(postsService.theme.key === 'default') ? 'brightness_5' : 'brightness_2'}}</mat-icon>
<span>Dark</span>
<span i18n="Dark mode toggle label">Dark</span>
<mat-slide-toggle class="theme-slide-toggle" [checked]="postsService.theme.key === 'dark'"></mat-slide-toggle>
</button>
<button (click)="openSettingsDialog()" mat-menu-item>
<mat-icon>settings</mat-icon>
<span>Settings</span>
<span i18n="Settings menu label">Settings</span>
</button>
</mat-menu>
</div>
@@ -30,8 +30,8 @@
<mat-sidenav-container style="height: 100%">
<mat-sidenav #sidenav>
<mat-nav-list>
<a mat-list-item (click)="sidenav.close()" routerLink='/home'>Home</a>
<a mat-list-item (click)="sidenav.close()" routerLink='/subscriptions'>Subscriptions</a>
<a mat-list-item (click)="sidenav.close()" routerLink='/home'><ng-container i18n="Navigation menu Home Page title">Home</ng-container></a>
<a mat-list-item (click)="sidenav.close()" routerLink='/subscriptions'><ng-container i18n="Navigation menu Subscriptions Page title">Subscriptions</ng-container></a>
</mat-nav-list>
</mat-sidenav>
<mat-sidenav-content [style.background]="postsService.theme ? postsService.theme.background_color : null">

View File

@@ -4,7 +4,9 @@ import {FileCardComponent} from './file-card/file-card.component';
import { Observable } from 'rxjs/Observable';
import {FormControl, Validators} from '@angular/forms';
import {BrowserAnimationsModule} from '@angular/platform-browser/animations';
import {MatSnackBar, MatDialog, MatSidenav} from '@angular/material';
import { MatDialog } from '@angular/material/dialog';
import { MatSidenav } from '@angular/material/sidenav';
import { MatSnackBar } from '@angular/material/snack-bar';
import { saveAs } from 'file-saver';
import 'rxjs/add/observable/of';
import 'rxjs/add/operator/mapTo';
@@ -36,8 +38,8 @@ export class AppComponent implements OnInit {
allowThemeChange = null;
allowSubscriptions = false;
@ViewChild('sidenav', {static: false}) sidenav: MatSidenav;
@ViewChild('hamburgerMenu', {static: false, read: ElementRef}) hamburgerMenuButton: ElementRef;
@ViewChild('sidenav') sidenav: MatSidenav;
@ViewChild('hamburgerMenu', { read: ElementRef }) hamburgerMenuButton: ElementRef;
navigator: string = null;
constructor(public postsService: PostsService, public snackBar: MatSnackBar, private dialog: MatDialog,

View File

@@ -1,14 +1,27 @@
import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import {MatNativeDateModule, MatRadioModule, MatInputModule, MatButtonModule, MatSidenavModule, MatIconModule, MatListModule,
MatSnackBarModule, MatCardModule, MatSelectModule, MatToolbarModule, MatCheckboxModule, MatGridListModule,
MatProgressBarModule, MatExpansionModule,
MatProgressSpinnerModule,
MatButtonToggleModule,
MatDialogModule,
MatRippleModule,
MatSlideToggleModule,
MatMenuModule} from '@angular/material';
import { NgModule, LOCALE_ID } from '@angular/core';
import { registerLocaleData } from '@angular/common';
import { LocaleService } from '@soluling/angular';
import { MatButtonModule } from '@angular/material/button';
import { MatButtonToggleModule } from '@angular/material/button-toggle';
import { MatCardModule } from '@angular/material/card';
import { MatCheckboxModule } from '@angular/material/checkbox';
import { MatNativeDateModule, MatRippleModule } from '@angular/material/core';
import { MatDialogModule } from '@angular/material/dialog';
import { MatExpansionModule } from '@angular/material/expansion';
import { MatGridListModule } from '@angular/material/grid-list';
import { MatIconModule } from '@angular/material/icon';
import { MatInputModule } from '@angular/material/input';
import { MatListModule } from '@angular/material/list';
import { MatMenuModule } from '@angular/material/menu';
import { MatProgressBarModule } from '@angular/material/progress-bar';
import { MatProgressSpinnerModule } from '@angular/material/progress-spinner';
import { MatRadioModule } from '@angular/material/radio';
import { MatSelectModule } from '@angular/material/select';
import { MatSidenavModule } from '@angular/material/sidenav';
import { MatSlideToggleModule } from '@angular/material/slide-toggle';
import { MatSnackBarModule } from '@angular/material/snack-bar';
import { MatToolbarModule } from '@angular/material/toolbar';
import {DragDropModule} from '@angular/cdk/drag-drop';
import {FormsModule, ReactiveFormsModule} from '@angular/forms';
import { AppComponent } from './app.component';
@@ -21,10 +34,7 @@ import {RouterModule} from '@angular/router';
import { AppRoutingModule } from './app-routing.module';
import { MainComponent } from './main/main.component';
import { PlayerComponent } from './player/player.component';
import {VgCoreModule} from 'videogular2/compiled/core';
import {VgControlsModule} from 'videogular2/compiled/controls';
import {VgOverlayPlayModule} from 'videogular2/compiled/overlay-play';
import {VgBufferingModule} from 'videogular2/compiled/buffering';
import {VgCoreModule, VgControlsModule, VgOverlayPlayModule, VgBufferingModule} from 'ngx-videogular';
import { InputDialogComponent } from './input-dialog/input-dialog.component';
import { LazyLoadImageModule, IsVisibleProps } from 'ng-lazyload-image';
import { NgxContentLoadingModule } from 'ngx-content-loading';
@@ -38,6 +48,9 @@ import { SubscriptionFileCardComponent } from './subscription/subscription-file-
import { SubscriptionInfoDialogComponent } from './dialogs/subscription-info-dialog/subscription-info-dialog.component';
import { SettingsComponent } from './settings/settings.component';
import es from '@angular/common/locales/es';
registerLocaleData(es, 'es');
export function isVisible({ event, element, scrollContainer, offset }: IsVisibleProps<any>) {
return (element.id === 'video' ? videoFilesMouseHovering || videoFilesOpened : audioFilesMouseHovering || audioFilesOpened);
}
@@ -97,14 +110,11 @@ export function isVisible({ event, element, scrollContainer, offset }: IsVisible
RouterModule,
AppRoutingModule,
],
entryComponents: [
InputDialogComponent,
CreatePlaylistComponent,
SubscribeDialogComponent,
SubscriptionInfoDialogComponent,
SettingsComponent
providers: [
PostsService,
LocaleService,
{ provide: LOCALE_ID, deps: [LocaleService], useFactory: (service: LocaleService) => service.localeId },
],
providers: [PostsService],
bootstrap: [AppComponent]
})
export class AppModule { }

View File

@@ -1,13 +1,14 @@
<h4 mat-dialog-title>Create a playlist</h4>
<h4 mat-dialog-title i18n="Create a playlist dialog title">Create a playlist</h4>
<form>
<div>
<mat-form-field color="accent">
<input [(ngModel)]="name" matInput placeholder="Name" type="text" required aria-required [ngModelOptions]="{standalone: true}">
<input [(ngModel)]="name" matInput placeholder="Name" i18n-placeholder="Playlist name placeholder" type="text" required aria-required [ngModelOptions]="{standalone: true}">
</mat-form-field>
</div>
<div>
<mat-form-field color="accent">
<mat-label>{{(type === 'audio') ? 'Audio files' : 'Videos'}}</mat-label>
<mat-label *ngIf="type === 'audio'"><ng-container i18n="Audio files title">Audio files</ng-container></mat-label>
<mat-label *ngIf="type === 'video'"><ng-container i18n="Videos title">Videos</ng-container></mat-label>
<mat-select [formControl]="filesSelect" multiple required aria-required>
<mat-option *ngFor="let file of filesToSelectFrom" [value]="file.id">{{file.id}}</mat-option>
</mat-select>

View File

@@ -1,5 +1,5 @@
import { Component, OnInit, Inject } from '@angular/core';
import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material';
import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';
import { FormControl } from '@angular/forms';
import { PostsService } from 'app/posts.services';

View File

@@ -1,25 +1,25 @@
<h4 mat-dialog-title>Subscribe to playlist or channel</h4>
<h4 mat-dialog-title i18n="Subscribe dialog title">Subscribe to playlist or channel</h4>
<mat-dialog-content>
<div class="container-fluid">
<div class="row">
<div class="col-12">
<mat-form-field color="accent">
<input [(ngModel)]="url" matInput placeholder="URL" required aria-required="true">
<mat-hint>The playlist or channel URL</mat-hint>
<input [(ngModel)]="url" matInput placeholder="URL" i18n-placeholder="Subscription URL input placeholder" required aria-required="true">
<mat-hint><ng-container i18n="Subscription URL input hint">The playlist or channel URL</ng-container></mat-hint>
</mat-form-field>
</div>
<div class="col-12">
<mat-form-field color="accent">
<input [(ngModel)]="name" matInput placeholder="Custom name">
<mat-hint>This is optional</mat-hint>
<input [(ngModel)]="name" matInput placeholder="Custom name" i18n-placeholder="Subscription custom name placeholder">
<mat-hint><ng-container i18n="Custom name input hint">This is optional</ng-container></mat-hint>
</mat-form-field>
</div>
<div class="col-12 mt-3">
<mat-checkbox [(ngModel)]="download_all">Download all uploads</mat-checkbox>
<mat-checkbox [(ngModel)]="download_all"><ng-container i18n="Download all uploads subscription setting">Download all uploads</ng-container></mat-checkbox>
</div>
<div class="col-12" *ngIf="!download_all">
Download videos uploaded in the last
<ng-container i18n="Download time range prefix">Download videos uploaded in the last</ng-container>
<mat-form-field color="accent" style="width: 50px; text-align: center">
<input type="number" matInput [(ngModel)]="timerange_amount">
</mat-form-field>
@@ -34,7 +34,7 @@
</mat-dialog-content>
<mat-dialog-actions>
<button mat-button mat-dialog-close>Cancel</button>
<button mat-button mat-dialog-close><ng-container i18n="Subscribe cancel button">Cancel</ng-container></button>
<!-- The mat-dialog-close directive optionally accepts a value as a result for the dialog. -->
<button mat-button [disabled]="!url" type="submit" (click)="subscribeClicked()">Subscribe</button>
<div class="mat-spinner" *ngIf="subscribing">

View File

@@ -1,5 +1,6 @@
import { Component, OnInit } from '@angular/core';
import { MatSnackBar, MatDialogRef } from '@angular/material';
import { MatDialogRef } from '@angular/material/dialog';
import { MatSnackBar } from '@angular/material/snack-bar';
import { PostsService } from 'app/posts.services';
@Component({

View File

@@ -2,26 +2,26 @@
<mat-dialog-content>
<div class="info-item">
<strong>Type: </strong>
<strong><ng-container i18n="Subscription type property">Type:</ng-container>&nbsp;</strong>
<span class="info-item-value">{{(sub.isPlaylist ? 'Playlist' : 'Channel')}}</span>
</div>
<div class="info-item">
<strong>URL: </strong>
<strong><ng-container i18n="Subscription URL property">URL:</ng-container>&nbsp;</strong>
<span class="info-item-value">{{sub.url}}</span>
</div>
<div class="info-item">
<strong>ID: </strong>
<strong><ng-container i18n="Subscription ID property">ID:</ng-container>&nbsp;</strong>
<span class="info-item-value">{{sub.id}}</span>
</div>
<div class="info-item" *ngIf="sub.archive">
<strong>Archive: </strong>
<strong><ng-container i18n="Subscription ID property">Archive:</ng-container>&nbsp;</strong>
<span class="info-item-value">{{sub.archive}}</span>
</div>
</mat-dialog-content>
<mat-dialog-actions>
<button mat-button mat-dialog-close>Close</button>
<button mat-stroked-button (click)="downloadArchive()" color="accent">Export Archive</button>
<button mat-button mat-dialog-close><ng-container i18n="Close subscription info button">Close</ng-container></button>
<button mat-stroked-button (click)="downloadArchive()" color="accent"><ng-container i18n="Export Archive button">Export Archive</ng-container></button>
<span class="spacer"></span>
<button mat-button (click)="unsubscribe()" color="warn">Unsubscribe</button>
<button mat-button (click)="unsubscribe()" color="warn"><ng-container i18n="Unsubscribe button">Unsubscribe</ng-container></button>
</mat-dialog-actions>

View File

@@ -1,5 +1,5 @@
import { Component, OnInit, Inject } from '@angular/core';
import { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material';
import { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';
import { PostsService } from 'app/posts.services';
@Component({

View File

@@ -4,7 +4,7 @@
<h5 style="display: inline-block; margin-right: 5px; position: relative; top: 5px;">{{queueNumber}}.</h5>
</mat-grid-tile>
<mat-grid-tile [colspan]="6">
<div style="display: inline-block; text-align: center;">ID: {{url_id}}</div>
<div style="display: inline-block; text-align: center;"><ng-container i18n="Download ID">ID:</ng-container>&nbsp;{{url_id}}</div>
</mat-grid-tile>
<mat-grid-tile [colspan]="13">
<mat-progress-bar style="width: 80%" [value]="download.percent_complete" [mode]="(download.percent_complete === 0) ? 'indeterminate' : 'determinate'"></mat-progress-bar>

View File

@@ -3,8 +3,8 @@
<div style="height: 52px;">
<b><a href="javascript:void(0)" (click)="!isPlaylist ? mainComponent.goToFile(name, isAudio) : mainComponent.goToPlaylist(name, type)">{{title}}</a></b>
<br/>
<span class="max-two-lines">ID: {{name}}</span>
<div *ngIf="isPlaylist">Count: {{count}}</div>
<span class="max-two-lines"><ng-container i18n="File or playlist ID">ID:</ng-container>&nbsp;{{name}}</span>
<div *ngIf="isPlaylist"><ng-container i18n="Playlist video count">Count:</ng-container>&nbsp;{{count}}</div>
</div>
<div *ngIf="!image_errored && thumbnailURL" class="img-div">
<img class="image" (error) ="onImgError($event)" [id]="type" [lazyLoad]="thumbnailURL" [customObservable]="scrollAndLoad" (onLoad)="imageLoaded($event)" alt="Thumbnail">

View File

@@ -1,6 +1,6 @@
import { Component, OnInit, Input, Output } from '@angular/core';
import {PostsService} from '../posts.services';
import {MatSnackBar} from '@angular/material';
import { MatSnackBar } from '@angular/material/snack-bar';
import {EventEmitter} from '@angular/core';
import { MainComponent } from 'app/main/main.component';
import { Subject, Observable } from 'rxjs';

View File

@@ -7,6 +7,7 @@
</div>
</mat-dialog-content>
<mat-dialog-actions>
<!-- TODO: Internationalize these buttons -->
<button mat-button mat-dialog-close>Cancel</button>
<!-- The mat-dialog-close directive optionally accepts a value as a result for the dialog. -->
<button mat-button [disabled]="!inputText" type="submit" (click)="enterPressed()">{{submitText}}</button>

View File

@@ -1,5 +1,5 @@
import { Component, OnInit, Input, Inject, EventEmitter } from '@angular/core';
import { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material';
import { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';
@Component({
selector: 'app-input-dialog',

View File

@@ -2,7 +2,7 @@
<div class="big demo-basic">
<mat-card id="card" style="margin-right: 20px; margin-left: 20px;">
<mat-card-title>
Youtube Downloader
<ng-container i18n="Youtube downloader home page label">Youtube Downloader</ng-container>
</mat-card-title>
<mat-card-content>
<div style="position: relative;">
@@ -12,13 +12,19 @@
<div [ngClass]="allowQualitySelect ? 'col-sm-9' : null" class="col-12">
<mat-form-field color="accent" class="example-full-width">
<input style="padding-right: 25px;" matInput (ngModelChange)="inputChanged($event)" [(ngModel)]="url" [placeholder]="'URL' + (youtubeSearchEnabled ? ' or search' : '')" type="url" name="url" [formControl]="urlForm" required #urlinput>
<mat-error *ngIf="urlError || urlForm.invalid">Please enter a valid URL!</mat-error>
<mat-error *ngIf="urlError || urlForm.invalid">
<ng-container i18n="Enter valid URL error">Please enter a valid URL!</ng-container>
</mat-error>
<button class="input-clear-button" mat-icon-button (click)="clearInput()"><mat-icon>clear</mat-icon></button>
</mat-form-field>
</div>
<div *ngIf="allowQualitySelect" class="col-7 col-sm-3">
<mat-form-field color="accent" style="display: inline-block; width: inherit; min-width: 120px;">
<mat-label>Quality</mat-label>
<mat-label>
<ng-container i18n="Quality select label">
Quality
</ng-container>
</mat-label>
<mat-select [ngModelOptions]="{standalone: true}" [(ngModel)]="selectedQuality">
<ng-container *ngFor="let option of qualityOptions[(audioOnly) ? 'audio' : 'video']">
<mat-option *ngIf="option.value === '' || url && cachedAvailableFormats[url] && cachedAvailableFormats[url]['formats'] && cachedAvailableFormats[url]['formats'][(audioOnly) ? 'audio' : 'video'][option.value]" [value]="option.value">
@@ -42,22 +48,43 @@
<div style="font-size: 12px; margin-bottom: 10px;">
{{result.uploaded}}
</div>
<button mat-flat-button color="primary" style="float: left;" (click)="useURL(result.videoUrl)">Use URL</button>
<button mat-stroked-button color="primary" (click)="visitURL(result.videoUrl)" style="float: right">View</button>
<button mat-flat-button color="primary" style="float: left;" (click)="useURL(result.videoUrl)">
<ng-container i18n="YT search Use URL button for searched video">Use URL</ng-container>
</button>
<button mat-stroked-button color="primary" (click)="visitURL(result.videoUrl)" style="float: right">
<ng-container i18n="YT search View button for searched video">
View
</ng-container>
</button>
</mat-card>
</span>
</div>
</form>
<br/>
<mat-checkbox [disabled]="current_download" (change)="videoModeChanged($event)" [(ngModel)]="audioOnly" style="float: left; margin-top: -12px">Only Audio</mat-checkbox>
<mat-checkbox *ngIf="allowMultiDownloadMode" [disabled]="current_download" (change)="multiDownloadModeChanged($event)" [(ngModel)]="multiDownloadMode" style="float: right; margin-top: -12px">Multi-download mode</mat-checkbox>
<mat-checkbox [disabled]="current_download" (change)="videoModeChanged($event)" [(ngModel)]="audioOnly" style="float: left; margin-top: -12px">
<ng-container i18n="Only Audio checkbox">
Only Audio
</ng-container>
</mat-checkbox>
<mat-checkbox *ngIf="allowMultiDownloadMode" [disabled]="current_download" (change)="multiDownloadModeChanged($event)" [(ngModel)]="multiDownloadMode" style="float: right; margin-top: -12px">
<ng-container i18n="Multi-download Mode checkbox">
Multi-download Mode
</ng-container>
</mat-checkbox>
</div>
</mat-card-content>
<mat-card-actions>
<button style="margin-left: 8px; margin-bottom: 8px" (click)="downloadClicked()" [disabled]="downloadingfile" type="submit" mat-stroked-button
color="accent">Download</button>
<button (click)="cancelDownload()" style="float: right" *ngIf="!!current_download" mat-stroked-button color="warn">Cancel</button>
<button style="margin-left: 8px; margin-bottom: 8px" (click)="downloadClicked()" [disabled]="downloadingfile" type="submit" mat-stroked-button color="accent">
<ng-container i18n="Main download button">
Download
</ng-container>
</button>
<button (click)="cancelDownload()" style="float: right" *ngIf="!!current_download" mat-stroked-button color="warn">
<ng-container i18n="Cancel download button">
Cancel
</ng-container>
</button>
</mat-card-actions>
</mat-card>
</div>
@@ -66,35 +93,60 @@
<mat-expansion-panel class="big">
<mat-expansion-panel-header>
<mat-panel-title>
Advanced
<ng-container i18n="Advanced download mode panel">
Advanced
</ng-container>
</mat-panel-title>
</mat-expansion-panel-header>
<p *ngIf="this.simulatedOutput">Simulated command: <i>{{this.simulatedOutput}}</i></p>
<p *ngIf="this.simulatedOutput">
<ng-container i18n="Simulated command label">
Simulated command:
</ng-container>
&nbsp;<i>{{this.simulatedOutput}}</i></p>
<div class="container" style="padding-bottom: 20px;">
<div class="row">
<div class="col-12 col-sm-6">
<mat-checkbox color="accent" [disabled]="current_download" (change)="customArgsEnabledChanged($event)" [(ngModel)]="customArgsEnabled" style="z-index: 999" [ngModelOptions]="{standalone: true}">Use custom args</mat-checkbox>
<mat-checkbox color="accent" [disabled]="current_download" (change)="customArgsEnabledChanged($event)" [(ngModel)]="customArgsEnabled" style="z-index: 999" [ngModelOptions]="{standalone: true}">
<ng-container i18n="Use custom args checkbox">
Use custom args
</ng-container>
</mat-checkbox>
<mat-form-field color="accent" style="margin-bottom: 42px;" class="advanced-input">
<input [(ngModel)]="customArgs" [ngModelOptions]="{standalone: true}" [disabled]="!customArgsEnabled" matInput placeholder="Custom args">
<mat-hint>No need to include URL, just everything after.</mat-hint>
<input [(ngModel)]="customArgs" [ngModelOptions]="{standalone: true}" [disabled]="!customArgsEnabled" matInput placeholder="Custom args" i18n-placeholder="Custom args placeholder">
<mat-hint>
<ng-container i18n="Custom Args input hint">
No need to include URL, just everything after.
</ng-container>
</mat-hint>
</mat-form-field>
</div>
<div class="col-12 col-sm-6">
<mat-checkbox color="accent" [disabled]="current_download" (change)="customOutputEnabledChanged($event)" [(ngModel)]="customOutputEnabled" style="z-index: 999" [ngModelOptions]="{standalone: true}">Use custom output</mat-checkbox>
<mat-checkbox color="accent" [disabled]="current_download" (change)="customOutputEnabledChanged($event)" [(ngModel)]="customOutputEnabled" style="z-index: 999" [ngModelOptions]="{standalone: true}">
<ng-container i18n="Use custom output checkbox">
Use custom output
</ng-container>
</mat-checkbox>
<mat-form-field style="margin-bottom: 42px;" color="accent" class="advanced-input">
<input [(ngModel)]="customOutput" [ngModelOptions]="{standalone: true}" [disabled]="!customOutputEnabled" matInput placeholder="Custom output">
<mat-hint><a target="_blank" href="https://github.com/ytdl-org/youtube-dl/blob/master/README.md#output-template">Documentation</a>. Path is relative to the config download path. Don't include extension.</mat-hint>
<input [(ngModel)]="customOutput" [ngModelOptions]="{standalone: true}" [disabled]="!customOutputEnabled" matInput placeholder="Custom output" i18n-placeholder="Custom output placeholder">
<mat-hint><a target="_blank" href="https://github.com/ytdl-org/youtube-dl/blob/master/README.md#output-template">
<ng-container i18n="Youtube-dl output template documentation link">Documentation</ng-container></a>.
<ng-container i18n="Custom Output input hint">Path is relative to the config download path. Don't include extension.</ng-container>
</mat-hint>
</mat-form-field>
</div>
<div *ngIf="!youtubeAuthDisabledOverride" class="col-12 col-sm-6 mt-2">
<mat-checkbox color="accent" [disabled]="current_download" (change)="youtubeAuthEnabledChanged($event)" [(ngModel)]="youtubeAuthEnabled" style="z-index: 999" [ngModelOptions]="{standalone: true}">Use authentication</mat-checkbox>
<mat-checkbox color="accent" [disabled]="current_download" (change)="youtubeAuthEnabledChanged($event)" [(ngModel)]="youtubeAuthEnabled" style="z-index: 999" [ngModelOptions]="{standalone: true}">
<ng-container i18n="Use authentication checkbox">
Use authentication
</ng-container>
</mat-checkbox>
<mat-form-field color="accent" class="advanced-input">
<input [(ngModel)]="youtubeUsername" [ngModelOptions]="{standalone: true}" [disabled]="!youtubeAuthEnabled" matInput placeholder="Username">
<input [(ngModel)]="youtubeUsername" [ngModelOptions]="{standalone: true}" [disabled]="!youtubeAuthEnabled" matInput placeholder="Username" i18n-placeholder="YT Username placeholder">
</mat-form-field>
</div>
<div *ngIf="!youtubeAuthDisabledOverride" class="col-12 col-sm-6 mt-2">
<mat-form-field style="margin-top: 31px;" color="accent" class="advanced-input">
<input [(ngModel)]="youtubePassword" type="password" [ngModelOptions]="{standalone: true}" [disabled]="!youtubeAuthEnabled" matInput placeholder="Password">
<input [(ngModel)]="youtubePassword" type="password" [ngModelOptions]="{standalone: true}" [disabled]="!youtubeAuthEnabled" matInput placeholder="Password" i18n-placeholder="YT Password placeholder">
</mat-form-field>
</div>
</div>
@@ -138,10 +190,14 @@
<mat-expansion-panel (opened)="accordionOpened('audio')" (closed)="accordionClosed('audio')" (mouseleave)="accordionLeft('audio')" (mouseenter)="accordionEntered('audio')" class="big">
<mat-expansion-panel-header>
<mat-panel-title>
Audio
<ng-container i18n="Audio files title">
Audio
</ng-container>
</mat-panel-title>
<mat-panel-description>
Your audio files are here
<ng-container i18n="Audio files description">
Your audio files are here
</ng-container>
</mat-panel-description>
</mat-expansion-panel-header>
<div *ngIf="mp3s.length > 0;else nomp3s">
@@ -154,7 +210,7 @@
</mat-grid-list>
<mat-divider></mat-divider>
<div style="width: 100%; text-align: center; margin-top: 10px;">
<h6>Playlists</h6>
<h6 i18n="Playlists title">Playlists</h6>
</div>
<mat-grid-list *ngIf="playlists.audio.length > 0" (window:resize)="onResize($event)" [cols]="files_cols" rowHeight="150px">
<mat-grid-tile *ngFor="let playlist of playlists.audio; let i = index;">
@@ -165,7 +221,9 @@
</mat-grid-list>
<div class="add-playlist-button"><button (click)="openCreatePlaylistDialog('audio')" mat-fab><mat-icon>add</mat-icon></button></div>
<div *ngIf="playlists.audio.length === 0">
No playlists available. Create one from your downloading audio files by clicking the blue plus button.
<ng-container i18n="No video playlists available text">
No playlists available. Create one from your downloading audio files by clicking the blue plus button.
</ng-container>
</div>
</div>
@@ -173,10 +231,14 @@
<mat-expansion-panel (opened)="accordionOpened('video')" (closed)="accordionClosed('video')" (mouseleave)="accordionLeft('video')" (mouseenter)="accordionEntered('video')" class="big">
<mat-expansion-panel-header>
<mat-panel-title>
Video
<ng-container i18n="Video files title">
Video
</ng-container>
</mat-panel-title>
<mat-panel-description>
Your video files are here
<ng-container i18n="Video files description">
Your video files are here
</ng-container>
</mat-panel-description>
</mat-expansion-panel-header>
<div *ngIf="mp4s.length > 0;else nomp4s">
@@ -190,7 +252,7 @@
<mat-divider></mat-divider>
<div style="width: 100%; text-align: center; margin-top: 10px;">
<h6>Playlists</h6>
<h6 i18n="Playlists title">Playlists</h6>
</div>
<mat-grid-list *ngIf="playlists.video.length > 0" (window:resize)="onResize($event)" [cols]="files_cols" rowHeight="150px">
<mat-grid-tile *ngFor="let playlist of playlists.video; let i = index;">
@@ -203,7 +265,9 @@
<!-- Add video playlist button -->
<div class="add-playlist-button"><button (click)="openCreatePlaylistDialog('video')" mat-fab><mat-icon>add</mat-icon></button></div>
<div *ngIf="playlists.video.length === 0">
No playlists available. Create one from your downloading video files by clicking the blue plus button.
<ng-container i18n="No video playlists available text">
No playlists available. Create one from your downloading video files by clicking the blue plus button.
</ng-container>
</div>
</div>
</mat-expansion-panel>

View File

@@ -4,7 +4,8 @@ import {FileCardComponent} from '../file-card/file-card.component';
import { Observable } from 'rxjs/Observable';
import {FormControl, Validators} from '@angular/forms';
import {BrowserAnimationsModule} from '@angular/platform-browser/animations';
import {MatSnackBar, MatDialog} from '@angular/material';
import { MatDialog } from '@angular/material/dialog';
import { MatSnackBar } from '@angular/material/snack-bar';
import { saveAs } from 'file-saver';
import 'rxjs/add/observable/of';
import 'rxjs/add/operator/mapTo';
@@ -192,7 +193,7 @@ export class MainComponent implements OnInit {
selectedQuality = '';
formats_loading = false;
@ViewChild('urlinput', { read: ElementRef, static: false }) urlInput: ElementRef;
@ViewChild('urlinput', { read: ElementRef }) urlInput: ElementRef;
@ViewChildren('audiofilecard') audioFileCards: QueryList<FileCardComponent>;
@ViewChildren('videofilecard') videoFileCards: QueryList<FileCardComponent>;
last_valid_url = '';

View File

@@ -19,7 +19,7 @@
<div class="spinner-div">
<mat-spinner *ngIf="playlist_updating" [diameter]="25"></mat-spinner>
</div>
<button color="primary" [disabled]="playlist_updating" (click)="updatePlaylist()" mat-raised-button>Save changes <mat-icon>update</mat-icon></button>
<button color="primary" [disabled]="playlist_updating" (click)="updatePlaylist()" mat-raised-button><ng-container i18n="Playlist save changes button">Save changes</ng-container>&nbsp;<mat-icon>update</mat-icon></button>
</div>

View File

@@ -1,8 +1,9 @@
import { Component, OnInit, HostListener, EventEmitter } from '@angular/core';
import { VgAPI } from 'videogular2/compiled/core';
import { VgAPI } from 'ngx-videogular';
import { PostsService } from 'app/posts.services';
import { ActivatedRoute, Router } from '@angular/router';
import { MatDialog, MatSnackBar } from '@angular/material';
import { MatDialog } from '@angular/material/dialog';
import { MatSnackBar } from '@angular/material/snack-bar';
import { InputDialogComponent } from 'app/input-dialog/input-dialog.component';
import { CdkDragDrop, moveItemInArray } from '@angular/cdk/drag-drop';

View File

@@ -0,0 +1,735 @@
/**
* @author Phil Teare
* using wikipedia data
* Link: https://stackoverflow.com/a/4900304
*/
export const isoLangs = {
'ab': {
'name': 'Abkhaz',
'nativeName': 'аҧсуа'
},
'aa': {
'name': 'Afar',
'nativeName': 'Afaraf'
},
'af': {
'name': 'Afrikaans',
'nativeName': 'Afrikaans'
},
'ak': {
'name': 'Akan',
'nativeName': 'Akan'
},
'sq': {
'name': 'Albanian',
'nativeName': 'Shqip'
},
'am': {
'name': 'Amharic',
'nativeName': 'አማርኛ'
},
'ar': {
'name': 'Arabic',
'nativeName': 'العربية'
},
'an': {
'name': 'Aragonese',
'nativeName': 'Aragonés'
},
'hy': {
'name': 'Armenian',
'nativeName': 'Հայերեն'
},
'as': {
'name': 'Assamese',
'nativeName': 'অসমীয়া'
},
'av': {
'name': 'Avaric',
'nativeName': 'авар мацӀ, магӀарул мацӀ'
},
'ae': {
'name': 'Avestan',
'nativeName': 'avesta'
},
'ay': {
'name': 'Aymara',
'nativeName': 'aymar aru'
},
'az': {
'name': 'Azerbaijani',
'nativeName': 'azərbaycan dili'
},
'bm': {
'name': 'Bambara',
'nativeName': 'bamanankan'
},
'ba': {
'name': 'Bashkir',
'nativeName': 'башҡорт теле'
},
'eu': {
'name': 'Basque',
'nativeName': 'euskara, euskera'
},
'be': {
'name': 'Belarusian',
'nativeName': 'Беларуская'
},
'bn': {
'name': 'Bengali',
'nativeName': 'বাংলা'
},
'bh': {
'name': 'Bihari',
'nativeName': 'भोजपुरी'
},
'bi': {
'name': 'Bislama',
'nativeName': 'Bislama'
},
'bs': {
'name': 'Bosnian',
'nativeName': 'bosanski jezik'
},
'br': {
'name': 'Breton',
'nativeName': 'brezhoneg'
},
'bg': {
'name': 'Bulgarian',
'nativeName': 'български език'
},
'my': {
'name': 'Burmese',
'nativeName': 'ဗမာစာ'
},
'ca': {
'name': 'Catalan; Valencian',
'nativeName': 'Català'
},
'ch': {
'name': 'Chamorro',
'nativeName': 'Chamoru'
},
'ce': {
'name': 'Chechen',
'nativeName': 'нохчийн мотт'
},
'ny': {
'name': 'Chichewa; Chewa; Nyanja',
'nativeName': 'chiCheŵa, chinyanja'
},
'zh': {
'name': 'Chinese',
'nativeName': '中文 (Zhōngwén), 汉语, 漢語'
},
'cv': {
'name': 'Chuvash',
'nativeName': 'чӑваш чӗлхи'
},
'kw': {
'name': 'Cornish',
'nativeName': 'Kernewek'
},
'co': {
'name': 'Corsican',
'nativeName': 'corsu, lingua corsa'
},
'cr': {
'name': 'Cree',
'nativeName': 'ᓀᐦᐃᔭᐍᐏᐣ'
},
'hr': {
'name': 'Croatian',
'nativeName': 'hrvatski'
},
'cs': {
'name': 'Czech',
'nativeName': 'česky, čeština'
},
'da': {
'name': 'Danish',
'nativeName': 'dansk'
},
'dv': {
'name': 'Divehi; Dhivehi; Maldivian;',
'nativeName': 'ދިވެހި'
},
'nl': {
'name': 'Dutch',
'nativeName': 'Nederlands, Vlaams'
},
'en': {
'name': 'English',
'nativeName': 'English'
},
'eo': {
'name': 'Esperanto',
'nativeName': 'Esperanto'
},
'et': {
'name': 'Estonian',
'nativeName': 'eesti, eesti keel'
},
'ee': {
'name': 'Ewe',
'nativeName': 'Eʋegbe'
},
'fo': {
'name': 'Faroese',
'nativeName': 'føroyskt'
},
'fj': {
'name': 'Fijian',
'nativeName': 'vosa Vakaviti'
},
'fi': {
'name': 'Finnish',
'nativeName': 'suomi, suomen kieli'
},
'fr': {
'name': 'French',
'nativeName': 'français, langue française'
},
'ff': {
'name': 'Fula; Fulah; Pulaar; Pular',
'nativeName': 'Fulfulde, Pulaar, Pular'
},
'gl': {
'name': 'Galician',
'nativeName': 'Galego'
},
'ka': {
'name': 'Georgian',
'nativeName': 'ქართული'
},
'de': {
'name': 'German',
'nativeName': 'Deutsch'
},
'el': {
'name': 'Greek, Modern',
'nativeName': 'Ελληνικά'
},
'gn': {
'name': 'Guaraní',
'nativeName': 'Avañeẽ'
},
'gu': {
'name': 'Gujarati',
'nativeName': 'ગુજરાતી'
},
'ht': {
'name': 'Haitian; Haitian Creole',
'nativeName': 'Kreyòl ayisyen'
},
'ha': {
'name': 'Hausa',
'nativeName': 'Hausa, هَوُسَ'
},
'he': {
'name': 'Hebrew (modern)',
'nativeName': 'עברית'
},
'hz': {
'name': 'Herero',
'nativeName': 'Otjiherero'
},
'hi': {
'name': 'Hindi',
'nativeName': 'हिन्दी, हिंदी'
},
'ho': {
'name': 'Hiri Motu',
'nativeName': 'Hiri Motu'
},
'hu': {
'name': 'Hungarian',
'nativeName': 'Magyar'
},
'ia': {
'name': 'Interlingua',
'nativeName': 'Interlingua'
},
'id': {
'name': 'Indonesian',
'nativeName': 'Bahasa Indonesia'
},
'ie': {
'name': 'Interlingue',
'nativeName': 'Originally called Occidental; then Interlingue after WWII'
},
'ga': {
'name': 'Irish',
'nativeName': 'Gaeilge'
},
'ig': {
'name': 'Igbo',
'nativeName': 'Asụsụ Igbo'
},
'ik': {
'name': 'Inupiaq',
'nativeName': 'Iñupiaq, Iñupiatun'
},
'io': {
'name': 'Ido',
'nativeName': 'Ido'
},
'is': {
'name': 'Icelandic',
'nativeName': 'Íslenska'
},
'it': {
'name': 'Italian',
'nativeName': 'Italiano'
},
'iu': {
'name': 'Inuktitut',
'nativeName': 'ᐃᓄᒃᑎᑐᑦ'
},
'ja': {
'name': 'Japanese',
'nativeName': '日本語 (にほんご/にっぽんご)'
},
'jv': {
'name': 'Javanese',
'nativeName': 'basa Jawa'
},
'kl': {
'name': 'Kalaallisut, Greenlandic',
'nativeName': 'kalaallisut, kalaallit oqaasii'
},
'kn': {
'name': 'Kannada',
'nativeName': 'ಕನ್ನಡ'
},
'kr': {
'name': 'Kanuri',
'nativeName': 'Kanuri'
},
'ks': {
'name': 'Kashmiri',
'nativeName': 'कश्मीरी, كشميري‎'
},
'kk': {
'name': 'Kazakh',
'nativeName': 'Қазақ тілі'
},
'km': {
'name': 'Khmer',
'nativeName': 'ភាសាខ្មែរ'
},
'ki': {
'name': 'Kikuyu, Gikuyu',
'nativeName': 'Gĩkũyũ'
},
'rw': {
'name': 'Kinyarwanda',
'nativeName': 'Ikinyarwanda'
},
'ky': {
'name': 'Kirghiz, Kyrgyz',
'nativeName': 'кыргыз тили'
},
'kv': {
'name': 'Komi',
'nativeName': 'коми кыв'
},
'kg': {
'name': 'Kongo',
'nativeName': 'KiKongo'
},
'ko': {
'name': 'Korean',
'nativeName': '한국어 (韓國語), 조선말 (朝鮮語)'
},
'ku': {
'name': 'Kurdish',
'nativeName': 'Kurdî, كوردی‎'
},
'kj': {
'name': 'Kwanyama, Kuanyama',
'nativeName': 'Kuanyama'
},
'la': {
'name': 'Latin',
'nativeName': 'latine, lingua latina'
},
'lb': {
'name': 'Luxembourgish, Letzeburgesch',
'nativeName': 'Lëtzebuergesch'
},
'lg': {
'name': 'Luganda',
'nativeName': 'Luganda'
},
'li': {
'name': 'Limburgish, Limburgan, Limburger',
'nativeName': 'Limburgs'
},
'ln': {
'name': 'Lingala',
'nativeName': 'Lingála'
},
'lo': {
'name': 'Lao',
'nativeName': 'ພາສາລາວ'
},
'lt': {
'name': 'Lithuanian',
'nativeName': 'lietuvių kalba'
},
'lu': {
'name': 'Luba-Katanga',
'nativeName': ''
},
'lv': {
'name': 'Latvian',
'nativeName': 'latviešu valoda'
},
'gv': {
'name': 'Manx',
'nativeName': 'Gaelg, Gailck'
},
'mk': {
'name': 'Macedonian',
'nativeName': 'македонски јазик'
},
'mg': {
'name': 'Malagasy',
'nativeName': 'Malagasy fiteny'
},
'ms': {
'name': 'Malay',
'nativeName': 'bahasa Melayu, بهاس ملايو‎'
},
'ml': {
'name': 'Malayalam',
'nativeName': 'മലയാളം'
},
'mt': {
'name': 'Maltese',
'nativeName': 'Malti'
},
'mi': {
'name': 'Māori',
'nativeName': 'te reo Māori'
},
'mr': {
'name': 'Marathi (Marāṭhī)',
'nativeName': 'मराठी'
},
'mh': {
'name': 'Marshallese',
'nativeName': 'Kajin M̧ajeļ'
},
'mn': {
'name': 'Mongolian',
'nativeName': 'монгол'
},
'na': {
'name': 'Nauru',
'nativeName': 'Ekakairũ Naoero'
},
'nv': {
'name': 'Navajo, Navaho',
'nativeName': 'Diné bizaad, Dinékʼehǰí'
},
'nb': {
'name': 'Norwegian Bokmål',
'nativeName': 'Norsk bokmål'
},
'nd': {
'name': 'North Ndebele',
'nativeName': 'isiNdebele'
},
'ne': {
'name': 'Nepali',
'nativeName': 'नेपाली'
},
'ng': {
'name': 'Ndonga',
'nativeName': 'Owambo'
},
'nn': {
'name': 'Norwegian Nynorsk',
'nativeName': 'Norsk nynorsk'
},
'no': {
'name': 'Norwegian',
'nativeName': 'Norsk'
},
'ii': {
'name': 'Nuosu',
'nativeName': 'ꆈꌠ꒿ Nuosuhxop'
},
'nr': {
'name': 'South Ndebele',
'nativeName': 'isiNdebele'
},
'oc': {
'name': 'Occitan',
'nativeName': 'Occitan'
},
'oj': {
'name': 'Ojibwe, Ojibwa',
'nativeName': 'ᐊᓂᔑᓈᐯᒧᐎᓐ'
},
'cu': {
'name': 'Old Church Slavonic, Church Slavic, Church Slavonic, Old Bulgarian, Old Slavonic',
'nativeName': 'ѩзыкъ словѣньскъ'
},
'om': {
'name': 'Oromo',
'nativeName': 'Afaan Oromoo'
},
'or': {
'name': 'Oriya',
'nativeName': 'ଓଡ଼ିଆ'
},
'os': {
'name': 'Ossetian, Ossetic',
'nativeName': 'ирон æвзаг'
},
'pa': {
'name': 'Panjabi, Punjabi',
'nativeName': 'ਪੰਜਾਬੀ, پنجابی‎'
},
'pi': {
'name': 'Pāli',
'nativeName': 'पाऴि'
},
'fa': {
'name': 'Persian',
'nativeName': 'فارسی'
},
'pl': {
'name': 'Polish',
'nativeName': 'polski'
},
'ps': {
'name': 'Pashto, Pushto',
'nativeName': 'پښتو'
},
'pt': {
'name': 'Portuguese',
'nativeName': 'Português'
},
'qu': {
'name': 'Quechua',
'nativeName': 'Runa Simi, Kichwa'
},
'rm': {
'name': 'Romansh',
'nativeName': 'rumantsch grischun'
},
'rn': {
'name': 'Kirundi',
'nativeName': 'kiRundi'
},
'ro': {
'name': 'Romanian, Moldavian, Moldovan',
'nativeName': 'română'
},
'ru': {
'name': 'Russian',
'nativeName': 'русский язык'
},
'sa': {
'name': 'Sanskrit (Saṁskṛta)',
'nativeName': 'संस्कृतम्'
},
'sc': {
'name': 'Sardinian',
'nativeName': 'sardu'
},
'sd': {
'name': 'Sindhi',
'nativeName': 'सिन्धी, سنڌي، سندھی‎'
},
'se': {
'name': 'Northern Sami',
'nativeName': 'Davvisámegiella'
},
'sm': {
'name': 'Samoan',
'nativeName': 'gagana faa Samoa'
},
'sg': {
'name': 'Sango',
'nativeName': 'yângâ tî sängö'
},
'sr': {
'name': 'Serbian',
'nativeName': 'српски језик'
},
'gd': {
'name': 'Scottish Gaelic; Gaelic',
'nativeName': 'Gàidhlig'
},
'sn': {
'name': 'Shona',
'nativeName': 'chiShona'
},
'si': {
'name': 'Sinhala, Sinhalese',
'nativeName': 'සිංහල'
},
'sk': {
'name': 'Slovak',
'nativeName': 'slovenčina'
},
'sl': {
'name': 'Slovene',
'nativeName': 'slovenščina'
},
'so': {
'name': 'Somali',
'nativeName': 'Soomaaliga, af Soomaali'
},
'st': {
'name': 'Southern Sotho',
'nativeName': 'Sesotho'
},
'es': {
'name': 'Spanish; Castilian',
'nativeName': 'español, castellano'
},
'su': {
'name': 'Sundanese',
'nativeName': 'Basa Sunda'
},
'sw': {
'name': 'Swahili',
'nativeName': 'Kiswahili'
},
'ss': {
'name': 'Swati',
'nativeName': 'SiSwati'
},
'sv': {
'name': 'Swedish',
'nativeName': 'svenska'
},
'ta': {
'name': 'Tamil',
'nativeName': 'தமிழ்'
},
'te': {
'name': 'Telugu',
'nativeName': 'తెలుగు'
},
'tg': {
'name': 'Tajik',
'nativeName': 'тоҷикӣ, toğikī, تاجیکی‎'
},
'th': {
'name': 'Thai',
'nativeName': 'ไทย'
},
'ti': {
'name': 'Tigrinya',
'nativeName': 'ትግርኛ'
},
'bo': {
'name': 'Tibetan Standard, Tibetan, Central',
'nativeName': 'བོད་ཡིག'
},
'tk': {
'name': 'Turkmen',
'nativeName': 'Türkmen, Түркмен'
},
'tl': {
'name': 'Tagalog',
'nativeName': 'Wikang Tagalog, ᜏᜒᜃᜅ᜔ ᜆᜄᜎᜓᜄ᜔'
},
'tn': {
'name': 'Tswana',
'nativeName': 'Setswana'
},
'to': {
'name': 'Tonga (Tonga Islands)',
'nativeName': 'faka Tonga'
},
'tr': {
'name': 'Turkish',
'nativeName': 'Türkçe'
},
'ts': {
'name': 'Tsonga',
'nativeName': 'Xitsonga'
},
'tt': {
'name': 'Tatar',
'nativeName': 'татарча, tatarça, تاتارچا‎'
},
'tw': {
'name': 'Twi',
'nativeName': 'Twi'
},
'ty': {
'name': 'Tahitian',
'nativeName': 'Reo Tahiti'
},
'ug': {
'name': 'Uighur, Uyghur',
'nativeName': 'Uyƣurqə, ئۇيغۇرچە‎'
},
'uk': {
'name': 'Ukrainian',
'nativeName': 'українська'
},
'ur': {
'name': 'Urdu',
'nativeName': 'اردو'
},
'uz': {
'name': 'Uzbek',
'nativeName': 'zbek, Ўзбек, أۇزبېك‎'
},
've': {
'name': 'Venda',
'nativeName': 'Tshivenḓa'
},
'vi': {
'name': 'Vietnamese',
'nativeName': 'Tiếng Việt'
},
'vo': {
'name': 'Volapük',
'nativeName': 'Volapük'
},
'wa': {
'name': 'Walloon',
'nativeName': 'Walon'
},
'cy': {
'name': 'Welsh',
'nativeName': 'Cymraeg'
},
'wo': {
'name': 'Wolof',
'nativeName': 'Wollof'
},
'fy': {
'name': 'Western Frisian',
'nativeName': 'Frysk'
},
'xh': {
'name': 'Xhosa',
'nativeName': 'isiXhosa'
},
'yi': {
'name': 'Yiddish',
'nativeName': 'ייִדיש'
},
'yo': {
'name': 'Yoruba',
'nativeName': 'Yorùbá'
},
'za': {
'name': 'Zhuang, Chuang',
'nativeName': 'Saɯ cueŋƅ, Saw cuengh'
}
};

View File

@@ -1,25 +1,34 @@
<h4 mat-dialog-title>Settings</h4>
<h4 i18n="Settings title" mat-dialog-title>Settings</h4>
<!-- <ng-container i18n="Allow subscriptions setting"></ng-container> -->
<mat-dialog-content>
<!-- Language -->
<div>
Language:&nbsp;&nbsp;&nbsp;<mat-select class="locale-select" (selectionChange)="localeSelectChanged($event.value)" [(value)]="initialLocale">
<mat-option *ngFor="let locale of supported_locales" [value]="locale">
{{all_locales[locale]['nativeName']}}
</mat-option>
</mat-select>
</div>
<!-- Host -->
<mat-expansion-panel class="settings-expansion-panel">
<mat-expansion-panel-header>
<mat-panel-title>
Host
<ng-container i18n="Host settings title">Host</ng-container>
</mat-panel-title>
</mat-expansion-panel-header>
<div *ngIf="new_config" class="container-fluid">
<div class="row">
<div class="col-12">
<mat-form-field color="accent">
<input [(ngModel)]="new_config['Host']['url']" matInput placeholder="URL" required>
<mat-hint>Base URL this app will be accessed from, without the port.</mat-hint>
<input [(ngModel)]="new_config['Host']['url']" matInput placeholder="URL" i18n-placeholder="URL input placeholder" required>
<mat-hint><ng-container i18n="URL setting input hint">URL this app will be accessed from, without the port.</ng-container></mat-hint>
</mat-form-field>
</div>
<div class="col-12 mt-4">
<mat-form-field color="accent">
<input [(ngModel)]="new_config['Host']['port']" matInput placeholder="Port" required>
<mat-hint>The desired port. Default is 17442.</mat-hint>
<input [(ngModel)]="new_config['Host']['port']" matInput placeholder="Port" i18n-placeholder="Port input placeholder" required>
<mat-hint><ng-container i18n="Port setting input hint">The desired port. Default is 17442.</ng-container></mat-hint>
</mat-form-field>
</div>
@@ -31,24 +40,24 @@
<mat-expansion-panel class="settings-expansion-panel">
<mat-expansion-panel-header>
<mat-panel-title>
Encryption
<ng-container i18n="Encryption settings title">Encryption</ng-container>
</mat-panel-title>
</mat-expansion-panel-header>
<div *ngIf="new_config" class="container-fluid">
<div class="row">
<div class="col-12">
<mat-checkbox color="accent" [(ngModel)]="new_config['Encryption']['use-encryption']">Use encryption</mat-checkbox>
<mat-checkbox color="accent" [(ngModel)]="new_config['Encryption']['use-encryption']"><ng-container i18n="Use encryption setting">Use encryption</ng-container></mat-checkbox>
</div>
<div class="col-12">
<mat-form-field color="accent">
<input [disabled]="!new_config['Encryption']['use-encryption']" [(ngModel)]="new_config['Encryption']['cert-file-path']" matInput placeholder="Cert file path">
<input [disabled]="!new_config['Encryption']['use-encryption']" [(ngModel)]="new_config['Encryption']['cert-file-path']" matInput placeholder="Cert file path" i18n-placeholder="Cert file path input placeholder">
</mat-form-field>
</div>
<div class="col-12">
<mat-form-field color="accent">
<input [disabled]="!new_config['Encryption']['use-encryption']" [(ngModel)]="new_config['Encryption']['key-file-path']" matInput placeholder="Key file path">
<input [disabled]="!new_config['Encryption']['use-encryption']" [(ngModel)]="new_config['Encryption']['key-file-path']" matInput placeholder="Key file path" i18n-placeholder="Key file path input placeholder">
</mat-form-field>
</div>
</div>
@@ -59,29 +68,29 @@
<mat-expansion-panel class="settings-expansion-panel">
<mat-expansion-panel-header>
<mat-panel-title>
Downloader
<ng-container i18n="Downloader settings title">Downloader</ng-container>
</mat-panel-title>
</mat-expansion-panel-header>
<div *ngIf="new_config" class="container-fluid">
<div class="row">
<div class="col-12">
<mat-form-field color="accent">
<input matInput [(ngModel)]="new_config['Downloader']['path-audio']" placeholder="Audio folder path" required>
<mat-hint>Path for audio only downloads. It is relative to YTDL-Material's root folder.</mat-hint>
<input matInput [(ngModel)]="new_config['Downloader']['path-audio']" placeholder="Audio folder path" i18n-placeholder="Audio folder path input placeholder" required>
<mat-hint><ng-container i18n="Aduio path setting input hint">Path for audio only downloads. It is relative to YTDL-Material's root folder.</ng-container></mat-hint>
</mat-form-field>
</div>
<div class="col-12 mt-4">
<mat-form-field color="accent">
<input matInput [(ngModel)]="new_config['Downloader']['path-video']" placeholder="Video folder path" required>
<mat-hint>Path for video downloads. It is relative to YTDL-Material's root folder.</mat-hint>
<input matInput [(ngModel)]="new_config['Downloader']['path-video']" placeholder="Video folder path" i18n-placeholder="Video folder path input placeholder" required>
<mat-hint><ng-container i18n="Video path setting input hint">Path for video downloads. It is relative to YTDL-Material's root folder.</ng-container></mat-hint>
</mat-form-field>
</div>
<div class="col-12 mt-4">
<mat-form-field color="accent">
<textarea matInput [(ngModel)]="new_config['Downloader']['custom_args']" placeholder="Custom args"></textarea>
<mat-hint>Global custom args for downloads on the home page.</mat-hint>
<textarea matInput [(ngModel)]="new_config['Downloader']['custom_args']" placeholder="Custom args" i18n-placeholder="Custom args input placeholder"></textarea>
<mat-hint><ng-container i18n="Custom args setting input hint">Global custom args for downloads on the home page.</ng-container></mat-hint>
</mat-form-field>
</div>
</div>
@@ -92,28 +101,28 @@
<mat-expansion-panel class="settings-expansion-panel">
<mat-expansion-panel-header>
<mat-panel-title>
Extra
<ng-container i18n="Extra settings title">Extra</ng-container>
</mat-panel-title>
</mat-expansion-panel-header>
<div *ngIf="new_config" class="container-fluid">
<div class="row">
<div class="col-12">
<mat-form-field color="accent">
<input [(ngModel)]="new_config['Extra']['title_top']" matInput placeholder="Top title" required>
<input [(ngModel)]="new_config['Extra']['title_top']" matInput placeholder="Top title" i18n-placeholder="Top title input placeholder" required>
<mat-hint></mat-hint>
</mat-form-field>
</div>
<div class="col-12">
<mat-checkbox color="accent" [(ngModel)]="new_config['Extra']['file_manager_enabled']">File manager enabled</mat-checkbox>
<mat-checkbox color="accent" [(ngModel)]="new_config['Extra']['file_manager_enabled']"><ng-container i18n="File manager enabled setting">File manager enabled</ng-container></mat-checkbox>
</div>
<div class="col-12">
<mat-checkbox color="accent" [(ngModel)]="new_config['Extra']['allow_quality_select']">Allow quality select</mat-checkbox>
<mat-checkbox color="accent" [(ngModel)]="new_config['Extra']['allow_quality_select']"><ng-container i18n="Allow quality seelct setting">Allow quality select</ng-container></mat-checkbox>
</div>
<div class="col-12">
<mat-checkbox color="accent" [(ngModel)]="new_config['Extra']['download_only_mode']">Download only mode</mat-checkbox>
<mat-checkbox color="accent" [(ngModel)]="new_config['Extra']['download_only_mode']"><ng-container i18n="Download only mode setting">Download only mode</ng-container></mat-checkbox>
</div>
<div class="col-12">
<mat-checkbox color="accent" [(ngModel)]="new_config['Extra']['allow_multi_download_mode']">Allow multi-download mode</mat-checkbox>
<mat-checkbox color="accent" [(ngModel)]="new_config['Extra']['allow_multi_download_mode']"><ng-container i18n="Allow multi-downloade mode setting">Allow multi-download mode</ng-container></mat-checkbox>
</div>
</div>
</div>
@@ -123,18 +132,18 @@
<mat-expansion-panel class="settings-expansion-panel">
<mat-expansion-panel-header>
<mat-panel-title>
API
<ng-container i18n="API settings title">API</ng-container>
</mat-panel-title>
</mat-expansion-panel-header>
<div *ngIf="new_config" class="container-fluid">
<div class="row">
<div class="col-12">
<mat-checkbox color="accent" [(ngModel)]="new_config['API']['use_youtube_api']">Use YouTube API</mat-checkbox>
<mat-checkbox color="accent" [(ngModel)]="new_config['API']['use_youtube_api']"><ng-container i18n="Use YouTube API setting">Use YouTube API</ng-container></mat-checkbox>
</div>
<div class="col-12">
<mat-form-field color="accent">
<input [disabled]="!new_config['API']['use_youtube_api']" [(ngModel)]="new_config['API']['youtube_API_key']" matInput placeholder="Youtube API Key" required>
<mat-hint><a target="_blank" href="https://developers.google.com/youtube/v3/getting-started">Generating a key</a> is easy!</mat-hint>
<input [disabled]="!new_config['API']['use_youtube_api']" [(ngModel)]="new_config['API']['youtube_API_key']" matInput placeholder="Youtube API Key" i18n-placeholder="Youtube API Key setting placeholder" required>
<mat-hint><a target="_blank" href="https://developers.google.com/youtube/v3/getting-started"><ng-container i18n="Youtube API Key setting hint">Generating a key is easy!</ng-container></a></mat-hint>
</mat-form-field>
</div>
</div>
@@ -145,20 +154,20 @@
<mat-expansion-panel class="settings-expansion-panel">
<mat-expansion-panel-header>
<mat-panel-title>
Themes
<ng-container i18n="Themes settings title">Themes</ng-container>
</mat-panel-title>
</mat-expansion-panel-header>
<div *ngIf="new_config" class="container-fluid">
<div class="row">
<div class="col-12">
<mat-select color="accent" style="width: 100px" [(ngModel)]="new_config['Themes']['default_theme']">
<mat-option value="default">Default</mat-option>
<mat-option value="dark">Dark</mat-option>
<mat-option value="default"><ng-container i18n="Default theme label">Default</ng-container></mat-option>
<mat-option value="dark"><ng-container i18n="Dark theme label">Dark</ng-container></mat-option>
</mat-select>
</div>
<div class="col-12 mt-4">
<mat-checkbox color="accent" [(ngModel)]="new_config['Themes']['allow_theme_change']">Allow theme change</mat-checkbox>
<mat-checkbox color="accent" [(ngModel)]="new_config['Themes']['allow_theme_change']"><ng-container i18n="Allow theme change setting">Allow theme change</ng-container></mat-checkbox>
</div>
</div>
</div>
@@ -168,30 +177,30 @@
<mat-expansion-panel class="settings-expansion-panel">
<mat-expansion-panel-header>
<mat-panel-title>
Subscriptions
<ng-container i18n="Subscriptions settings title">Subscriptions</ng-container>
</mat-panel-title>
</mat-expansion-panel-header>
<div *ngIf="new_config" class="container-fluid">
<div class="row">
<div class="col-12">
<mat-checkbox color="accent" [(ngModel)]="new_config['Subscriptions']['allow_subscriptions']">Allow subscriptions</mat-checkbox>
<mat-checkbox color="accent" [(ngModel)]="new_config['Subscriptions']['allow_subscriptions']"><ng-container i18n="Allow subscriptions setting">Allow subscriptions</ng-container></mat-checkbox>
</div>
<div class="col-12">
<mat-form-field color="accent">
<input [disabled]="!new_config['Subscriptions']['allow_subscriptions']" [(ngModel)]="new_config['Subscriptions']['subscriptions_base_path']" matInput placeholder="Subscriptions base path">
<mat-hint>Base path for videos from your subscribed channels and playlists. It is relative to YTDL-Material's root folder.</mat-hint>
<input [disabled]="!new_config['Subscriptions']['allow_subscriptions']" [(ngModel)]="new_config['Subscriptions']['subscriptions_base_path']" matInput placeholder="Subscriptions base path" i18n-placeholder="Subscriptions base path input setting placeholder">
<mat-hint><ng-container i18n="Subscriptions base path setting input hint">Base path for videos from your subscribed channels and playlists. It is relative to YTDL-Material's root folder.</ng-container></mat-hint>
</mat-form-field>
</div>
<div class="col-12 mt-5">
<mat-form-field color="accent">
<input [disabled]="!new_config['Subscriptions']['allow_subscriptions']" [(ngModel)]="new_config['Subscriptions']['subscriptions_check_interval']" matInput placeholder="Check interval">
<mat-hint>Unit is seconds, only include numbers.</mat-hint>
<input [disabled]="!new_config['Subscriptions']['allow_subscriptions']" [(ngModel)]="new_config['Subscriptions']['subscriptions_check_interval']" matInput placeholder="Check interval" i18n-placeholder="Check interval input setting placeholder">
<mat-hint><ng-container i18n="Check interval setting input hint">Unit is seconds, only include numbers.</ng-container></mat-hint>
</mat-form-field>
</div>
<div class="col-12 mt-4">
<mat-checkbox color="accent" [disabled]="!new_config['Subscriptions']['allow_subscriptions']" [(ngModel)]="new_config['Subscriptions']['subscriptions_use_youtubedl_archive']">Use youtube-dl archive</mat-checkbox>
<p>With youtube-dl's <a target="_blank" href="https://github.com/ytdl-org/youtube-dl/blob/master/README.md#how-do-i-download-only-new-videos-from-a-playlist">archive</a> feature, downloaded videos from your subscriptions get recorded in a text file in the subscriptions <i>archive</i> sub-directory.</p>
<p>This enables the ability to permanently delete videos from your subscriptions without unsubscribing, and allows you to record which videos you downloaded in case of data loss.</p>
<mat-checkbox color="accent" [disabled]="!new_config['Subscriptions']['allow_subscriptions']" [(ngModel)]="new_config['Subscriptions']['subscriptions_use_youtubedl_archive']"><ng-container i18n="Use youtube-dl archive setting">Use youtube-dl archive</ng-container></mat-checkbox>
<p><a target="_blank" href="https://github.com/ytdl-org/youtube-dl/blob/master/README.md#how-do-i-download-only-new-videos-from-a-playlist"><ng-container i18n="youtube-dl archive explanation prefix link">With youtube-dl's archive</ng-container></a>&nbsp;<ng-container i18n="youtube-dl archive explanation middle">feature, downloaded videos from your subscriptions get recorded in a text file in the subscriptions archive sub-directory.</ng-container></p>
<p><ng-container i18n="youtube-dl archive explanation suffix">This enables the ability to permanently delete videos from your subscriptions without unsubscribing, and allows you to record which videos you downloaded in case of data loss.</ng-container></p>
</div>
</div>
</div>
@@ -201,22 +210,22 @@
<mat-expansion-panel class="settings-expansion-panel">
<mat-expansion-panel-header>
<mat-panel-title>
Advanced
<ng-container i18n="Advanced settings title">Advanced</ng-container>
</mat-panel-title>
</mat-expansion-panel-header>
<div *ngIf="new_config" class="container-fluid">
<div class="row">
<div class="col-12">
<mat-checkbox color="accent" [(ngModel)]="new_config['Advanced']['use_default_downloading_agent']">Use default downloading agent</mat-checkbox>
<mat-checkbox color="accent" [(ngModel)]="new_config['Advanced']['use_default_downloading_agent']"><ng-container i18n="Use default downloading agent setting">Use default downloading agent</ng-container></mat-checkbox>
</div>
<div class="col-12">
<mat-form-field color="accent">
<input [disabled]="new_config['Advanced']['use_default_downloading_agent']" [(ngModel)]="new_config['Advanced']['custom_downloading_agent']" matInput placeholder="Custom agent" required>
<input [disabled]="new_config['Advanced']['use_default_downloading_agent']" [(ngModel)]="new_config['Advanced']['custom_downloading_agent']" matInput placeholder="Custom agent" i18n-placeholder="Custom agent setting placeholder" required>
<mat-hint></mat-hint>
</mat-form-field>
</div>
<div class="col-12">
<mat-checkbox color="accent" [(ngModel)]="new_config['Advanced']['allow_advanced_download']">Allow advanced download</mat-checkbox>
<mat-checkbox color="accent" [(ngModel)]="new_config['Advanced']['allow_advanced_download']"><ng-container i18n="Allow advanced downloading setting">Allow advanced download</ng-container></mat-checkbox>
</div>
</div>
</div>
@@ -225,7 +234,11 @@
<mat-dialog-actions>
<div style="margin-bottom: 10px;">
<button color="accent" (click)="saveSettings()" [disabled]="settingsSame()" mat-raised-button><mat-icon>done</mat-icon>&nbsp;&nbsp;Save</button>
<button mat-flat-button [mat-dialog-close]="false"><mat-icon>cancel</mat-icon>&nbsp;&nbsp;Cancel</button>
<button color="accent" (click)="saveSettings()" [disabled]="settingsSame()" mat-raised-button><mat-icon>done</mat-icon>&nbsp;&nbsp;
<ng-container i18n="Settings save button">Save</ng-container>
</button>
<button mat-flat-button [mat-dialog-close]="false"><mat-icon>cancel</mat-icon>&nbsp;&nbsp;
<ng-container i18n="Settings cancel button">Cancel</ng-container>
</button>
</div>
</mat-dialog-actions>

View File

@@ -1,3 +1,8 @@
.settings-expansion-panel {
margin-bottom: 20px;
}
.locale-select {
margin-bottom: 10px;
width: 175px;
}

View File

@@ -1,5 +1,7 @@
import { Component, OnInit } from '@angular/core';
import { PostsService } from 'app/posts.services';
import { isoLangs } from './locales_list';
import { MatSnackBar } from '@angular/material/snack-bar';
@Component({
selector: 'app-settings',
@@ -7,12 +9,15 @@ import { PostsService } from 'app/posts.services';
styleUrls: ['./settings.component.scss']
})
export class SettingsComponent implements OnInit {
all_locales = isoLangs;
supported_locales = ['en', 'es'];
initialLocale = localStorage.getItem('locale');
initial_config = null;
new_config = null
loading_config = false;
constructor(private postsService: PostsService) { }
constructor(private postsService: PostsService, private snackBar: MatSnackBar) { }
ngOnInit() {
this.getConfig();
@@ -46,4 +51,16 @@ export class SettingsComponent implements OnInit {
})
}
localeSelectChanged(new_val) {
localStorage.setItem('locale', new_val);
this.openSnackBar('Language successfully changed! Reload to update the page.')
}
// snackbar helper
public openSnackBar(message: string, action: string = '') {
this.snackBar.open(message, action, {
duration: 2000,
});
}
}

View File

@@ -1,11 +1,11 @@
<div style="position: relative; width: fit-content;">
<div class="duration-time">
Length: {{formattedDuration}}
<ng-container i18n="Video duration label">Length:</ng-container>&nbsp;{{formattedDuration}}
</div>
<button [matMenuTriggerFor]="action_menu" class="menuButton" mat-icon-button><mat-icon>more_vert</mat-icon></button>
<mat-menu #action_menu="matMenu">
<button (click)="deleteAndRedownload()" mat-menu-item><mat-icon>restore</mat-icon>Delete and redownload</button>
<button (click)="deleteForever()" mat-menu-item *ngIf="sub.archive && use_youtubedl_archive"><mat-icon>delete_forever</mat-icon>Delete forever</button>
<button (click)="deleteAndRedownload()" mat-menu-item><mat-icon>restore</mat-icon><ng-container i18n="Delete and redownload subscription video button">Delete and redownload</ng-container></button>
<button (click)="deleteForever()" mat-menu-item *ngIf="sub.archive && use_youtubedl_archive"><mat-icon>delete_forever</mat-icon><ng-container i18n="Delete forever subscription video button">Delete forever</ng-container></button>
</mat-menu>
<mat-card (click)="goToFile()" matRipple class="example-card mat-elevation-z6">
<div style="padding:5px">

View File

@@ -1,6 +1,6 @@
import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core';
import { Observable, Subject } from 'rxjs';
import { MatSnackBar } from '@angular/material';
import { MatSnackBar } from '@angular/material/snack-bar';
import { Router } from '@angular/router';
import { PostsService } from 'app/posts.services';

View File

@@ -12,11 +12,11 @@
<div class="flex-grid">
<div class="col"></div>
<div class="col">
<h4 style="text-align: center; margin-bottom: 20px;">Videos</h4>
<h4 i18n="Subscription videos title" style="text-align: center; margin-bottom: 20px;">Videos</h4>
</div>
<div class="col">
<mat-form-field [ngClass]="searchIsFocused ? 'search-bar-focused' : 'search-bar-unfocused'" class="search-bar" color="accent">
<input (focus)="searchIsFocused = true" (blur)="searchIsFocused = false" class="search-input" type="text" placeholder="Search" [(ngModel)]="search_text" (ngModelChange)="onSearchInputChanged($event)" matInput>
<input (focus)="searchIsFocused = true" (blur)="searchIsFocused = false" class="search-input" type="text" placeholder="Search" i18n-placeholder="Subscription videos search placeholder" [(ngModel)]="search_text" (ngModelChange)="onSearchInputChanged($event)" matInput>
<mat-icon matSuffix>search</mat-icon>
</mat-form-field>
</div>

View File

@@ -1,20 +1,17 @@
<br/>
<h2 style="text-align: center; margin-bottom: 15px;">Your subscriptions</h2>
<h2 i18n="Subscriptions title" style="text-align: center; margin-bottom: 15px;">Your subscriptions</h2>
<mat-divider style="width: 80%; margin: 0 auto"></mat-divider>
<br/>
<h4 style="text-align: center;">Channels</h4>
<h4 i18n="Subscriptions channels title" style="text-align: center;">Channels</h4>
<mat-nav-list class="sub-nav-list">
<mat-list-item *ngFor="let sub of channel_subscriptions">
<a class="a-list-item" matLine (click)="goToSubscription(sub)" href="javascript:void(0)">
<strong *ngIf="sub.name">{{ sub.name }}</strong>
<div *ngIf="!sub.name">
Name not available. Channel retrieval in progress.
<ngx-content-loading *ngIf="false" [width]="200" [height]="20">
<svg:g ngx-rect width="200" height="20" y="0" x="0" rx="4" ry="4"></svg:g>
</ngx-content-loading>
<ng-container i18n="Subscription playlist not available text">Name not available. Channel retrieval in progress.</ng-container>
</div>
</a>
<button mat-icon-button (click)="showSubInfo(sub)">
@@ -24,19 +21,16 @@
</mat-nav-list>
<div style="width: 80%; margin: 0 auto; padding-left: 15px;" *ngIf="channel_subscriptions.length === 0 && subscriptions">
<p>You have no channel subscriptions.</p>
<p i18n="No channel subscriptions text">You have no channel subscriptions.</p>
</div>
<h4 style="text-align: center; margin-top: 10px;">Playlists</h4>
<h4 i18n="Subscriptions playlists title" style="text-align: center; margin-top: 10px;">Playlists</h4>
<mat-nav-list class="sub-nav-list">
<mat-list-item *ngFor="let sub of playlist_subscriptions">
<a class="a-list-item" matLine (click)="goToSubscription(sub)" href="javascript:void(0)">
<strong>{{ sub.name }}</strong>
<div class="content-loading-div" *ngIf="!sub.name">
Name not available. Playlist retrieval in progress.
<ngx-content-loading *ngIf="false" [primaryColor]="postsService.theme.background_color" [secondaryColor]="postsService.theme.alternate_color" [width]="200" [height]="20">
<svg:g ngx-rect width="200" height="20" y="0" x="0" rx="4" ry="4"></svg:g>
</ngx-content-loading>
<ng-container i18n="Subscription playlist not available text">Name not available. Playlist retrieval in progress.</ng-container>
</div>
</a>
<button mat-icon-button (click)="showSubInfo(sub)">
@@ -46,7 +40,7 @@
</mat-nav-list>
<div style="width: 80%; margin: 0 auto; padding-left: 15px;" *ngIf="playlist_subscriptions.length === 0 && subscriptions">
<p>You have no playlist subscriptions.</p>
<p i18n="No playlist subscriptions text">You have no playlist subscriptions.</p>
</div>
<div style="margin: 0 auto; width: 80%" *ngIf="subscriptions_loading">

View File

@@ -1,5 +1,6 @@
import { Component, OnInit, EventEmitter } from '@angular/core';
import { MatDialog, MatSnackBar } from '@angular/material';
import { MatDialog } from '@angular/material/dialog';
import { MatSnackBar } from '@angular/material/snack-bar';
import { SubscribeDialogComponent } from 'app/dialogs/subscribe-dialog/subscribe-dialog.component';
import { PostsService } from 'app/posts.services';
import { Router } from '@angular/router';

View File

@@ -0,0 +1,919 @@
<?xml version="1.0" encoding="UTF-8" ?>
<xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2">
<file source-language="en" datatype="plaintext" original="ng2.template">
<body>
<trans-unit id="17f0ea5d2d7a262b0e875acc70475f102aee84e6" datatype="html">
<source>Create a playlist</source>
<context-group purpose="location">
<context context-type="sourcefile">app/create-playlist/create-playlist.component.html</context>
<context context-type="linenumber">1</context>
</context-group>
<note priority="1" from="description">Create a playlist dialog title</note>
</trans-unit>
<trans-unit id="cff1428d10d59d14e45edec3c735a27b5482db59" datatype="html">
<source>Name</source>
<context-group purpose="location">
<context context-type="sourcefile">app/create-playlist/create-playlist.component.html</context>
<context context-type="linenumber">5</context>
</context-group>
<note priority="1" from="description">Playlist name placeholder</note>
</trans-unit>
<trans-unit id="f47e2d56dd8a145b2e9599da9730c049d52962a2" datatype="html">
<source>Audio files</source>
<context-group purpose="location">
<context context-type="sourcefile">app/create-playlist/create-playlist.component.html</context>
<context context-type="linenumber">10</context>
</context-group>
<note priority="1" from="description">Audio files title</note>
</trans-unit>
<trans-unit id="a52dae09be10ca3a65da918533ced3d3f4992238" datatype="html">
<source>Videos</source>
<context-group purpose="location">
<context context-type="sourcefile">app/create-playlist/create-playlist.component.html</context>
<context context-type="linenumber">11</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">app/subscription/subscription/subscription.component.html</context>
<context context-type="linenumber">15</context>
</context-group>
<note priority="1" from="description">Videos title</note>
</trans-unit>
<trans-unit id="038ebcb2a89155d90c24fa1c17bfe83dbadc3c20" datatype="html">
<source>Youtube Downloader</source>
<context-group purpose="location">
<context context-type="sourcefile">app/main/main.component.html</context>
<context context-type="linenumber">5</context>
</context-group>
<note priority="1" from="description">Youtube downloader home page label</note>
</trans-unit>
<trans-unit id="6d2ec8898344c8955542b0542c942038ef28bb80" datatype="html">
<source>Please enter a valid URL!</source>
<context-group purpose="location">
<context context-type="sourcefile">app/main/main.component.html</context>
<context context-type="linenumber">16</context>
</context-group>
<note priority="1" from="description">Enter valid URL error</note>
</trans-unit>
<trans-unit id="a38ae1082fec79ba1f379978337385a539a28e73" datatype="html">
<source>
Quality
</source>
<context-group purpose="location">
<context context-type="sourcefile">app/main/main.component.html</context>
<context context-type="linenumber">24</context>
</context-group>
<note priority="1" from="description">Quality select label</note>
</trans-unit>
<trans-unit id="4be966a9dcfbc9b54dfcc604b831c0289f847fa4" datatype="html">
<source>Use URL</source>
<context-group purpose="location">
<context context-type="sourcefile">app/main/main.component.html</context>
<context context-type="linenumber">52</context>
</context-group>
<note priority="1" from="description">YT search Use URL button for searched video</note>
</trans-unit>
<trans-unit id="d3f02f845e62cebd75fde451ab8479d2a8ad784d" datatype="html">
<source>
View
</source>
<context-group purpose="location">
<context context-type="sourcefile">app/main/main.component.html</context>
<context context-type="linenumber">55</context>
</context-group>
<note priority="1" from="description">YT search View button for searched video</note>
</trans-unit>
<trans-unit id="4a9889d36910edc8323d7bab60858ab3da6d91df" datatype="html">
<source>
Only Audio
</source>
<context-group purpose="location">
<context context-type="sourcefile">app/main/main.component.html</context>
<context context-type="linenumber">65</context>
</context-group>
<note priority="1" from="description">Only Audio checkbox</note>
</trans-unit>
<trans-unit id="96a01fafe135afc58b0f8071a4ab00234495ce18" datatype="html">
<source>
Multi-download Mode
</source>
<context-group purpose="location">
<context context-type="sourcefile">app/main/main.component.html</context>
<context context-type="linenumber">70</context>
</context-group>
<note priority="1" from="description">Multi-download Mode checkbox</note>
</trans-unit>
<trans-unit id="6a21ba5fb0ac804a525bf9ab168038c3ee88e661" datatype="html">
<source>
Download
</source>
<context-group purpose="location">
<context context-type="sourcefile">app/main/main.component.html</context>
<context context-type="linenumber">79</context>
</context-group>
<note priority="1" from="description">Main download button</note>
</trans-unit>
<trans-unit id="6a3777f913cf3f288664f0632b9f24794fdcc24e" datatype="html">
<source>
Cancel
</source>
<context-group purpose="location">
<context context-type="sourcefile">app/main/main.component.html</context>
<context context-type="linenumber">84</context>
</context-group>
<note priority="1" from="description">Cancel download button</note>
</trans-unit>
<trans-unit id="322ed150e02666fe2259c5b4614eac7066f4ffa0" datatype="html">
<source>
Advanced
</source>
<context-group purpose="location">
<context context-type="sourcefile">app/main/main.component.html</context>
<context context-type="linenumber">96</context>
</context-group>
<note priority="1" from="description">Advanced download mode panel</note>
</trans-unit>
<trans-unit id="b7ffe7c6586d6f3f18a9246806a7c7d5538ab43e" datatype="html">
<source>
Simulated command:
</source>
<context-group purpose="location">
<context context-type="sourcefile">app/main/main.component.html</context>
<context context-type="linenumber">102</context>
</context-group>
<note priority="1" from="description">Simulated command label</note>
</trans-unit>
<trans-unit id="4e4c721129466be9c3862294dc40241b64045998" datatype="html">
<source>
Use custom args
</source>
<context-group purpose="location">
<context context-type="sourcefile">app/main/main.component.html</context>
<context context-type="linenumber">110</context>
</context-group>
<note priority="1" from="description">Use custom args checkbox</note>
</trans-unit>
<trans-unit id="ad2f8ac8b7de7945b80c8e424484da94e597125f" datatype="html">
<source>Custom args</source>
<context-group purpose="location">
<context context-type="sourcefile">app/main/main.component.html</context>
<context context-type="linenumber">115</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/settings.component.html</context>
<context context-type="linenumber">83</context>
</context-group>
<note priority="1" from="description">Custom args placeholder</note>
</trans-unit>
<trans-unit id="ccc7e92cbdd35e901acf9ad80941abee07bd8f60" datatype="html">
<source>
No need to include URL, just everything after.
</source>
<context-group purpose="location">
<context context-type="sourcefile">app/main/main.component.html</context>
<context context-type="linenumber">117</context>
</context-group>
<note priority="1" from="description">Custom Args input hint</note>
</trans-unit>
<trans-unit id="3a92a3443c65a52f37ca7efb8f453b35dbefbf29" datatype="html">
<source>
Use custom output
</source>
<context-group purpose="location">
<context context-type="sourcefile">app/main/main.component.html</context>
<context context-type="linenumber">125</context>
</context-group>
<note priority="1" from="description">Use custom output checkbox</note>
</trans-unit>
<trans-unit id="d9c02face477f2f9cdaae318ccee5f89856851fb" datatype="html">
<source>Custom output</source>
<context-group purpose="location">
<context context-type="sourcefile">app/main/main.component.html</context>
<context context-type="linenumber">130</context>
</context-group>
<note priority="1" from="description">Custom output placeholder</note>
</trans-unit>
<trans-unit id="fcfd4675b4c90f08d18d3abede9a9a4dff4cfdc7" datatype="html">
<source>Documentation</source>
<context-group purpose="location">
<context context-type="sourcefile">app/main/main.component.html</context>
<context context-type="linenumber">132</context>
</context-group>
<note priority="1" from="description">Youtube-dl output template documentation link</note>
</trans-unit>
<trans-unit id="19d1ae64d94d28a29b2c57ae8671aace906b5401" datatype="html">
<source>Path is relative to the config download path. Don&apos;t include extension.</source>
<context-group purpose="location">
<context context-type="sourcefile">app/main/main.component.html</context>
<context context-type="linenumber">133</context>
</context-group>
<note priority="1" from="description">Custom Output input hint</note>
</trans-unit>
<trans-unit id="8fad10737d3e3735a6699a4d89cbf6c20f6bb55f" datatype="html">
<source>
Use authentication
</source>
<context-group purpose="location">
<context context-type="sourcefile">app/main/main.component.html</context>
<context context-type="linenumber">139</context>
</context-group>
<note priority="1" from="description">Use authentication checkbox</note>
</trans-unit>
<trans-unit id="08c74dc9762957593b91f6eb5d65efdfc975bf48" datatype="html">
<source>Username</source>
<context-group purpose="location">
<context context-type="sourcefile">app/main/main.component.html</context>
<context context-type="linenumber">144</context>
</context-group>
<note priority="1" from="description">YT Username placeholder</note>
</trans-unit>
<trans-unit id="c32ef07f8803a223a83ed17024b38e8d82292407" datatype="html">
<source>Password</source>
<context-group purpose="location">
<context context-type="sourcefile">app/main/main.component.html</context>
<context context-type="linenumber">149</context>
</context-group>
<note priority="1" from="description">YT Password placeholder</note>
</trans-unit>
<trans-unit id="4a0dada6e841a425de3e5006e6a04df26c644fa5" datatype="html">
<source>
Audio
</source>
<context-group purpose="location">
<context context-type="sourcefile">app/main/main.component.html</context>
<context context-type="linenumber">193</context>
</context-group>
<note priority="1" from="description">Audio files title</note>
</trans-unit>
<trans-unit id="9779715ac05308973d8f1c8658b29b986e92450f" datatype="html">
<source>
Your audio files are here
</source>
<context-group purpose="location">
<context context-type="sourcefile">app/main/main.component.html</context>
<context context-type="linenumber">198</context>
</context-group>
<note priority="1" from="description">Audio files description</note>
</trans-unit>
<trans-unit id="47546e45bbb476baaaad38244db444c427ddc502" datatype="html">
<source>Playlists</source>
<context-group purpose="location">
<context context-type="sourcefile">app/main/main.component.html</context>
<context context-type="linenumber">213</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">app/main/main.component.html</context>
<context context-type="linenumber">255</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">app/subscriptions/subscriptions.component.html</context>
<context context-type="linenumber">27</context>
</context-group>
<note priority="1" from="description">Playlists title</note>
</trans-unit>
<trans-unit id="78bd81adb4609b68cfa4c589222bdc233ba1faaa" datatype="html">
<source>
No playlists available. Create one from your downloading audio files by clicking the blue plus button.
</source>
<context-group purpose="location">
<context context-type="sourcefile">app/main/main.component.html</context>
<context context-type="linenumber">224</context>
</context-group>
<note priority="1" from="description">No video playlists available text</note>
</trans-unit>
<trans-unit id="9d2b62bb0b91e2e17fb4177a7e3d6756a2e6ee33" datatype="html">
<source>
Video
</source>
<context-group purpose="location">
<context context-type="sourcefile">app/main/main.component.html</context>
<context context-type="linenumber">234</context>
</context-group>
<note priority="1" from="description">Video files title</note>
</trans-unit>
<trans-unit id="960582a8b9d7942716866ecfb7718309728f2916" datatype="html">
<source>
Your video files are here
</source>
<context-group purpose="location">
<context context-type="sourcefile">app/main/main.component.html</context>
<context context-type="linenumber">239</context>
</context-group>
<note priority="1" from="description">Video files description</note>
</trans-unit>
<trans-unit id="0f59c46ca29e9725898093c9ea6b586730d0624e" datatype="html">
<source>
No playlists available. Create one from your downloading video files by clicking the blue plus button.
</source>
<context-group purpose="location">
<context context-type="sourcefile">app/main/main.component.html</context>
<context context-type="linenumber">268</context>
</context-group>
<note priority="1" from="description">No video playlists available text</note>
</trans-unit>
<trans-unit id="ca3dbbc7f3e011bffe32a10a3ea45cc84f30ecf1" datatype="html">
<source>ID:</source>
<context-group purpose="location">
<context context-type="sourcefile">app/file-card/file-card.component.html</context>
<context context-type="linenumber">6</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">app/download-item/download-item.component.html</context>
<context context-type="linenumber">7</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">app/dialogs/subscription-info-dialog/subscription-info-dialog.component.html</context>
<context context-type="linenumber">13</context>
</context-group>
<note priority="1" from="description">File or playlist ID</note>
</trans-unit>
<trans-unit id="e684046d73bcee88e82f7ff01e2852789a05fc32" datatype="html">
<source>Count:</source>
<context-group purpose="location">
<context context-type="sourcefile">app/file-card/file-card.component.html</context>
<context context-type="linenumber">7</context>
</context-group>
<note priority="1" from="description">Playlist video count</note>
</trans-unit>
<trans-unit id="121cc5391cd2a5115bc2b3160379ee5b36cd7716" datatype="html">
<source>Settings</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/settings.component.html</context>
<context context-type="linenumber">1</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">app/app.component.html</context>
<context context-type="linenumber">22</context>
</context-group>
<note priority="1" from="description">Settings title</note>
</trans-unit>
<trans-unit id="fe22ca53e651df951dac25b67c17894b0980f767" datatype="html">
<source>Host</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/settings.component.html</context>
<context context-type="linenumber">8</context>
</context-group>
<note priority="1" from="description">Host settings title</note>
</trans-unit>
<trans-unit id="801b98c6f02fe3b32f6afa3ee854c99ed83474e6" datatype="html">
<source>URL</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/settings.component.html</context>
<context context-type="linenumber">15</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">app/dialogs/subscribe-dialog/subscribe-dialog.component.html</context>
<context context-type="linenumber">8</context>
</context-group>
<note priority="1" from="description">URL input placeholder</note>
</trans-unit>
<trans-unit id="54c512cca1923ab72faf1a0bd98d3d172469629a" datatype="html">
<source>URL this app will be accessed from, without the port.</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/settings.component.html</context>
<context context-type="linenumber">16</context>
</context-group>
<note priority="1" from="description">URL setting input hint</note>
</trans-unit>
<trans-unit id="cb2741a46e3560f6bc6dfd99d385e86b08b26d72" datatype="html">
<source>Port</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/settings.component.html</context>
<context context-type="linenumber">21</context>
</context-group>
<note priority="1" from="description">Port input placeholder</note>
</trans-unit>
<trans-unit id="22e8f1d0423a3b784fe40fab187b92c06541b577" datatype="html">
<source>The desired port. Default is 17442.</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/settings.component.html</context>
<context context-type="linenumber">22</context>
</context-group>
<note priority="1" from="description">Port setting input hint</note>
</trans-unit>
<trans-unit id="948758e1412bb2ecdb98e3a4f1cbb6d7458456f2" datatype="html">
<source>Encryption</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/settings.component.html</context>
<context context-type="linenumber">34</context>
</context-group>
<note priority="1" from="description">Encryption settings title</note>
</trans-unit>
<trans-unit id="cbe16a57be414e84b6a68309d08fad894df797d6" datatype="html">
<source>Use encryption</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/settings.component.html</context>
<context context-type="linenumber">40</context>
</context-group>
<note priority="1" from="description">Use encryption setting</note>
</trans-unit>
<trans-unit id="0c1875a79b7ecc792cc1bebca3e063e40b5764f9" datatype="html">
<source>Cert file path</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/settings.component.html</context>
<context context-type="linenumber">45</context>
</context-group>
<note priority="1" from="description">Cert file path input placeholder</note>
</trans-unit>
<trans-unit id="736551b93461d2de64b118cf4043eee1d1c2cb2c" datatype="html">
<source>Key file path</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/settings.component.html</context>
<context context-type="linenumber">51</context>
</context-group>
<note priority="1" from="description">Key file path input placeholder</note>
</trans-unit>
<trans-unit id="0ba25ad86a240576c4f20a2fada4722ebba77b1e" datatype="html">
<source>Downloader</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/settings.component.html</context>
<context context-type="linenumber">62</context>
</context-group>
<note priority="1" from="description">Downloader settings title</note>
</trans-unit>
<trans-unit id="ab2756805742e84ad0cc0468f4be2d8aa9f855a5" datatype="html">
<source>Audio folder path</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/settings.component.html</context>
<context context-type="linenumber">69</context>
</context-group>
<note priority="1" from="description">Audio folder path input placeholder</note>
</trans-unit>
<trans-unit id="c2c89cdf45d46ea64d2ed2f9ac15dfa4d77e26ca" datatype="html">
<source>Path for audio only downloads. It is relative to YTDL-Material&apos;s root folder.</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/settings.component.html</context>
<context context-type="linenumber">70</context>
</context-group>
<note priority="1" from="description">Aduio path setting input hint</note>
</trans-unit>
<trans-unit id="46826331da1949bd6fb74624447057099c9d20cd" datatype="html">
<source>Video folder path</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/settings.component.html</context>
<context context-type="linenumber">76</context>
</context-group>
<note priority="1" from="description">Video folder path input placeholder</note>
</trans-unit>
<trans-unit id="17c92e6d47a213fa95b5aa344b3f258147123f93" datatype="html">
<source>Path for video downloads. It is relative to YTDL-Material&apos;s root folder.</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/settings.component.html</context>
<context context-type="linenumber">77</context>
</context-group>
<note priority="1" from="description">Video path setting input hint</note>
</trans-unit>
<trans-unit id="f41145afc02fd47ef0576ac79acd2c47ebbf4901" datatype="html">
<source>Global custom args for downloads on the home page.</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/settings.component.html</context>
<context context-type="linenumber">84</context>
</context-group>
<note priority="1" from="description">Custom args setting input hint</note>
</trans-unit>
<trans-unit id="d5f69691f9f05711633128b5a3db696783266b58" datatype="html">
<source>Extra</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/settings.component.html</context>
<context context-type="linenumber">95</context>
</context-group>
<note priority="1" from="description">Extra settings title</note>
</trans-unit>
<trans-unit id="61f8fd90b5f8cb20c70371feb2ee5e1fac5a9095" datatype="html">
<source>Top title</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/settings.component.html</context>
<context context-type="linenumber">102</context>
</context-group>
<note priority="1" from="description">Top title input placeholder</note>
</trans-unit>
<trans-unit id="78d3531417c0d4ba4c90f0d4ae741edc261ec8df" datatype="html">
<source>File manager enabled</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/settings.component.html</context>
<context context-type="linenumber">107</context>
</context-group>
<note priority="1" from="description">File manager enabled setting</note>
</trans-unit>
<trans-unit id="c33bd5392b39dbed36b8e5a1145163a15d45835f" datatype="html">
<source>Allow quality select</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/settings.component.html</context>
<context context-type="linenumber">110</context>
</context-group>
<note priority="1" from="description">Allow quality seelct setting</note>
</trans-unit>
<trans-unit id="bda5508e24e0d77debb28bcd9194d8fefb1cfb92" datatype="html">
<source>Download only mode</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/settings.component.html</context>
<context context-type="linenumber">113</context>
</context-group>
<note priority="1" from="description">Download only mode setting</note>
</trans-unit>
<trans-unit id="09d31c803a7252658694e1e3176b97f5655a3fe3" datatype="html">
<source>Allow multi-download mode</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/settings.component.html</context>
<context context-type="linenumber">116</context>
</context-group>
<note priority="1" from="description">Allow multi-downloade mode setting</note>
</trans-unit>
<trans-unit id="e351b40b3869a5c7d19c3d4918cb1ac7aaab95c4" datatype="html">
<source>API</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/settings.component.html</context>
<context context-type="linenumber">126</context>
</context-group>
<note priority="1" from="description">API settings title</note>
</trans-unit>
<trans-unit id="d5d7c61349f3b0859336066e6d453fc35d334fe5" datatype="html">
<source>Use YouTube API</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/settings.component.html</context>
<context context-type="linenumber">132</context>
</context-group>
<note priority="1" from="description">Use YouTube API setting</note>
</trans-unit>
<trans-unit id="ce10d31febb3d9d60c160750570310f303a22c22" datatype="html">
<source>Youtube API Key</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/settings.component.html</context>
<context context-type="linenumber">136</context>
</context-group>
<note priority="1" from="description">Youtube API Key setting placeholder</note>
</trans-unit>
<trans-unit id="8602e313cdfa7c4cc475ccbe86459fce3c3fd986" datatype="html">
<source>Generating a key is easy!</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/settings.component.html</context>
<context context-type="linenumber">137</context>
</context-group>
<note priority="1" from="description">Youtube API Key setting hint</note>
</trans-unit>
<trans-unit id="60c855c323706a04ccd2ff22d634bde9b6233bbf" datatype="html">
<source>Themes</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/settings.component.html</context>
<context context-type="linenumber">148</context>
</context-group>
<note priority="1" from="description">Themes settings title</note>
</trans-unit>
<trans-unit id="ff7cee38a2259526c519f878e71b964f41db4348" datatype="html">
<source>Default</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/settings.component.html</context>
<context context-type="linenumber">155</context>
</context-group>
<note priority="1" from="description">Default theme label</note>
</trans-unit>
<trans-unit id="adb4562d2dbd3584370e44496969d58c511ecb63" datatype="html">
<source>Dark</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/settings.component.html</context>
<context context-type="linenumber">156</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">app/app.component.html</context>
<context context-type="linenumber">17</context>
</context-group>
<note priority="1" from="description">Dark theme label</note>
</trans-unit>
<trans-unit id="7a6bacee4c31cb5c0ac2d24274fb4610d8858602" datatype="html">
<source>Allow theme change</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/settings.component.html</context>
<context context-type="linenumber">161</context>
</context-group>
<note priority="1" from="description">Allow theme change setting</note>
</trans-unit>
<trans-unit id="357064ca9d9ac859eb618e28e8126fa32be049e2" datatype="html">
<source>Subscriptions</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/settings.component.html</context>
<context context-type="linenumber">171</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">app/app.component.html</context>
<context context-type="linenumber">34</context>
</context-group>
<note priority="1" from="description">Subscriptions settings title</note>
</trans-unit>
<trans-unit id="4e3120311801c4acd18de7146add2ee4a4417773" datatype="html">
<source>Allow subscriptions</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/settings.component.html</context>
<context context-type="linenumber">177</context>
</context-group>
<note priority="1" from="description">Allow subscriptions setting</note>
</trans-unit>
<trans-unit id="4bee2a4bef2d26d37c9b353c278e24e5cd309ce3" datatype="html">
<source>Subscriptions base path</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/settings.component.html</context>
<context context-type="linenumber">181</context>
</context-group>
<note priority="1" from="description">Subscriptions base path input setting placeholder</note>
</trans-unit>
<trans-unit id="bc9892814ee2d119ae94378c905ea440a249b84a" datatype="html">
<source>Base path for videos from your subscribed channels and playlists. It is relative to YTDL-Material&apos;s root folder.</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/settings.component.html</context>
<context context-type="linenumber">182</context>
</context-group>
<note priority="1" from="description">Subscriptions base path setting input hint</note>
</trans-unit>
<trans-unit id="5bef4b25ba680da7fff06b86a91b1fc7e6a926e3" datatype="html">
<source>Check interval</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/settings.component.html</context>
<context context-type="linenumber">187</context>
</context-group>
<note priority="1" from="description">Check interval input setting placeholder</note>
</trans-unit>
<trans-unit id="0f56a7449b77630c114615395bbda4cab398efd8" datatype="html">
<source>Unit is seconds, only include numbers.</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/settings.component.html</context>
<context context-type="linenumber">188</context>
</context-group>
<note priority="1" from="description">Check interval setting input hint</note>
</trans-unit>
<trans-unit id="78e49b7339b4fa7184dd21bcaae107ce9b7076f6" datatype="html">
<source>Use youtube-dl archive</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/settings.component.html</context>
<context context-type="linenumber">192</context>
</context-group>
<note priority="1" from="description">Use youtube-dl archive setting</note>
</trans-unit>
<trans-unit id="fa9fe4255231dd1cc6b29d3d254a25cb7c764f0f" datatype="html">
<source>With youtube-dl&apos;s archive</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/settings.component.html</context>
<context context-type="linenumber">193</context>
</context-group>
<note priority="1" from="description">youtube-dl archive explanation prefix link</note>
</trans-unit>
<trans-unit id="09006404cccc24b7a8f8d1ce0b39f2761ab841d8" datatype="html">
<source>feature, downloaded videos from your subscriptions get recorded in a text file in the subscriptions archive sub-directory.</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/settings.component.html</context>
<context context-type="linenumber">193</context>
</context-group>
<note priority="1" from="description">youtube-dl archive explanation middle</note>
</trans-unit>
<trans-unit id="29ed79a98fc01e7f9537777598e31dbde3aa7981" datatype="html">
<source>This enables the ability to permanently delete videos from your subscriptions without unsubscribing, and allows you to record which videos you downloaded in case of data loss.</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/settings.component.html</context>
<context context-type="linenumber">194</context>
</context-group>
<note priority="1" from="description">youtube-dl archive explanation suffix</note>
</trans-unit>
<trans-unit id="bc2e854e111ecf2bd7db170da5e3c2ed08181d88" datatype="html">
<source>Advanced</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/settings.component.html</context>
<context context-type="linenumber">204</context>
</context-group>
<note priority="1" from="description">Advanced settings title</note>
</trans-unit>
<trans-unit id="5fab47f146b0a4b809dcebf3db9da94df6299ea1" datatype="html">
<source>Use default downloading agent</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/settings.component.html</context>
<context context-type="linenumber">210</context>
</context-group>
<note priority="1" from="description">Use default downloading agent setting</note>
</trans-unit>
<trans-unit id="cdf75b1bdda80487e2ce1ff264ae171cbc5dc3b1" datatype="html">
<source>Custom agent</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/settings.component.html</context>
<context context-type="linenumber">214</context>
</context-group>
<note priority="1" from="description">Custom agent setting placeholder</note>
</trans-unit>
<trans-unit id="dc3d990391c944d1fbfc7cfb402f7b5e112fb3a8" datatype="html">
<source>Allow advanced download</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/settings.component.html</context>
<context context-type="linenumber">219</context>
</context-group>
<note priority="1" from="description">Allow advanced downloading setting</note>
</trans-unit>
<trans-unit id="52c9a103b812f258bcddc3d90a6e3f46871d25fe" datatype="html">
<source>Save</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/settings.component.html</context>
<context context-type="linenumber">229</context>
</context-group>
<note priority="1" from="description">Settings save button</note>
</trans-unit>
<trans-unit id="d7b35c384aecd25a516200d6921836374613dfe7" datatype="html">
<source>Cancel</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/settings.component.html</context>
<context context-type="linenumber">232</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">app/dialogs/subscribe-dialog/subscribe-dialog.component.html</context>
<context context-type="linenumber">37</context>
</context-group>
<note priority="1" from="description">Settings cancel button</note>
</trans-unit>
<trans-unit id="92eee6be6de0b11c924e3ab27db30257159c0a7c" datatype="html">
<source>Home</source>
<context-group purpose="location">
<context context-type="sourcefile">app/app.component.html</context>
<context context-type="linenumber">33</context>
</context-group>
<note priority="1" from="description">Navigation menu Home Page title</note>
</trans-unit>
<trans-unit id="5b3075e8dc3f3921ec316b0bd83b6d14a06c1a4f" datatype="html">
<source>Save changes</source>
<context-group purpose="location">
<context context-type="sourcefile">app/player/player.component.html</context>
<context context-type="linenumber">22</context>
</context-group>
<note priority="1" from="description">Playlist save changes button</note>
</trans-unit>
<trans-unit id="a9806cf78ce00eb2613eeca11354a97e033377b8" datatype="html">
<source>Subscribe to playlist or channel</source>
<context-group purpose="location">
<context context-type="sourcefile">app/dialogs/subscribe-dialog/subscribe-dialog.component.html</context>
<context context-type="linenumber">1</context>
</context-group>
<note priority="1" from="description">Subscribe dialog title</note>
</trans-unit>
<trans-unit id="93efc99ae087fc116de708ecd3ace86ca237cf30" datatype="html">
<source>The playlist or channel URL</source>
<context-group purpose="location">
<context context-type="sourcefile">app/dialogs/subscribe-dialog/subscribe-dialog.component.html</context>
<context context-type="linenumber">9</context>
</context-group>
<note priority="1" from="description">Subscription URL input hint</note>
</trans-unit>
<trans-unit id="08f5d0ef937ae17feb1b04aff15ad88911e87baf" datatype="html">
<source>Custom name</source>
<context-group purpose="location">
<context context-type="sourcefile">app/dialogs/subscribe-dialog/subscribe-dialog.component.html</context>
<context context-type="linenumber">14</context>
</context-group>
<note priority="1" from="description">Subscription custom name placeholder</note>
</trans-unit>
<trans-unit id="f3f62aa84d59f3a8b900cc9a7eec3ef279a7b4e7" datatype="html">
<source>This is optional</source>
<context-group purpose="location">
<context context-type="sourcefile">app/dialogs/subscribe-dialog/subscribe-dialog.component.html</context>
<context context-type="linenumber">15</context>
</context-group>
<note priority="1" from="description">Custom name input hint</note>
</trans-unit>
<trans-unit id="ea30873bd3f0d5e4fb2378eec3f0a1db77634a28" datatype="html">
<source>Download all uploads</source>
<context-group purpose="location">
<context context-type="sourcefile">app/dialogs/subscribe-dialog/subscribe-dialog.component.html</context>
<context context-type="linenumber">19</context>
</context-group>
<note priority="1" from="description">Download all uploads subscription setting</note>
</trans-unit>
<trans-unit id="28a678e9cabf86e44c32594c43fa0e890135c20f" datatype="html">
<source>Download videos uploaded in the last</source>
<context-group purpose="location">
<context context-type="sourcefile">app/dialogs/subscribe-dialog/subscribe-dialog.component.html</context>
<context context-type="linenumber">22</context>
</context-group>
<note priority="1" from="description">Download time range prefix</note>
</trans-unit>
<trans-unit id="e78c0d60ac39787f62c9159646fe0b3c1ed55a1d" datatype="html">
<source>Type:</source>
<context-group purpose="location">
<context context-type="sourcefile">app/dialogs/subscription-info-dialog/subscription-info-dialog.component.html</context>
<context context-type="linenumber">5</context>
</context-group>
<note priority="1" from="description">Subscription type property</note>
</trans-unit>
<trans-unit id="c52db455cca9109ee47e1a612c3f4117c09eb71b" datatype="html">
<source>URL:</source>
<context-group purpose="location">
<context context-type="sourcefile">app/dialogs/subscription-info-dialog/subscription-info-dialog.component.html</context>
<context context-type="linenumber">9</context>
</context-group>
<note priority="1" from="description">Subscription URL property</note>
</trans-unit>
<trans-unit id="a44d86aa1e6c20ced07aca3a7c081d8db9ded1c6" datatype="html">
<source>Archive:</source>
<context-group purpose="location">
<context context-type="sourcefile">app/dialogs/subscription-info-dialog/subscription-info-dialog.component.html</context>
<context context-type="linenumber">17</context>
</context-group>
<note priority="1" from="description">Subscription ID property</note>
</trans-unit>
<trans-unit id="f4e529ae5ffd73001d1ff4bbdeeb0a72e342e5c8" datatype="html">
<source>Close</source>
<context-group purpose="location">
<context context-type="sourcefile">app/dialogs/subscription-info-dialog/subscription-info-dialog.component.html</context>
<context context-type="linenumber">23</context>
</context-group>
<note priority="1" from="description">Close subscription info button</note>
</trans-unit>
<trans-unit id="8efc77bf327659c0fec1f518cf48a98cdcd9dddf" datatype="html">
<source>Export Archive</source>
<context-group purpose="location">
<context context-type="sourcefile">app/dialogs/subscription-info-dialog/subscription-info-dialog.component.html</context>
<context context-type="linenumber">24</context>
</context-group>
<note priority="1" from="description">Export Archive button</note>
</trans-unit>
<trans-unit id="3042bd3ad8dffcfeca5fd1ae6159fd1047434e95" datatype="html">
<source>Unsubscribe</source>
<context-group purpose="location">
<context context-type="sourcefile">app/dialogs/subscription-info-dialog/subscription-info-dialog.component.html</context>
<context context-type="linenumber">26</context>
</context-group>
<note priority="1" from="description">Unsubscribe button</note>
</trans-unit>
<trans-unit id="e2319dec5b4ccfb6ed9f55ccabd63650a8fdf547" datatype="html">
<source>Your subscriptions</source>
<context-group purpose="location">
<context context-type="sourcefile">app/subscriptions/subscriptions.component.html</context>
<context context-type="linenumber">3</context>
</context-group>
<note priority="1" from="description">Subscriptions title</note>
</trans-unit>
<trans-unit id="807cf11e6ac1cde912496f764c176bdfdd6b7e19" datatype="html">
<source>Channels</source>
<context-group purpose="location">
<context context-type="sourcefile">app/subscriptions/subscriptions.component.html</context>
<context context-type="linenumber">8</context>
</context-group>
<note priority="1" from="description">Subscriptions channels title</note>
</trans-unit>
<trans-unit id="29b89f751593e1b347eef103891b7a1ff36ec03f" datatype="html">
<source>Name not available. Channel retrieval in progress.</source>
<context-group purpose="location">
<context context-type="sourcefile">app/subscriptions/subscriptions.component.html</context>
<context context-type="linenumber">14</context>
</context-group>
<note priority="1" from="description">Subscription playlist not available text</note>
</trans-unit>
<trans-unit id="4636cd4a1379c50d471e98786098c4d39e1e82ad" datatype="html">
<source>You have no channel subscriptions.</source>
<context-group purpose="location">
<context context-type="sourcefile">app/subscriptions/subscriptions.component.html</context>
<context context-type="linenumber">24</context>
</context-group>
<note priority="1" from="description">No channel subscriptions text</note>
</trans-unit>
<trans-unit id="2e0a410652cb07d069f576b61eab32586a18320d" datatype="html">
<source>Name not available. Playlist retrieval in progress.</source>
<context-group purpose="location">
<context context-type="sourcefile">app/subscriptions/subscriptions.component.html</context>
<context context-type="linenumber">33</context>
</context-group>
<note priority="1" from="description">Subscription playlist not available text</note>
</trans-unit>
<trans-unit id="587b57ced54965d8874c3fd0e9dfedb987e5df04" datatype="html">
<source>You have no playlist subscriptions.</source>
<context-group purpose="location">
<context context-type="sourcefile">app/subscriptions/subscriptions.component.html</context>
<context context-type="linenumber">43</context>
</context-group>
<note priority="1" from="description">No playlist subscriptions text</note>
</trans-unit>
<trans-unit id="7e892ba15f2c6c17e83510e273b3e10fc32ea016" datatype="html">
<source>Search</source>
<context-group purpose="location">
<context context-type="sourcefile">app/subscription/subscription/subscription.component.html</context>
<context context-type="linenumber">19</context>
</context-group>
<note priority="1" from="description">Subscription videos search placeholder</note>
</trans-unit>
<trans-unit id="2054791b822475aeaea95c0119113de3200f5e1c" datatype="html">
<source>Length:</source>
<context-group purpose="location">
<context context-type="sourcefile">app/subscription/subscription-file-card/subscription-file-card.component.html</context>
<context context-type="linenumber">3</context>
</context-group>
<note priority="1" from="description">Video duration label</note>
</trans-unit>
<trans-unit id="94e01842dcee90531caa52e4147f70679bac87fe" datatype="html">
<source>Delete and redownload</source>
<context-group purpose="location">
<context context-type="sourcefile">app/subscription/subscription-file-card/subscription-file-card.component.html</context>
<context context-type="linenumber">7</context>
</context-group>
<note priority="1" from="description">Delete and redownload subscription video button</note>
</trans-unit>
<trans-unit id="2031adb51e07a41844e8ba7704b054e98345c9c1" datatype="html">
<source>Delete forever</source>
<context-group purpose="location">
<context context-type="sourcefile">app/subscription/subscription-file-card/subscription-file-card.component.html</context>
<context context-type="linenumber">8</context>
</context-group>
<note priority="1" from="description">Delete forever subscription video button</note>
</trans-unit>
</body>
</file>
</xliff>

View File

@@ -0,0 +1,106 @@
{
"17f0ea5d2d7a262b0e875acc70475f102aee84e6": "Crea una lista de reproducción",
"cff1428d10d59d14e45edec3c735a27b5482db59": "Nombre",
"f47e2d56dd8a145b2e9599da9730c049d52962a2": "Archivos de sonido",
"a52dae09be10ca3a65da918533ced3d3f4992238": "Archivos de video",
"038ebcb2a89155d90c24fa1c17bfe83dbadc3c20": "Descargador de Youtube",
"6d2ec8898344c8955542b0542c942038ef28bb80": "Por favor entre una URL válida",
"a38ae1082fec79ba1f379978337385a539a28e73": "Calidad",
"4be966a9dcfbc9b54dfcc604b831c0289f847fa4": "Usa URL",
"d3f02f845e62cebd75fde451ab8479d2a8ad784d": "Ver",
"4a9889d36910edc8323d7bab60858ab3da6d91df": "Solo audio",
"96a01fafe135afc58b0f8071a4ab00234495ce18": "Descarga múltiple",
"6a21ba5fb0ac804a525bf9ab168038c3ee88e661": "Descarga",
"6a3777f913cf3f288664f0632b9f24794fdcc24e": "Cancela",
"322ed150e02666fe2259c5b4614eac7066f4ffa0": "Avanzado",
"b7ffe7c6586d6f3f18a9246806a7c7d5538ab43e": "Commando simulado:",
"4e4c721129466be9c3862294dc40241b64045998": "Usar argumentos personalizados",
"ad2f8ac8b7de7945b80c8e424484da94e597125f": "Argumentos personalizados",
"ccc7e92cbdd35e901acf9ad80941abee07bd8f60": "No es necesario incluir URL, solo todo después",
"3a92a3443c65a52f37ca7efb8f453b35dbefbf29": "Usar salida personalizada",
"d9c02face477f2f9cdaae318ccee5f89856851fb": "Salida personalizada",
"fcfd4675b4c90f08d18d3abede9a9a4dff4cfdc7": "Documentación",
"19d1ae64d94d28a29b2c57ae8671aace906b5401": "La ruta es relativa a la ruta de descarga de la config. No incluya el extensión.",
"8fad10737d3e3735a6699a4d89cbf6c20f6bb55f": "Usa autenticación",
"08c74dc9762957593b91f6eb5d65efdfc975bf48": "Nombre de usuario",
"c32ef07f8803a223a83ed17024b38e8d82292407": "Contraseña",
"4a0dada6e841a425de3e5006e6a04df26c644fa5": "Audio",
"9779715ac05308973d8f1c8658b29b986e92450f": "Tus archivos de audio están aquí",
"47546e45bbb476baaaad38244db444c427ddc502": "Listas de reproducción",
"78bd81adb4609b68cfa4c589222bdc233ba1faaa": "No hay listas de reproducción disponibles. Cree uno de tus archivos de audio haciendo clic en el botón azul más.",
"9d2b62bb0b91e2e17fb4177a7e3d6756a2e6ee33": "Vídeo",
"960582a8b9d7942716866ecfb7718309728f2916": "Tus archivos de video son aquí",
"0f59c46ca29e9725898093c9ea6b586730d0624e": "No hay listas de reproducción disponibles. Cree uno de tus archivos de video haciendo clic en el botón azul más.",
"ca3dbbc7f3e011bffe32a10a3ea45cc84f30ecf1": "ID:",
"e684046d73bcee88e82f7ff01e2852789a05fc32": "Cuenta:",
"121cc5391cd2a5115bc2b3160379ee5b36cd7716": "Configuraciones",
"fe22ca53e651df951dac25b67c17894b0980f767": "Host",
"801b98c6f02fe3b32f6afa3ee854c99ed83474e6": "URL",
"54c512cca1923ab72faf1a0bd98d3d172469629a": "URL desde la que se accederá a esta aplicación, sin el puerto.",
"cb2741a46e3560f6bc6dfd99d385e86b08b26d72": "Puerto",
"22e8f1d0423a3b784fe40fab187b92c06541b577": "Puerto deseado. El valor predeterminado es 17442.",
"948758e1412bb2ecdb98e3a4f1cbb6d7458456f2": "Cifrado",
"cbe16a57be414e84b6a68309d08fad894df797d6": "Usa cifrado",
"0c1875a79b7ecc792cc1bebca3e063e40b5764f9": "Ruta del archivo de certificado",
"736551b93461d2de64b118cf4043eee1d1c2cb2c": "Ruta de archivo de clave",
"0ba25ad86a240576c4f20a2fada4722ebba77b1e": "Descargador",
"ab2756805742e84ad0cc0468f4be2d8aa9f855a5": "Ruta de la carpeta de audio",
"c2c89cdf45d46ea64d2ed2f9ac15dfa4d77e26ca": "Ruta para descargas de solo audio. Es relativo a la carpeta raíz de YTDL-Material.",
"46826331da1949bd6fb74624447057099c9d20cd": "Ruta de la carpeta de video",
"17c92e6d47a213fa95b5aa344b3f258147123f93": "Ruta de descarga de videos. Es relativo a la carpeta raíz de YTDL-Material.",
"f41145afc02fd47ef0576ac79acd2c47ebbf4901": "Argumentos personalizados globales para descargas en la página de inicio.",
"d5f69691f9f05711633128b5a3db696783266b58": "Extra",
"61f8fd90b5f8cb20c70371feb2ee5e1fac5a9095": "Título superior",
"78d3531417c0d4ba4c90f0d4ae741edc261ec8df": "Administrador de archivos habilitado",
"c33bd5392b39dbed36b8e5a1145163a15d45835f": "Permitir selección de calidad",
"bda5508e24e0d77debb28bcd9194d8fefb1cfb92": "Modo de solo descarga",
"09d31c803a7252658694e1e3176b97f5655a3fe3": "Permitir el modo de descarga múltiple",
"e351b40b3869a5c7d19c3d4918cb1ac7aaab95c4": "API",
"d5d7c61349f3b0859336066e6d453fc35d334fe5": "Utilizar la API de YouTube",
"ce10d31febb3d9d60c160750570310f303a22c22": "Clave API de YouTube",
"8602e313cdfa7c4cc475ccbe86459fce3c3fd986": "¡Generar una clave es fácil!",
"60c855c323706a04ccd2ff22d634bde9b6233bbf": "Temas",
"ff7cee38a2259526c519f878e71b964f41db4348": "Defecto",
"adb4562d2dbd3584370e44496969d58c511ecb63": "Oscura",
"7a6bacee4c31cb5c0ac2d24274fb4610d8858602": "Permitir cambio de tema",
"357064ca9d9ac859eb618e28e8126fa32be049e2": "Suscripciones",
"4e3120311801c4acd18de7146add2ee4a4417773": "Permitir suscripciones",
"4bee2a4bef2d26d37c9b353c278e24e5cd309ce3": "Ruta base de suscripciones",
"bc9892814ee2d119ae94378c905ea440a249b84a": "Ruta base para videos de sus canales y listas de reproducción suscritos. Es relativo a la carpeta raíz de YTDL-Material.",
"5bef4b25ba680da7fff06b86a91b1fc7e6a926e3": "Intervalo de comprobación",
"0f56a7449b77630c114615395bbda4cab398efd8": "La unidad es segundos, solo incluye números.",
"78e49b7339b4fa7184dd21bcaae107ce9b7076f6": "Usa el archivo de youtube-dl",
"fa9fe4255231dd1cc6b29d3d254a25cb7c764f0f": "Con la función de archivo de youtube-dl,",
"09006404cccc24b7a8f8d1ce0b39f2761ab841d8": "los videos descargados de sus suscripciones se graban en un archivo de texto en el subdirectorio del archivo de suscripciones.",
"29ed79a98fc01e7f9537777598e31dbde3aa7981": "Esto permite eliminar videos de sus suscripciones de forma permanente sin darse de baja y le permite grabar los videos que descargó en caso de pérdida de datos.",
"bc2e854e111ecf2bd7db170da5e3c2ed08181d88": "Avanzado",
"5fab47f146b0a4b809dcebf3db9da94df6299ea1": "Usar agente de descarga predeterminado",
"cdf75b1bdda80487e2ce1ff264ae171cbc5dc3b1": "Agente personalizado",
"dc3d990391c944d1fbfc7cfb402f7b5e112fb3a8": "Permitir descarga avanzada",
"52c9a103b812f258bcddc3d90a6e3f46871d25fe": "Salvar",
"d7b35c384aecd25a516200d6921836374613dfe7": "Cancelar",
"92eee6be6de0b11c924e3ab27db30257159c0a7c": "Inicio",
"5b3075e8dc3f3921ec316b0bd83b6d14a06c1a4f": "Guardar cambios",
"a9806cf78ce00eb2613eeca11354a97e033377b8": "Suscríbase a la lista de reproducción o al canal",
"93efc99ae087fc116de708ecd3ace86ca237cf30": "La lista de reproducción o la URL del canal",
"08f5d0ef937ae17feb1b04aff15ad88911e87baf": "Nombre personalizado",
"f3f62aa84d59f3a8b900cc9a7eec3ef279a7b4e7": "Esto es opcional",
"ea30873bd3f0d5e4fb2378eec3f0a1db77634a28": "Descargar todas las cargas",
"28a678e9cabf86e44c32594c43fa0e890135c20f": "Descargar videos subidos en el último",
"e78c0d60ac39787f62c9159646fe0b3c1ed55a1d": "Tipo:",
"c52db455cca9109ee47e1a612c3f4117c09eb71b": "URL:",
"a44d86aa1e6c20ced07aca3a7c081d8db9ded1c6": "Archivo:",
"f4e529ae5ffd73001d1ff4bbdeeb0a72e342e5c8": "Cerca",
"8efc77bf327659c0fec1f518cf48a98cdcd9dddf": "Exportar el archivo",
"3042bd3ad8dffcfeca5fd1ae6159fd1047434e95": "Darse de baja",
"e2319dec5b4ccfb6ed9f55ccabd63650a8fdf547": "Sus suscripciones",
"807cf11e6ac1cde912496f764c176bdfdd6b7e19": "Canales",
"29b89f751593e1b347eef103891b7a1ff36ec03f": "Nombre no disponible. Recuperación de canales en progreso.",
"4636cd4a1379c50d471e98786098c4d39e1e82ad": "No tienes suscripciones de canal.",
"2e0a410652cb07d069f576b61eab32586a18320d": "Nombre no disponible. Recuperación de listas de reproducción en progreso.",
"587b57ced54965d8874c3fd0e9dfedb987e5df04": "No tienes suscripciones a listas de reproducción.",
"7e892ba15f2c6c17e83510e273b3e10fc32ea016": "Buscar",
"2054791b822475aeaea95c0119113de3200f5e1c": "Duración:",
"94e01842dcee90531caa52e4147f70679bac87fe": "Eliminar y volver a descargar",
"2031adb51e07a41844e8ba7704b054e98345c9c1": "Borrar para siempre"
}

View File

@@ -0,0 +1,987 @@
<?xml version="1.0" encoding="UTF-8"?>
<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">
<file datatype="plaintext" original="ng2.template" source-language="en">
<body>
<trans-unit datatype="html" id="17f0ea5d2d7a262b0e875acc70475f102aee84e6">
<source>Create a playlist</source>
<context-group purpose="location">
<context context-type="sourcefile">app/create-playlist/create-playlist.component.html</context>
<context context-type="linenumber">1</context>
</context-group>
<note from="description" priority="1">Create a playlist dialog title</note>
<target>Crea una lista de reproducción</target>
</trans-unit>
<trans-unit datatype="html" id="cff1428d10d59d14e45edec3c735a27b5482db59">
<source>Name</source>
<context-group purpose="location">
<context context-type="sourcefile">app/create-playlist/create-playlist.component.html</context>
<context context-type="linenumber">5</context>
</context-group>
<note from="description" priority="1">Playlist name placeholder</note>
<target>Nombre</target>
</trans-unit>
<trans-unit datatype="html" id="f47e2d56dd8a145b2e9599da9730c049d52962a2">
<source>Audio files</source>
<context-group purpose="location">
<context context-type="sourcefile">app/create-playlist/create-playlist.component.html</context>
<context context-type="linenumber">10</context>
</context-group>
<note from="description" priority="1">Audio files title</note>
<target>Archivos de sonido</target>
</trans-unit>
<trans-unit datatype="html" id="a52dae09be10ca3a65da918533ced3d3f4992238">
<source>Videos</source>
<context-group purpose="location">
<context context-type="sourcefile">app/create-playlist/create-playlist.component.html</context>
<context context-type="linenumber">11</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">app/subscription/subscription/subscription.component.html</context>
<context context-type="linenumber">15</context>
</context-group>
<note from="description" priority="1">Videos title</note>
<target>Archivos de video</target>
</trans-unit>
<trans-unit datatype="html" id="038ebcb2a89155d90c24fa1c17bfe83dbadc3c20">
<source>Youtube Downloader</source>
<context-group purpose="location">
<context context-type="sourcefile">app/main/main.component.html</context>
<context context-type="linenumber">5</context>
</context-group>
<note from="description" priority="1">Youtube downloader home page label</note>
<target>Descargador de Youtube</target>
</trans-unit>
<trans-unit datatype="html" id="6d2ec8898344c8955542b0542c942038ef28bb80">
<source>Please enter a valid URL!</source>
<context-group purpose="location">
<context context-type="sourcefile">app/main/main.component.html</context>
<context context-type="linenumber">16</context>
</context-group>
<note from="description" priority="1">Enter valid URL error</note>
<target>Por favor entre una URL válida</target>
</trans-unit>
<trans-unit datatype="html" id="a38ae1082fec79ba1f379978337385a539a28e73">
<source>Quality</source>
<context-group purpose="location">
<context context-type="sourcefile">app/main/main.component.html</context>
<context context-type="linenumber">24</context>
</context-group>
<note from="description" priority="1">Quality select label</note>
<target>Calidad</target>
</trans-unit>
<trans-unit datatype="html" id="4be966a9dcfbc9b54dfcc604b831c0289f847fa4">
<source>Use URL</source>
<context-group purpose="location">
<context context-type="sourcefile">app/main/main.component.html</context>
<context context-type="linenumber">52</context>
</context-group>
<note from="description" priority="1">YT search Use URL button for searched video</note>
<target>Usa URL</target>
</trans-unit>
<trans-unit datatype="html" id="d3f02f845e62cebd75fde451ab8479d2a8ad784d">
<source>View</source>
<context-group purpose="location">
<context context-type="sourcefile">app/main/main.component.html</context>
<context context-type="linenumber">55</context>
</context-group>
<note from="description" priority="1">YT search View button for searched video</note>
<target>Ver</target>
</trans-unit>
<trans-unit datatype="html" id="4a9889d36910edc8323d7bab60858ab3da6d91df">
<source>Only Audio</source>
<context-group purpose="location">
<context context-type="sourcefile">app/main/main.component.html</context>
<context context-type="linenumber">65</context>
</context-group>
<note from="description" priority="1">Only Audio checkbox</note>
<target>Solo audio</target>
</trans-unit>
<trans-unit datatype="html" id="96a01fafe135afc58b0f8071a4ab00234495ce18">
<source>Multi-download Mode</source>
<context-group purpose="location">
<context context-type="sourcefile">app/main/main.component.html</context>
<context context-type="linenumber">70</context>
</context-group>
<note from="description" priority="1">Multi-download Mode checkbox</note>
<target>Descarga múltiple</target>
</trans-unit>
<trans-unit datatype="html" id="6a21ba5fb0ac804a525bf9ab168038c3ee88e661">
<source>Download</source>
<context-group purpose="location">
<context context-type="sourcefile">app/main/main.component.html</context>
<context context-type="linenumber">79</context>
</context-group>
<note from="description" priority="1">Main download button</note>
<target>Descarga</target>
</trans-unit>
<trans-unit datatype="html" id="6a3777f913cf3f288664f0632b9f24794fdcc24e">
<source>Cancel</source>
<context-group purpose="location">
<context context-type="sourcefile">app/main/main.component.html</context>
<context context-type="linenumber">84</context>
</context-group>
<note from="description" priority="1">Cancel download button</note>
<target>Cancela</target>
</trans-unit>
<trans-unit datatype="html" id="322ed150e02666fe2259c5b4614eac7066f4ffa0">
<source>Advanced</source>
<context-group purpose="location">
<context context-type="sourcefile">app/main/main.component.html</context>
<context context-type="linenumber">96</context>
</context-group>
<note from="description" priority="1">Advanced download mode panel</note>
<target>Avanzado</target>
</trans-unit>
<trans-unit datatype="html" id="b7ffe7c6586d6f3f18a9246806a7c7d5538ab43e">
<source>Simulated command:</source>
<context-group purpose="location">
<context context-type="sourcefile">app/main/main.component.html</context>
<context context-type="linenumber">102</context>
</context-group>
<note from="description" priority="1">Simulated command label</note>
<target>Commando simulado:</target>
</trans-unit>
<trans-unit datatype="html" id="4e4c721129466be9c3862294dc40241b64045998">
<source>Use custom args</source>
<context-group purpose="location">
<context context-type="sourcefile">app/main/main.component.html</context>
<context context-type="linenumber">110</context>
</context-group>
<note from="description" priority="1">Use custom args checkbox</note>
<target>Usar argumentos personalizados</target>
</trans-unit>
<trans-unit datatype="html" id="ad2f8ac8b7de7945b80c8e424484da94e597125f">
<source>Custom args</source>
<context-group purpose="location">
<context context-type="sourcefile">app/main/main.component.html</context>
<context context-type="linenumber">115</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/settings.component.html</context>
<context context-type="linenumber">83</context>
</context-group>
<note from="description" priority="1">Custom args placeholder</note>
<target>Argumentos personalizados</target>
</trans-unit>
<trans-unit datatype="html" id="ccc7e92cbdd35e901acf9ad80941abee07bd8f60">
<source>No need to include URL, just everything after.</source>
<context-group purpose="location">
<context context-type="sourcefile">app/main/main.component.html</context>
<context context-type="linenumber">117</context>
</context-group>
<note from="description" priority="1">Custom Args input hint</note>
<target>No es necesario incluir URL, solo todo después</target>
</trans-unit>
<trans-unit datatype="html" id="3a92a3443c65a52f37ca7efb8f453b35dbefbf29">
<source>Use custom output</source>
<context-group purpose="location">
<context context-type="sourcefile">app/main/main.component.html</context>
<context context-type="linenumber">125</context>
</context-group>
<note from="description" priority="1">Use custom output checkbox</note>
<target>Usar salida personalizada</target>
</trans-unit>
<trans-unit datatype="html" id="d9c02face477f2f9cdaae318ccee5f89856851fb">
<source>Custom output</source>
<context-group purpose="location">
<context context-type="sourcefile">app/main/main.component.html</context>
<context context-type="linenumber">130</context>
</context-group>
<note from="description" priority="1">Custom output placeholder</note>
<target>Salida personalizada</target>
</trans-unit>
<trans-unit datatype="html" id="fcfd4675b4c90f08d18d3abede9a9a4dff4cfdc7">
<source>Documentation</source>
<context-group purpose="location">
<context context-type="sourcefile">app/main/main.component.html</context>
<context context-type="linenumber">132</context>
</context-group>
<note from="description" priority="1">Youtube-dl output template documentation link</note>
<target>Documentación</target>
</trans-unit>
<trans-unit datatype="html" id="19d1ae64d94d28a29b2c57ae8671aace906b5401">
<source>Path is relative to the config download path. Don't include extension.</source>
<context-group purpose="location">
<context context-type="sourcefile">app/main/main.component.html</context>
<context context-type="linenumber">133</context>
</context-group>
<note from="description" priority="1">Custom Output input hint</note>
<target>La ruta es relativa a la ruta de descarga de la config. No incluya el extensión.</target>
</trans-unit>
<trans-unit datatype="html" id="8fad10737d3e3735a6699a4d89cbf6c20f6bb55f">
<source>Use authentication</source>
<context-group purpose="location">
<context context-type="sourcefile">app/main/main.component.html</context>
<context context-type="linenumber">139</context>
</context-group>
<note from="description" priority="1">Use authentication checkbox</note>
<target>Usa autenticación</target>
</trans-unit>
<trans-unit datatype="html" id="08c74dc9762957593b91f6eb5d65efdfc975bf48">
<source>Username</source>
<context-group purpose="location">
<context context-type="sourcefile">app/main/main.component.html</context>
<context context-type="linenumber">144</context>
</context-group>
<note from="description" priority="1">YT Username placeholder</note>
<target>Nombre de usuario</target>
</trans-unit>
<trans-unit datatype="html" id="c32ef07f8803a223a83ed17024b38e8d82292407">
<source>Password</source>
<context-group purpose="location">
<context context-type="sourcefile">app/main/main.component.html</context>
<context context-type="linenumber">149</context>
</context-group>
<note from="description" priority="1">YT Password placeholder</note>
<target>Contraseña</target>
</trans-unit>
<trans-unit datatype="html" id="4a0dada6e841a425de3e5006e6a04df26c644fa5">
<source>Audio</source>
<context-group purpose="location">
<context context-type="sourcefile">app/main/main.component.html</context>
<context context-type="linenumber">193</context>
</context-group>
<note from="description" priority="1">Audio files title</note>
<target>Audio</target>
</trans-unit>
<trans-unit datatype="html" id="9779715ac05308973d8f1c8658b29b986e92450f">
<source>Your audio files are here</source>
<context-group purpose="location">
<context context-type="sourcefile">app/main/main.component.html</context>
<context context-type="linenumber">198</context>
</context-group>
<note from="description" priority="1">Audio files description</note>
<target>Tus archivos de audio están aquí</target>
</trans-unit>
<trans-unit datatype="html" id="47546e45bbb476baaaad38244db444c427ddc502">
<source>Playlists</source>
<context-group purpose="location">
<context context-type="sourcefile">app/main/main.component.html</context>
<context context-type="linenumber">213</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">app/main/main.component.html</context>
<context context-type="linenumber">255</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">app/subscriptions/subscriptions.component.html</context>
<context context-type="linenumber">27</context>
</context-group>
<note from="description" priority="1">Playlists title</note>
<target>Listas de reproducción</target>
</trans-unit>
<trans-unit datatype="html" id="78bd81adb4609b68cfa4c589222bdc233ba1faaa">
<source>No playlists available. Create one from your downloading audio files by clicking the blue plus button.</source>
<context-group purpose="location">
<context context-type="sourcefile">app/main/main.component.html</context>
<context context-type="linenumber">224</context>
</context-group>
<note from="description" priority="1">No video playlists available text</note>
<target>No hay listas de reproducción disponibles. Cree uno de tus archivos de audio haciendo clic en el botón azul más.</target>
</trans-unit>
<trans-unit datatype="html" id="9d2b62bb0b91e2e17fb4177a7e3d6756a2e6ee33">
<source>Video</source>
<context-group purpose="location">
<context context-type="sourcefile">app/main/main.component.html</context>
<context context-type="linenumber">234</context>
</context-group>
<note from="description" priority="1">Video files title</note>
<target>Vídeo</target>
</trans-unit>
<trans-unit datatype="html" id="960582a8b9d7942716866ecfb7718309728f2916">
<source>Your video files are here</source>
<context-group purpose="location">
<context context-type="sourcefile">app/main/main.component.html</context>
<context context-type="linenumber">239</context>
</context-group>
<note from="description" priority="1">Video files description</note>
<target>Tus archivos de video son aquí</target>
</trans-unit>
<trans-unit datatype="html" id="0f59c46ca29e9725898093c9ea6b586730d0624e">
<source>No playlists available. Create one from your downloading video files by clicking the blue plus button.</source>
<context-group purpose="location">
<context context-type="sourcefile">app/main/main.component.html</context>
<context context-type="linenumber">268</context>
</context-group>
<note from="description" priority="1">No video playlists available text</note>
<target>No hay listas de reproducción disponibles. Cree uno de tus archivos de video haciendo clic en el botón azul más.</target>
</trans-unit>
<trans-unit datatype="html" id="ca3dbbc7f3e011bffe32a10a3ea45cc84f30ecf1">
<source>ID:</source>
<context-group purpose="location">
<context context-type="sourcefile">app/file-card/file-card.component.html</context>
<context context-type="linenumber">6</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">app/download-item/download-item.component.html</context>
<context context-type="linenumber">7</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">app/dialogs/subscription-info-dialog/subscription-info-dialog.component.html</context>
<context context-type="linenumber">13</context>
</context-group>
<note from="description" priority="1">File or playlist ID</note>
<target>ID:</target>
</trans-unit>
<trans-unit datatype="html" id="e684046d73bcee88e82f7ff01e2852789a05fc32">
<source>Count:</source>
<context-group purpose="location">
<context context-type="sourcefile">app/file-card/file-card.component.html</context>
<context context-type="linenumber">7</context>
</context-group>
<note from="description" priority="1">Playlist video count</note>
<target>Cuenta:</target>
</trans-unit>
<trans-unit datatype="html" id="121cc5391cd2a5115bc2b3160379ee5b36cd7716">
<source>Settings</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/settings.component.html</context>
<context context-type="linenumber">1</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">app/app.component.html</context>
<context context-type="linenumber">22</context>
</context-group>
<note from="description" priority="1">Settings title</note>
<target>Configuraciones</target>
</trans-unit>
<trans-unit datatype="html" id="fe22ca53e651df951dac25b67c17894b0980f767">
<source>Host</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/settings.component.html</context>
<context context-type="linenumber">8</context>
</context-group>
<note from="description" priority="1">Host settings title</note>
<target>Host</target>
</trans-unit>
<trans-unit datatype="html" id="801b98c6f02fe3b32f6afa3ee854c99ed83474e6">
<source>URL</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/settings.component.html</context>
<context context-type="linenumber">15</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">app/dialogs/subscribe-dialog/subscribe-dialog.component.html</context>
<context context-type="linenumber">8</context>
</context-group>
<note from="description" priority="1">URL input placeholder</note>
<target>URL</target>
</trans-unit>
<trans-unit datatype="html" id="54c512cca1923ab72faf1a0bd98d3d172469629a">
<source>URL this app will be accessed from, without the port.</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/settings.component.html</context>
<context context-type="linenumber">16</context>
</context-group>
<note from="description" priority="1">URL setting input hint</note>
<target>URL desde la que se accederá a esta aplicación, sin el puerto.</target>
</trans-unit>
<trans-unit datatype="html" id="cb2741a46e3560f6bc6dfd99d385e86b08b26d72">
<source>Port</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/settings.component.html</context>
<context context-type="linenumber">21</context>
</context-group>
<note from="description" priority="1">Port input placeholder</note>
<target>Puerto</target>
</trans-unit>
<trans-unit datatype="html" id="22e8f1d0423a3b784fe40fab187b92c06541b577">
<source>The desired port. Default is 17442.</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/settings.component.html</context>
<context context-type="linenumber">22</context>
</context-group>
<note from="description" priority="1">Port setting input hint</note>
<target>Puerto deseado. El valor predeterminado es 17442.</target>
</trans-unit>
<trans-unit datatype="html" id="948758e1412bb2ecdb98e3a4f1cbb6d7458456f2">
<source>Encryption</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/settings.component.html</context>
<context context-type="linenumber">34</context>
</context-group>
<note from="description" priority="1">Encryption settings title</note>
<target>Cifrado</target>
</trans-unit>
<trans-unit datatype="html" id="cbe16a57be414e84b6a68309d08fad894df797d6">
<source>Use encryption</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/settings.component.html</context>
<context context-type="linenumber">40</context>
</context-group>
<note from="description" priority="1">Use encryption setting</note>
<target>Usa cifrado</target>
</trans-unit>
<trans-unit datatype="html" id="0c1875a79b7ecc792cc1bebca3e063e40b5764f9">
<source>Cert file path</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/settings.component.html</context>
<context context-type="linenumber">45</context>
</context-group>
<note from="description" priority="1">Cert file path input placeholder</note>
<target>Ruta del archivo de certificado</target>
</trans-unit>
<trans-unit datatype="html" id="736551b93461d2de64b118cf4043eee1d1c2cb2c">
<source>Key file path</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/settings.component.html</context>
<context context-type="linenumber">51</context>
</context-group>
<note from="description" priority="1">Key file path input placeholder</note>
<target>Ruta de archivo de clave</target>
</trans-unit>
<trans-unit datatype="html" id="0ba25ad86a240576c4f20a2fada4722ebba77b1e">
<source>Downloader</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/settings.component.html</context>
<context context-type="linenumber">62</context>
</context-group>
<note from="description" priority="1">Downloader settings title</note>
<target>Descargador</target>
</trans-unit>
<trans-unit datatype="html" id="ab2756805742e84ad0cc0468f4be2d8aa9f855a5">
<source>Audio folder path</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/settings.component.html</context>
<context context-type="linenumber">69</context>
</context-group>
<note from="description" priority="1">Audio folder path input placeholder</note>
<target>Ruta de la carpeta de audio</target>
</trans-unit>
<trans-unit datatype="html" id="c2c89cdf45d46ea64d2ed2f9ac15dfa4d77e26ca">
<source>Path for audio only downloads. It is relative to YTDL-Material's root folder.</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/settings.component.html</context>
<context context-type="linenumber">70</context>
</context-group>
<note from="description" priority="1">Aduio path setting input hint</note>
<target>Ruta para descargas de solo audio. Es relativo a la carpeta raíz de YTDL-Material.</target>
</trans-unit>
<trans-unit datatype="html" id="46826331da1949bd6fb74624447057099c9d20cd">
<source>Video folder path</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/settings.component.html</context>
<context context-type="linenumber">76</context>
</context-group>
<note from="description" priority="1">Video folder path input placeholder</note>
<target>Ruta de la carpeta de video</target>
</trans-unit>
<trans-unit datatype="html" id="17c92e6d47a213fa95b5aa344b3f258147123f93">
<source>Path for video downloads. It is relative to YTDL-Material's root folder.</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/settings.component.html</context>
<context context-type="linenumber">77</context>
</context-group>
<note from="description" priority="1">Video path setting input hint</note>
<target>Ruta de descarga de videos. Es relativo a la carpeta raíz de YTDL-Material.</target>
</trans-unit>
<trans-unit datatype="html" id="f41145afc02fd47ef0576ac79acd2c47ebbf4901">
<source>Global custom args for downloads on the home page.</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/settings.component.html</context>
<context context-type="linenumber">84</context>
</context-group>
<note from="description" priority="1">Custom args setting input hint</note>
<target>Argumentos personalizados globales para descargas en la página de inicio.</target>
</trans-unit>
<trans-unit datatype="html" id="d5f69691f9f05711633128b5a3db696783266b58">
<source>Extra</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/settings.component.html</context>
<context context-type="linenumber">95</context>
</context-group>
<note from="description" priority="1">Extra settings title</note>
<target>Extra</target>
</trans-unit>
<trans-unit datatype="html" id="61f8fd90b5f8cb20c70371feb2ee5e1fac5a9095">
<source>Top title</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/settings.component.html</context>
<context context-type="linenumber">102</context>
</context-group>
<note from="description" priority="1">Top title input placeholder</note>
<target>Título superior</target>
</trans-unit>
<trans-unit datatype="html" id="78d3531417c0d4ba4c90f0d4ae741edc261ec8df">
<source>File manager enabled</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/settings.component.html</context>
<context context-type="linenumber">107</context>
</context-group>
<note from="description" priority="1">File manager enabled setting</note>
<target>Administrador de archivos habilitado</target>
</trans-unit>
<trans-unit datatype="html" id="c33bd5392b39dbed36b8e5a1145163a15d45835f">
<source>Allow quality select</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/settings.component.html</context>
<context context-type="linenumber">110</context>
</context-group>
<note from="description" priority="1">Allow quality seelct setting</note>
<target>Permitir selección de calidad</target>
</trans-unit>
<trans-unit datatype="html" id="bda5508e24e0d77debb28bcd9194d8fefb1cfb92">
<source>Download only mode</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/settings.component.html</context>
<context context-type="linenumber">113</context>
</context-group>
<note from="description" priority="1">Download only mode setting</note>
<target>Modo de solo descarga</target>
</trans-unit>
<trans-unit datatype="html" id="09d31c803a7252658694e1e3176b97f5655a3fe3">
<source>Allow multi-download mode</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/settings.component.html</context>
<context context-type="linenumber">116</context>
</context-group>
<note from="description" priority="1">Allow multi-downloade mode setting</note>
<target>Permitir el modo de descarga múltiple</target>
</trans-unit>
<trans-unit datatype="html" id="e351b40b3869a5c7d19c3d4918cb1ac7aaab95c4">
<source>API</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/settings.component.html</context>
<context context-type="linenumber">126</context>
</context-group>
<note from="description" priority="1">API settings title</note>
<target>API</target>
</trans-unit>
<trans-unit datatype="html" id="d5d7c61349f3b0859336066e6d453fc35d334fe5">
<source>Use YouTube API</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/settings.component.html</context>
<context context-type="linenumber">132</context>
</context-group>
<note from="description" priority="1">Use YouTube API setting</note>
<target>Utilizar la API de YouTube</target>
</trans-unit>
<trans-unit datatype="html" id="ce10d31febb3d9d60c160750570310f303a22c22">
<source>Youtube API Key</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/settings.component.html</context>
<context context-type="linenumber">136</context>
</context-group>
<note from="description" priority="1">Youtube API Key setting placeholder</note>
<target>Clave API de YouTube</target>
</trans-unit>
<trans-unit datatype="html" id="8602e313cdfa7c4cc475ccbe86459fce3c3fd986">
<source>Generating a key is easy!</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/settings.component.html</context>
<context context-type="linenumber">137</context>
</context-group>
<note from="description" priority="1">Youtube API Key setting hint</note>
<target>¡Generar una clave es fácil!</target>
</trans-unit>
<trans-unit datatype="html" id="60c855c323706a04ccd2ff22d634bde9b6233bbf">
<source>Themes</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/settings.component.html</context>
<context context-type="linenumber">148</context>
</context-group>
<note from="description" priority="1">Themes settings title</note>
<target>Temas</target>
</trans-unit>
<trans-unit datatype="html" id="ff7cee38a2259526c519f878e71b964f41db4348">
<source>Default</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/settings.component.html</context>
<context context-type="linenumber">155</context>
</context-group>
<note from="description" priority="1">Default theme label</note>
<target>Defecto</target>
</trans-unit>
<trans-unit datatype="html" id="adb4562d2dbd3584370e44496969d58c511ecb63">
<source>Dark</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/settings.component.html</context>
<context context-type="linenumber">156</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">app/app.component.html</context>
<context context-type="linenumber">17</context>
</context-group>
<note from="description" priority="1">Dark theme label</note>
<target>Oscura</target>
</trans-unit>
<trans-unit datatype="html" id="7a6bacee4c31cb5c0ac2d24274fb4610d8858602">
<source>Allow theme change</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/settings.component.html</context>
<context context-type="linenumber">161</context>
</context-group>
<note from="description" priority="1">Allow theme change setting</note>
<target>Permitir cambio de tema</target>
</trans-unit>
<trans-unit datatype="html" id="357064ca9d9ac859eb618e28e8126fa32be049e2">
<source>Subscriptions</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/settings.component.html</context>
<context context-type="linenumber">171</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">app/app.component.html</context>
<context context-type="linenumber">34</context>
</context-group>
<note from="description" priority="1">Subscriptions settings title</note>
<target>Suscripciones</target>
</trans-unit>
<trans-unit datatype="html" id="4e3120311801c4acd18de7146add2ee4a4417773">
<source>Allow subscriptions</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/settings.component.html</context>
<context context-type="linenumber">177</context>
</context-group>
<note from="description" priority="1">Allow subscriptions setting</note>
<target>Permitir suscripciones</target>
</trans-unit>
<trans-unit datatype="html" id="4bee2a4bef2d26d37c9b353c278e24e5cd309ce3">
<source>Subscriptions base path</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/settings.component.html</context>
<context context-type="linenumber">181</context>
</context-group>
<note from="description" priority="1">Subscriptions base path input setting placeholder</note>
<target>Ruta base de suscripciones</target>
</trans-unit>
<trans-unit datatype="html" id="bc9892814ee2d119ae94378c905ea440a249b84a">
<source>Base path for videos from your subscribed channels and playlists. It is relative to YTDL-Material's root folder.</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/settings.component.html</context>
<context context-type="linenumber">182</context>
</context-group>
<note from="description" priority="1">Subscriptions base path setting input hint</note>
<target>Ruta base para videos de sus canales y listas de reproducción suscritos. Es relativo a la carpeta raíz de YTDL-Material.</target>
</trans-unit>
<trans-unit datatype="html" id="5bef4b25ba680da7fff06b86a91b1fc7e6a926e3">
<source>Check interval</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/settings.component.html</context>
<context context-type="linenumber">187</context>
</context-group>
<note from="description" priority="1">Check interval input setting placeholder</note>
<target>Intervalo de comprobación</target>
</trans-unit>
<trans-unit datatype="html" id="0f56a7449b77630c114615395bbda4cab398efd8">
<source>Unit is seconds, only include numbers.</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/settings.component.html</context>
<context context-type="linenumber">188</context>
</context-group>
<note from="description" priority="1">Check interval setting input hint</note>
<target>La unidad es segundos, solo incluye números.</target>
</trans-unit>
<trans-unit datatype="html" id="78e49b7339b4fa7184dd21bcaae107ce9b7076f6">
<source>Use youtube-dl archive</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/settings.component.html</context>
<context context-type="linenumber">192</context>
</context-group>
<note from="description" priority="1">Use youtube-dl archive setting</note>
<target>Usa el archivo de youtube-dl</target>
</trans-unit>
<trans-unit datatype="html" id="fa9fe4255231dd1cc6b29d3d254a25cb7c764f0f">
<source>With youtube-dl's archive</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/settings.component.html</context>
<context context-type="linenumber">193</context>
</context-group>
<note from="description" priority="1">youtube-dl archive explanation prefix link</note>
<target>Con la función de archivo de youtube-dl,</target>
</trans-unit>
<trans-unit datatype="html" id="09006404cccc24b7a8f8d1ce0b39f2761ab841d8">
<source>feature, downloaded videos from your subscriptions get recorded in a text file in the subscriptions archive sub-directory.</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/settings.component.html</context>
<context context-type="linenumber">193</context>
</context-group>
<note from="description" priority="1">youtube-dl archive explanation middle</note>
<target>los videos descargados de sus suscripciones se graban en un archivo de texto en el subdirectorio del archivo de suscripciones.</target>
</trans-unit>
<trans-unit datatype="html" id="29ed79a98fc01e7f9537777598e31dbde3aa7981">
<source>This enables the ability to permanently delete videos from your subscriptions without unsubscribing, and allows you to record which videos you downloaded in case of data loss.</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/settings.component.html</context>
<context context-type="linenumber">194</context>
</context-group>
<note from="description" priority="1">youtube-dl archive explanation suffix</note>
<target>Esto permite eliminar videos de sus suscripciones de forma permanente sin darse de baja y le permite grabar los videos que descargó en caso de pérdida de datos.</target>
</trans-unit>
<trans-unit datatype="html" id="bc2e854e111ecf2bd7db170da5e3c2ed08181d88">
<source>Advanced</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/settings.component.html</context>
<context context-type="linenumber">204</context>
</context-group>
<note from="description" priority="1">Advanced settings title</note>
<target>Avanzado</target>
</trans-unit>
<trans-unit datatype="html" id="5fab47f146b0a4b809dcebf3db9da94df6299ea1">
<source>Use default downloading agent</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/settings.component.html</context>
<context context-type="linenumber">210</context>
</context-group>
<note from="description" priority="1">Use default downloading agent setting</note>
<target>Usar agente de descarga predeterminado</target>
</trans-unit>
<trans-unit datatype="html" id="cdf75b1bdda80487e2ce1ff264ae171cbc5dc3b1">
<source>Custom agent</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/settings.component.html</context>
<context context-type="linenumber">214</context>
</context-group>
<note from="description" priority="1">Custom agent setting placeholder</note>
<target>Agente personalizado</target>
</trans-unit>
<trans-unit datatype="html" id="dc3d990391c944d1fbfc7cfb402f7b5e112fb3a8">
<source>Allow advanced download</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/settings.component.html</context>
<context context-type="linenumber">219</context>
</context-group>
<note from="description" priority="1">Allow advanced downloading setting</note>
<target>Permitir descarga avanzada</target>
</trans-unit>
<trans-unit datatype="html" id="52c9a103b812f258bcddc3d90a6e3f46871d25fe">
<source>Save</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/settings.component.html</context>
<context context-type="linenumber">229</context>
</context-group>
<note from="description" priority="1">Settings save button</note>
<target>Salvar</target>
</trans-unit>
<trans-unit datatype="html" id="d7b35c384aecd25a516200d6921836374613dfe7">
<source>Cancel</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/settings.component.html</context>
<context context-type="linenumber">232</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">app/dialogs/subscribe-dialog/subscribe-dialog.component.html</context>
<context context-type="linenumber">37</context>
</context-group>
<note from="description" priority="1">Settings cancel button</note>
<target>Cancelar</target>
</trans-unit>
<trans-unit datatype="html" id="92eee6be6de0b11c924e3ab27db30257159c0a7c">
<source>Home</source>
<context-group purpose="location">
<context context-type="sourcefile">app/app.component.html</context>
<context context-type="linenumber">33</context>
</context-group>
<note from="description" priority="1">Navigation menu Home Page title</note>
<target>Inicio</target>
</trans-unit>
<trans-unit datatype="html" id="5b3075e8dc3f3921ec316b0bd83b6d14a06c1a4f">
<source>Save changes</source>
<context-group purpose="location">
<context context-type="sourcefile">app/player/player.component.html</context>
<context context-type="linenumber">22</context>
</context-group>
<note from="description" priority="1">Playlist save changes button</note>
<target>Guardar cambios</target>
</trans-unit>
<trans-unit datatype="html" id="a9806cf78ce00eb2613eeca11354a97e033377b8">
<source>Subscribe to playlist or channel</source>
<context-group purpose="location">
<context context-type="sourcefile">app/dialogs/subscribe-dialog/subscribe-dialog.component.html</context>
<context context-type="linenumber">1</context>
</context-group>
<note from="description" priority="1">Subscribe dialog title</note>
<target>Suscríbase a la lista de reproducción o al canal</target>
</trans-unit>
<trans-unit datatype="html" id="93efc99ae087fc116de708ecd3ace86ca237cf30">
<source>The playlist or channel URL</source>
<context-group purpose="location">
<context context-type="sourcefile">app/dialogs/subscribe-dialog/subscribe-dialog.component.html</context>
<context context-type="linenumber">9</context>
</context-group>
<note from="description" priority="1">Subscription URL input hint</note>
<target>La lista de reproducción o la URL del canal</target>
</trans-unit>
<trans-unit datatype="html" id="08f5d0ef937ae17feb1b04aff15ad88911e87baf">
<source>Custom name</source>
<context-group purpose="location">
<context context-type="sourcefile">app/dialogs/subscribe-dialog/subscribe-dialog.component.html</context>
<context context-type="linenumber">14</context>
</context-group>
<note from="description" priority="1">Subscription custom name placeholder</note>
<target>Nombre personalizado</target>
</trans-unit>
<trans-unit datatype="html" id="f3f62aa84d59f3a8b900cc9a7eec3ef279a7b4e7">
<source>This is optional</source>
<context-group purpose="location">
<context context-type="sourcefile">app/dialogs/subscribe-dialog/subscribe-dialog.component.html</context>
<context context-type="linenumber">15</context>
</context-group>
<note from="description" priority="1">Custom name input hint</note>
<target>Esto es opcional</target>
</trans-unit>
<trans-unit datatype="html" id="ea30873bd3f0d5e4fb2378eec3f0a1db77634a28">
<source>Download all uploads</source>
<context-group purpose="location">
<context context-type="sourcefile">app/dialogs/subscribe-dialog/subscribe-dialog.component.html</context>
<context context-type="linenumber">19</context>
</context-group>
<note from="description" priority="1">Download all uploads subscription setting</note>
<target>Descargar todas las cargas</target>
</trans-unit>
<trans-unit datatype="html" id="28a678e9cabf86e44c32594c43fa0e890135c20f">
<source>Download videos uploaded in the last</source>
<context-group purpose="location">
<context context-type="sourcefile">app/dialogs/subscribe-dialog/subscribe-dialog.component.html</context>
<context context-type="linenumber">22</context>
</context-group>
<note from="description" priority="1">Download time range prefix</note>
<target>Descargar videos subidos en el último</target>
</trans-unit>
<trans-unit datatype="html" id="e78c0d60ac39787f62c9159646fe0b3c1ed55a1d">
<source>Type:</source>
<context-group purpose="location">
<context context-type="sourcefile">app/dialogs/subscription-info-dialog/subscription-info-dialog.component.html</context>
<context context-type="linenumber">5</context>
</context-group>
<note from="description" priority="1">Subscription type property</note>
<target>Tipo:</target>
</trans-unit>
<trans-unit datatype="html" id="c52db455cca9109ee47e1a612c3f4117c09eb71b">
<source>URL:</source>
<context-group purpose="location">
<context context-type="sourcefile">app/dialogs/subscription-info-dialog/subscription-info-dialog.component.html</context>
<context context-type="linenumber">9</context>
</context-group>
<note from="description" priority="1">Subscription URL property</note>
<target>URL:</target>
</trans-unit>
<trans-unit datatype="html" id="a44d86aa1e6c20ced07aca3a7c081d8db9ded1c6">
<source>Archive:</source>
<context-group purpose="location">
<context context-type="sourcefile">app/dialogs/subscription-info-dialog/subscription-info-dialog.component.html</context>
<context context-type="linenumber">17</context>
</context-group>
<note from="description" priority="1">Subscription ID property</note>
<target>Archivo:</target>
</trans-unit>
<trans-unit datatype="html" id="f4e529ae5ffd73001d1ff4bbdeeb0a72e342e5c8">
<source>Close</source>
<context-group purpose="location">
<context context-type="sourcefile">app/dialogs/subscription-info-dialog/subscription-info-dialog.component.html</context>
<context context-type="linenumber">23</context>
</context-group>
<note from="description" priority="1">Close subscription info button</note>
<target>Cerca</target>
</trans-unit>
<trans-unit datatype="html" id="8efc77bf327659c0fec1f518cf48a98cdcd9dddf">
<source>Export Archive</source>
<context-group purpose="location">
<context context-type="sourcefile">app/dialogs/subscription-info-dialog/subscription-info-dialog.component.html</context>
<context context-type="linenumber">24</context>
</context-group>
<note from="description" priority="1">Export Archive button</note>
<target>Exportar el archivo</target>
</trans-unit>
<trans-unit datatype="html" id="3042bd3ad8dffcfeca5fd1ae6159fd1047434e95">
<source>Unsubscribe</source>
<context-group purpose="location">
<context context-type="sourcefile">app/dialogs/subscription-info-dialog/subscription-info-dialog.component.html</context>
<context context-type="linenumber">26</context>
</context-group>
<note from="description" priority="1">Unsubscribe button</note>
<target>Darse de baja</target>
</trans-unit>
<trans-unit datatype="html" id="e2319dec5b4ccfb6ed9f55ccabd63650a8fdf547">
<source>Your subscriptions</source>
<context-group purpose="location">
<context context-type="sourcefile">app/subscriptions/subscriptions.component.html</context>
<context context-type="linenumber">3</context>
</context-group>
<note from="description" priority="1">Subscriptions title</note>
<target>Sus suscripciones</target>
</trans-unit>
<trans-unit datatype="html" id="807cf11e6ac1cde912496f764c176bdfdd6b7e19">
<source>Channels</source>
<context-group purpose="location">
<context context-type="sourcefile">app/subscriptions/subscriptions.component.html</context>
<context context-type="linenumber">8</context>
</context-group>
<note from="description" priority="1">Subscriptions channels title</note>
<target>Canales</target>
</trans-unit>
<trans-unit datatype="html" id="29b89f751593e1b347eef103891b7a1ff36ec03f">
<source>Name not available. Channel retrieval in progress.</source>
<context-group purpose="location">
<context context-type="sourcefile">app/subscriptions/subscriptions.component.html</context>
<context context-type="linenumber">14</context>
</context-group>
<note from="description" priority="1">Subscription playlist not available text</note>
<target>Nombre no disponible. Recuperación de canales en progreso.</target>
</trans-unit>
<trans-unit datatype="html" id="4636cd4a1379c50d471e98786098c4d39e1e82ad">
<source>You have no channel subscriptions.</source>
<context-group purpose="location">
<context context-type="sourcefile">app/subscriptions/subscriptions.component.html</context>
<context context-type="linenumber">24</context>
</context-group>
<note from="description" priority="1">No channel subscriptions text</note>
<target>No tienes suscripciones de canal.</target>
</trans-unit>
<trans-unit datatype="html" id="2e0a410652cb07d069f576b61eab32586a18320d">
<source>Name not available. Playlist retrieval in progress.</source>
<context-group purpose="location">
<context context-type="sourcefile">app/subscriptions/subscriptions.component.html</context>
<context context-type="linenumber">33</context>
</context-group>
<note from="description" priority="1">Subscription playlist not available text</note>
<target>Nombre no disponible. Recuperación de listas de reproducción en progreso.</target>
</trans-unit>
<trans-unit datatype="html" id="587b57ced54965d8874c3fd0e9dfedb987e5df04">
<source>You have no playlist subscriptions.</source>
<context-group purpose="location">
<context context-type="sourcefile">app/subscriptions/subscriptions.component.html</context>
<context context-type="linenumber">43</context>
</context-group>
<note from="description" priority="1">No playlist subscriptions text</note>
<target>No tienes suscripciones a listas de reproducción.</target>
</trans-unit>
<trans-unit datatype="html" id="7e892ba15f2c6c17e83510e273b3e10fc32ea016">
<source>Search</source>
<context-group purpose="location">
<context context-type="sourcefile">app/subscription/subscription/subscription.component.html</context>
<context context-type="linenumber">19</context>
</context-group>
<note from="description" priority="1">Subscription videos search placeholder</note>
<target>Buscar</target>
</trans-unit>
<trans-unit datatype="html" id="2054791b822475aeaea95c0119113de3200f5e1c">
<source>Length:</source>
<context-group purpose="location">
<context context-type="sourcefile">app/subscription/subscription-file-card/subscription-file-card.component.html</context>
<context context-type="linenumber">3</context>
</context-group>
<note from="description" priority="1">Video duration label</note>
<target>Duración:</target>
</trans-unit>
<trans-unit datatype="html" id="94e01842dcee90531caa52e4147f70679bac87fe">
<source>Delete and redownload</source>
<context-group purpose="location">
<context context-type="sourcefile">app/subscription/subscription-file-card/subscription-file-card.component.html</context>
<context context-type="linenumber">7</context>
</context-group>
<note from="description" priority="1">Delete and redownload subscription video button</note>
<target>Eliminar y volver a descargar</target>
</trans-unit>
<trans-unit datatype="html" id="2031adb51e07a41844e8ba7704b054e98345c9c1">
<source>Delete forever</source>
<context-group purpose="location">
<context context-type="sourcefile">app/subscription/subscription-file-card/subscription-file-card.component.html</context>
<context context-type="linenumber">8</context>
</context-group>
<note from="description" priority="1">Delete forever subscription video button</note>
<target>Borrar para siempre</target>
</trans-unit>
</body>
</file>
</xliff>

987
src/locale/messages.es.xlf Normal file
View File

@@ -0,0 +1,987 @@
<?xml version="1.0" encoding="UTF-8"?>
<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">
<file datatype="plaintext" original="ng2.template" source-language="en">
<body>
<trans-unit datatype="html" id="17f0ea5d2d7a262b0e875acc70475f102aee84e6">
<source>Create a playlist</source>
<context-group purpose="location">
<context context-type="sourcefile">app/create-playlist/create-playlist.component.html</context>
<context context-type="linenumber">1</context>
</context-group>
<note from="description" priority="1">Create a playlist dialog title</note>
<target>Crea una lista de reproducción</target>
</trans-unit>
<trans-unit datatype="html" id="cff1428d10d59d14e45edec3c735a27b5482db59">
<source>Name</source>
<context-group purpose="location">
<context context-type="sourcefile">app/create-playlist/create-playlist.component.html</context>
<context context-type="linenumber">5</context>
</context-group>
<note from="description" priority="1">Playlist name placeholder</note>
<target>Nombre</target>
</trans-unit>
<trans-unit datatype="html" id="f47e2d56dd8a145b2e9599da9730c049d52962a2">
<source>Audio files</source>
<context-group purpose="location">
<context context-type="sourcefile">app/create-playlist/create-playlist.component.html</context>
<context context-type="linenumber">10</context>
</context-group>
<note from="description" priority="1">Audio files title</note>
<target>Archivos de sonido</target>
</trans-unit>
<trans-unit datatype="html" id="a52dae09be10ca3a65da918533ced3d3f4992238">
<source>Videos</source>
<context-group purpose="location">
<context context-type="sourcefile">app/create-playlist/create-playlist.component.html</context>
<context context-type="linenumber">11</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">app/subscription/subscription/subscription.component.html</context>
<context context-type="linenumber">15</context>
</context-group>
<note from="description" priority="1">Videos title</note>
<target>Archivos de video</target>
</trans-unit>
<trans-unit datatype="html" id="038ebcb2a89155d90c24fa1c17bfe83dbadc3c20">
<source>Youtube Downloader</source>
<context-group purpose="location">
<context context-type="sourcefile">app/main/main.component.html</context>
<context context-type="linenumber">5</context>
</context-group>
<note from="description" priority="1">Youtube downloader home page label</note>
<target>Descargador de Youtube</target>
</trans-unit>
<trans-unit datatype="html" id="6d2ec8898344c8955542b0542c942038ef28bb80">
<source>Please enter a valid URL!</source>
<context-group purpose="location">
<context context-type="sourcefile">app/main/main.component.html</context>
<context context-type="linenumber">16</context>
</context-group>
<note from="description" priority="1">Enter valid URL error</note>
<target>Por favor entre una URL válida</target>
</trans-unit>
<trans-unit datatype="html" id="a38ae1082fec79ba1f379978337385a539a28e73">
<source>Quality</source>
<context-group purpose="location">
<context context-type="sourcefile">app/main/main.component.html</context>
<context context-type="linenumber">24</context>
</context-group>
<note from="description" priority="1">Quality select label</note>
<target>Calidad</target>
</trans-unit>
<trans-unit datatype="html" id="4be966a9dcfbc9b54dfcc604b831c0289f847fa4">
<source>Use URL</source>
<context-group purpose="location">
<context context-type="sourcefile">app/main/main.component.html</context>
<context context-type="linenumber">52</context>
</context-group>
<note from="description" priority="1">YT search Use URL button for searched video</note>
<target>Usa URL</target>
</trans-unit>
<trans-unit datatype="html" id="d3f02f845e62cebd75fde451ab8479d2a8ad784d">
<source>View</source>
<context-group purpose="location">
<context context-type="sourcefile">app/main/main.component.html</context>
<context context-type="linenumber">55</context>
</context-group>
<note from="description" priority="1">YT search View button for searched video</note>
<target>Ver</target>
</trans-unit>
<trans-unit datatype="html" id="4a9889d36910edc8323d7bab60858ab3da6d91df">
<source>Only Audio</source>
<context-group purpose="location">
<context context-type="sourcefile">app/main/main.component.html</context>
<context context-type="linenumber">65</context>
</context-group>
<note from="description" priority="1">Only Audio checkbox</note>
<target>Solo audio</target>
</trans-unit>
<trans-unit datatype="html" id="96a01fafe135afc58b0f8071a4ab00234495ce18">
<source>Multi-download Mode</source>
<context-group purpose="location">
<context context-type="sourcefile">app/main/main.component.html</context>
<context context-type="linenumber">70</context>
</context-group>
<note from="description" priority="1">Multi-download Mode checkbox</note>
<target>Descarga múltiple</target>
</trans-unit>
<trans-unit datatype="html" id="6a21ba5fb0ac804a525bf9ab168038c3ee88e661">
<source>Download</source>
<context-group purpose="location">
<context context-type="sourcefile">app/main/main.component.html</context>
<context context-type="linenumber">79</context>
</context-group>
<note from="description" priority="1">Main download button</note>
<target>Descarga</target>
</trans-unit>
<trans-unit datatype="html" id="6a3777f913cf3f288664f0632b9f24794fdcc24e">
<source>Cancel</source>
<context-group purpose="location">
<context context-type="sourcefile">app/main/main.component.html</context>
<context context-type="linenumber">84</context>
</context-group>
<note from="description" priority="1">Cancel download button</note>
<target>Cancela</target>
</trans-unit>
<trans-unit datatype="html" id="322ed150e02666fe2259c5b4614eac7066f4ffa0">
<source>Advanced</source>
<context-group purpose="location">
<context context-type="sourcefile">app/main/main.component.html</context>
<context context-type="linenumber">96</context>
</context-group>
<note from="description" priority="1">Advanced download mode panel</note>
<target>Avanzado</target>
</trans-unit>
<trans-unit datatype="html" id="b7ffe7c6586d6f3f18a9246806a7c7d5538ab43e">
<source>Simulated command:</source>
<context-group purpose="location">
<context context-type="sourcefile">app/main/main.component.html</context>
<context context-type="linenumber">102</context>
</context-group>
<note from="description" priority="1">Simulated command label</note>
<target>Commando simulado:</target>
</trans-unit>
<trans-unit datatype="html" id="4e4c721129466be9c3862294dc40241b64045998">
<source>Use custom args</source>
<context-group purpose="location">
<context context-type="sourcefile">app/main/main.component.html</context>
<context context-type="linenumber">110</context>
</context-group>
<note from="description" priority="1">Use custom args checkbox</note>
<target>Usar argumentos personalizados</target>
</trans-unit>
<trans-unit datatype="html" id="ad2f8ac8b7de7945b80c8e424484da94e597125f">
<source>Custom args</source>
<context-group purpose="location">
<context context-type="sourcefile">app/main/main.component.html</context>
<context context-type="linenumber">115</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/settings.component.html</context>
<context context-type="linenumber">83</context>
</context-group>
<note from="description" priority="1">Custom args placeholder</note>
<target>Argumentos personalizados</target>
</trans-unit>
<trans-unit datatype="html" id="ccc7e92cbdd35e901acf9ad80941abee07bd8f60">
<source>No need to include URL, just everything after.</source>
<context-group purpose="location">
<context context-type="sourcefile">app/main/main.component.html</context>
<context context-type="linenumber">117</context>
</context-group>
<note from="description" priority="1">Custom Args input hint</note>
<target>No es necesario incluir URL, solo todo después</target>
</trans-unit>
<trans-unit datatype="html" id="3a92a3443c65a52f37ca7efb8f453b35dbefbf29">
<source>Use custom output</source>
<context-group purpose="location">
<context context-type="sourcefile">app/main/main.component.html</context>
<context context-type="linenumber">125</context>
</context-group>
<note from="description" priority="1">Use custom output checkbox</note>
<target>Usar salida personalizada</target>
</trans-unit>
<trans-unit datatype="html" id="d9c02face477f2f9cdaae318ccee5f89856851fb">
<source>Custom output</source>
<context-group purpose="location">
<context context-type="sourcefile">app/main/main.component.html</context>
<context context-type="linenumber">130</context>
</context-group>
<note from="description" priority="1">Custom output placeholder</note>
<target>Salida personalizada</target>
</trans-unit>
<trans-unit datatype="html" id="fcfd4675b4c90f08d18d3abede9a9a4dff4cfdc7">
<source>Documentation</source>
<context-group purpose="location">
<context context-type="sourcefile">app/main/main.component.html</context>
<context context-type="linenumber">132</context>
</context-group>
<note from="description" priority="1">Youtube-dl output template documentation link</note>
<target>Documentación</target>
</trans-unit>
<trans-unit datatype="html" id="19d1ae64d94d28a29b2c57ae8671aace906b5401">
<source>Path is relative to the config download path. Don't include extension.</source>
<context-group purpose="location">
<context context-type="sourcefile">app/main/main.component.html</context>
<context context-type="linenumber">133</context>
</context-group>
<note from="description" priority="1">Custom Output input hint</note>
<target>La ruta es relativa a la ruta de descarga de la config. No incluya el extensión.</target>
</trans-unit>
<trans-unit datatype="html" id="8fad10737d3e3735a6699a4d89cbf6c20f6bb55f">
<source>Use authentication</source>
<context-group purpose="location">
<context context-type="sourcefile">app/main/main.component.html</context>
<context context-type="linenumber">139</context>
</context-group>
<note from="description" priority="1">Use authentication checkbox</note>
<target>Usa autenticación</target>
</trans-unit>
<trans-unit datatype="html" id="08c74dc9762957593b91f6eb5d65efdfc975bf48">
<source>Username</source>
<context-group purpose="location">
<context context-type="sourcefile">app/main/main.component.html</context>
<context context-type="linenumber">144</context>
</context-group>
<note from="description" priority="1">YT Username placeholder</note>
<target>Nombre de usuario</target>
</trans-unit>
<trans-unit datatype="html" id="c32ef07f8803a223a83ed17024b38e8d82292407">
<source>Password</source>
<context-group purpose="location">
<context context-type="sourcefile">app/main/main.component.html</context>
<context context-type="linenumber">149</context>
</context-group>
<note from="description" priority="1">YT Password placeholder</note>
<target>Contraseña</target>
</trans-unit>
<trans-unit datatype="html" id="4a0dada6e841a425de3e5006e6a04df26c644fa5">
<source>Audio</source>
<context-group purpose="location">
<context context-type="sourcefile">app/main/main.component.html</context>
<context context-type="linenumber">193</context>
</context-group>
<note from="description" priority="1">Audio files title</note>
<target>Audio</target>
</trans-unit>
<trans-unit datatype="html" id="9779715ac05308973d8f1c8658b29b986e92450f">
<source>Your audio files are here</source>
<context-group purpose="location">
<context context-type="sourcefile">app/main/main.component.html</context>
<context context-type="linenumber">198</context>
</context-group>
<note from="description" priority="1">Audio files description</note>
<target>Tus archivos de audio están aquí</target>
</trans-unit>
<trans-unit datatype="html" id="47546e45bbb476baaaad38244db444c427ddc502">
<source>Playlists</source>
<context-group purpose="location">
<context context-type="sourcefile">app/main/main.component.html</context>
<context context-type="linenumber">213</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">app/main/main.component.html</context>
<context context-type="linenumber">255</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">app/subscriptions/subscriptions.component.html</context>
<context context-type="linenumber">27</context>
</context-group>
<note from="description" priority="1">Playlists title</note>
<target>Listas de reproducción</target>
</trans-unit>
<trans-unit datatype="html" id="78bd81adb4609b68cfa4c589222bdc233ba1faaa">
<source>No playlists available. Create one from your downloading audio files by clicking the blue plus button.</source>
<context-group purpose="location">
<context context-type="sourcefile">app/main/main.component.html</context>
<context context-type="linenumber">224</context>
</context-group>
<note from="description" priority="1">No video playlists available text</note>
<target>No hay listas de reproducción disponibles. Cree uno de tus archivos de audio haciendo clic en el botón azul más.</target>
</trans-unit>
<trans-unit datatype="html" id="9d2b62bb0b91e2e17fb4177a7e3d6756a2e6ee33">
<source>Video</source>
<context-group purpose="location">
<context context-type="sourcefile">app/main/main.component.html</context>
<context context-type="linenumber">234</context>
</context-group>
<note from="description" priority="1">Video files title</note>
<target>Vídeo</target>
</trans-unit>
<trans-unit datatype="html" id="960582a8b9d7942716866ecfb7718309728f2916">
<source>Your video files are here</source>
<context-group purpose="location">
<context context-type="sourcefile">app/main/main.component.html</context>
<context context-type="linenumber">239</context>
</context-group>
<note from="description" priority="1">Video files description</note>
<target>Tus archivos de video son aquí</target>
</trans-unit>
<trans-unit datatype="html" id="0f59c46ca29e9725898093c9ea6b586730d0624e">
<source>No playlists available. Create one from your downloading video files by clicking the blue plus button.</source>
<context-group purpose="location">
<context context-type="sourcefile">app/main/main.component.html</context>
<context context-type="linenumber">268</context>
</context-group>
<note from="description" priority="1">No video playlists available text</note>
<target>No hay listas de reproducción disponibles. Cree uno de tus archivos de video haciendo clic en el botón azul más.</target>
</trans-unit>
<trans-unit datatype="html" id="ca3dbbc7f3e011bffe32a10a3ea45cc84f30ecf1">
<source>ID:</source>
<context-group purpose="location">
<context context-type="sourcefile">app/file-card/file-card.component.html</context>
<context context-type="linenumber">6</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">app/download-item/download-item.component.html</context>
<context context-type="linenumber">7</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">app/dialogs/subscription-info-dialog/subscription-info-dialog.component.html</context>
<context context-type="linenumber">13</context>
</context-group>
<note from="description" priority="1">File or playlist ID</note>
<target>ID:</target>
</trans-unit>
<trans-unit datatype="html" id="e684046d73bcee88e82f7ff01e2852789a05fc32">
<source>Count:</source>
<context-group purpose="location">
<context context-type="sourcefile">app/file-card/file-card.component.html</context>
<context context-type="linenumber">7</context>
</context-group>
<note from="description" priority="1">Playlist video count</note>
<target>Cuenta:</target>
</trans-unit>
<trans-unit datatype="html" id="121cc5391cd2a5115bc2b3160379ee5b36cd7716">
<source>Settings</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/settings.component.html</context>
<context context-type="linenumber">1</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">app/app.component.html</context>
<context context-type="linenumber">22</context>
</context-group>
<note from="description" priority="1">Settings title</note>
<target>Configuraciones</target>
</trans-unit>
<trans-unit datatype="html" id="fe22ca53e651df951dac25b67c17894b0980f767">
<source>Host</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/settings.component.html</context>
<context context-type="linenumber">8</context>
</context-group>
<note from="description" priority="1">Host settings title</note>
<target>Host</target>
</trans-unit>
<trans-unit datatype="html" id="801b98c6f02fe3b32f6afa3ee854c99ed83474e6">
<source>URL</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/settings.component.html</context>
<context context-type="linenumber">15</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">app/dialogs/subscribe-dialog/subscribe-dialog.component.html</context>
<context context-type="linenumber">8</context>
</context-group>
<note from="description" priority="1">URL input placeholder</note>
<target>URL</target>
</trans-unit>
<trans-unit datatype="html" id="54c512cca1923ab72faf1a0bd98d3d172469629a">
<source>URL this app will be accessed from, without the port.</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/settings.component.html</context>
<context context-type="linenumber">16</context>
</context-group>
<note from="description" priority="1">URL setting input hint</note>
<target>URL desde la que se accederá a esta aplicación, sin el puerto.</target>
</trans-unit>
<trans-unit datatype="html" id="cb2741a46e3560f6bc6dfd99d385e86b08b26d72">
<source>Port</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/settings.component.html</context>
<context context-type="linenumber">21</context>
</context-group>
<note from="description" priority="1">Port input placeholder</note>
<target>Puerto</target>
</trans-unit>
<trans-unit datatype="html" id="22e8f1d0423a3b784fe40fab187b92c06541b577">
<source>The desired port. Default is 17442.</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/settings.component.html</context>
<context context-type="linenumber">22</context>
</context-group>
<note from="description" priority="1">Port setting input hint</note>
<target>Puerto deseado. El valor predeterminado es 17442.</target>
</trans-unit>
<trans-unit datatype="html" id="948758e1412bb2ecdb98e3a4f1cbb6d7458456f2">
<source>Encryption</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/settings.component.html</context>
<context context-type="linenumber">34</context>
</context-group>
<note from="description" priority="1">Encryption settings title</note>
<target>Cifrado</target>
</trans-unit>
<trans-unit datatype="html" id="cbe16a57be414e84b6a68309d08fad894df797d6">
<source>Use encryption</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/settings.component.html</context>
<context context-type="linenumber">40</context>
</context-group>
<note from="description" priority="1">Use encryption setting</note>
<target>Usa cifrado</target>
</trans-unit>
<trans-unit datatype="html" id="0c1875a79b7ecc792cc1bebca3e063e40b5764f9">
<source>Cert file path</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/settings.component.html</context>
<context context-type="linenumber">45</context>
</context-group>
<note from="description" priority="1">Cert file path input placeholder</note>
<target>Ruta del archivo de certificado</target>
</trans-unit>
<trans-unit datatype="html" id="736551b93461d2de64b118cf4043eee1d1c2cb2c">
<source>Key file path</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/settings.component.html</context>
<context context-type="linenumber">51</context>
</context-group>
<note from="description" priority="1">Key file path input placeholder</note>
<target>Ruta de archivo de clave</target>
</trans-unit>
<trans-unit datatype="html" id="0ba25ad86a240576c4f20a2fada4722ebba77b1e">
<source>Downloader</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/settings.component.html</context>
<context context-type="linenumber">62</context>
</context-group>
<note from="description" priority="1">Downloader settings title</note>
<target>Descargador</target>
</trans-unit>
<trans-unit datatype="html" id="ab2756805742e84ad0cc0468f4be2d8aa9f855a5">
<source>Audio folder path</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/settings.component.html</context>
<context context-type="linenumber">69</context>
</context-group>
<note from="description" priority="1">Audio folder path input placeholder</note>
<target>Ruta de la carpeta de audio</target>
</trans-unit>
<trans-unit datatype="html" id="c2c89cdf45d46ea64d2ed2f9ac15dfa4d77e26ca">
<source>Path for audio only downloads. It is relative to YTDL-Material's root folder.</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/settings.component.html</context>
<context context-type="linenumber">70</context>
</context-group>
<note from="description" priority="1">Aduio path setting input hint</note>
<target>Ruta para descargas de solo audio. Es relativo a la carpeta raíz de YTDL-Material.</target>
</trans-unit>
<trans-unit datatype="html" id="46826331da1949bd6fb74624447057099c9d20cd">
<source>Video folder path</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/settings.component.html</context>
<context context-type="linenumber">76</context>
</context-group>
<note from="description" priority="1">Video folder path input placeholder</note>
<target>Ruta de la carpeta de video</target>
</trans-unit>
<trans-unit datatype="html" id="17c92e6d47a213fa95b5aa344b3f258147123f93">
<source>Path for video downloads. It is relative to YTDL-Material's root folder.</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/settings.component.html</context>
<context context-type="linenumber">77</context>
</context-group>
<note from="description" priority="1">Video path setting input hint</note>
<target>Ruta de descarga de videos. Es relativo a la carpeta raíz de YTDL-Material.</target>
</trans-unit>
<trans-unit datatype="html" id="f41145afc02fd47ef0576ac79acd2c47ebbf4901">
<source>Global custom args for downloads on the home page.</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/settings.component.html</context>
<context context-type="linenumber">84</context>
</context-group>
<note from="description" priority="1">Custom args setting input hint</note>
<target>Argumentos personalizados globales para descargas en la página de inicio.</target>
</trans-unit>
<trans-unit datatype="html" id="d5f69691f9f05711633128b5a3db696783266b58">
<source>Extra</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/settings.component.html</context>
<context context-type="linenumber">95</context>
</context-group>
<note from="description" priority="1">Extra settings title</note>
<target>Extra</target>
</trans-unit>
<trans-unit datatype="html" id="61f8fd90b5f8cb20c70371feb2ee5e1fac5a9095">
<source>Top title</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/settings.component.html</context>
<context context-type="linenumber">102</context>
</context-group>
<note from="description" priority="1">Top title input placeholder</note>
<target>Título superior</target>
</trans-unit>
<trans-unit datatype="html" id="78d3531417c0d4ba4c90f0d4ae741edc261ec8df">
<source>File manager enabled</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/settings.component.html</context>
<context context-type="linenumber">107</context>
</context-group>
<note from="description" priority="1">File manager enabled setting</note>
<target>Administrador de archivos habilitado</target>
</trans-unit>
<trans-unit datatype="html" id="c33bd5392b39dbed36b8e5a1145163a15d45835f">
<source>Allow quality select</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/settings.component.html</context>
<context context-type="linenumber">110</context>
</context-group>
<note from="description" priority="1">Allow quality seelct setting</note>
<target>Permitir selección de calidad</target>
</trans-unit>
<trans-unit datatype="html" id="bda5508e24e0d77debb28bcd9194d8fefb1cfb92">
<source>Download only mode</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/settings.component.html</context>
<context context-type="linenumber">113</context>
</context-group>
<note from="description" priority="1">Download only mode setting</note>
<target>Modo de solo descarga</target>
</trans-unit>
<trans-unit datatype="html" id="09d31c803a7252658694e1e3176b97f5655a3fe3">
<source>Allow multi-download mode</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/settings.component.html</context>
<context context-type="linenumber">116</context>
</context-group>
<note from="description" priority="1">Allow multi-downloade mode setting</note>
<target>Permitir el modo de descarga múltiple</target>
</trans-unit>
<trans-unit datatype="html" id="e351b40b3869a5c7d19c3d4918cb1ac7aaab95c4">
<source>API</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/settings.component.html</context>
<context context-type="linenumber">126</context>
</context-group>
<note from="description" priority="1">API settings title</note>
<target>API</target>
</trans-unit>
<trans-unit datatype="html" id="d5d7c61349f3b0859336066e6d453fc35d334fe5">
<source>Use YouTube API</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/settings.component.html</context>
<context context-type="linenumber">132</context>
</context-group>
<note from="description" priority="1">Use YouTube API setting</note>
<target>Utilizar la API de YouTube</target>
</trans-unit>
<trans-unit datatype="html" id="ce10d31febb3d9d60c160750570310f303a22c22">
<source>Youtube API Key</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/settings.component.html</context>
<context context-type="linenumber">136</context>
</context-group>
<note from="description" priority="1">Youtube API Key setting placeholder</note>
<target>Clave API de YouTube</target>
</trans-unit>
<trans-unit datatype="html" id="8602e313cdfa7c4cc475ccbe86459fce3c3fd986">
<source>Generating a key is easy!</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/settings.component.html</context>
<context context-type="linenumber">137</context>
</context-group>
<note from="description" priority="1">Youtube API Key setting hint</note>
<target>¡Generar una clave es fácil!</target>
</trans-unit>
<trans-unit datatype="html" id="60c855c323706a04ccd2ff22d634bde9b6233bbf">
<source>Themes</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/settings.component.html</context>
<context context-type="linenumber">148</context>
</context-group>
<note from="description" priority="1">Themes settings title</note>
<target>Temas</target>
</trans-unit>
<trans-unit datatype="html" id="ff7cee38a2259526c519f878e71b964f41db4348">
<source>Default</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/settings.component.html</context>
<context context-type="linenumber">155</context>
</context-group>
<note from="description" priority="1">Default theme label</note>
<target>Defecto</target>
</trans-unit>
<trans-unit datatype="html" id="adb4562d2dbd3584370e44496969d58c511ecb63">
<source>Dark</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/settings.component.html</context>
<context context-type="linenumber">156</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">app/app.component.html</context>
<context context-type="linenumber">17</context>
</context-group>
<note from="description" priority="1">Dark theme label</note>
<target>Oscura</target>
</trans-unit>
<trans-unit datatype="html" id="7a6bacee4c31cb5c0ac2d24274fb4610d8858602">
<source>Allow theme change</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/settings.component.html</context>
<context context-type="linenumber">161</context>
</context-group>
<note from="description" priority="1">Allow theme change setting</note>
<target>Permitir cambio de tema</target>
</trans-unit>
<trans-unit datatype="html" id="357064ca9d9ac859eb618e28e8126fa32be049e2">
<source>Subscriptions</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/settings.component.html</context>
<context context-type="linenumber">171</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">app/app.component.html</context>
<context context-type="linenumber">34</context>
</context-group>
<note from="description" priority="1">Subscriptions settings title</note>
<target>Suscripciones</target>
</trans-unit>
<trans-unit datatype="html" id="4e3120311801c4acd18de7146add2ee4a4417773">
<source>Allow subscriptions</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/settings.component.html</context>
<context context-type="linenumber">177</context>
</context-group>
<note from="description" priority="1">Allow subscriptions setting</note>
<target>Permitir suscripciones</target>
</trans-unit>
<trans-unit datatype="html" id="4bee2a4bef2d26d37c9b353c278e24e5cd309ce3">
<source>Subscriptions base path</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/settings.component.html</context>
<context context-type="linenumber">181</context>
</context-group>
<note from="description" priority="1">Subscriptions base path input setting placeholder</note>
<target>Ruta base de suscripciones</target>
</trans-unit>
<trans-unit datatype="html" id="bc9892814ee2d119ae94378c905ea440a249b84a">
<source>Base path for videos from your subscribed channels and playlists. It is relative to YTDL-Material's root folder.</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/settings.component.html</context>
<context context-type="linenumber">182</context>
</context-group>
<note from="description" priority="1">Subscriptions base path setting input hint</note>
<target>Ruta base para videos de sus canales y listas de reproducción suscritos. Es relativo a la carpeta raíz de YTDL-Material.</target>
</trans-unit>
<trans-unit datatype="html" id="5bef4b25ba680da7fff06b86a91b1fc7e6a926e3">
<source>Check interval</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/settings.component.html</context>
<context context-type="linenumber">187</context>
</context-group>
<note from="description" priority="1">Check interval input setting placeholder</note>
<target>Intervalo de comprobación</target>
</trans-unit>
<trans-unit datatype="html" id="0f56a7449b77630c114615395bbda4cab398efd8">
<source>Unit is seconds, only include numbers.</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/settings.component.html</context>
<context context-type="linenumber">188</context>
</context-group>
<note from="description" priority="1">Check interval setting input hint</note>
<target>La unidad es segundos, solo incluye números.</target>
</trans-unit>
<trans-unit datatype="html" id="78e49b7339b4fa7184dd21bcaae107ce9b7076f6">
<source>Use youtube-dl archive</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/settings.component.html</context>
<context context-type="linenumber">192</context>
</context-group>
<note from="description" priority="1">Use youtube-dl archive setting</note>
<target>Usa el archivo de youtube-dl</target>
</trans-unit>
<trans-unit datatype="html" id="fa9fe4255231dd1cc6b29d3d254a25cb7c764f0f">
<source>With youtube-dl's archive</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/settings.component.html</context>
<context context-type="linenumber">193</context>
</context-group>
<note from="description" priority="1">youtube-dl archive explanation prefix link</note>
<target>Con la función de archivo de youtube-dl,</target>
</trans-unit>
<trans-unit datatype="html" id="09006404cccc24b7a8f8d1ce0b39f2761ab841d8">
<source>feature, downloaded videos from your subscriptions get recorded in a text file in the subscriptions archive sub-directory.</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/settings.component.html</context>
<context context-type="linenumber">193</context>
</context-group>
<note from="description" priority="1">youtube-dl archive explanation middle</note>
<target>los videos descargados de sus suscripciones se graban en un archivo de texto en el subdirectorio del archivo de suscripciones.</target>
</trans-unit>
<trans-unit datatype="html" id="29ed79a98fc01e7f9537777598e31dbde3aa7981">
<source>This enables the ability to permanently delete videos from your subscriptions without unsubscribing, and allows you to record which videos you downloaded in case of data loss.</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/settings.component.html</context>
<context context-type="linenumber">194</context>
</context-group>
<note from="description" priority="1">youtube-dl archive explanation suffix</note>
<target>Esto permite eliminar videos de sus suscripciones de forma permanente sin darse de baja y le permite grabar los videos que descargó en caso de pérdida de datos.</target>
</trans-unit>
<trans-unit datatype="html" id="bc2e854e111ecf2bd7db170da5e3c2ed08181d88">
<source>Advanced</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/settings.component.html</context>
<context context-type="linenumber">204</context>
</context-group>
<note from="description" priority="1">Advanced settings title</note>
<target>Avanzado</target>
</trans-unit>
<trans-unit datatype="html" id="5fab47f146b0a4b809dcebf3db9da94df6299ea1">
<source>Use default downloading agent</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/settings.component.html</context>
<context context-type="linenumber">210</context>
</context-group>
<note from="description" priority="1">Use default downloading agent setting</note>
<target>Usar agente de descarga predeterminado</target>
</trans-unit>
<trans-unit datatype="html" id="cdf75b1bdda80487e2ce1ff264ae171cbc5dc3b1">
<source>Custom agent</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/settings.component.html</context>
<context context-type="linenumber">214</context>
</context-group>
<note from="description" priority="1">Custom agent setting placeholder</note>
<target>Agente personalizado</target>
</trans-unit>
<trans-unit datatype="html" id="dc3d990391c944d1fbfc7cfb402f7b5e112fb3a8">
<source>Allow advanced download</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/settings.component.html</context>
<context context-type="linenumber">219</context>
</context-group>
<note from="description" priority="1">Allow advanced downloading setting</note>
<target>Permitir descarga avanzada</target>
</trans-unit>
<trans-unit datatype="html" id="52c9a103b812f258bcddc3d90a6e3f46871d25fe">
<source>Save</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/settings.component.html</context>
<context context-type="linenumber">229</context>
</context-group>
<note from="description" priority="1">Settings save button</note>
<target>Salvar</target>
</trans-unit>
<trans-unit datatype="html" id="d7b35c384aecd25a516200d6921836374613dfe7">
<source>Cancel</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/settings.component.html</context>
<context context-type="linenumber">232</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">app/dialogs/subscribe-dialog/subscribe-dialog.component.html</context>
<context context-type="linenumber">37</context>
</context-group>
<note from="description" priority="1">Settings cancel button</note>
<target>Cancelar</target>
</trans-unit>
<trans-unit datatype="html" id="92eee6be6de0b11c924e3ab27db30257159c0a7c">
<source>Home</source>
<context-group purpose="location">
<context context-type="sourcefile">app/app.component.html</context>
<context context-type="linenumber">33</context>
</context-group>
<note from="description" priority="1">Navigation menu Home Page title</note>
<target>Inicio</target>
</trans-unit>
<trans-unit datatype="html" id="5b3075e8dc3f3921ec316b0bd83b6d14a06c1a4f">
<source>Save changes</source>
<context-group purpose="location">
<context context-type="sourcefile">app/player/player.component.html</context>
<context context-type="linenumber">22</context>
</context-group>
<note from="description" priority="1">Playlist save changes button</note>
<target>Guardar cambios</target>
</trans-unit>
<trans-unit datatype="html" id="a9806cf78ce00eb2613eeca11354a97e033377b8">
<source>Subscribe to playlist or channel</source>
<context-group purpose="location">
<context context-type="sourcefile">app/dialogs/subscribe-dialog/subscribe-dialog.component.html</context>
<context context-type="linenumber">1</context>
</context-group>
<note from="description" priority="1">Subscribe dialog title</note>
<target>Suscríbase a la lista de reproducción o al canal</target>
</trans-unit>
<trans-unit datatype="html" id="93efc99ae087fc116de708ecd3ace86ca237cf30">
<source>The playlist or channel URL</source>
<context-group purpose="location">
<context context-type="sourcefile">app/dialogs/subscribe-dialog/subscribe-dialog.component.html</context>
<context context-type="linenumber">9</context>
</context-group>
<note from="description" priority="1">Subscription URL input hint</note>
<target>La lista de reproducción o la URL del canal</target>
</trans-unit>
<trans-unit datatype="html" id="08f5d0ef937ae17feb1b04aff15ad88911e87baf">
<source>Custom name</source>
<context-group purpose="location">
<context context-type="sourcefile">app/dialogs/subscribe-dialog/subscribe-dialog.component.html</context>
<context context-type="linenumber">14</context>
</context-group>
<note from="description" priority="1">Subscription custom name placeholder</note>
<target>Nombre personalizado</target>
</trans-unit>
<trans-unit datatype="html" id="f3f62aa84d59f3a8b900cc9a7eec3ef279a7b4e7">
<source>This is optional</source>
<context-group purpose="location">
<context context-type="sourcefile">app/dialogs/subscribe-dialog/subscribe-dialog.component.html</context>
<context context-type="linenumber">15</context>
</context-group>
<note from="description" priority="1">Custom name input hint</note>
<target>Esto es opcional</target>
</trans-unit>
<trans-unit datatype="html" id="ea30873bd3f0d5e4fb2378eec3f0a1db77634a28">
<source>Download all uploads</source>
<context-group purpose="location">
<context context-type="sourcefile">app/dialogs/subscribe-dialog/subscribe-dialog.component.html</context>
<context context-type="linenumber">19</context>
</context-group>
<note from="description" priority="1">Download all uploads subscription setting</note>
<target>Descargar todas las cargas</target>
</trans-unit>
<trans-unit datatype="html" id="28a678e9cabf86e44c32594c43fa0e890135c20f">
<source>Download videos uploaded in the last</source>
<context-group purpose="location">
<context context-type="sourcefile">app/dialogs/subscribe-dialog/subscribe-dialog.component.html</context>
<context context-type="linenumber">22</context>
</context-group>
<note from="description" priority="1">Download time range prefix</note>
<target>Descargar videos subidos en el último</target>
</trans-unit>
<trans-unit datatype="html" id="e78c0d60ac39787f62c9159646fe0b3c1ed55a1d">
<source>Type:</source>
<context-group purpose="location">
<context context-type="sourcefile">app/dialogs/subscription-info-dialog/subscription-info-dialog.component.html</context>
<context context-type="linenumber">5</context>
</context-group>
<note from="description" priority="1">Subscription type property</note>
<target>Tipo:</target>
</trans-unit>
<trans-unit datatype="html" id="c52db455cca9109ee47e1a612c3f4117c09eb71b">
<source>URL:</source>
<context-group purpose="location">
<context context-type="sourcefile">app/dialogs/subscription-info-dialog/subscription-info-dialog.component.html</context>
<context context-type="linenumber">9</context>
</context-group>
<note from="description" priority="1">Subscription URL property</note>
<target>URL:</target>
</trans-unit>
<trans-unit datatype="html" id="a44d86aa1e6c20ced07aca3a7c081d8db9ded1c6">
<source>Archive:</source>
<context-group purpose="location">
<context context-type="sourcefile">app/dialogs/subscription-info-dialog/subscription-info-dialog.component.html</context>
<context context-type="linenumber">17</context>
</context-group>
<note from="description" priority="1">Subscription ID property</note>
<target>Archivo:</target>
</trans-unit>
<trans-unit datatype="html" id="f4e529ae5ffd73001d1ff4bbdeeb0a72e342e5c8">
<source>Close</source>
<context-group purpose="location">
<context context-type="sourcefile">app/dialogs/subscription-info-dialog/subscription-info-dialog.component.html</context>
<context context-type="linenumber">23</context>
</context-group>
<note from="description" priority="1">Close subscription info button</note>
<target>Cerca</target>
</trans-unit>
<trans-unit datatype="html" id="8efc77bf327659c0fec1f518cf48a98cdcd9dddf">
<source>Export Archive</source>
<context-group purpose="location">
<context context-type="sourcefile">app/dialogs/subscription-info-dialog/subscription-info-dialog.component.html</context>
<context context-type="linenumber">24</context>
</context-group>
<note from="description" priority="1">Export Archive button</note>
<target>Exportar el archivo</target>
</trans-unit>
<trans-unit datatype="html" id="3042bd3ad8dffcfeca5fd1ae6159fd1047434e95">
<source>Unsubscribe</source>
<context-group purpose="location">
<context context-type="sourcefile">app/dialogs/subscription-info-dialog/subscription-info-dialog.component.html</context>
<context context-type="linenumber">26</context>
</context-group>
<note from="description" priority="1">Unsubscribe button</note>
<target>Darse de baja</target>
</trans-unit>
<trans-unit datatype="html" id="e2319dec5b4ccfb6ed9f55ccabd63650a8fdf547">
<source>Your subscriptions</source>
<context-group purpose="location">
<context context-type="sourcefile">app/subscriptions/subscriptions.component.html</context>
<context context-type="linenumber">3</context>
</context-group>
<note from="description" priority="1">Subscriptions title</note>
<target>Sus suscripciones</target>
</trans-unit>
<trans-unit datatype="html" id="807cf11e6ac1cde912496f764c176bdfdd6b7e19">
<source>Channels</source>
<context-group purpose="location">
<context context-type="sourcefile">app/subscriptions/subscriptions.component.html</context>
<context context-type="linenumber">8</context>
</context-group>
<note from="description" priority="1">Subscriptions channels title</note>
<target>Canales</target>
</trans-unit>
<trans-unit datatype="html" id="29b89f751593e1b347eef103891b7a1ff36ec03f">
<source>Name not available. Channel retrieval in progress.</source>
<context-group purpose="location">
<context context-type="sourcefile">app/subscriptions/subscriptions.component.html</context>
<context context-type="linenumber">14</context>
</context-group>
<note from="description" priority="1">Subscription playlist not available text</note>
<target>Nombre no disponible. Recuperación de canales en progreso.</target>
</trans-unit>
<trans-unit datatype="html" id="4636cd4a1379c50d471e98786098c4d39e1e82ad">
<source>You have no channel subscriptions.</source>
<context-group purpose="location">
<context context-type="sourcefile">app/subscriptions/subscriptions.component.html</context>
<context context-type="linenumber">24</context>
</context-group>
<note from="description" priority="1">No channel subscriptions text</note>
<target>No tienes suscripciones de canal.</target>
</trans-unit>
<trans-unit datatype="html" id="2e0a410652cb07d069f576b61eab32586a18320d">
<source>Name not available. Playlist retrieval in progress.</source>
<context-group purpose="location">
<context context-type="sourcefile">app/subscriptions/subscriptions.component.html</context>
<context context-type="linenumber">33</context>
</context-group>
<note from="description" priority="1">Subscription playlist not available text</note>
<target>Nombre no disponible. Recuperación de listas de reproducción en progreso.</target>
</trans-unit>
<trans-unit datatype="html" id="587b57ced54965d8874c3fd0e9dfedb987e5df04">
<source>You have no playlist subscriptions.</source>
<context-group purpose="location">
<context context-type="sourcefile">app/subscriptions/subscriptions.component.html</context>
<context context-type="linenumber">43</context>
</context-group>
<note from="description" priority="1">No playlist subscriptions text</note>
<target>No tienes suscripciones a listas de reproducción.</target>
</trans-unit>
<trans-unit datatype="html" id="7e892ba15f2c6c17e83510e273b3e10fc32ea016">
<source>Search</source>
<context-group purpose="location">
<context context-type="sourcefile">app/subscription/subscription/subscription.component.html</context>
<context context-type="linenumber">19</context>
</context-group>
<note from="description" priority="1">Subscription videos search placeholder</note>
<target>Buscar</target>
</trans-unit>
<trans-unit datatype="html" id="2054791b822475aeaea95c0119113de3200f5e1c">
<source>Length:</source>
<context-group purpose="location">
<context context-type="sourcefile">app/subscription/subscription-file-card/subscription-file-card.component.html</context>
<context context-type="linenumber">3</context>
</context-group>
<note from="description" priority="1">Video duration label</note>
<target>Duración:</target>
</trans-unit>
<trans-unit datatype="html" id="94e01842dcee90531caa52e4147f70679bac87fe">
<source>Delete and redownload</source>
<context-group purpose="location">
<context context-type="sourcefile">app/subscription/subscription-file-card/subscription-file-card.component.html</context>
<context context-type="linenumber">7</context>
</context-group>
<note from="description" priority="1">Delete and redownload subscription video button</note>
<target>Eliminar y volver a descargar</target>
</trans-unit>
<trans-unit datatype="html" id="2031adb51e07a41844e8ba7704b054e98345c9c1">
<source>Delete forever</source>
<context-group purpose="location">
<context context-type="sourcefile">app/subscription/subscription-file-card/subscription-file-card.component.html</context>
<context context-type="linenumber">8</context>
</context-group>
<note from="description" priority="1">Delete forever subscription video button</note>
<target>Borrar para siempre</target>
</trans-unit>
</body>
</file>
</xliff>

919
src/locale/messages.xlf Normal file
View File

@@ -0,0 +1,919 @@
<?xml version="1.0" encoding="UTF-8" ?>
<xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2">
<file source-language="en" datatype="plaintext" original="ng2.template">
<body>
<trans-unit id="17f0ea5d2d7a262b0e875acc70475f102aee84e6" datatype="html">
<source>Create a playlist</source>
<context-group purpose="location">
<context context-type="sourcefile">app/create-playlist/create-playlist.component.html</context>
<context context-type="linenumber">1</context>
</context-group>
<note priority="1" from="description">Create a playlist dialog title</note>
</trans-unit>
<trans-unit id="cff1428d10d59d14e45edec3c735a27b5482db59" datatype="html">
<source>Name</source>
<context-group purpose="location">
<context context-type="sourcefile">app/create-playlist/create-playlist.component.html</context>
<context context-type="linenumber">5</context>
</context-group>
<note priority="1" from="description">Playlist name placeholder</note>
</trans-unit>
<trans-unit id="f47e2d56dd8a145b2e9599da9730c049d52962a2" datatype="html">
<source>Audio files</source>
<context-group purpose="location">
<context context-type="sourcefile">app/create-playlist/create-playlist.component.html</context>
<context context-type="linenumber">10</context>
</context-group>
<note priority="1" from="description">Audio files title</note>
</trans-unit>
<trans-unit id="a52dae09be10ca3a65da918533ced3d3f4992238" datatype="html">
<source>Videos</source>
<context-group purpose="location">
<context context-type="sourcefile">app/create-playlist/create-playlist.component.html</context>
<context context-type="linenumber">11</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">app/subscription/subscription/subscription.component.html</context>
<context context-type="linenumber">15</context>
</context-group>
<note priority="1" from="description">Videos title</note>
</trans-unit>
<trans-unit id="038ebcb2a89155d90c24fa1c17bfe83dbadc3c20" datatype="html">
<source>Youtube Downloader</source>
<context-group purpose="location">
<context context-type="sourcefile">app/main/main.component.html</context>
<context context-type="linenumber">5</context>
</context-group>
<note priority="1" from="description">Youtube downloader home page label</note>
</trans-unit>
<trans-unit id="6d2ec8898344c8955542b0542c942038ef28bb80" datatype="html">
<source>Please enter a valid URL!</source>
<context-group purpose="location">
<context context-type="sourcefile">app/main/main.component.html</context>
<context context-type="linenumber">16</context>
</context-group>
<note priority="1" from="description">Enter valid URL error</note>
</trans-unit>
<trans-unit id="a38ae1082fec79ba1f379978337385a539a28e73" datatype="html">
<source>
Quality
</source>
<context-group purpose="location">
<context context-type="sourcefile">app/main/main.component.html</context>
<context context-type="linenumber">24</context>
</context-group>
<note priority="1" from="description">Quality select label</note>
</trans-unit>
<trans-unit id="4be966a9dcfbc9b54dfcc604b831c0289f847fa4" datatype="html">
<source>Use URL</source>
<context-group purpose="location">
<context context-type="sourcefile">app/main/main.component.html</context>
<context context-type="linenumber">52</context>
</context-group>
<note priority="1" from="description">YT search Use URL button for searched video</note>
</trans-unit>
<trans-unit id="d3f02f845e62cebd75fde451ab8479d2a8ad784d" datatype="html">
<source>
View
</source>
<context-group purpose="location">
<context context-type="sourcefile">app/main/main.component.html</context>
<context context-type="linenumber">55</context>
</context-group>
<note priority="1" from="description">YT search View button for searched video</note>
</trans-unit>
<trans-unit id="4a9889d36910edc8323d7bab60858ab3da6d91df" datatype="html">
<source>
Only Audio
</source>
<context-group purpose="location">
<context context-type="sourcefile">app/main/main.component.html</context>
<context context-type="linenumber">65</context>
</context-group>
<note priority="1" from="description">Only Audio checkbox</note>
</trans-unit>
<trans-unit id="96a01fafe135afc58b0f8071a4ab00234495ce18" datatype="html">
<source>
Multi-download Mode
</source>
<context-group purpose="location">
<context context-type="sourcefile">app/main/main.component.html</context>
<context context-type="linenumber">70</context>
</context-group>
<note priority="1" from="description">Multi-download Mode checkbox</note>
</trans-unit>
<trans-unit id="6a21ba5fb0ac804a525bf9ab168038c3ee88e661" datatype="html">
<source>
Download
</source>
<context-group purpose="location">
<context context-type="sourcefile">app/main/main.component.html</context>
<context context-type="linenumber">79</context>
</context-group>
<note priority="1" from="description">Main download button</note>
</trans-unit>
<trans-unit id="6a3777f913cf3f288664f0632b9f24794fdcc24e" datatype="html">
<source>
Cancel
</source>
<context-group purpose="location">
<context context-type="sourcefile">app/main/main.component.html</context>
<context context-type="linenumber">84</context>
</context-group>
<note priority="1" from="description">Cancel download button</note>
</trans-unit>
<trans-unit id="322ed150e02666fe2259c5b4614eac7066f4ffa0" datatype="html">
<source>
Advanced
</source>
<context-group purpose="location">
<context context-type="sourcefile">app/main/main.component.html</context>
<context context-type="linenumber">96</context>
</context-group>
<note priority="1" from="description">Advanced download mode panel</note>
</trans-unit>
<trans-unit id="b7ffe7c6586d6f3f18a9246806a7c7d5538ab43e" datatype="html">
<source>
Simulated command:
</source>
<context-group purpose="location">
<context context-type="sourcefile">app/main/main.component.html</context>
<context context-type="linenumber">102</context>
</context-group>
<note priority="1" from="description">Simulated command label</note>
</trans-unit>
<trans-unit id="4e4c721129466be9c3862294dc40241b64045998" datatype="html">
<source>
Use custom args
</source>
<context-group purpose="location">
<context context-type="sourcefile">app/main/main.component.html</context>
<context context-type="linenumber">110</context>
</context-group>
<note priority="1" from="description">Use custom args checkbox</note>
</trans-unit>
<trans-unit id="ad2f8ac8b7de7945b80c8e424484da94e597125f" datatype="html">
<source>Custom args</source>
<context-group purpose="location">
<context context-type="sourcefile">app/main/main.component.html</context>
<context context-type="linenumber">115</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/settings.component.html</context>
<context context-type="linenumber">83</context>
</context-group>
<note priority="1" from="description">Custom args placeholder</note>
</trans-unit>
<trans-unit id="ccc7e92cbdd35e901acf9ad80941abee07bd8f60" datatype="html">
<source>
No need to include URL, just everything after.
</source>
<context-group purpose="location">
<context context-type="sourcefile">app/main/main.component.html</context>
<context context-type="linenumber">117</context>
</context-group>
<note priority="1" from="description">Custom Args input hint</note>
</trans-unit>
<trans-unit id="3a92a3443c65a52f37ca7efb8f453b35dbefbf29" datatype="html">
<source>
Use custom output
</source>
<context-group purpose="location">
<context context-type="sourcefile">app/main/main.component.html</context>
<context context-type="linenumber">125</context>
</context-group>
<note priority="1" from="description">Use custom output checkbox</note>
</trans-unit>
<trans-unit id="d9c02face477f2f9cdaae318ccee5f89856851fb" datatype="html">
<source>Custom output</source>
<context-group purpose="location">
<context context-type="sourcefile">app/main/main.component.html</context>
<context context-type="linenumber">130</context>
</context-group>
<note priority="1" from="description">Custom output placeholder</note>
</trans-unit>
<trans-unit id="fcfd4675b4c90f08d18d3abede9a9a4dff4cfdc7" datatype="html">
<source>Documentation</source>
<context-group purpose="location">
<context context-type="sourcefile">app/main/main.component.html</context>
<context context-type="linenumber">132</context>
</context-group>
<note priority="1" from="description">Youtube-dl output template documentation link</note>
</trans-unit>
<trans-unit id="19d1ae64d94d28a29b2c57ae8671aace906b5401" datatype="html">
<source>Path is relative to the config download path. Don&apos;t include extension.</source>
<context-group purpose="location">
<context context-type="sourcefile">app/main/main.component.html</context>
<context context-type="linenumber">133</context>
</context-group>
<note priority="1" from="description">Custom Output input hint</note>
</trans-unit>
<trans-unit id="8fad10737d3e3735a6699a4d89cbf6c20f6bb55f" datatype="html">
<source>
Use authentication
</source>
<context-group purpose="location">
<context context-type="sourcefile">app/main/main.component.html</context>
<context context-type="linenumber">139</context>
</context-group>
<note priority="1" from="description">Use authentication checkbox</note>
</trans-unit>
<trans-unit id="08c74dc9762957593b91f6eb5d65efdfc975bf48" datatype="html">
<source>Username</source>
<context-group purpose="location">
<context context-type="sourcefile">app/main/main.component.html</context>
<context context-type="linenumber">144</context>
</context-group>
<note priority="1" from="description">YT Username placeholder</note>
</trans-unit>
<trans-unit id="c32ef07f8803a223a83ed17024b38e8d82292407" datatype="html">
<source>Password</source>
<context-group purpose="location">
<context context-type="sourcefile">app/main/main.component.html</context>
<context context-type="linenumber">149</context>
</context-group>
<note priority="1" from="description">YT Password placeholder</note>
</trans-unit>
<trans-unit id="4a0dada6e841a425de3e5006e6a04df26c644fa5" datatype="html">
<source>
Audio
</source>
<context-group purpose="location">
<context context-type="sourcefile">app/main/main.component.html</context>
<context context-type="linenumber">193</context>
</context-group>
<note priority="1" from="description">Audio files title</note>
</trans-unit>
<trans-unit id="9779715ac05308973d8f1c8658b29b986e92450f" datatype="html">
<source>
Your audio files are here
</source>
<context-group purpose="location">
<context context-type="sourcefile">app/main/main.component.html</context>
<context context-type="linenumber">198</context>
</context-group>
<note priority="1" from="description">Audio files description</note>
</trans-unit>
<trans-unit id="47546e45bbb476baaaad38244db444c427ddc502" datatype="html">
<source>Playlists</source>
<context-group purpose="location">
<context context-type="sourcefile">app/main/main.component.html</context>
<context context-type="linenumber">213</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">app/main/main.component.html</context>
<context context-type="linenumber">255</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">app/subscriptions/subscriptions.component.html</context>
<context context-type="linenumber">27</context>
</context-group>
<note priority="1" from="description">Playlists title</note>
</trans-unit>
<trans-unit id="78bd81adb4609b68cfa4c589222bdc233ba1faaa" datatype="html">
<source>
No playlists available. Create one from your downloading audio files by clicking the blue plus button.
</source>
<context-group purpose="location">
<context context-type="sourcefile">app/main/main.component.html</context>
<context context-type="linenumber">224</context>
</context-group>
<note priority="1" from="description">No video playlists available text</note>
</trans-unit>
<trans-unit id="9d2b62bb0b91e2e17fb4177a7e3d6756a2e6ee33" datatype="html">
<source>
Video
</source>
<context-group purpose="location">
<context context-type="sourcefile">app/main/main.component.html</context>
<context context-type="linenumber">234</context>
</context-group>
<note priority="1" from="description">Video files title</note>
</trans-unit>
<trans-unit id="960582a8b9d7942716866ecfb7718309728f2916" datatype="html">
<source>
Your video files are here
</source>
<context-group purpose="location">
<context context-type="sourcefile">app/main/main.component.html</context>
<context context-type="linenumber">239</context>
</context-group>
<note priority="1" from="description">Video files description</note>
</trans-unit>
<trans-unit id="0f59c46ca29e9725898093c9ea6b586730d0624e" datatype="html">
<source>
No playlists available. Create one from your downloading video files by clicking the blue plus button.
</source>
<context-group purpose="location">
<context context-type="sourcefile">app/main/main.component.html</context>
<context context-type="linenumber">268</context>
</context-group>
<note priority="1" from="description">No video playlists available text</note>
</trans-unit>
<trans-unit id="ca3dbbc7f3e011bffe32a10a3ea45cc84f30ecf1" datatype="html">
<source>ID:</source>
<context-group purpose="location">
<context context-type="sourcefile">app/file-card/file-card.component.html</context>
<context context-type="linenumber">6</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">app/download-item/download-item.component.html</context>
<context context-type="linenumber">7</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">app/dialogs/subscription-info-dialog/subscription-info-dialog.component.html</context>
<context context-type="linenumber">13</context>
</context-group>
<note priority="1" from="description">File or playlist ID</note>
</trans-unit>
<trans-unit id="e684046d73bcee88e82f7ff01e2852789a05fc32" datatype="html">
<source>Count:</source>
<context-group purpose="location">
<context context-type="sourcefile">app/file-card/file-card.component.html</context>
<context context-type="linenumber">7</context>
</context-group>
<note priority="1" from="description">Playlist video count</note>
</trans-unit>
<trans-unit id="121cc5391cd2a5115bc2b3160379ee5b36cd7716" datatype="html">
<source>Settings</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/settings.component.html</context>
<context context-type="linenumber">1</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">app/app.component.html</context>
<context context-type="linenumber">22</context>
</context-group>
<note priority="1" from="description">Settings title</note>
</trans-unit>
<trans-unit id="fe22ca53e651df951dac25b67c17894b0980f767" datatype="html">
<source>Host</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/settings.component.html</context>
<context context-type="linenumber">8</context>
</context-group>
<note priority="1" from="description">Host settings title</note>
</trans-unit>
<trans-unit id="801b98c6f02fe3b32f6afa3ee854c99ed83474e6" datatype="html">
<source>URL</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/settings.component.html</context>
<context context-type="linenumber">15</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">app/dialogs/subscribe-dialog/subscribe-dialog.component.html</context>
<context context-type="linenumber">8</context>
</context-group>
<note priority="1" from="description">URL input placeholder</note>
</trans-unit>
<trans-unit id="54c512cca1923ab72faf1a0bd98d3d172469629a" datatype="html">
<source>URL this app will be accessed from, without the port.</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/settings.component.html</context>
<context context-type="linenumber">16</context>
</context-group>
<note priority="1" from="description">URL setting input hint</note>
</trans-unit>
<trans-unit id="cb2741a46e3560f6bc6dfd99d385e86b08b26d72" datatype="html">
<source>Port</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/settings.component.html</context>
<context context-type="linenumber">21</context>
</context-group>
<note priority="1" from="description">Port input placeholder</note>
</trans-unit>
<trans-unit id="22e8f1d0423a3b784fe40fab187b92c06541b577" datatype="html">
<source>The desired port. Default is 17442.</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/settings.component.html</context>
<context context-type="linenumber">22</context>
</context-group>
<note priority="1" from="description">Port setting input hint</note>
</trans-unit>
<trans-unit id="948758e1412bb2ecdb98e3a4f1cbb6d7458456f2" datatype="html">
<source>Encryption</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/settings.component.html</context>
<context context-type="linenumber">34</context>
</context-group>
<note priority="1" from="description">Encryption settings title</note>
</trans-unit>
<trans-unit id="cbe16a57be414e84b6a68309d08fad894df797d6" datatype="html">
<source>Use encryption</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/settings.component.html</context>
<context context-type="linenumber">40</context>
</context-group>
<note priority="1" from="description">Use encryption setting</note>
</trans-unit>
<trans-unit id="0c1875a79b7ecc792cc1bebca3e063e40b5764f9" datatype="html">
<source>Cert file path</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/settings.component.html</context>
<context context-type="linenumber">45</context>
</context-group>
<note priority="1" from="description">Cert file path input placeholder</note>
</trans-unit>
<trans-unit id="736551b93461d2de64b118cf4043eee1d1c2cb2c" datatype="html">
<source>Key file path</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/settings.component.html</context>
<context context-type="linenumber">51</context>
</context-group>
<note priority="1" from="description">Key file path input placeholder</note>
</trans-unit>
<trans-unit id="0ba25ad86a240576c4f20a2fada4722ebba77b1e" datatype="html">
<source>Downloader</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/settings.component.html</context>
<context context-type="linenumber">62</context>
</context-group>
<note priority="1" from="description">Downloader settings title</note>
</trans-unit>
<trans-unit id="ab2756805742e84ad0cc0468f4be2d8aa9f855a5" datatype="html">
<source>Audio folder path</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/settings.component.html</context>
<context context-type="linenumber">69</context>
</context-group>
<note priority="1" from="description">Audio folder path input placeholder</note>
</trans-unit>
<trans-unit id="c2c89cdf45d46ea64d2ed2f9ac15dfa4d77e26ca" datatype="html">
<source>Path for audio only downloads. It is relative to YTDL-Material&apos;s root folder.</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/settings.component.html</context>
<context context-type="linenumber">70</context>
</context-group>
<note priority="1" from="description">Aduio path setting input hint</note>
</trans-unit>
<trans-unit id="46826331da1949bd6fb74624447057099c9d20cd" datatype="html">
<source>Video folder path</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/settings.component.html</context>
<context context-type="linenumber">76</context>
</context-group>
<note priority="1" from="description">Video folder path input placeholder</note>
</trans-unit>
<trans-unit id="17c92e6d47a213fa95b5aa344b3f258147123f93" datatype="html">
<source>Path for video downloads. It is relative to YTDL-Material&apos;s root folder.</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/settings.component.html</context>
<context context-type="linenumber">77</context>
</context-group>
<note priority="1" from="description">Video path setting input hint</note>
</trans-unit>
<trans-unit id="f41145afc02fd47ef0576ac79acd2c47ebbf4901" datatype="html">
<source>Global custom args for downloads on the home page.</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/settings.component.html</context>
<context context-type="linenumber">84</context>
</context-group>
<note priority="1" from="description">Custom args setting input hint</note>
</trans-unit>
<trans-unit id="d5f69691f9f05711633128b5a3db696783266b58" datatype="html">
<source>Extra</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/settings.component.html</context>
<context context-type="linenumber">95</context>
</context-group>
<note priority="1" from="description">Extra settings title</note>
</trans-unit>
<trans-unit id="61f8fd90b5f8cb20c70371feb2ee5e1fac5a9095" datatype="html">
<source>Top title</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/settings.component.html</context>
<context context-type="linenumber">102</context>
</context-group>
<note priority="1" from="description">Top title input placeholder</note>
</trans-unit>
<trans-unit id="78d3531417c0d4ba4c90f0d4ae741edc261ec8df" datatype="html">
<source>File manager enabled</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/settings.component.html</context>
<context context-type="linenumber">107</context>
</context-group>
<note priority="1" from="description">File manager enabled setting</note>
</trans-unit>
<trans-unit id="c33bd5392b39dbed36b8e5a1145163a15d45835f" datatype="html">
<source>Allow quality select</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/settings.component.html</context>
<context context-type="linenumber">110</context>
</context-group>
<note priority="1" from="description">Allow quality seelct setting</note>
</trans-unit>
<trans-unit id="bda5508e24e0d77debb28bcd9194d8fefb1cfb92" datatype="html">
<source>Download only mode</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/settings.component.html</context>
<context context-type="linenumber">113</context>
</context-group>
<note priority="1" from="description">Download only mode setting</note>
</trans-unit>
<trans-unit id="09d31c803a7252658694e1e3176b97f5655a3fe3" datatype="html">
<source>Allow multi-download mode</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/settings.component.html</context>
<context context-type="linenumber">116</context>
</context-group>
<note priority="1" from="description">Allow multi-downloade mode setting</note>
</trans-unit>
<trans-unit id="e351b40b3869a5c7d19c3d4918cb1ac7aaab95c4" datatype="html">
<source>API</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/settings.component.html</context>
<context context-type="linenumber">126</context>
</context-group>
<note priority="1" from="description">API settings title</note>
</trans-unit>
<trans-unit id="d5d7c61349f3b0859336066e6d453fc35d334fe5" datatype="html">
<source>Use YouTube API</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/settings.component.html</context>
<context context-type="linenumber">132</context>
</context-group>
<note priority="1" from="description">Use YouTube API setting</note>
</trans-unit>
<trans-unit id="ce10d31febb3d9d60c160750570310f303a22c22" datatype="html">
<source>Youtube API Key</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/settings.component.html</context>
<context context-type="linenumber">136</context>
</context-group>
<note priority="1" from="description">Youtube API Key setting placeholder</note>
</trans-unit>
<trans-unit id="8602e313cdfa7c4cc475ccbe86459fce3c3fd986" datatype="html">
<source>Generating a key is easy!</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/settings.component.html</context>
<context context-type="linenumber">137</context>
</context-group>
<note priority="1" from="description">Youtube API Key setting hint</note>
</trans-unit>
<trans-unit id="60c855c323706a04ccd2ff22d634bde9b6233bbf" datatype="html">
<source>Themes</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/settings.component.html</context>
<context context-type="linenumber">148</context>
</context-group>
<note priority="1" from="description">Themes settings title</note>
</trans-unit>
<trans-unit id="ff7cee38a2259526c519f878e71b964f41db4348" datatype="html">
<source>Default</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/settings.component.html</context>
<context context-type="linenumber">155</context>
</context-group>
<note priority="1" from="description">Default theme label</note>
</trans-unit>
<trans-unit id="adb4562d2dbd3584370e44496969d58c511ecb63" datatype="html">
<source>Dark</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/settings.component.html</context>
<context context-type="linenumber">156</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">app/app.component.html</context>
<context context-type="linenumber">17</context>
</context-group>
<note priority="1" from="description">Dark theme label</note>
</trans-unit>
<trans-unit id="7a6bacee4c31cb5c0ac2d24274fb4610d8858602" datatype="html">
<source>Allow theme change</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/settings.component.html</context>
<context context-type="linenumber">161</context>
</context-group>
<note priority="1" from="description">Allow theme change setting</note>
</trans-unit>
<trans-unit id="357064ca9d9ac859eb618e28e8126fa32be049e2" datatype="html">
<source>Subscriptions</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/settings.component.html</context>
<context context-type="linenumber">171</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">app/app.component.html</context>
<context context-type="linenumber">34</context>
</context-group>
<note priority="1" from="description">Subscriptions settings title</note>
</trans-unit>
<trans-unit id="4e3120311801c4acd18de7146add2ee4a4417773" datatype="html">
<source>Allow subscriptions</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/settings.component.html</context>
<context context-type="linenumber">177</context>
</context-group>
<note priority="1" from="description">Allow subscriptions setting</note>
</trans-unit>
<trans-unit id="4bee2a4bef2d26d37c9b353c278e24e5cd309ce3" datatype="html">
<source>Subscriptions base path</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/settings.component.html</context>
<context context-type="linenumber">181</context>
</context-group>
<note priority="1" from="description">Subscriptions base path input setting placeholder</note>
</trans-unit>
<trans-unit id="bc9892814ee2d119ae94378c905ea440a249b84a" datatype="html">
<source>Base path for videos from your subscribed channels and playlists. It is relative to YTDL-Material&apos;s root folder.</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/settings.component.html</context>
<context context-type="linenumber">182</context>
</context-group>
<note priority="1" from="description">Subscriptions base path setting input hint</note>
</trans-unit>
<trans-unit id="5bef4b25ba680da7fff06b86a91b1fc7e6a926e3" datatype="html">
<source>Check interval</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/settings.component.html</context>
<context context-type="linenumber">187</context>
</context-group>
<note priority="1" from="description">Check interval input setting placeholder</note>
</trans-unit>
<trans-unit id="0f56a7449b77630c114615395bbda4cab398efd8" datatype="html">
<source>Unit is seconds, only include numbers.</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/settings.component.html</context>
<context context-type="linenumber">188</context>
</context-group>
<note priority="1" from="description">Check interval setting input hint</note>
</trans-unit>
<trans-unit id="78e49b7339b4fa7184dd21bcaae107ce9b7076f6" datatype="html">
<source>Use youtube-dl archive</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/settings.component.html</context>
<context context-type="linenumber">192</context>
</context-group>
<note priority="1" from="description">Use youtube-dl archive setting</note>
</trans-unit>
<trans-unit id="fa9fe4255231dd1cc6b29d3d254a25cb7c764f0f" datatype="html">
<source>With youtube-dl&apos;s archive</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/settings.component.html</context>
<context context-type="linenumber">193</context>
</context-group>
<note priority="1" from="description">youtube-dl archive explanation prefix link</note>
</trans-unit>
<trans-unit id="09006404cccc24b7a8f8d1ce0b39f2761ab841d8" datatype="html">
<source>feature, downloaded videos from your subscriptions get recorded in a text file in the subscriptions archive sub-directory.</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/settings.component.html</context>
<context context-type="linenumber">193</context>
</context-group>
<note priority="1" from="description">youtube-dl archive explanation middle</note>
</trans-unit>
<trans-unit id="29ed79a98fc01e7f9537777598e31dbde3aa7981" datatype="html">
<source>This enables the ability to permanently delete videos from your subscriptions without unsubscribing, and allows you to record which videos you downloaded in case of data loss.</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/settings.component.html</context>
<context context-type="linenumber">194</context>
</context-group>
<note priority="1" from="description">youtube-dl archive explanation suffix</note>
</trans-unit>
<trans-unit id="bc2e854e111ecf2bd7db170da5e3c2ed08181d88" datatype="html">
<source>Advanced</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/settings.component.html</context>
<context context-type="linenumber">204</context>
</context-group>
<note priority="1" from="description">Advanced settings title</note>
</trans-unit>
<trans-unit id="5fab47f146b0a4b809dcebf3db9da94df6299ea1" datatype="html">
<source>Use default downloading agent</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/settings.component.html</context>
<context context-type="linenumber">210</context>
</context-group>
<note priority="1" from="description">Use default downloading agent setting</note>
</trans-unit>
<trans-unit id="cdf75b1bdda80487e2ce1ff264ae171cbc5dc3b1" datatype="html">
<source>Custom agent</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/settings.component.html</context>
<context context-type="linenumber">214</context>
</context-group>
<note priority="1" from="description">Custom agent setting placeholder</note>
</trans-unit>
<trans-unit id="dc3d990391c944d1fbfc7cfb402f7b5e112fb3a8" datatype="html">
<source>Allow advanced download</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/settings.component.html</context>
<context context-type="linenumber">219</context>
</context-group>
<note priority="1" from="description">Allow advanced downloading setting</note>
</trans-unit>
<trans-unit id="52c9a103b812f258bcddc3d90a6e3f46871d25fe" datatype="html">
<source>Save</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/settings.component.html</context>
<context context-type="linenumber">229</context>
</context-group>
<note priority="1" from="description">Settings save button</note>
</trans-unit>
<trans-unit id="d7b35c384aecd25a516200d6921836374613dfe7" datatype="html">
<source>Cancel</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/settings.component.html</context>
<context context-type="linenumber">232</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">app/dialogs/subscribe-dialog/subscribe-dialog.component.html</context>
<context context-type="linenumber">37</context>
</context-group>
<note priority="1" from="description">Settings cancel button</note>
</trans-unit>
<trans-unit id="92eee6be6de0b11c924e3ab27db30257159c0a7c" datatype="html">
<source>Home</source>
<context-group purpose="location">
<context context-type="sourcefile">app/app.component.html</context>
<context context-type="linenumber">33</context>
</context-group>
<note priority="1" from="description">Navigation menu Home Page title</note>
</trans-unit>
<trans-unit id="5b3075e8dc3f3921ec316b0bd83b6d14a06c1a4f" datatype="html">
<source>Save changes</source>
<context-group purpose="location">
<context context-type="sourcefile">app/player/player.component.html</context>
<context context-type="linenumber">22</context>
</context-group>
<note priority="1" from="description">Playlist save changes button</note>
</trans-unit>
<trans-unit id="a9806cf78ce00eb2613eeca11354a97e033377b8" datatype="html">
<source>Subscribe to playlist or channel</source>
<context-group purpose="location">
<context context-type="sourcefile">app/dialogs/subscribe-dialog/subscribe-dialog.component.html</context>
<context context-type="linenumber">1</context>
</context-group>
<note priority="1" from="description">Subscribe dialog title</note>
</trans-unit>
<trans-unit id="93efc99ae087fc116de708ecd3ace86ca237cf30" datatype="html">
<source>The playlist or channel URL</source>
<context-group purpose="location">
<context context-type="sourcefile">app/dialogs/subscribe-dialog/subscribe-dialog.component.html</context>
<context context-type="linenumber">9</context>
</context-group>
<note priority="1" from="description">Subscription URL input hint</note>
</trans-unit>
<trans-unit id="08f5d0ef937ae17feb1b04aff15ad88911e87baf" datatype="html">
<source>Custom name</source>
<context-group purpose="location">
<context context-type="sourcefile">app/dialogs/subscribe-dialog/subscribe-dialog.component.html</context>
<context context-type="linenumber">14</context>
</context-group>
<note priority="1" from="description">Subscription custom name placeholder</note>
</trans-unit>
<trans-unit id="f3f62aa84d59f3a8b900cc9a7eec3ef279a7b4e7" datatype="html">
<source>This is optional</source>
<context-group purpose="location">
<context context-type="sourcefile">app/dialogs/subscribe-dialog/subscribe-dialog.component.html</context>
<context context-type="linenumber">15</context>
</context-group>
<note priority="1" from="description">Custom name input hint</note>
</trans-unit>
<trans-unit id="ea30873bd3f0d5e4fb2378eec3f0a1db77634a28" datatype="html">
<source>Download all uploads</source>
<context-group purpose="location">
<context context-type="sourcefile">app/dialogs/subscribe-dialog/subscribe-dialog.component.html</context>
<context context-type="linenumber">19</context>
</context-group>
<note priority="1" from="description">Download all uploads subscription setting</note>
</trans-unit>
<trans-unit id="28a678e9cabf86e44c32594c43fa0e890135c20f" datatype="html">
<source>Download videos uploaded in the last</source>
<context-group purpose="location">
<context context-type="sourcefile">app/dialogs/subscribe-dialog/subscribe-dialog.component.html</context>
<context context-type="linenumber">22</context>
</context-group>
<note priority="1" from="description">Download time range prefix</note>
</trans-unit>
<trans-unit id="e78c0d60ac39787f62c9159646fe0b3c1ed55a1d" datatype="html">
<source>Type:</source>
<context-group purpose="location">
<context context-type="sourcefile">app/dialogs/subscription-info-dialog/subscription-info-dialog.component.html</context>
<context context-type="linenumber">5</context>
</context-group>
<note priority="1" from="description">Subscription type property</note>
</trans-unit>
<trans-unit id="c52db455cca9109ee47e1a612c3f4117c09eb71b" datatype="html">
<source>URL:</source>
<context-group purpose="location">
<context context-type="sourcefile">app/dialogs/subscription-info-dialog/subscription-info-dialog.component.html</context>
<context context-type="linenumber">9</context>
</context-group>
<note priority="1" from="description">Subscription URL property</note>
</trans-unit>
<trans-unit id="a44d86aa1e6c20ced07aca3a7c081d8db9ded1c6" datatype="html">
<source>Archive:</source>
<context-group purpose="location">
<context context-type="sourcefile">app/dialogs/subscription-info-dialog/subscription-info-dialog.component.html</context>
<context context-type="linenumber">17</context>
</context-group>
<note priority="1" from="description">Subscription ID property</note>
</trans-unit>
<trans-unit id="f4e529ae5ffd73001d1ff4bbdeeb0a72e342e5c8" datatype="html">
<source>Close</source>
<context-group purpose="location">
<context context-type="sourcefile">app/dialogs/subscription-info-dialog/subscription-info-dialog.component.html</context>
<context context-type="linenumber">23</context>
</context-group>
<note priority="1" from="description">Close subscription info button</note>
</trans-unit>
<trans-unit id="8efc77bf327659c0fec1f518cf48a98cdcd9dddf" datatype="html">
<source>Export Archive</source>
<context-group purpose="location">
<context context-type="sourcefile">app/dialogs/subscription-info-dialog/subscription-info-dialog.component.html</context>
<context context-type="linenumber">24</context>
</context-group>
<note priority="1" from="description">Export Archive button</note>
</trans-unit>
<trans-unit id="3042bd3ad8dffcfeca5fd1ae6159fd1047434e95" datatype="html">
<source>Unsubscribe</source>
<context-group purpose="location">
<context context-type="sourcefile">app/dialogs/subscription-info-dialog/subscription-info-dialog.component.html</context>
<context context-type="linenumber">26</context>
</context-group>
<note priority="1" from="description">Unsubscribe button</note>
</trans-unit>
<trans-unit id="e2319dec5b4ccfb6ed9f55ccabd63650a8fdf547" datatype="html">
<source>Your subscriptions</source>
<context-group purpose="location">
<context context-type="sourcefile">app/subscriptions/subscriptions.component.html</context>
<context context-type="linenumber">3</context>
</context-group>
<note priority="1" from="description">Subscriptions title</note>
</trans-unit>
<trans-unit id="807cf11e6ac1cde912496f764c176bdfdd6b7e19" datatype="html">
<source>Channels</source>
<context-group purpose="location">
<context context-type="sourcefile">app/subscriptions/subscriptions.component.html</context>
<context context-type="linenumber">8</context>
</context-group>
<note priority="1" from="description">Subscriptions channels title</note>
</trans-unit>
<trans-unit id="29b89f751593e1b347eef103891b7a1ff36ec03f" datatype="html">
<source>Name not available. Channel retrieval in progress.</source>
<context-group purpose="location">
<context context-type="sourcefile">app/subscriptions/subscriptions.component.html</context>
<context context-type="linenumber">14</context>
</context-group>
<note priority="1" from="description">Subscription playlist not available text</note>
</trans-unit>
<trans-unit id="4636cd4a1379c50d471e98786098c4d39e1e82ad" datatype="html">
<source>You have no channel subscriptions.</source>
<context-group purpose="location">
<context context-type="sourcefile">app/subscriptions/subscriptions.component.html</context>
<context context-type="linenumber">24</context>
</context-group>
<note priority="1" from="description">No channel subscriptions text</note>
</trans-unit>
<trans-unit id="2e0a410652cb07d069f576b61eab32586a18320d" datatype="html">
<source>Name not available. Playlist retrieval in progress.</source>
<context-group purpose="location">
<context context-type="sourcefile">app/subscriptions/subscriptions.component.html</context>
<context context-type="linenumber">33</context>
</context-group>
<note priority="1" from="description">Subscription playlist not available text</note>
</trans-unit>
<trans-unit id="587b57ced54965d8874c3fd0e9dfedb987e5df04" datatype="html">
<source>You have no playlist subscriptions.</source>
<context-group purpose="location">
<context context-type="sourcefile">app/subscriptions/subscriptions.component.html</context>
<context context-type="linenumber">43</context>
</context-group>
<note priority="1" from="description">No playlist subscriptions text</note>
</trans-unit>
<trans-unit id="7e892ba15f2c6c17e83510e273b3e10fc32ea016" datatype="html">
<source>Search</source>
<context-group purpose="location">
<context context-type="sourcefile">app/subscription/subscription/subscription.component.html</context>
<context context-type="linenumber">19</context>
</context-group>
<note priority="1" from="description">Subscription videos search placeholder</note>
</trans-unit>
<trans-unit id="2054791b822475aeaea95c0119113de3200f5e1c" datatype="html">
<source>Length:</source>
<context-group purpose="location">
<context context-type="sourcefile">app/subscription/subscription-file-card/subscription-file-card.component.html</context>
<context context-type="linenumber">3</context>
</context-group>
<note priority="1" from="description">Video duration label</note>
</trans-unit>
<trans-unit id="94e01842dcee90531caa52e4147f70679bac87fe" datatype="html">
<source>Delete and redownload</source>
<context-group purpose="location">
<context context-type="sourcefile">app/subscription/subscription-file-card/subscription-file-card.component.html</context>
<context context-type="linenumber">7</context>
</context-group>
<note priority="1" from="description">Delete and redownload subscription video button</note>
</trans-unit>
<trans-unit id="2031adb51e07a41844e8ba7704b054e98345c9c1" datatype="html">
<source>Delete forever</source>
<context-group purpose="location">
<context context-type="sourcefile">app/subscription/subscription-file-card/subscription-file-card.component.html</context>
<context context-type="linenumber">8</context>
</context-group>
<note priority="1" from="description">Delete forever subscription video button</note>
</trans-unit>
</body>
</file>
</xliff>

View File

@@ -1,12 +1,40 @@
import '@angular/localize/init';
import { enableProdMode } from '@angular/core';
import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
import 'hammerjs';
import { AppModule } from './app/app.module';
import { environment } from './environments/environment';
import { loadTranslations } from '@angular/localize';
import { getTranslations, ParsedTranslationBundle } from '@locl/core';
if (environment.production) {
enableProdMode();
}
platformBrowserDynamic().bootstrapModule(AppModule);
const locale = localStorage.getItem('locale');
if (locale) {
getTranslations(`./assets/i18n/messages.${locale}.json`).then(
(data: ParsedTranslationBundle) => {
loadTranslations(data as any);
import('./app/app.module').then(module => {
platformBrowserDynamic()
.bootstrapModule(module.AppModule)
.catch(err => console.error(err));
});
}
).catch(err => {
import('./app/app.module').then(module => {
platformBrowserDynamic()
.bootstrapModule(module.AppModule)
.catch(err2 => console.error(err2));
});
});
} else {
console.log('no locale');
import('./app/app.module').then(module => {
platformBrowserDynamic()
.bootstrapModule(module.AppModule)
.catch(err => console.error(err));
});
}

View File

@@ -1,3 +1,7 @@
/***************************************************************************************************
* Load `$localize` onto the global scope - used if i18n tags appear in Angular templates.
*/
import '@angular/localize/init';
/**
* This file includes polyfills needed by Angular and is loaded before the app.
* You can add your own extra polyfills to this file.

View File

@@ -5,8 +5,11 @@
"baseUrl": "",
"types": []
},
"exclude": [
"test.ts",
"**/*.spec.ts"
"files": [
"main.ts",
"polyfills.ts"
],
"include": [
"src/**/*.d.ts"
]
}