From c17d29075e1764ffb2b78b0d7d5fcb247a02dd10 Mon Sep 17 00:00:00 2001 From: Isaac Grynsztein Date: Sun, 15 Mar 2020 00:48:16 -0400 Subject: [PATCH] Updated angular material to v9 Added further translation support --- package.json | 6 +- src/app/app.component.ts | 4 +- src/app/app.module.ts | 47 +++++--- .../create-playlist.component.ts | 2 +- .../subscribe-dialog.component.ts | 3 +- .../subscription-info-dialog.component.ts | 2 +- src/app/file-card/file-card.component.ts | 2 +- .../input-dialog/input-dialog.component.ts | 2 +- src/app/main/main.component.ts | 3 +- src/app/player/player.component.ts | 3 +- .../subscription-file-card.component.ts | 2 +- .../subscriptions/subscriptions.component.ts | 3 +- src/assets/i18n/messages.es.json | 106 ++++++++++++++++++ src/locale/es/messages.es.xlf | 37 ++++++ .../{messages..es.xlf => messages.es.xlf} | 4 +- src/main.ts | 19 +++- 16 files changed, 211 insertions(+), 34 deletions(-) create mode 100644 src/assets/i18n/messages.es.json create mode 100644 src/locale/es/messages.es.xlf rename src/locale/{messages..es.xlf => messages.es.xlf} (77%) diff --git a/package.json b/package.json index 6cfd1d4..b4a85f7 100644 --- a/package.json +++ b/package.json @@ -19,20 +19,20 @@ "dependencies": { "@angular-devkit/core": "^9.0.6", "@angular/animations": "^9.0.6", - "@angular/cdk": "^8.2.3", + "@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/localize": "^9.0.6", - "@angular/material": "^8.2.3", + "@angular/material": "^9.1.2", "@angular/platform-browser": "^9.0.6", "@angular/platform-browser-dynamic": "^9.0.6", "@angular/router": "^9.0.6", + "@soluling/angular": "^1.0.0", "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", diff --git a/src/app/app.component.ts b/src/app/app.component.ts index 5179e03..b5cb7b9 100644 --- a/src/app/app.component.ts +++ b/src/app/app.component.ts @@ -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'; diff --git a/src/app/app.module.ts b/src/app/app.module.ts index 3eb3a7d..aa8baf6 100644 --- a/src/app/app.module.ts +++ b/src/app/app.module.ts @@ -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'; @@ -38,6 +51,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) { return (element.id === 'video' ? videoFilesMouseHovering || videoFilesOpened : audioFilesMouseHovering || audioFilesOpened); } @@ -97,14 +113,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 { } diff --git a/src/app/create-playlist/create-playlist.component.ts b/src/app/create-playlist/create-playlist.component.ts index b3d04bf..31e3872 100644 --- a/src/app/create-playlist/create-playlist.component.ts +++ b/src/app/create-playlist/create-playlist.component.ts @@ -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'; diff --git a/src/app/dialogs/subscribe-dialog/subscribe-dialog.component.ts b/src/app/dialogs/subscribe-dialog/subscribe-dialog.component.ts index 129da4f..14a7621 100644 --- a/src/app/dialogs/subscribe-dialog/subscribe-dialog.component.ts +++ b/src/app/dialogs/subscribe-dialog/subscribe-dialog.component.ts @@ -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({ diff --git a/src/app/dialogs/subscription-info-dialog/subscription-info-dialog.component.ts b/src/app/dialogs/subscription-info-dialog/subscription-info-dialog.component.ts index 2a90c6d..eebd285 100644 --- a/src/app/dialogs/subscription-info-dialog/subscription-info-dialog.component.ts +++ b/src/app/dialogs/subscription-info-dialog/subscription-info-dialog.component.ts @@ -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({ diff --git a/src/app/file-card/file-card.component.ts b/src/app/file-card/file-card.component.ts index 67a9f75..7e39fc7 100644 --- a/src/app/file-card/file-card.component.ts +++ b/src/app/file-card/file-card.component.ts @@ -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'; diff --git a/src/app/input-dialog/input-dialog.component.ts b/src/app/input-dialog/input-dialog.component.ts index 9644e13..b0b8e82 100644 --- a/src/app/input-dialog/input-dialog.component.ts +++ b/src/app/input-dialog/input-dialog.component.ts @@ -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', diff --git a/src/app/main/main.component.ts b/src/app/main/main.component.ts index 80d22f6..ba36282 100644 --- a/src/app/main/main.component.ts +++ b/src/app/main/main.component.ts @@ -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'; diff --git a/src/app/player/player.component.ts b/src/app/player/player.component.ts index 41dccb5..f9c4f3e 100644 --- a/src/app/player/player.component.ts +++ b/src/app/player/player.component.ts @@ -2,7 +2,8 @@ import { Component, OnInit, HostListener, EventEmitter } from '@angular/core'; import { VgAPI } from 'videogular2/compiled/core'; 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'; diff --git a/src/app/subscription/subscription-file-card/subscription-file-card.component.ts b/src/app/subscription/subscription-file-card/subscription-file-card.component.ts index 820577b..c2c23e2 100644 --- a/src/app/subscription/subscription-file-card/subscription-file-card.component.ts +++ b/src/app/subscription/subscription-file-card/subscription-file-card.component.ts @@ -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'; diff --git a/src/app/subscriptions/subscriptions.component.ts b/src/app/subscriptions/subscriptions.component.ts index d8505b5..9614e87 100644 --- a/src/app/subscriptions/subscriptions.component.ts +++ b/src/app/subscriptions/subscriptions.component.ts @@ -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'; diff --git a/src/assets/i18n/messages.es.json b/src/assets/i18n/messages.es.json new file mode 100644 index 0000000..8b511fe --- /dev/null +++ b/src/assets/i18n/messages.es.json @@ -0,0 +1,106 @@ +{ + "17f0ea5d2d7a262b0e875acc70475f102aee84e6": "Create a playlist", + "cff1428d10d59d14e45edec3c735a27b5482db59": "Name", + "f47e2d56dd8a145b2e9599da9730c049d52962a2": "Audio files", + "a52dae09be10ca3a65da918533ced3d3f4992238": "Videos", + "038ebcb2a89155d90c24fa1c17bfe83dbadc3c20": "Youtube Downloader", + "6d2ec8898344c8955542b0542c942038ef28bb80": "Please enter a valid URL!", + "a38ae1082fec79ba1f379978337385a539a28e73": " Quality ", + "4be966a9dcfbc9b54dfcc604b831c0289f847fa4": "Use URL", + "d3f02f845e62cebd75fde451ab8479d2a8ad784d": " View ", + "4a9889d36910edc8323d7bab60858ab3da6d91df": " Only Audio ", + "96a01fafe135afc58b0f8071a4ab00234495ce18": " Multi-download Mode ", + "6a21ba5fb0ac804a525bf9ab168038c3ee88e661": " Download ", + "6a3777f913cf3f288664f0632b9f24794fdcc24e": " Cancel ", + "322ed150e02666fe2259c5b4614eac7066f4ffa0": " Advanced ", + "b7ffe7c6586d6f3f18a9246806a7c7d5538ab43e": " Simulated command: ", + "4e4c721129466be9c3862294dc40241b64045998": " Use custom args ", + "ad2f8ac8b7de7945b80c8e424484da94e597125f": "Custom args", + "ccc7e92cbdd35e901acf9ad80941abee07bd8f60": " No need to include URL, just everything after. ", + "3a92a3443c65a52f37ca7efb8f453b35dbefbf29": " Use custom output ", + "d9c02face477f2f9cdaae318ccee5f89856851fb": "Custom output", + "fcfd4675b4c90f08d18d3abede9a9a4dff4cfdc7": "Documentation", + "19d1ae64d94d28a29b2c57ae8671aace906b5401": "Path is relative to the config download path. Don't include extension.", + "8fad10737d3e3735a6699a4d89cbf6c20f6bb55f": " Use authentication ", + "08c74dc9762957593b91f6eb5d65efdfc975bf48": "Username", + "c32ef07f8803a223a83ed17024b38e8d82292407": "Password", + "4a0dada6e841a425de3e5006e6a04df26c644fa5": " Audio ", + "9779715ac05308973d8f1c8658b29b986e92450f": " Your audio files are here ", + "47546e45bbb476baaaad38244db444c427ddc502": "Playlists", + "78bd81adb4609b68cfa4c589222bdc233ba1faaa": " No playlists available. Create one from your downloading audio files by clicking the blue plus button. ", + "9d2b62bb0b91e2e17fb4177a7e3d6756a2e6ee33": " Video ", + "960582a8b9d7942716866ecfb7718309728f2916": " Your video files are here ", + "0f59c46ca29e9725898093c9ea6b586730d0624e": " No playlists available. Create one from your downloading video files by clicking the blue plus button. ", + "ca3dbbc7f3e011bffe32a10a3ea45cc84f30ecf1": "ID:", + "e684046d73bcee88e82f7ff01e2852789a05fc32": "Count:", + "121cc5391cd2a5115bc2b3160379ee5b36cd7716": "Settings", + "fe22ca53e651df951dac25b67c17894b0980f767": "Host", + "801b98c6f02fe3b32f6afa3ee854c99ed83474e6": "URL", + "54c512cca1923ab72faf1a0bd98d3d172469629a": "URL this app will be accessed from, without the port.", + "cb2741a46e3560f6bc6dfd99d385e86b08b26d72": "Port", + "22e8f1d0423a3b784fe40fab187b92c06541b577": "The desired port. Default is 17442.", + "948758e1412bb2ecdb98e3a4f1cbb6d7458456f2": "Encryption", + "cbe16a57be414e84b6a68309d08fad894df797d6": "Use encryption", + "0c1875a79b7ecc792cc1bebca3e063e40b5764f9": "Cert file path", + "736551b93461d2de64b118cf4043eee1d1c2cb2c": "Key file path", + "0ba25ad86a240576c4f20a2fada4722ebba77b1e": "Downloader", + "ab2756805742e84ad0cc0468f4be2d8aa9f855a5": "Audio folder path", + "c2c89cdf45d46ea64d2ed2f9ac15dfa4d77e26ca": "Path for audio only downloads. It is relative to YTDL-Material's root folder.", + "46826331da1949bd6fb74624447057099c9d20cd": "Video folder path", + "17c92e6d47a213fa95b5aa344b3f258147123f93": "Path for video downloads. It is relative to YTDL-Material's root folder.", + "f41145afc02fd47ef0576ac79acd2c47ebbf4901": "Global custom args for downloads on the home page.", + "d5f69691f9f05711633128b5a3db696783266b58": "Extra", + "61f8fd90b5f8cb20c70371feb2ee5e1fac5a9095": "Top title", + "78d3531417c0d4ba4c90f0d4ae741edc261ec8df": "File manager enabled", + "c33bd5392b39dbed36b8e5a1145163a15d45835f": "Allow quality select", + "bda5508e24e0d77debb28bcd9194d8fefb1cfb92": "Download only mode", + "09d31c803a7252658694e1e3176b97f5655a3fe3": "Allow multi-download mode", + "e351b40b3869a5c7d19c3d4918cb1ac7aaab95c4": "API", + "d5d7c61349f3b0859336066e6d453fc35d334fe5": "Use YouTube API", + "ce10d31febb3d9d60c160750570310f303a22c22": "Youtube API Key", + "8602e313cdfa7c4cc475ccbe86459fce3c3fd986": "Generating a key is easy!", + "60c855c323706a04ccd2ff22d634bde9b6233bbf": "Themes", + "ff7cee38a2259526c519f878e71b964f41db4348": "Default", + "adb4562d2dbd3584370e44496969d58c511ecb63": "Dark", + "7a6bacee4c31cb5c0ac2d24274fb4610d8858602": "Allow theme change", + "357064ca9d9ac859eb618e28e8126fa32be049e2": "Subscriptions", + "4e3120311801c4acd18de7146add2ee4a4417773": "Allow subscriptions", + "4bee2a4bef2d26d37c9b353c278e24e5cd309ce3": "Subscriptions base path", + "bc9892814ee2d119ae94378c905ea440a249b84a": "Base path for videos from your subscribed channels and playlists. It is relative to YTDL-Material's root folder.", + "5bef4b25ba680da7fff06b86a91b1fc7e6a926e3": "Check interval", + "0f56a7449b77630c114615395bbda4cab398efd8": "Unit is seconds, only include numbers.", + "78e49b7339b4fa7184dd21bcaae107ce9b7076f6": "Use youtube-dl archive", + "fa9fe4255231dd1cc6b29d3d254a25cb7c764f0f": "With youtube-dl's archive", + "09006404cccc24b7a8f8d1ce0b39f2761ab841d8": "feature, downloaded videos from your subscriptions get recorded in a text file in the subscriptions archive sub-directory.", + "29ed79a98fc01e7f9537777598e31dbde3aa7981": "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.", + "bc2e854e111ecf2bd7db170da5e3c2ed08181d88": "Advanced", + "5fab47f146b0a4b809dcebf3db9da94df6299ea1": "Use default downloading agent", + "cdf75b1bdda80487e2ce1ff264ae171cbc5dc3b1": "Custom agent", + "dc3d990391c944d1fbfc7cfb402f7b5e112fb3a8": "Allow advanced download", + "52c9a103b812f258bcddc3d90a6e3f46871d25fe": "Save", + "d7b35c384aecd25a516200d6921836374613dfe7": "Cancel", + "92eee6be6de0b11c924e3ab27db30257159c0a7c": "Home", + "5b3075e8dc3f3921ec316b0bd83b6d14a06c1a4f": "Save changes", + "a9806cf78ce00eb2613eeca11354a97e033377b8": "Subscribe to playlist or channel", + "93efc99ae087fc116de708ecd3ace86ca237cf30": "The playlist or channel URL", + "08f5d0ef937ae17feb1b04aff15ad88911e87baf": "Custom name", + "f3f62aa84d59f3a8b900cc9a7eec3ef279a7b4e7": "This is optional", + "ea30873bd3f0d5e4fb2378eec3f0a1db77634a28": "Download all uploads", + "28a678e9cabf86e44c32594c43fa0e890135c20f": "Download videos uploaded in the last", + "e78c0d60ac39787f62c9159646fe0b3c1ed55a1d": "Type:", + "c52db455cca9109ee47e1a612c3f4117c09eb71b": "URL:", + "a44d86aa1e6c20ced07aca3a7c081d8db9ded1c6": "Archive:", + "f4e529ae5ffd73001d1ff4bbdeeb0a72e342e5c8": "Close", + "8efc77bf327659c0fec1f518cf48a98cdcd9dddf": "Export Archive", + "3042bd3ad8dffcfeca5fd1ae6159fd1047434e95": "Unsubscribe", + "e2319dec5b4ccfb6ed9f55ccabd63650a8fdf547": "Your subscriptions", + "807cf11e6ac1cde912496f764c176bdfdd6b7e19": "Channels", + "29b89f751593e1b347eef103891b7a1ff36ec03f": "Name not available. Channel retrieval in progress.", + "4636cd4a1379c50d471e98786098c4d39e1e82ad": "You have no channel subscriptions.", + "2e0a410652cb07d069f576b61eab32586a18320d": "Name not available. Playlist retrieval in progress.", + "587b57ced54965d8874c3fd0e9dfedb987e5df04": "You have no playlist subscriptions.", + "7e892ba15f2c6c17e83510e273b3e10fc32ea016": "Search", + "2054791b822475aeaea95c0119113de3200f5e1c": "Length:", + "94e01842dcee90531caa52e4147f70679bac87fe": "Delete and redownload", + "2031adb51e07a41844e8ba7704b054e98345c9c1": "Delete forever" +} \ No newline at end of file diff --git a/src/locale/es/messages.es.xlf b/src/locale/es/messages.es.xlf new file mode 100644 index 0000000..7d853bc --- /dev/null +++ b/src/locale/es/messages.es.xlf @@ -0,0 +1,37 @@ +Create a playlistapp/create-playlist/create-playlist.component.html1Create a playlist dialog titleCrea una lista de reproducciónNameapp/create-playlist/create-playlist.component.html5Playlist name placeholderNombreAudio filesapp/create-playlist/create-playlist.component.html10Audio files titleArchivos de sonidoVideosapp/create-playlist/create-playlist.component.html11app/subscription/subscription/subscription.component.html15Videos titleArchivos de videoYoutube Downloaderapp/main/main.component.html5Youtube downloader home page labelDescargador de YoutubePlease enter a valid URL!app/main/main.component.html16Enter valid URL errorPor favor entre una URL válida + Quality + app/main/main.component.html24Quality select labelCalidadUse URLapp/main/main.component.html52YT search Use URL button for searched videoUsa URL + View + app/main/main.component.html55YT search View button for searched videoVer + Only Audio + app/main/main.component.html65Only Audio checkboxSolo audio + Multi-download Mode + app/main/main.component.html70Multi-download Mode checkboxDescarga múltiple + Download + app/main/main.component.html79Main download buttonDescarga + Cancel + app/main/main.component.html84Cancel download buttonCancela + Advanced + app/main/main.component.html96Advanced download mode panelAvanzado + Simulated command: + app/main/main.component.html102Simulated command labelCommando simulado: + Use custom args + app/main/main.component.html110Use custom args checkboxUsar argumentos personalizadosCustom argsapp/main/main.component.html115app/settings/settings.component.html83Custom args placeholderArgumentos personalizados + No need to include URL, just everything after. + app/main/main.component.html117Custom Args input hintNo es necesario incluir URL, solo todo después + Use custom output + app/main/main.component.html125Use custom output checkboxUsar salida personalizadaCustom outputapp/main/main.component.html130Custom output placeholderSalida personalizadaDocumentationapp/main/main.component.html132Youtube-dl output template documentation linkDocumentaciónPath is relative to the config download path. Don't include extension.app/main/main.component.html133Custom Output input hintLa ruta es relativa a la ruta de descarga de la config. No incluya el extensión. + Use authentication + app/main/main.component.html139Use authentication checkboxUsa autenticaciónUsernameapp/main/main.component.html144YT Username placeholderNombre de usuarioPasswordapp/main/main.component.html149YT Password placeholderContraseña + Audio + app/main/main.component.html193Audio files titleAudio + Your audio files are here + app/main/main.component.html198Audio files descriptionTus archivos de audio están aquíPlaylistsapp/main/main.component.html213app/main/main.component.html255app/subscriptions/subscriptions.component.html27Playlists titleListas de reproducción + No playlists available. Create one from your downloading audio files by clicking the blue plus button. + app/main/main.component.html224No video playlists available textNo hay listas de reproducción disponibles. Cree uno de tus archivos de audio haciendo clic en el botón azul más. + Video + app/main/main.component.html234Video files titleVídeo + Your video files are here + app/main/main.component.html239Video files descriptionTus archivos de video son aquí + No playlists available. Create one from your downloading video files by clicking the blue plus button. + app/main/main.component.html268No video playlists available textNo hay listas de reproducción disponibles. Cree uno de tus archivos de video haciendo clic en el botón azul más.ID:app/file-card/file-card.component.html6app/download-item/download-item.component.html7app/dialogs/subscription-info-dialog/subscription-info-dialog.component.html13File or playlist IDID:Count:app/file-card/file-card.component.html7Playlist video countCount:Settingsapp/settings/settings.component.html1app/app.component.html22Settings titleConfiguracionesHostapp/settings/settings.component.html8Host settings titleHostURLapp/settings/settings.component.html15app/dialogs/subscribe-dialog/subscribe-dialog.component.html8URL input placeholderURLURL this app will be accessed from, without the port.app/settings/settings.component.html16URL setting input hintURL desde la que se accederá a esta aplicación, sin el puerto.Portapp/settings/settings.component.html21Port input placeholderPuertoThe desired port. Default is 17442.app/settings/settings.component.html22Port setting input hintPuerto deseado. El valor predeterminado es 17442.Encryptionapp/settings/settings.component.html34Encryption settings titleCifradoUse encryptionapp/settings/settings.component.html40Use encryption settingUsa cifradoCert file pathapp/settings/settings.component.html45Cert file path input placeholderRuta del archivo de certificadoKey file pathapp/settings/settings.component.html51Key file path input placeholderRuta de archivo de claveDownloaderapp/settings/settings.component.html62Downloader settings titleDescargadorAudio folder pathapp/settings/settings.component.html69Audio folder path input placeholderRuta de la carpeta de audioPath for audio only downloads. It is relative to YTDL-Material's root folder.app/settings/settings.component.html70Aduio path setting input hintRuta para descargas de solo audio. Es relativo a la carpeta raíz de YTDL-Material.Video folder pathapp/settings/settings.component.html76Video folder path input placeholderRuta de la carpeta de videoPath for video downloads. It is relative to YTDL-Material's root folder.app/settings/settings.component.html77Video path setting input hintRuta de descarga de videos. Es relativo a la carpeta raíz de YTDL-Material.Global custom args for downloads on the home page.app/settings/settings.component.html84Custom args setting input hintArgumentos personalizados globales para descargas en la página de inicio.Extraapp/settings/settings.component.html95Extra settings titleExtraTop titleapp/settings/settings.component.html102Top title input placeholderTítulo superiorFile manager enabledapp/settings/settings.component.html107File manager enabled settingAdministrador de archivos habilitadoAllow quality selectapp/settings/settings.component.html110Allow quality seelct settingPermitir selección de calidadDownload only modeapp/settings/settings.component.html113Download only mode settingModo de solo descargaAllow multi-download modeapp/settings/settings.component.html116Allow multi-downloade mode settingPermitir el modo de descarga múltipleAPIapp/settings/settings.component.html126API settings titleAPIUse YouTube APIapp/settings/settings.component.html132Use YouTube API settingUtilizar la API de YouTubeYoutube API Keyapp/settings/settings.component.html136Youtube API Key setting placeholderClave API de YouTubeGenerating a key is easy!app/settings/settings.component.html137Youtube API Key setting hint¡Generar una clave es fácil!Themesapp/settings/settings.component.html148Themes settings titleTemasDefaultapp/settings/settings.component.html155Default theme labelDefectoDarkapp/settings/settings.component.html156app/app.component.html17Dark theme labelOscuraAllow theme changeapp/settings/settings.component.html161Allow theme change settingPermitir cambio de temaSubscriptionsapp/settings/settings.component.html171app/app.component.html34Subscriptions settings titleSuscripcionesAllow subscriptionsapp/settings/settings.component.html177Allow subscriptions settingPermitir suscripcionesSubscriptions base pathapp/settings/settings.component.html181Subscriptions base path input setting placeholderRuta base de suscripcionesBase path for videos from your subscribed channels and playlists. It is relative to YTDL-Material's root folder.app/settings/settings.component.html182Subscriptions base path setting input hintRuta base para videos de sus canales y listas de reproducción suscritos. Es relativo a la carpeta raíz de YTDL-Material.Check intervalapp/settings/settings.component.html187Check interval input setting placeholderIntervalo de comprobaciónUnit is seconds, only include numbers.app/settings/settings.component.html188Check interval setting input hintLa unidad es segundos, solo incluye números.Use youtube-dl archiveapp/settings/settings.component.html192Use youtube-dl archive settingUsa el archivo de youtube-dlWith youtube-dl's archiveapp/settings/settings.component.html193youtube-dl archive explanation prefix linkCon la función de archivo de youtube-dl,feature, downloaded videos from your subscriptions get recorded in a text file in the subscriptions archive sub-directory.app/settings/settings.component.html193youtube-dl archive explanation middlelos videos descargados de sus suscripciones se graban en un archivo de texto en el subdirectorio del archivo de suscripciones.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.app/settings/settings.component.html194youtube-dl archive explanation suffixEsto 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.Advancedapp/settings/settings.component.html204Advanced settings titleAvanzadoUse default downloading agentapp/settings/settings.component.html210Use default downloading agent settingUsar agente de descarga predeterminadoCustom agentapp/settings/settings.component.html214Custom agent setting placeholderAgente personalizadoAllow advanced downloadapp/settings/settings.component.html219Allow advanced downloading settingPermitir descarga avanzadaSaveapp/settings/settings.component.html229Settings save buttonSalvarCancelapp/settings/settings.component.html232app/dialogs/subscribe-dialog/subscribe-dialog.component.html37Settings cancel buttonCancelarHomeapp/app.component.html33Navigation menu Home Page titleInicioSave changesapp/player/player.component.html22Playlist save changes buttonGuardar cambiosSubscribe to playlist or channelapp/dialogs/subscribe-dialog/subscribe-dialog.component.html1Subscribe dialog titleSuscríbase a la lista de reproducción o al canalThe playlist or channel URLapp/dialogs/subscribe-dialog/subscribe-dialog.component.html9Subscription URL input hintLa lista de reproducción o la URL del canalCustom nameapp/dialogs/subscribe-dialog/subscribe-dialog.component.html14Subscription custom name placeholderNombre personalizadoThis is optionalapp/dialogs/subscribe-dialog/subscribe-dialog.component.html15Custom name input hintEsto es opcionalDownload all uploadsapp/dialogs/subscribe-dialog/subscribe-dialog.component.html19Download all uploads subscription settingDescargar todas las cargasDownload videos uploaded in the lastapp/dialogs/subscribe-dialog/subscribe-dialog.component.html22Download time range prefixDescargar videos subidos en el últimoType:app/dialogs/subscription-info-dialog/subscription-info-dialog.component.html5Subscription type propertyTipo:URL:app/dialogs/subscription-info-dialog/subscription-info-dialog.component.html9Subscription URL propertyURL:Archive:app/dialogs/subscription-info-dialog/subscription-info-dialog.component.html17Subscription ID propertyArchivo:Closeapp/dialogs/subscription-info-dialog/subscription-info-dialog.component.html23Close subscription info buttonCercaExport Archiveapp/dialogs/subscription-info-dialog/subscription-info-dialog.component.html24Export Archive buttonExportar el archivoUnsubscribeapp/dialogs/subscription-info-dialog/subscription-info-dialog.component.html26Unsubscribe buttonDarse de bajaYour subscriptionsapp/subscriptions/subscriptions.component.html3Subscriptions titleSus suscripcionesChannelsapp/subscriptions/subscriptions.component.html8Subscriptions channels titleCanalesName not available. Channel retrieval in progress.app/subscriptions/subscriptions.component.html14Subscription playlist not available textNombre no disponible. Recuperación de canales en progreso.You have no channel subscriptions.app/subscriptions/subscriptions.component.html24No channel subscriptions textNo tienes suscripciones de canal.Name not available. Playlist retrieval in progress.app/subscriptions/subscriptions.component.html33Subscription playlist not available textNombre no disponible. Recuperación de listas de reproducción en progreso.You have no playlist subscriptions.app/subscriptions/subscriptions.component.html43No playlist subscriptions textNo tienes suscripciones a listas de reproducción.Searchapp/subscription/subscription/subscription.component.html19Subscription videos search placeholderBuscarLength:app/subscription/subscription-file-card/subscription-file-card.component.html3Video duration labelLongitud:Delete and redownloadapp/subscription/subscription-file-card/subscription-file-card.component.html7Delete and redownload subscription video buttonEliminar y volver a descargarDelete foreverapp/subscription/subscription-file-card/subscription-file-card.component.html8Delete forever subscription video buttonBorrar para siempre \ No newline at end of file diff --git a/src/locale/messages..es.xlf b/src/locale/messages.es.xlf similarity index 77% rename from src/locale/messages..es.xlf rename to src/locale/messages.es.xlf index 2566fc1..31bdc6a 100644 --- a/src/locale/messages..es.xlf +++ b/src/locale/messages.es.xlf @@ -70,8 +70,6 @@ No playlists available. Create one from your downloading video files by clicking the blue plus button. app/main/main.component.html268No video playlists available text No hay listas de reproducción disponibles. Cree uno de tus archivos de video haciendo clic en el botón azul más. - ID:app/file-card/file-card.component.html6app/download-item/download-item.component.html7app/dialogs/subscription-info-dialog/subscription-info-dialog.component.html13File or playlist IDID:Count:app/file-card/file-card.component.html7Playlist video countCuenta:Settingsapp/settings/settings.component.html1app/app.component.html22Settings titleConfiguracionesHostapp/settings/settings.component.html8Host settings titleHostURLapp/settings/settings.component.html15app/dialogs/subscribe-dialog/subscribe-dialog.component.html8URL input placeholderURLURL this app will be accessed from, without the port.app/settings/settings.component.html16URL setting input hintURL desde la que se accederá a esta aplicación, sin el puerto.Portapp/settings/settings.component.html21Port input placeholderPuertoThe desired port. Default is 17442.app/settings/settings.component.html22Port setting input hintPuerto deseado. -17/5000 -El valor predeterminado es 17442.Encryptionapp/settings/settings.component.html34Encryption settings titleCifradoUse encryptionapp/settings/settings.component.html40Use encryption settingUsa cifradoCert file pathapp/settings/settings.component.html45Cert file path input placeholderRuta del archivo de certificadoKey file pathapp/settings/settings.component.html51Key file path input placeholderRuta de archivo de claveDownloaderapp/settings/settings.component.html62Downloader settings titleDescargadorAudio folder pathapp/settings/settings.component.html69Audio folder path input placeholderRuta de la carpeta de audioPath for audio only downloads. It is relative to YTDL-Material's root folder.app/settings/settings.component.html70Aduio path setting input hintRuta para descargas de solo audio. Es relativo a la carpeta raíz de YTDL-Material.Video folder pathapp/settings/settings.component.html76Video folder path input placeholderRuta de la carpeta de videoPath for video downloads. It is relative to YTDL-Material's root folder.app/settings/settings.component.html77Video path setting input hintRuta de descarga de videos. Es relativo a la carpeta raíz de YTDL-Material.Global custom args for downloads on the home page.app/settings/settings.component.html84Custom args setting input hintArgumentos personalizados globales para descargas en la página de inicio.Extraapp/settings/settings.component.html95Extra settings titleExtraTop titleapp/settings/settings.component.html102Top title input placeholderTítulo superiorFile manager enabledapp/settings/settings.component.html107File manager enabled settingAdministrador de archivos habilitadoAllow quality selectapp/settings/settings.component.html110Allow quality seelct settingPermitir selección de calidadDownload only modeapp/settings/settings.component.html113Download only mode settingModo de solo descargaAllow multi-download modeapp/settings/settings.component.html116Allow multi-downloade mode settingPermitir el modo de descarga múltipleAPIapp/settings/settings.component.html126API settings titleAPIUse YouTube APIapp/settings/settings.component.html132Use YouTube API settingUtilizar la API de YouTubeYoutube API Keyapp/settings/settings.component.html136Youtube API Key setting placeholderClave API de YouTubeGenerating a key is easy!app/settings/settings.component.html137Youtube API Key setting hint¡Generar una clave es fácil!Themesapp/settings/settings.component.html148Themes settings titleTemasDefaultapp/settings/settings.component.html155Default theme labelDefectoDarkapp/settings/settings.component.html156app/app.component.html17Dark theme labelOscuraAllow theme changeapp/settings/settings.component.html161Allow theme change settingPermitir cambio de temaSubscriptionsapp/settings/settings.component.html171app/app.component.html34Subscriptions settings titleSuscripcionesAllow subscriptionsapp/settings/settings.component.html177Allow subscriptions settingPermitir suscripcionesSubscriptions base pathapp/settings/settings.component.html181Subscriptions base path input setting placeholder + ID:app/file-card/file-card.component.html6app/download-item/download-item.component.html7app/dialogs/subscription-info-dialog/subscription-info-dialog.component.html13File or playlist IDID:Count:app/file-card/file-card.component.html7Playlist video countCuenta:Settingsapp/settings/settings.component.html1app/app.component.html22Settings titleConfiguracionesHostapp/settings/settings.component.html8Host settings titleHostURLapp/settings/settings.component.html15app/dialogs/subscribe-dialog/subscribe-dialog.component.html8URL input placeholderURLURL this app will be accessed from, without the port.app/settings/settings.component.html16URL setting input hintURL desde la que se accederá a esta aplicación, sin el puerto.Portapp/settings/settings.component.html21Port input placeholderPuertoThe desired port. Default is 17442.app/settings/settings.component.html22Port setting input hintPuerto deseado. El valor predeterminado es 17442.Encryptionapp/settings/settings.component.html34Encryption settings titleCifradoUse encryptionapp/settings/settings.component.html40Use encryption settingUsa cifradoCert file pathapp/settings/settings.component.html45Cert file path input placeholderRuta del archivo de certificadoKey file pathapp/settings/settings.component.html51Key file path input placeholderRuta de archivo de claveDownloaderapp/settings/settings.component.html62Downloader settings titleDescargadorAudio folder pathapp/settings/settings.component.html69Audio folder path input placeholderRuta de la carpeta de audioPath for audio only downloads. It is relative to YTDL-Material's root folder.app/settings/settings.component.html70Aduio path setting input hintRuta para descargas de solo audio. Es relativo a la carpeta raíz de YTDL-Material.Video folder pathapp/settings/settings.component.html76Video folder path input placeholderRuta de la carpeta de videoPath for video downloads. It is relative to YTDL-Material's root folder.app/settings/settings.component.html77Video path setting input hintRuta de descarga de videos. Es relativo a la carpeta raíz de YTDL-Material.Global custom args for downloads on the home page.app/settings/settings.component.html84Custom args setting input hintArgumentos personalizados globales para descargas en la página de inicio.Extraapp/settings/settings.component.html95Extra settings titleExtraTop titleapp/settings/settings.component.html102Top title input placeholderTítulo superiorFile manager enabledapp/settings/settings.component.html107File manager enabled settingAdministrador de archivos habilitadoAllow quality selectapp/settings/settings.component.html110Allow quality seelct settingPermitir selección de calidadDownload only modeapp/settings/settings.component.html113Download only mode settingModo de solo descargaAllow multi-download modeapp/settings/settings.component.html116Allow multi-downloade mode settingPermitir el modo de descarga múltipleAPIapp/settings/settings.component.html126API settings titleAPIUse YouTube APIapp/settings/settings.component.html132Use YouTube API settingUtilizar la API de YouTubeYoutube API Keyapp/settings/settings.component.html136Youtube API Key setting placeholderClave API de YouTubeGenerating a key is easy!app/settings/settings.component.html137Youtube API Key setting hint¡Generar una clave es fácil!Themesapp/settings/settings.component.html148Themes settings titleTemasDefaultapp/settings/settings.component.html155Default theme labelDefectoDarkapp/settings/settings.component.html156app/app.component.html17Dark theme labelOscuraAllow theme changeapp/settings/settings.component.html161Allow theme change settingPermitir cambio de temaSubscriptionsapp/settings/settings.component.html171app/app.component.html34Subscriptions settings titleSuscripcionesAllow subscriptionsapp/settings/settings.component.html177Allow subscriptions settingPermitir suscripcionesSubscriptions base pathapp/settings/settings.component.html181Subscriptions base path input setting placeholder 23/5000 Ruta base de suscripcionesBase path for videos from your subscribed channels and playlists. It is relative to YTDL-Material's root folder.app/settings/settings.component.html182Subscriptions base path setting input hintRuta base para videos de sus canales y listas de reproducción suscritos. Es relativo a la carpeta raíz de YTDL-Material.Check intervalapp/settings/settings.component.html187Check interval input setting placeholderIntervalo de comprobaciónUnit is seconds, only include numbers.app/settings/settings.component.html188Check interval setting input hintLa unidad es segundos, solo incluye números.Use youtube-dl archiveapp/settings/settings.component.html192Use youtube-dl archive settingUsa el archivo de youtube-dlWith youtube-dl's archiveapp/settings/settings.component.html193youtube-dl archive explanation prefix linkCon la función de archivo de youtube-dl,feature, downloaded videos from your subscriptions get recorded in a text file in the subscriptions archive sub-directory.app/settings/settings.component.html193youtube-dl archive explanation middlelos videos descargados de sus suscripciones se graban en un archivo de texto en el subdirectorio del archivo de suscripciones.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.app/settings/settings.component.html194youtube-dl archive explanation suffixEsto 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.Advancedapp/settings/settings.component.html204Advanced settings titleAvanzadoUse default downloading agentapp/settings/settings.component.html210Use default downloading agent settingUsar agente de descarga predeterminadoCustom agentapp/settings/settings.component.html214Custom agent setting placeholderAgente personalizadoAllow advanced downloadapp/settings/settings.component.html219Allow advanced downloading settingPermitir descarga avanzadaSaveapp/settings/settings.component.html229Settings save buttonSalvarCancelapp/settings/settings.component.html232app/dialogs/subscribe-dialog/subscribe-dialog.component.html37Settings cancel buttonCancelarHomeapp/app.component.html33Navigation menu Home Page titleInicioSave changesapp/player/player.component.html22Playlist save changes buttonGuardar cambiosSubscribe to playlist or channelapp/dialogs/subscribe-dialog/subscribe-dialog.component.html1Subscribe dialog titleSuscríbase a la lista de reproducción o al canalThe playlist or channel URLapp/dialogs/subscribe-dialog/subscribe-dialog.component.html9Subscription URL input hintLa lista de reproducción o la URL del canalCustom nameapp/dialogs/subscribe-dialog/subscribe-dialog.component.html14Subscription custom name placeholderNombre personalizadoThis is optionalapp/dialogs/subscribe-dialog/subscribe-dialog.component.html15Custom name input hintEsto es opcionalDownload all uploadsapp/dialogs/subscribe-dialog/subscribe-dialog.component.html19Download all uploads subscription settingDescargar todas las cargasDownload videos uploaded in the lastapp/dialogs/subscribe-dialog/subscribe-dialog.component.html22Download time range prefixDescargar videos subidos en el últimoType:app/dialogs/subscription-info-dialog/subscription-info-dialog.component.html5Subscription type propertyTipo:URL:app/dialogs/subscription-info-dialog/subscription-info-dialog.component.html9Subscription URL propertyURL:Archive:app/dialogs/subscription-info-dialog/subscription-info-dialog.component.html17Subscription ID propertyArchivo:Closeapp/dialogs/subscription-info-dialog/subscription-info-dialog.component.html23Close subscription info buttonCercaExport Archiveapp/dialogs/subscription-info-dialog/subscription-info-dialog.component.html24Export Archive buttonExportar el archivoUnsubscribeapp/dialogs/subscription-info-dialog/subscription-info-dialog.component.html26Unsubscribe buttonDarse de bajaYour subscriptionsapp/subscriptions/subscriptions.component.html3Subscriptions titleSus suscripcionesChannelsapp/subscriptions/subscriptions.component.html8Subscriptions channels titleCanalesName not available. Channel retrieval in progress.app/subscriptions/subscriptions.component.html14Subscription playlist not available textNombre no disponible. Recuperación de canales en progreso.You have no channel subscriptions.app/subscriptions/subscriptions.component.html24No channel subscriptions textNo tienes suscripciones de canal.Name not available. Playlist retrieval in progress.app/subscriptions/subscriptions.component.html33Subscription playlist not available textNombre no disponible. Recuperación de listas de reproducción en progreso.You have no playlist subscriptions.app/subscriptions/subscriptions.component.html43No playlist subscriptions textNo tienes suscripciones a listas de reproducción.Searchapp/subscription/subscription/subscription.component.html19Subscription videos search placeholderBuscarLength:app/subscription/subscription-file-card/subscription-file-card.component.html3Video duration labelLongitud:Delete and redownloadapp/subscription/subscription-file-card/subscription-file-card.component.html7Delete and redownload subscription video buttonEliminar y volver a descargarDelete foreverapp/subscription/subscription-file-card/subscription-file-card.component.html8Delete forever subscription video buttonBorrar para siempre \ No newline at end of file diff --git a/src/main.ts b/src/main.ts index 6898b91..2295d61 100644 --- a/src/main.ts +++ b/src/main.ts @@ -1,12 +1,29 @@ 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 } from '@soluling/angular'; +import '@angular/localize/init'; + if (environment.production) { enableProdMode(); } +// const locale = localStorage.getItem('locale'); + +getTranslations('assets/i18n', false, true, true, 'en', null, 'locale').then(translations => { + if (translations) { + loadTranslations(translations); + } + + import('./app/app.module').then(module => + { + platformBrowserDynamic() + .bootstrapModule(module.AppModule) + .catch(err => console.error(err)); + }); + }); platformBrowserDynamic().bootstrapModule(AppModule);